<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mls-partial-02" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Partial MLS">Partial MLS</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mls-partial-02"/>
    <author initials="F." surname="Kiefer" fullname="Franziskus Kiefer">
      <organization>Cryspen</organization>
      <address>
        <email>franziskuskiefer@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
      <organization>Cryspen</organization>
      <address>
        <email>karthik.bhargavan@gmail.com</email>
      </address>
    </author>
    <author initials="R. L." surname="Barnes" fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="J." surname="Alwen" fullname="Joël Alwen">
      <organization>AWS Wickr</organization>
      <address>
        <email>alwenjo@amazon.com</email>
      </address>
    </author>
    <author initials="M." surname="Mularczyk" fullname="Marta Mularczyk">
      <organization>AWS Wickr</organization>
      <address>
        <email>mulmarta@amazon.ch</email>
      </address>
    </author>
    <date year="2026" month="May" day="07"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 47?>

<t>The Messaging Layer Security (MLS) protocol provides efficient asynchronous
group key establishment for large groups with up to thousands of clients. In
MLS, any member can commit a change to the group, and consequently, all members
must download, validate, and maintain the full group state, which can incur a
significant communication and computational costs, especially when joining a
group. This document defines an MLS extension to support "partial MLS clients" that don't
undertake these costs. A partial client cannot commit changes to the group, and
only has partial authentication information for the other members of the group,
but is otherwise able to participate in the group. In exchange for these
limitations, a partial MLS client can participate in an MLS group with significantly
lower requirements in terms of download, memory, and processing.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mls-partial/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Messaging Layer Security Working Group mailing list (<eref target="mailto:mls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mlswg/mls-partial"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Messaging Layer Security protocol <xref target="RFC9420"/> enables continuous group
authenticated key exchange among a group of clients. The design of MLS requires
all members to download, validate, and maintain the full MLS tree, including
validating the credentials and signatures of all members. The size of the MLS
tree is linear in the size of the group. Consequently, the MLS design results in
a performance bottleneck for new members seeking to join a large group, and
significant storage and memory requirements once the member has joined.</t>
      <t>This document defines an extension to MLS to allow for "partial clients" --
clients that do not download, validate, or maintain the entire ratchet tree for
the group. On the one hand, this property allows a partial client to
participate in the group with much significantly lower communication and
computation complexity. On the other hand, without the full ratchet tree, the
partial client cannot create Commit messages to put changes to the group into
effect. Partial clients also only have authentication information for the parts
of the tree they download, not the whole group.</t>
      <t>This document does not change the core logic of MLS, including: The structure of
the ratchet tree and its associated algorithms, the key schedule, the secret
tree, and application message protection. The messages sent and received by
normal clients in the course of an MLS session are likewise unchanged. With
proper modifications to the MLS Delivery Service, standard MLS clients can
participate in a group with partial clients without any modification.</t>
      <t>The only modifications this document makes are to the local state stored at
partial clients, namely the component of MLS that manages, synchronizes, and
authenticates the public group state. We also defines some "annotations" that
need to be appended to group messages so that they can be processed by partial
clients. Partial clients effectively run normal MLS algorithms, but with
just-in-time delivery of exactly the subset of the public group state needed by
a given algorithm. We achieve this property due to the fact that aside from initial
tree validation and sending commits, a client only needs log-scale information.</t>
      <t>In summary, Partial MLS allows partial clients to obtain greater efficiency, at the
cost of lowering the authentication guarantees they receive and losing the
ability to make Commits.  We discuss a few scenarios that motivate this
trade-off in <xref target="use-cases"/>.  The difference in authentication properties, in
particular, is discussed in detail in <xref target="security-considerations"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<dl>
        <dt>Tree slice:</dt>
        <dd>
          <t>A tree slice is the direct path from a leaf node to the root, together with
the tree hashes on the co-path.</t>
        </dd>
        <dt>Membership proof:</dt>
        <dd>
          <t>A tree slice that proves that a given leaf node is part of a ratchet tree with
a given tree hash.</t>
        </dd>
        <dt>Partial client:</dt>
        <dd>
          <t>An MLS client that does not download, validate, and maintain a copy of the
group's ratchet tree. A partial client does not store any public data about the
group's ratchet tree, only the HPKE decryption keys associated to nodes on the
client's direct path.</t>
        </dd>
        <dt>Full client:</dt>
        <dd>
          <t>A normal MLS client, in possession of the full MLS ratchet tree for the group.</t>
        </dd>
        <dt>Sender-authenticated message:</dt>
        <dd>
          <t>A signed MLS message such as Welcome or PublicMessage, together with a
membership proof that proves the sender's membership in the group.</t>
        </dd>
        <dt>Annotated Welcome:</dt>
        <dd>
          <t>A Welcome message together with information that a partial client needs to
process it.</t>
        </dd>
        <dt>Annotated Commit:</dt>
        <dd>
          <t>A Commit message (as a PublicMessage or PrivateMessage) together with
information that a partial client needs to process it.</t>
        </dd>
      </dl>
      <t>As in MLS, message structures are defined using the TLS presentation syntax
<xref target="RFC8446"/>. Unlike most MLS messages, however, these structures are not
encapsulated in a signed or MAC'ed structure. So it may be more convenient for
applications to encode these structures in application-specific encodings.</t>
    </section>
    <section anchor="use-cases">
      <name>Use Cases</name>
      <t>Partial MLS is intended to support use cases where MLS groups are very large, from
thousands to millions of participants.  Application-level constraints arising
from these use cases align well with the trade-offs introduced by Partial MLS.  It
is usually acceptable (even desirable) that only certain members are able to
send Commit messages.  And in such large groups, clients often do not care about
authenticating all members of the group.</t>
      <t>The following subsections outline two concrete use cases.</t>
      <section anchor="large-meetings-webinars">
        <name>Large Meetings / Webinars</name>
        <t>MLS can be used to establish end-to-end encryption keys in real-time
conferencing scenarios.  In such scenarios, a client joins the MLS group when
they are admitted to a meeting.  With normal MLS, the client is required to
download and validate the entire ratchet tree before being able to derive media
encryption keys.  In meetings with a thousand or more participants, this process
can take enough time that it introduces a noticeable delay in joining the
meeting.  If a client joins as a partial client, then they can download a
log-sized AnnotatedWelcome message and immediately obtain the media encryption
keys.</t>
        <t>Such a client will not have authenticated the group when they join the meeting.
However, applications often do not display identity information in such setting
anyway.  In "webinar" settings, it is common for attendee identities to be visible
only to panelists and administrators, not to other attendees.  Partial MLS allows
MLS to align with this privacy property.  If attendees join as partial clients,
they can be provided with membership proofs for attendees whom they are
authorized to see, and not for others.  Even in settings where attendees can all
see each others' identities, user interface constraints usually cause only a
small fraction of the attendee list to be visible at one time, so it is natural
to load the tree dynamically as the client needs access to the authenticated
identities of specific other clients.</t>
        <t>The constraint on clients sending Commits is also natural here.  In such large
gatherings, there are usually administrators who are authorized to see the
identities of all participants and control who is in the group, and conversely,
there are certain actions that are not available to non-admin participants.  So
it makes sense for the administrators to use full clients that are able to make
Commits to implement the actions they are authorized to take, and for more
limited clients to be unable to make commits.</t>
      </section>
      <section anchor="broadcast-sessions">
        <name>Broadcast sessions</name>
        <t>Internet streaming platforms frequently host broadcasts with large numbers of
viewers, but the entities providing these broadcasts might like to ensure that
the streaming platform cannot see the streamed content.  For example, the Media
over QUIC Transport protocol, designed to support streaming use cases, states as
a goal ensuring that "the media content itself remains opaque and private" from
the relays involved in its distribution <xref target="I-D.ietf-moq-transport"/>.</t>
        <t>In such settings, the partial client / full client roles align with the viewer /
owner roles, respectively.  Viewers do not care about the identities of other
viewers (at most, they care that the stream comes from an authentic source) and
they aren't authorized to do anything in MLS besides join the group.  Viewers
are also typically in more constrained situations than the source of a stream.
So the reduced resource requirements are well worth the loss of full-group
authentication and the ability to Commit.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>A partial client does not receive or validate a full copy of the ratchet tree for
a group, but still possesses the group's secrets, including receiving updated
secrets as the group evolves. When MLS messages are sent to a partial client,
they need to be accompanied by annotations that provide the partial client with
just enough of information about the ratchet tree to process the message. These
annotations can be computed by any party with knowledge of the group's ratchet
tree, including the committer and sometimes the DS.</t>
      <figure anchor="fig-overview">
        <name>Overview of Partial MLS</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="512" width="552" viewBox="0 0 552 512" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,64 L 32,496" fill="none" stroke="black"/>
              <path d="M 168,64 L 168,496" fill="none" stroke="black"/>
              <path d="M 344,64 L 344,232" fill="none" stroke="black"/>
              <path d="M 344,248 L 344,280" fill="none" stroke="black"/>
              <path d="M 344,296 L 344,376" fill="none" stroke="black"/>
              <path d="M 344,392 L 344,472" fill="none" stroke="black"/>
              <path d="M 432,64 L 432,280" fill="none" stroke="black"/>
              <path d="M 432,296 L 432,376" fill="none" stroke="black"/>
              <path d="M 432,392 L 432,472" fill="none" stroke="black"/>
              <path d="M 520,64 L 520,496" fill="none" stroke="black"/>
              <path d="M 32,112 L 160,112" fill="none" stroke="black"/>
              <path d="M 168,160 L 336,160" fill="none" stroke="black"/>
              <path d="M 168,240 L 424,240" fill="none" stroke="black"/>
              <path d="M 168,288 L 512,288" fill="none" stroke="black"/>
              <path d="M 32,336 L 160,336" fill="none" stroke="black"/>
              <path d="M 168,384 L 512,384" fill="none" stroke="black"/>
              <path d="M 168,464 L 336,464" fill="none" stroke="black"/>
              <path d="M 168,480 L 512,480" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="520,480 508,474.4 508,485.6" fill="black" transform="rotate(0,512,480)"/>
              <polygon class="arrowhead" points="520,384 508,378.4 508,389.6" fill="black" transform="rotate(0,512,384)"/>
              <polygon class="arrowhead" points="520,288 508,282.4 508,293.6" fill="black" transform="rotate(0,512,288)"/>
              <polygon class="arrowhead" points="432,240 420,234.4 420,245.6" fill="black" transform="rotate(0,424,240)"/>
              <polygon class="arrowhead" points="344,464 332,458.4 332,469.6" fill="black" transform="rotate(0,336,464)"/>
              <polygon class="arrowhead" points="344,160 332,154.4 332,165.6" fill="black" transform="rotate(0,336,160)"/>
              <polygon class="arrowhead" points="168,336 156,330.4 156,341.6" fill="black" transform="rotate(0,160,336)"/>
              <polygon class="arrowhead" points="168,112 156,106.4 156,117.6" fill="black" transform="rotate(0,160,112)"/>
              <g class="text">
                <text x="20" y="36">Full</text>
                <text x="164" y="36">Delivery</text>
                <text x="336" y="36">Partial</text>
                <text x="424" y="36">Partial</text>
                <text x="500" y="36">Full</text>
                <text x="28" y="52">Client</text>
                <text x="64" y="52">A</text>
                <text x="160" y="52">Service</text>
                <text x="332" y="52">Client</text>
                <text x="368" y="52">B</text>
                <text x="420" y="52">Client</text>
                <text x="456" y="52">C</text>
                <text x="508" y="52">Client</text>
                <text x="544" y="52">D</text>
                <text x="68" y="84">Commit</text>
                <text x="72" y="100">Welcome</text>
                <text x="244" y="132">AnnotatedWelcome</text>
                <text x="184" y="148">=</text>
                <text x="224" y="148">Welcome</text>
                <text x="264" y="148">+</text>
                <text x="300" y="148">Proofs</text>
                <text x="240" y="196">AnnotatedCommit</text>
                <text x="184" y="212">=</text>
                <text x="220" y="212">Commit</text>
                <text x="256" y="212">+</text>
                <text x="292" y="212">Proofs</text>
                <text x="200" y="228">+</text>
                <text x="252" y="228">Resolution</text>
                <text x="316" y="228">Info</text>
                <text x="204" y="276">Commit</text>
                <text x="100" y="324">PrivateMessage</text>
                <text x="236" y="372">PrivateMessage</text>
                <text x="248" y="420">SenderAuthMessage</text>
                <text x="184" y="436">=</text>
                <text x="252" y="436">PrivateMessage</text>
                <text x="200" y="452">+</text>
                <text x="244" y="452">Proof(A)</text>
                <text x="344" y="500">|</text>
                <text x="432" y="500">|</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
Full            Delivery              Partial    Partial    Full
Client A        Service               Client B   Client C   Client D
   |                |                     |          |          |
   | Commit         |                     |          |          |
   | Welcome        |                     |          |          |
   +--------------->|                     |          |          |
   |                | AnnotatedWelcome    |          |          |
   |                | = Welcome + Proofs  |          |          |
   |                +-------------------->|          |          |
   |                |                     |          |          |
   |                | AnnotatedCommit     |          |          |
   |                | = Commit + Proofs   |          |          |
   |                |   + Resolution Info |          |          |
   |                +------------------------------->|          |
   |                |                     |          |          |
   |                | Commit              |          |          |
   |                +------------------------------------------>|
   |                |                     |          |          |
   | PrivateMessage |                     |          |          |
   +--------------->|                     |          |          |
   |                |                     |          |          |
   |                | PrivateMessage      |          |          |
   |                +------------------------------------------>|
   |                |                     |          |          |
   |                | SenderAuthMessage   |          |          |
   |                | = PrivateMessage    |          |          |
   |                |   + Proof(A)        |          |          |
   |                +-------------------->|          |          |
   |                +------------------------------------------>|
   |                |                     |          |          |
]]></artwork>
        </artset>
      </figure>
      <t><xref target="fig-overview"/> illustrates the main changes introduced by Partial MLS:</t>
      <ol spacing="normal" type="1"><li>
          <t>When a partial client is added to the group, they are provided an
AnnotatedWelcome message, which comprises a normal Welcome message plus
membership proofs for the sender and joiner.</t>
        </li>
        <li>
          <t>From each Commit that is generated in the group, an individual
AnnotatedCommit is generated for each partial client. An AnnotatedCommit
comprises a normal MLS Commit message, together with membership proofs and
the information that the partial client needs in order to process the update
path in the Commit.</t>
        </li>
        <li>
          <t>When messages are sent in the group, e.g., carrying application data,
they are extended with a membership proofs so that partial clients can
authenticate the sender's membership in the group.</t>
        </li>
      </ol>
      <t>In this example, we have shown the required annotations being added by the DS.
This allows full clients to behave as they would in normal MLS, but requires
that the DS maintain a copy of the group's ratchet tree. It is also possible
for committers to generate the required annotated messages. This document does
not define who generates annotated messages from the base MLS messages, or how
this entity learns which clients are partial or full clients.</t>
      <t>Partial clients still need to be provided with access to any proposals sent in a
group outside of Commits. Partial clients cannot process proposals that modify the
structure of the tree, in particular Add, Update, or Remove proposals. They
can, however, verify that these proposals were included in a given Commit. And
they need to see proposals such as PreSharedKey or GroupContextExtensions so
that they can update their state appropriately.</t>
      <t>Depending on how Partial MLS is deployed, a client might need to inform the DS or
other members of its status (partial or full), so that the proper annotations can
be generated when it is partial. It is harmless for a full client to receive an
AnnotatedCommit; the annotations can simply be ignored.</t>
    </section>
    <section anchor="upgrading-and-downgrading">
      <name>Upgrading and Downgrading</name>
      <t>A partial client can upgrade to being a full client at any time by downloading the
full ratchet tree; a full client can downgrade by deleting its local copy of the
ratchet tree.  Before a partial client uses a copy of the ratchet tree to upgrade
to being a full client, it <bcp14>MUST</bcp14> verify the integrity of the ratchet tree in the
same way it would when joining as a full client, following the steps in
<xref section="12.4.3.1" sectionFormat="of" target="RFC9420"/>.</t>
    </section>
    <section anchor="membership-proofs-and-partial-trees">
      <name>Membership Proofs and Partial Trees</name>
      <t>Although partial clients do not have a copy of the group's ratchet tree, they
still agree on the root tree hash of the ratchet tree, via the MLS key schedule
as usual. This fact, together with the Merkle-tree-like structure of the MLS
tree hash, allows a partial client to verify the legitimacy of partial information
about the ratchet tree. In particular, for any leaf in the tree, anyone in
possession of the public data of the ratchet tree can construct a "membership
proof" that proves that a leaf node with specific contents is located at a
specific leaf index in the tree.</t>
      <t>A membership proof for a leaf node comprises:</t>
      <ul spacing="normal">
        <li>
          <t>The number of leaves in the tree.</t>
        </li>
        <li>
          <t>The leaf index of the member's leaf.</t>
        </li>
        <li>
          <t>The values of the nodes from the leaf node to the root of the tree, including
both the leaf node and the root.</t>
        </li>
        <li>
          <t>The tree hash values for the nodes on the copath of the leaf node.</t>
        </li>
      </ul>
      <artwork><![CDATA[
struct {
    opaque hash_value<V>;
} CopathHash;

struct {
  uint32 leaf_index;
  uint32 n_leaves;
  optional<Node> direct_path_nodes<V>;
  CopathHash copath_hashes<V>;
} MembershipProof;
]]></artwork>
      <t>From these values, the root tree hash of the ratchet tree can be recomputed,
following the same recursive algorithm specified in <xref section="7.8" sectionFormat="of" target="RFC9420"/>.
The selection of nodes and subtree hashes provides the precise collection of
inputs required by the algorithm.</t>
      <t>A membership proof is said to be valid relative to a given tree hash if the tree
hash recomputed in this way is equal to the given tree hash.</t>
      <t>Two membership proofs are said to reference the same tree if their <tt>n_leaves</tt>
fields are equal, and they produce identical root tree hashes.</t>
    </section>
    <section anchor="sender-authenticated-messages">
      <name>Sender-Authenticated Messages</name>
      <t>For several types of message, MLS authenticates that a message was created by
the member at a specific leaf node of the group's ratchet tree by signing the
message with the private key corresponding to the <tt>signature_key</tt> in the leaf
node. Full clients verify these messages by looking up the required signature
verification key in their local copy of the ratchet tree.</t>
      <t>Since partial clients do not store the group's ratchet tree, they cannot perform
this lookup. A SenderAuthenticatedMessage presents a message along with a
membership proof for the sender of a message, which provides the required leaf
node and a proof of its inclusion in the tree.</t>
      <sourcecode type="tls-syntax"><![CDATA[
struct {
    T message;
    MembershipProof sender_membership_proof;
} SenderAuthenticatedMessage<T>;
]]></sourcecode>
      <t>Before using the <tt>sender_membership_proof</tt> to verify the included message, a client
processing a SenderAuthenticatedMessage <bcp14>MUST</bcp14> verify that the proof is valid
relative to the group's tree hash for the epoch in which the message was sent.
For a PublicMessage or PrivateMessage, this is the tree hash for the epoch
indicated in the FramedContent. For a GroupInfo or Welcome, it is the tree hash
in the object itself.</t>
    </section>
    <section anchor="joining-via-annotated-welcome">
      <name>Joining via Annotated Welcome</name>
      <t>An AnnotatedWelcome message provides a client joining a group with membership
proofs for the sender and the joiner (i.e., the recipient of the message).</t>
      <sourcecode type="tls-syntax"><![CDATA[
struct {
    SenderAuthenticatedMessage<Welcome> welcome;
    MembershipProof joiner_membership_proof;
} AnnotatedWelcome;
]]></sourcecode>
      <t>The fields in the AnnotatedWelcome have the following semantics:</t>
      <dl>
        <dt><tt>welcome</tt>:</dt>
        <dd>
          <t>A Welcome message, together with a membership proof for the sender relative to
the ratchet tree specified in the Welcome.</t>
        </dd>
        <dt><tt>joiner_membership_proof</tt>:</dt>
        <dd>
          <t>A proof of the receipient's membership in the ratchet tree specified in the
Welcome.</t>
        </dd>
      </dl>
      <t>An AnnotatedWelcome can be generated by any party that knows the group's ratchet
tree and the indices of the sender and joiner in the tree.</t>
      <t>A partial client processes an AnnotatedWelcome in the following way:</t>
      <ol spacing="normal" type="1"><li>
          <t>Verify that the <tt>sender_membership_proof</tt> and <tt>joiner_membership_proof</tt>
reference the same tree.</t>
        </li>
        <li>
          <t>Join the group using the procedure defined in <xref section="12.4.3.1" sectionFormat="of" target="RFC9420"/>, with the following modifications:  </t>
          <ul spacing="normal">
            <li>
              <t>When verifying the signature on the GroupInfo object, the signature public
key is taken from the LeafNode in the <tt>sender_membership_proof</tt> tree slice.
The <tt>signer</tt> field of the <tt>group_info</tt> object <bcp14>MUST</bcp14> be equal to the
<tt>leaf_index</tt> field of the <tt>sender_membership_proof</tt>.</t>
            </li>
            <li>
              <t>The "Verify the integrity of the ratchet tree" step is replaced with a
check that the <tt>tree_hash</tt> in the GroupInfo matches the root tree hash
produced by the membership proofs.</t>
            </li>
            <li>
              <t>The <tt>my_leaf</tt> value is taken from the the <tt>leaf_index</tt> field of the
<tt>joiner_membership_proof</tt>, instead of found by searching the tree.</t>
            </li>
          </ul>
        </li>
      </ol>
    </section>
    <section anchor="joining-via-external-commit">
      <name>Joining via External Commit</name>
      <t>A partial client cannot join via an external Commit, because partial clients cannot
generate commits. A client could, however, join as a full client via an
external commit, then transition to being a partial client by deleting its copy of
the tree. This would still require the client to download and validate the
tree, but would save the client the effort of maintaining their copy of the
tree.</t>
    </section>
    <section anchor="annotated-commit">
      <name>Annotated Commit</name>
      <t>There are two main challenges for a partial client processing a Commit. First,
the partial client cannot compute the resolution of the committer's copath, so
they cannot determine which of the HPKECiphertext objects in the UpdatePath they
should decrypt to obtain a path secret. Second, the partial client cannot compute
the updated tree hash, since they don't have the full tree. An AnnotatedCommit
provides these pieces of information, along with proof that the sender and
receiver are both still in the group after the Commit.</t>
      <sourcecode type="tls-syntax"><![CDATA[
struct {
    MLSMessage commit;
    optional<MembershipProof> sender_membership_proof;

    opaque tree_hash_after<V>;
    optional<uint32> resolution_index;

    MembershipProof sender_membership_proof_after;
    MembershipProof receiver_membership_proof_after;
} AnnotatedCommit;
]]></sourcecode>
      <t>The fields in the AnnotatedCommit have the following semantics:</t>
      <dl>
        <dt><tt>commit</tt>:</dt>
        <dd>
          <t>An MLSMessage containing PrivateMessage or PublicMessage with <tt>content_type</tt>
            <tt>commit</tt>.</t>
        </dd>
        <dt><tt>sender_membership_proof</tt>:</dt>
        <dd>
          <t>A membership proof for the sender of the Commit relative to the tree for the
epoch in which the Commit is sent. This field <bcp14>MUST</bcp14> be present if the
<tt>sender_type</tt> for the Commit is <tt>member</tt>, and otherwise <bcp14>MUST</bcp14> be absent.</t>
        </dd>
        <dt><tt>tree_hash_after</tt>:</dt>
        <dd>
          <t>The tree hash of the group's ratchet tree after the Commit has been applied.</t>
        </dd>
        <dt><tt>resolution_index</tt>:</dt>
        <dd>
          <t>This field specifies which HPKECiphertext in the relevant UpdatePathNode the
recipient should use. This field <bcp14>MUST</bcp14> be included if and only if the Commit has
a <tt>path</tt> field populated.</t>
        </dd>
        <dt><tt>sender_membership_proof_after</tt>:</dt>
        <dd>
          <t>A membership proof for the sender of the Commit relative to the tree after the
Commit has been applied.</t>
        </dd>
        <dt><tt>receiver_membership_proof_after</tt>:</dt>
        <dd>
          <t>A membership proof for the receiver of the Commit relative to the tree after the
Commit has been applied.</t>
        </dd>
      </dl>
      <t>An AnnotatedCommit can be generated by any party that knows the group's ratchet
tree (both before and after the Commit) and the indices of the sender and
receiver in the tree. It is safe for the recipient to accept the
<tt>tree_hash_after</tt> supplied by an unauthenticated party because the tree hash is
authenticated by the
<tt>confirmation_tag</tt> in the Commit.</t>
      <t>A partial client processes an AnnotatedCommit in the following way:</t>
      <ol spacing="normal" type="1"><li>
          <t>Verify that the <tt>sender_membership_proof</tt> field, if present, is valid
relative to the group's current tree hash.</t>
        </li>
        <li>
          <t>Verify that the <tt>sender_membership_proof_after</tt> and
<tt>receiver_membership_proof_after</tt> reference the same tree, and that they are
valid relative to <tt>tree_hash_after</tt>.</t>
        </li>
        <li>
          <t>Process the Commit using the procedure defined in <xref section="12.4.2" sectionFormat="of" target="RFC9420"/>, with the following modifications:</t>
        </li>
      </ol>
      <ul spacing="normal">
        <li>
          <t>When validating a FramedContent with <tt>sender_type</tt> set to <tt>member</tt>, the
<tt>sender_membership_proof</tt> field <bcp14>MUST</bcp14> be present, and the signature public
key is taken from the LeafNode in the <tt>sender_membership_proof</tt> tree slice.
The <tt>leaf_index</tt> field of the <tt>Sender</tt> object <bcp14>MUST</bcp14> be equal to the
<tt>leaf_index</tt> field of the <tt>sender_membership_proof</tt>.</t>
        </li>
        <li>
          <t>If the <tt>sender_type</tt> is set to <tt>new_member_commit</tt> (the only other valid
value), then the <tt>sender_membership_proof</tt> field <bcp14>MUST</bcp14> be absent, and the
signature public key is looked up in the included Add proposal, as normal.</t>
        </li>
        <li>
          <t>The proposal list validation step is omitted, because a partial client doesn't
have sufficient information to check all of the validation rules.</t>
        </li>
        <li>
          <t>When applying proposals, only the proposals that do not modify the tree are
applied, in particular, PreSharedKey and GroupContextExtensions proposals.</t>
        </li>
        <li>
          <t>Likewise, the creation of the new ratchet tree is omitted.</t>
        </li>
        <li>
          <t>In processing the <tt>path</tt> value, if present, replace the path node decryption
steps with the following steps:  </t>
          <ul spacing="normal">
            <li>
              <t>Identify the committer's leaf index. For a member Commit, this is the
<tt>leaf_index</tt> field of the <tt>sender_membership_proof</tt>. For a
<tt>new_member_commit</tt>, this is the <tt>leaf_index</tt> field of the
<tt>sender_membership_proof_after</tt>. Use this index and the receiver's leaf
index to identify the lowest common ancestor. This is the node where the
new path_secret will be inserted into the tree.</t>
            </li>
            <li>
              <t>Determine the index <tt>update_path_index</tt> of the lowest common ancestor
among the non-blank nodes in the committer's direct path, as provided in
the <tt>sender_membership_proof_after</tt> field.</t>
            </li>
            <li>
              <t>From the entry at index <tt>update_path_index</tt> of the <tt>nodes</tt> vector in the
UpdatePath, select the HPKECiphertext at index <tt>resolution_index</tt> from the
<tt>encrypted_path_secret</tt>.</t>
            </li>
            <li>
              <t>Identify the next non-blank node in the recipient's direct path under the
lowest common ancestor, using the direct path provided in the
<tt>receiver_membership_proof_after</tt> field. Retrieve the private HPKE
decryption key for this node.</t>
            </li>
            <li>
              <t>Decrypt the encrypted path secret as normal, using the tree hash in the
<tt>tree_hash_after</tt> field in the provisional GroupContext.</t>
            </li>
            <li>
              <t>Derive the remaining path secrets corresponding to the non-blank nodes in
the recipient's new direct path, as provided in the
<tt>receiver_membership_proof_after</tt> field.</t>
            </li>
            <li>
              <t>Define the <tt>commit_secret</tt> to be <tt>path_secret[n+1]</tt>, as normal.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="application-messages">
      <name>Application Messages</name>
      <t>MLS clients can exchange messages by sending application data within the
PrivateMessage framing. In a group where partial clients are present, these
messages should be further encapsulated in a SenderAuthenticatedMessage, so that
partial clients have the membership proof necessary to verify the sender's
membership, the public key necessary to verify the message signature, and the
credential necessary to verify the sender's identity.</t>
      <t>As noted above, this can be accomplished either by the sender creating a
SenderAuthenticatedMessage, or by the DS adding the relevant membership proof
while the message is in transit.</t>
      <t>Note that encapsulating a message as a SenderAuthenticatedMessage leaks
information about the sender to the DS, including the sender's index in the tree
and the sender's LeafNode.  See <xref target="metadata-privacy"/> for more discussion of
metadata privacy.</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>The major operational challenge in deploying Partial MLS is ensuring that partial
clients receive the proper annotations to Welcome and Commit messages. As
discussed in <xref target="protocol-overview"/>, this is up to the application. Since full
clients don't need the annotations, applications will be more robust if they
send annotations in a way that they can be cleanly ignored by full clients.</t>
      <t>Partial MLS substantially reduces the amount of data required to join an MLS
group, since it replaces the linear-scale ratchet tree with two log-scale
membership proofs. Partial MLS does not address the potentially linear scaling of
Commit messages; in fact, it makes Commits spartially bigger. There are other
approaches to reducing Commit sizes, e.g., the SplitCommit approach in
<xref target="I-D.mularczyk-mls-splitcommit"/>.  These approaches can be cleanly integrated
with Partial MLS via the AnnotatedCommit structure.  <xref target="download-cost"/> summarizes
the scaling of the amount of data that a client needs to download in order to
perform various MLS operations.  Sending a Commit requires linear-scale work in
any case.</t>
      <table anchor="download-cost">
        <name>Download scaling under protocol variations</name>
        <thead>
          <tr>
            <th align="left">Operation</th>
            <th align="center">RFC MLS</th>
            <th align="center">Partial MLS</th>
            <th align="center">Split Commits</th>
            <th align="center">Partial + Split</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Join</td>
            <td align="center">O(N)</td>
            <td align="center">O(log N)</td>
            <td align="center">O(N)</td>
            <td align="center">O(log N)</td>
          </tr>
          <tr>
            <td align="left">Process Commit</td>
            <td align="center">O(N)</td>
            <td align="center">O(N)</td>
            <td align="center">O(log N)</td>
            <td align="center">O(log N)</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The MLS protocol in <xref target="RFC9420"/> has a number of security analyses attached. To
describe the security of Partial MLS and how it relates to the security of full
MLS we summarize the following main high-level guarantees of MLS as follows:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Membership Agreement</strong>: If a client B has a local group state for group G in
epoch N, and it receives (and accepts) an application message from a sender A
for group G in epoch N, then A must be a member of G in epoch N at B, and if A
is honest, then A and B agree on the full membership of the group G in
epoch N.</t>
        </li>
        <li>
          <t><strong>Member Identity Authentication</strong>: If a client B has a local group state for
group G in epoch N, and B believes that A is a member of G in epoch N, and
that A is linked to a user identity U, then either the signature key of U’s
credential is compromised, or A belongs to U.</t>
        </li>
        <li>
          <t><strong>Group Key Secrecy</strong>: If B has a local group state for group G in epoch N
with group key K (init secret), then K can only be known to members of G in
epoch N. That is, if the attacker knows K, then one of the signature or
decryption keys corresponding to one of the leaves of the tree stored at B for
G in epoch N must be compromised. To obtain these properties, each member in
MLS verifies a number of signatures and MACs, and seeks to preserve the
TreeKEM Tree Invariants:</t>
        </li>
        <li>
          <t><strong>Public Key Tree Invariant</strong>: At each node of the tree at a member B, the
public key, if set, was set by one of the members currently underneath that
node</t>
        </li>
        <li>
          <t><strong>Path Secret Invariant</strong>: At each node, the path secret stored at a member B,
if set, was created by one of the members currently underneath that node</t>
        </li>
      </ul>
      <t>As a corollary of Group Key Secrecy, we also obtain authentication and
confidentiality guarantees for application messages sent and received within a
group.</t>
      <t>To verify the security guarantees provided to partial clients, a new security
analysis was needed. We have analyzed the security of the protocol using two
verification tools ProVerif and F*. The security analysis, and design of the
security mechanisms, are inspired by work from Alwen et al.
<xref target="AHKM22"/>.</t>
      <t>Partial MLS preserves the invariants above and thereby all the security goals of
MLS continue to hold at full members. However, a partial member may not know the
identities of all other members in the group, and it may only discover these
identities on-demand. Consequently, the Member Identity Authentication
guarantee is weaker on partial clients. Furthermore, since partial members do not
store the MLS tree, membership agreement only holds for the hash of the MLS
tree:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Partial Membership Agreement</strong>: If a partial client B has a local group state
for group G in epoch N, and it receives (and accepts) an application message
from a sender A for group G in epoch N, then A must be a member of G in
epoch N at B, and if A is honest, then A and B agree on the GroupContext
of the group G in epoch N.</t>
        </li>
        <li>
          <t><strong>Partial Member Identity Authentication</strong>: If a partial client B has a local
group state for group G in epoch N, and B has verified A’s membership proof in
G, and A is linked to a user identity U, then either the signature key of U’s
credential is compromised, or A belongs to U.</t>
        </li>
        <li>
          <t><strong>Partial Group Key Secrecy</strong>: If a partial client B has a local group state for
group G in epoch N with group key K (init secret), and if the tree hash at B
corresponds to a full tree, then K can only be known to members at the leaves
of this tree. That is, if the attacker knows K, then the signature or
decryption keys at one of the leaves must have been compromised.</t>
        </li>
      </ul>
      <t>Note that the Partial Membership Agreement property holds irrespective of whether
B has verified a membership proof from A.  The membership proofs in this
protocol are thus more about providing precise source authentication within the
group, rather than simply proving membership in the group.  Simply knowing the
group's symmetric secrets suffices for the latter.</t>
      <t>Another technical caveat is that since partial members do not have the full tree,
they cannot validate the uniqueness of all HPKE and signature keys in the tree,
as required by RFC MLS. The exact security implications of removing this
uniqueness check is not clear but is not expected to be significant.  In a group
where full clients are honest, there is no practical difference, since a full
client will verify that all of the required uniqness properties hold before
issuing a Commit.  The main risk is that a malicious full client could cause a
partial client to accept a tree hash representing a tree with duplicate keys.</t>
      <section anchor="metadata-privacy">
        <name>Metadata Privacy</name>
        <t>The protocol described in this document assumes that the DS is trusted to know
information about the group's ratchet tree.  The scenario described in
<xref target="protocol-overview"/> assumes that the DS is maintaining a view of the ratchet
tree and distributing appropriate portions of it to clients.  In fact, if the DS
is to generate membership proofs to accompany PrivateMessage messages, then it
will need to know the index of the sender in the tree, information that is
normally encrypted as part of the SenderData.</t>
        <t>It is possible to operate this protocol in a more restrictive mode, where
Commits are sent as PrivateMessage objects and the committer generates the
required annotations for any partial clients in the group.  However, because there
is no confidentiality protection for the annotations, they will leak information
to the DS about the ratchet tree.</t>
        <t>Fixing this leakage would require changes to logic at the committer and partial
clients.  The annotations attached to a Welcome message could be sent as
GroupInfo extensions; effectively a partial version of the <tt>ratchet_tree</tt>
extension.  The annotations attached to a Commit could be moved inside the
PrivateMessage content, and the receiver signature validation logic updated to
use the public key in the attached membership proof to validate the message
signature.</t>
        <t>Thus, while a more metadata-private mode could be added to this protocol, it has
been omitted for now in the interest of avoiding changes to full endpoints.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no request of IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9420">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-moq-transport">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-17"/>
        </reference>
        <reference anchor="I-D.mularczyk-mls-splitcommit">
          <front>
            <title>MLS Split Commits</title>
            <author fullname="Joël" initials="" surname="Joël">
              <organization>Amazon</organization>
            </author>
            <author fullname="Marta Mularczyk" initials="M." surname="Mularczyk">
              <organization>Amazon</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document describes an extension to the MLS protocol [RFC940]
   that improves its efficiency in terms of per-member download size.
   This comes at essentially no cost.  In essence, this document defines
   a new message type called split commit which replaces regular MLS
   commits.  Unlike regular commits, a split commit can be "split" by
   the Delivery Service (DS) into much smaller per-member commits, one
   for each receiving member.  The size of a per-member commit is always
   logarithmic in the group size, while the size of a regular MLS commit
   can be linear.  This extension works in settings with a DS that can
   do the splitting which can be demanding with encrypted MLS handshake
   messages.  This is motivated by academic research [KKP22], [HKPPW22],
   [AHKM22].

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mularczyk-mls-splitcommit-00"/>
        </reference>
        <reference anchor="AHKM22">
          <front>
            <title>Server-Aided Continuous Group Key Agreement</title>
            <author fullname="Joël Alwen" initials="J." surname="Alwen">
              <organization>AWS-Wickr, New York, NY, USA</organization>
            </author>
            <author fullname="Dominik Hartmann" initials="D." surname="Hartmann">
              <organization>Ruhr-University Bochum, Bochum, Germany</organization>
            </author>
            <author fullname="Eike Kiltz" initials="E." surname="Kiltz">
              <organization>Ruhr-University Bochum, Bochum, Germany</organization>
            </author>
            <author fullname="Marta Mularczyk" initials="M." surname="Mularczyk">
              <organization>AWS-Wickr, New York, NY, USA</organization>
            </author>
            <date month="November" year="2022"/>
          </front>
          <seriesInfo name="Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security" value="pp. 69-82"/>
          <seriesInfo name="DOI" value="10.1145/3548606.3560632"/>
          <refcontent>ACM</refcontent>
        </reference>
      </references>
    </references>
    <?line 710?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section provides a set of test vectors that implementations can use to
verify that they correctly implement Partial MLS. In addition to test vectors
for joining and processing commits as a partial client, this section includes
test vectors for membership proofs, partial tree operations,
sender-authenticated messages, and the syntax of the new structures defined in
this document.</t>
      <t>The vectors included in this document cover the MTI MLS ciphersuite,
<tt>MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519</tt>. Full test vectors are
available in the GitHub repository for this specification:
<eref target="https://github.com/mlswg/mls-partial/tree/main/test-vectors">https://github.com/mlswg/mls-partial/tree/main/test-vectors</eref>.</t>
      <t>Most values are either numeric values or byte strings. Numeric values are
represented as hex values, prefixed with <tt>0x</tt>. Byte strings are represented in
hex encoding. Descriptive fields, such as message types, are represented as
strings.</t>
      <t>Line breaks and whitespace within values are inserted to conform to the width
requirements of the RFC format. They should be removed before use.</t>
      <section anchor="membership-proofs">
        <name>Membership Proofs</name>
        <t>These vectors exercise the construction and encoding of <tt>MembershipProof</tt>
objects. For each case, we provide:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cipher_suite</tt>: The MLS ciphersuite.</t>
          </li>
          <li>
            <t><tt>tree_hash</tt>: The root tree hash of the ratchet tree.</t>
          </li>
          <li>
            <t><tt>proofs</tt>: A list of membership proofs.</t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-membership-proofs-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: af2e61d379b5838228ee68aec6b4a733e2a732844b749ceef618b8712f659a8f
proofs:
  -
    0000000000000002412d0101201a28e7c83d94808952f4c93492fc1eff3d7ede
    6d4d8652c862e21c8f8c6bfe0a20eaa4536432d5d0e2b100d94e76f4c427238c
    e4d1c66635ebb23bc0e78a128e9000012072a1e66a53e5df453416d4076be972
    ec1eae4af1af8e677aef59cf59b686a35f0200011c000100029a9a0003000500
    073a3a0006000400080009000aeaea6a6a04caca1a1a021a1a0c00010002fe00
    babacacaff000320ad7c01f29bc6916d7c4451cf195e554952562962a566458c
    14ef6b19375b5f93071a1a044239abd64040a5f834707f202b7af4bc190802d2
    dc66a5c46f9ec066421db3f4326848c6ab2f294e988621489c7d2cbec421bafd
    7f5607adc9dac36edfbb89ffc5bda7d70b0001022086ddb23caf21f4793ce157
    f29a0a3de1a81036fce607d1164efdb26da7398036000021207b89c575d1019d
    20742fc67a7ec831bd707a5827dfba14416daf96ca92ed236d
  -
    00000001000000024117010120cb907f82e0a7923f7a505a49ee9e19d237cbf2
    6ce4485112f83d92acf39d722d20c95b4791c9b169cfd217b3db4368d70800a2
    851e0717f70650a63d9018cfc1d4000120c2886ff8881eab6f3ade3df94c2f72
    316255f0ea338ef633031c6b1b9300860a0200011a0001000200035a5a000500
    07000600048a8aeaea00080009000a041a1acaca02eaea0a00010002fe008a8a
    ff00010000000000000000ffffffffffffffff061a1a03cfd06b40401f04051c
    dc088d473a23313409e0ba6ca7fed554097c0936f1489e67b9c74993b063ce97
    cc62d6286e78d827d1a5a5855af12e7a70690c23744da47f7712120801022086
    ddb23caf21f4793ce157f29a0a3de1a81036fce607d1164efdb26da739803600
    00212085283300da17fbc5880f483b593089103b18b1d3c4c5b4c359158ce9e0
    2085c2
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: 12b5599a8fdb272460f91ad2445790ccb8269138b9ac51da7b7e70c7ebc5edc8
proofs:
  -
    00000000000000044169010120e330e4c8231f96e35d800360d6f0a80073299c
    11a9d3a182bb2fc798e3bc2d512062035c6d4d91abb7c272ed79d03ea4141cc1
    2b7cd1d58ceff3c9d3309e39737e000120e5923186b07cd29fecdfbfec95ac0a
    535423d5890f2c6499b0b6b80e549d54db020001187a7a1a1a00010002000300
    0500070006000400080009000a049a9acaca02eaea0a00010002fe00ff000a0a
    0320438b547576c4c5026dd11ace02fb75dceda54df81786b2c63aeb5f53da72
    093804caca012e40404f0c51bf2da1ece7fcde8ee283b571a5665684e746c37f
    b9c2a9de7501a8f34a6e58e08b4022895be7959cad8393d3ec78227944a44b5c
    923a081bf38128b302010220f455b3651572b742c36ba3eb582c4d8d440467ec
    b2c4e03406127b40ad3aa26020021ef39134951ce83c11c1b8ecc1bc4a9f5c5f
    1606ca7fabe90128ac4c36b6b500010220a9f7283bc748e662cefda8d1d330c8
    c9a1067cbce1632a4388fab232f31704700000404220cc3943c3a57c354f1de8
    4107af098c998c80a8ca3f98397c702645d7d3ecb3f820e387830f39d1eebc2b
    d4e75350fbcc1e5dc67a053cd03ff745fe0cad6f15be69
  -
    0000000200000004417601012079d678865eb29b467929327149d5eb49838338
    809b842a2d2bf309dd49d8f52f20551324cdfd59ca1aeda2f52c91508f42526e
    eea68dffad2481e21f8380c1098b000120b5e2cdcf69541b1adfcdf0d8690bb2
    09bc1d4c3f5fb0ca86434c5be374532c970200011800017a7a00020003000500
    071a1a0006000400080009000a04babadada027a7a0a8a8a00010002fe00ff00
    03203e97dfb02ee292a21f095c22f03e51d2bf2125891740b74eacb5d90ec9ce
    d45d11dada0e4673161c625e4941a520f03b3e064040486851d2ee5e1a8b0d0b
    fabb7f7da8c81e6c3b00bc8009225b99f9971e205a1a695c78400e8e8c05d93c
    ae692967d9d10e3ee186a963a821cdd2bffbecd340040102207a2176979bce8d
    7df4606425358a20cf1edd44b68567769368e05ff5d8d5404620b0427dcdeded
    feccfe48c0421addf10170bdb97ccc682e7860718f5761d9f36100010220a9f7
    283bc748e662cefda8d1d330c8c9a1067cbce1632a4388fab232f31704700000
    404220e70ed34565006bce39a9faa965856edfb350e618d80023abedac07c6fa
    69e303209e660559c3042bf976297982887832806306558aa32eded402c24481
    c0b6c097
  -
    0000000300000004416a0101207a300aa9dadf5e466686c474d9fb632ce80212
    0e5187faf858d942a300a6684d2022cefca1354d50979b23d0dfeb061768c5cc
    f091c314d8a253541273733aab9900012069208b9da0a0db8f589ae336e53086
    9e106854bc5d743caa214249fb9e7a57ff0200011c000100020003000500078a
    8a000600041a1a00080009000aaaaa9a9a044a4a6a6a02dada0c5a5a00010002
    fe00ff001a1a010000000000000000ffffffffffffffff104a4a0d575792aabf
    6f4304d4e5240ed040407fc9d720bd5c240d627f50e55dcf9a6d404b43620b40
    e9b2ce640b1f87f7f064f8b3d5463264cdd042032165a285b06dd4bcd77f839b
    c7bb9601a6a81adc13020102207a2176979bce8d7df4606425358a20cf1edd44
    b68567769368e05ff5d8d5404620b0427dcdededfeccfe48c0421addf10170bd
    b97ccc682e7860718f5761d9f36100010220a9f7283bc748e662cefda8d1d330
    c8c9a1067cbce1632a4388fab232f317047000004042207b46ee699a0da207c9
    406ff317ccf9eca7cc18ee6dba2320a416fd5aa6c6340b209e660559c3042bf9
    76297982887832806306558aa32eded402c24481c0b6c097
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: a60690be6de91d245ec8f8b3103b8714bf7f1eca1b31185e6e92616142017eb6
proofs:
  -
    000000000000000841b601012020af6a8619106a7e1b727aa9b7cbf300b845bf
    9c818e35899d2528e6663f1f60202a1b59be4c45e035e192130534c17881d86b
    c06d215a2f9081fc71aa3450bcfd000120f06e197bb4952035364d00dfe65a24
    82e403f3399e640d321ce7775a3fbb755d0200011e000100028a8a6a6ababa4a
    4a0003000500070006000400080009caca000a04cacaeaea02eaea0a00010002
    fe00dadaff000320633fb04c9ce9d507d0472d434be015267627c1bdda77e058
    39365fe93e9236f906eaea03dd22314040b4b6941acc6ed8dec777362f6b85c5
    70dae41d5c5ac6366c71928ebf871b7735091afa61ad7807509b7f6822eafd28
    6f4b3538e0d85839b2924debd105d161080102206d956e986a01a81e2feccf8e
    fa1fc696eca43b027790d02696b47729208497072079436c917b632ef8c92d2f
    f39ace503d5bef4c051f602cc9136b072b663fe78b0001022063abff459703bc
    15753a7279ef3ca6941884f5c36d8a6f9926227fcabf2b5e3c20a08451842dc2
    dad9148377abb1d9a17fb8e5240d2a178b54b2cd8371c41f477a000102209c0f
    6c61337ba2724854d8bb7db1c7b0428a474a657d6aa6dc547c805aa4d3560000
    406320c8b74840869c0de6ab59351933b3c98d988d59d813f811f2215a97581e
    e73b5720214c324eb39cecff629a1ad2e18f2c3a2af8dee01a2cf3f0512fa3b7
    fcaed39f203b9909ce1fb47f1f8583d3749bed6bd5d1dde6355612429c69cbf4
    b613e87aa9
  -
    000000040000000841bc010120c1fabd950a61c0dc2c6e812779fd7e0af8a386
    e0f4a15e788c04f6c7a382c3152072ba8ce72f492dde95f64222a671af1615c6
    77fcff561220fe19e565deec4210000120d59205a6ed7163eaea5d629425d332
    362eea3a96366c82c5b5e6e01a65a942b5020001187a7a00010002000300052a
    2a00070006000400080009000a041a1adada029a9a0a00019a9a0002fe00ff00
    0320cbcff5c474a529acdceacf706146b87e579fcf0732b8ab7ca672447ce6b9
    1a17121a1a0f52a383c49622b5752be547259829bb404079c269c71b1dfbbe1a
    5a6847d0593c9ffc5a0116802305e8c55fda6e80d48a20d4b8df3042e195c2ab
    0c2182ee96b320fd68a958a5a1b2ee74124a11ce0c0f06010220eb4d45c4e188
    5540cbd9d3dcb613a32429d8f9eb7864b0029da0b0460beac94e201536f71515
    135c3030c2a73affcce5bdaeab9857546f1847ead33ac1c3b332b900010220e3
    792af43b2029617b886a9fb5d80c2d4926899c3c5536155a5e0fc37af3d90820
    f3809f6145028bde20fa9866f9e709a10ec8c69ba79600c8239ff6341ceb8cb8
    000102209c0f6c61337ba2724854d8bb7db1c7b0428a474a657d6aa6dc547c80
    5aa4d3560000406320757d1b5dbe69bd5cac07347e5f1adad78d42e8142e379c
    a33b2e2def7290210c2096b2310a2906457e62c6f6b27c19e2b4ea03fa67148a
    d6b3cf96593a34e3bd2b200fd29532e0530c35b1fab33581dea89ce4b8df3a55
    bf28a452d107b9d820769a
  -
    000000070000000841b2010120abf22f1cf3409ad5e836c526a0ce44dd570f3b
    17b314935ba2c182470559121220224785a7d77c395fe930b5c25f9269263173
    b9e6073eb7d724d386343d33d3500001208091bb121591bbb3b9e41cc552360b
    eb0dedf3038f3c3060263d1e3bfb6bd9f30200011e000100020003eaea9a9a00
    0500070006000400080009000a3a3ababadada04caca0a0a02baba0cbaba0001
    2a2a0002fe00ff00010000000000000000ffffffffffffffff11caca0ec64cbe
    2565935a1c353ccddd4de34040cc086f140b00a20cdf6ecd6c84ecbaa0a3a0b5
    d1d7efdbf0af9d3ed77aae9c85863fdb2329cc8bf649fba01b7bb9a5241a4efe
    6a55d10e0c800e59a4a94af701010220f1bc2c408ef2321aa9004f0f64e01d30
    784019211bdededd9dcf7e2c25bf405120a9cf2cf3f23eb9605b1f4dd9c4d40c
    d1b78cc29733b5664f550275ea91796ec100010220e3792af43b2029617b886a
    9fb5d80c2d4926899c3c5536155a5e0fc37af3d90820f3809f6145028bde20fa
    9866f9e709a10ec8c69ba79600c8239ff6341ceb8cb8000102209c0f6c61337b
    a2724854d8bb7db1c7b0428a474a657d6aa6dc547c805aa4d356000040632027
    378fedbb010a6aa88d3aeb28f69f9010ddb95580850c36c824983ea334f81120
    ee240a956d3a2239fe7eb45871e42bb9553fa726424d96306ed7965a4a0dbb7d
    200fd29532e0530c35b1fab33581dea89ce4b8df3a55bf28a452d107b9d82076
    9a
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: 0df49398c7800aaffc30251a55f67c06b359c1837887c1f6d6da75821873421e
proofs:
  -
    00000000000000204237010120c36c2c859f0890a483c44eac3411ac9b879b43
    73fd90a116156543e618aeba1720d33251c672a387ff76717f5795d05fb8d9cf
    0450aee5b32dc0714addd7ac9bc50001203c7917d8b9ef23e338979bb35e6347
    b6893630ac0fb57859c6924f5a88cf6a1c020001160001000200036a6a000500
    070006000400080009000a04baba9a9a025a5a0a00010002fe00ff002a2a0320
    6d40c5f79db4f7af6c84091f05f09dcdc3bb69e77b2d9a32e92de3b5966518b6
    059a9a02078b40401ed441b56dcfc24a3b79d01ec24b7c7603066e7a5a92795f
    e372d4c17c6b9c2527772cdc4448d3022177250ba931f63fecb3af145ccbaa6f
    29d4da89adaf0f090102203e03b835edc3816f80776cfa3c2dc2909bb10c4dab
    c17379e7a6d68faff04b7f209adae2f21c9fa67167cc0a5db8cd1540a19d8293
    32ad36cc828492ffa2d7200a000102200a2f20e59688d3b653064241293f9e1b
    ca47555341036b866f2ed77334f49d4d201540aded33bc657bcf3645d8c3e1c7
    e994a41390770b18fd20febd1995354a9c000102202428c7094d2dc227cb5a80
    e75cdd4255ba05a99fdec66506c3cb7612a743c11320563eadd6c3858c366dbc
    2a8106efd1a176757f2020e99a82913ebad252694a3500010220afa8581a8dec
    58d4ce7c076f4fa347168a6d2f8c38dc728ac941dd0229e2067a2069be6519f3
    5fb6614e850a51aa3174dfb466ae78226b0137f1b1164da3d1a0a90001022095
    626b26216455b579b7050fd538efa676c1f3b10b50f5a853c2c9101ae8c45200
    0040a520ff717486f994b943dd27694ec95c354172b9487ca16c9f065d25c8aa
    7c22ec74200dbe544ae3382c3a621509108114a149a65d1465a037d99e16db62
    fa5531706b20acefa0ff950f86c83d0f897db068c0acb544865010c8115597bd
    07a6f4e0697c20ab3a8a890f5a68a88c975071505bceda51c6999d02d78bc2f6
    51b038f1727871209ff36c05e51a6a848ddb6192ed8f1d529873cb064498c0e0
    7bff39f4e0031da0
  -
    0000001000000020423d010120d4cf9edf116c5a861c33209ee8fdcec7d2b10d
    b36159f0a03011ce222c57763120f91090f471a0fc126dacb69360b414da3690
    4ce64a39498846c7df0adda6fa3a000120ef1c5c52f234f59070ecc3f8cef845
    a4fe6e52c7fd4fc0cc468a7c841a559b5a020001163a3a000100020003000500
    070006000400080009000a044a4a5a5a02caca0a000100029a9afe00ff000320
    53bac0e284ea350f8a832bab95732c80128fd2addf32daca602fdbd7a6e7c62f
    0b4a4a080fac4ce74324b7af4040cc5ce08cdc91338c51170c169fcc7ea81c5f
    8cee803a1a1ff1de277bea295d34a5343b82712f02c1a2a680991cf373eeaf70
    3956ffd813e0092bf02a12fbf20b01022006bc1a624723bd9dd5135d8844fa0d
    90565bf8a4aebc0519388505d0b5df484120b81e6360af397fb28610fc3655ad
    7bb84662c66bfef878c2ff69ca29604dc5f70001022084eb92f3fa27e7a6a2af
    235ffe8746690635c477e9b09f0c1d1d0e42506b706e207c4d3916f6330a990f
    fce0c599d452e540ddb8d5d2e967d7750255533a904c0900010220a6c3b49792
    7d5aaee67991eb370cdcef8ae60617d7b60abfd07e8dbd00e6e70e203ec2537d
    7f941ca5c6e12ec3fff5e93740f82857e277a6e909e6635569372a1d00010220
    06f434ba132b8e16d4d58e81912681071e8969b01a7887f8ddfacb0db72bdb35
    20a904e70ffab86a117321e8524812aa4377b3f0081f237942b9a4f2b1b16e2c
    8c0001022095626b26216455b579b7050fd538efa676c1f3b10b50f5a853c2c9
    101ae8c452000040a520bbcce2df32a7e4d0ae8a036c495d09a10093caae6d48
    db1e5139b7a612005da320e0be801af538522aab4111b080e19edccdccb05408
    24bd5990dfe4d0a19d19e020ed533bddc13912621cf7438fdd3d7c9ec974fd62
    45732a56566f164d5a87dd8d200dc44fc0a3935e9747b5eedb6df99d8089975e
    559e746580cf6d832ed1c020b120dab04be145ce862921c6d7193195fe809655
    e5ecb541be57ff334bbf9eb0e61d
  -
    0000001f000000204228010120f1105bb8518b3be94cb57e10ccd34223ecd780
    d6846fd07b88c89485a6c3f07d20d05fe820bbe7e965a86f6f100357b433f5e3
    e8aa18f84d90f6b296753ee47f46000120dd8a47206f79b8d28a63b3d8901424
    79e8aafd27478d30c9c7f0910798e5d585020001160001000200030005000700
    06000400089a9a0009000a043a3acaca023a3a0a00010002fe00cacaff000100
    00000000000000ffffffffffffffff07caca0461813b66404053c3efb158e59b
    c84eef3ce500370f030114cb5a4ac4e7eabe835e386a223f41b49251eb667a02
    0ca89c0bc5d87e9185575173350c0c42c3b4a2ac0a27ed9a01010220a93f1e7d
    ffb17ff3295bdee652cb7f156c95a019beda8be6b85f764328c72b6120dbd34e
    37176d959c5290aedc1f1eef8b8075b6d8b76e6c0c73336fe69a24d20a000102
    205f0e2eafb8d49f293765284092bffa156cf380a45a7a5fa24b937f15a69322
    4f20f44b3a43d6a55eeed38f77db395569a625c3382266d966b4f52c8faf4b33
    35a7000102202ff338a32ca5a892890bd154f013fddf4522fc6de3b5cdd1c490
    39d91ecbb906209897cfa22fce229469ce6e56e7378e292a36643b10ff06bcd4
    fe61b0a6e074540001022006f434ba132b8e16d4d58e81912681071e8969b01a
    7887f8ddfacb0db72bdb3520a904e70ffab86a117321e8524812aa4377b3f008
    1f237942b9a4f2b1b16e2c8c0001022095626b26216455b579b7050fd538efa6
    76c1f3b10b50f5a853c2c9101ae8c452000040a5201f50ef3d6192c2b6fe7253
    6db3e1faf8edf4b06a321e20004fbe83eb81e1bfa1201c5f55865f82adf4eefe
    d83cb5c8c73a0c03cc20ca235d4bfea0599ac7f5143d201f0de60f83fa1e5d12
    aa02ad5a2b2cd991a8f83b90f88c90445e62defe4130f320b62601587e8938dc
    824ed728bca5a368398f8d243f2e016882e3776e4343913e20dab04be145ce86
    2921c6d7193195fe809655e5ecb541be57ff334bbf9eb0e61d
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: 57524a39798ed441e1fc30500e06496c59b4761e0e1af04db44e3600e77f7395
proofs:
  -
    000000000000000841b1010120c03447385bc538a758f6e5e8441069cfac168f
    047e4fa1defcb36524fd08b87f20ff48aae39166a4825c17e991e1704ee12ce2
    ec572317a6fe9c6023f5c7cdc08d000120309648af5579dd228ea269a027b392
    e21bc6c20609213fbc5bd2e4c52e179521020001166a6a000100020003000500
    070006000400080009000a041a1a7a7a02aaaa0a00010002fe00ff00aaaa0320
    598845933e05f119b9c1324ff8a868549b61189899b222646bf345a4f0143faa
    091a1a06aa88e105cab640408830aff77c35c68bbda3ed323f74e1cfd59db5de
    a0c5c0a4abda8ad0a9d06ba7ec1cee85703ad14de813a067c55ea2d7864ec49e
    c5a8241a826990ed3de4080e010220e1871d1f1ab8b5eebaa46425514785de38
    48c6b12b5659cc586b7ff209ead73d20e555cfa3cf16a1a845d35c665b5e33e3
    ad52183dd58b75421b2f9811a1fdbe7600010220bd0a65cea15a0d9b37a7107a
    43ac11cc5cdf9ccee177d15aca834ef47a8aca6320f581eb8c6c8e1af54f4868
    fe0d2ee6cb3cf556d33c6b2c8707fdd575949937c600010220d963c3d217d7e6
    573b0ddb011a2992b414f18f7fac2cf0875ab56398c22b6a760000406320788d
    9c69179eb00281a8191d48db2d9ed6ef64f0e861cfe82e40dda75ef38d8e203f
    b03a0dd2a3fa7cba79b67cb65c84d77b7abeb81d08e9f50661a6c117f6dfbb20
    0dbe1fdd5aedb29a5430151a99a74b75eada0404bd0c11ab68d960c32dc29e37
  -
    000000040000000841b2010120413a88e151ab8a7d0e67da7b24b3cd1a28e719
    de844cf8f61879ae7d4b4d640a20cb4aed0276999a2a861870b4c6fa0fc74e13
    e295cddb53ce9663c02e262f1061000120bcea448954535048b7c21ab75eb60c
    d9d35fc38110403ab2a9aeba8dec8c5bac0200011a3a3a00011a1a0002000300
    0500070006000400080009000a4a4a04eaea9a9a026a6a0c5a5a00010002fe00
    4a4aff000320bec8c716d15bf0e28e7f72be54a300a05c07e570e668882c2eb1
    9b33818b880b049a9a01a1404078875601f95b8eba8053a052fc6ec2acb1ffe2
    0211df98a7e3d3756dad49d2e9fe627d6016b84fc75a6ec082d23ac3be14554c
    12c52d86de6935c1a4ff4ad30901022086361190794ba624dd524a355ddb6f54
    a861675a0edb87966fe33a29d6ccf83520c9858e41c240a6372c44ebf4dc6f47
    51e3c5eb9bb888c9cf23aee8e448e1c8b900010220fa9afd34ee44d67cf62b7b
    afa6d7d794ccf5064d5327913460d255c97105664d20f9ad8f3f8cdaa409419a
    647f63d965528024745b977cf9658fe7de6e1aa4245b00010220d963c3d217d7
    e6573b0ddb011a2992b414f18f7fac2cf0875ab56398c22b6a7600004063205e
    e87e71b72002c8befceb043e1b4177196cb6d041a2c28ce1082eca32e2c94520
    9e00e4a9e96809453ef3ac9ee86ccbb274d994f0a3b711cd5e06056dae5094ed
    20b971bc78225999bf56a393da4b9856a7170aa9152425191cb972d274466d7d
    67
  -
    000000070000000841ab010120f4d22e604039caadc6ca61324501b32373d917
    4f144e7efa9e5820f5b528e95820150d93fe718811668d02f23d25f70f9d6749
    454aa911361ef3720e0bbb3c730500012040e165431d54b1142f9e928e4db11b
    c20e85ae5cea9456f2cd1721e52d6bb3fd0200011c000100020003caca000500
    0700060004aaaa00089a9aeaea0009000a02caca020a0a0a00010002dadafe00
    ff00010000000000000000ffffffffffffffff10caca0d1276d5a047cc0817e2
    d6642e2b40403fbb0bdb551f289dda27955880cb79c84c276a1cf1a3e5adb950
    6c7ad5ee21ec15b82e4b7b8d523b81fad9de3fb5cfe1602abf41b25f054afb4e
    bb79a8b5ae0a010220cbddecc3a44c1ce6ef129c5d48cd6407df6d887786c5be
    d449c465b2723c84342023972e867d43baa13ba9eecff7b35ca8235b3a98d5a6
    2afbb39b9dcf21c103c900010220fa9afd34ee44d67cf62b7bafa6d7d794ccf5
    064d5327913460d255c97105664d20f9ad8f3f8cdaa409419a647f63d9655280
    24745b977cf9658fe7de6e1aa4245b00010220d963c3d217d7e6573b0ddb011a
    2992b414f18f7fac2cf0875ab56398c22b6a760000406320c5df1e7ac3186fbe
    a4ba6e1cc6190d898ac5b296db87befb8c356553f999e6c420b44cf23db8c781
    1ab10423353fb66887f5abb093590aac55b7af61a6f2d1131020b971bc782259
    99bf56a393da4b9856a7170aa9152425191cb972d274466d7d67
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: b11f7c39861824542544f8daae4f2f3e0c9874ece6adee77a6b14cee45088ee1
proofs:
  -
    0000000000000008412d0101209d43ce5de1a45e708aef6c7c0c1b120492f8cf
    18a5c4798042b543a63036f64020eb7320019c41b32f8261ae0fbbfd4b1659ce
    71d1477d700565e1efca8ff4e9590001207f129dd4b46dad54487e908aad183c
    8e0827158bd063a1eb90236156d2bdd3f902000116000100020003000500076a
    6a0006000400080009000a049a9a4a4a027a7a0c00010002fe00dada3a3aff00
    03204fe938a61e88df969297ebb39905ae5b547b3221c4adbd9c2df59def3f74
    609a0b4a4a08daba9c58fdca99a240408d6a0d4480a33582eb098c90d7149912
    d1d62b738bc5263712e266333e3f873866b5526ac4df79948f6203fa54f76703
    def2e0b7a0382cd5f382198e406a0106000001022066f0e92224a1cabeda5d7b
    8263831b8dfe3bf93ca0870eeefc5993616a7adb700000406320a90d4563c6a0
    ae0417ab3110f1ba68592833465954774201b0a69e8c457dc6ad20c0d2b83fa7
    6a6a182e97682d717acc9427d8e7e4dbaee5df157b72fa332732a520cc9475b5
    4ab0db054de1b3324f991956b1ed84662110a5659473bc8af32d0013
  -
    000000050000000841c10101202ef6fe280d8db111d10004f2dabb5f3b92604c
    4f2dc16dae5620daf139e6fa4e20687786292743847b27aea13d3364cc499d9b
    4b968267c87561cd8a319c7610fe000120ad7e4636852270777c0bdcc6b921b2
    02308d15baae3d9427f1fb3a399f19f8fb0200011e00010a0a00020003000500
    07000600041a1acaca00087a7a0009dada000a04eaea4a4a02baba0a00010002
    fe00ff00aaaa0320d7e181dadcf7beb20e93404bb05d2a1e5c979f5fdcfbef93
    5bb629e29e645754114a4a0e58e4576ea1696306e3b1b3a0ec54404061d2bb40
    4bf7e721513de0e0d3b9c6e872ed3bfb3aa9236a278f3c0cd0fa818232f1c677
    2a267944f73386eb670cfaba71f340cc645e60fa6fc21fc37bb5600b01022029
    6b0edc627e8e0ed97c39c63228d88e7bc14701718fe73cdd9c4f10bc29011020
    e13fcd8ea180af77268010c55b7a2465f679bd8636170c901ab271b0ed6904d1
    00010220abaf724a22813c349f73eb8d65d1d2e8f1c8fd12ced328f7d6eee1d3
    f8c7a22a20d986e9733197f76b16c149790da8d3aa8ce0d0c10ec07b5c05d10b
    afdddf46680001022066f0e92224a1cabeda5d7b8263831b8dfe3bf93ca0870e
    eefc5993616a7adb700000406320618cbdc4c471593366ce37d43a9500e3255d
    5e4162c821f4cd386a769300e48720a8a9768b204846471153e956520089971e
    1390464947c2e8f5ec90bc92ca3f062031c4741c7a0cad3826984f29ee5683fe
    001458b83cdd41a065a56319bd023fdf
  -
    000000070000000841a701012073dae92a3bdf3423a2545e15ac2cb5d4b1b8c6
    a9b9752253e02d1e567ea6e66120ca06979f99cd7b273999fa39a20366eb7312
    44cf4b38b9e6a0a4a6faf52c1f370001207d205f6e0c5eb4d4337fcf14271e7e
    b95a92f757d64845f1dc2d745e70a7fe0002000116000100020003baba000500
    070006000400080009000a02caca02eaea0a00010002fe004a4aff0001000000
    0000000000ffffffffffffffff12caca0f905d7b10f2f07c66d987334cf42b41
    40404164717a61deb7dbf00fe3701281ed0faf2530ff8314c975b1dea2aac4b9
    e107ab2994f884d34116758061697e4e1cf6c831ddd4a4fa4ee5aadc58ecc77a
    f00a010220dfcc93d78a2b1038410b8ae7d2df8896bee1c6475c8cf42ac2323b
    d89699f0632071a5fe7002a85cbf535bb1d0ba9ea12235c215850633a587b1e9
    ae772442eb4200010220abaf724a22813c349f73eb8d65d1d2e8f1c8fd12ced3
    28f7d6eee1d3f8c7a22a20d986e9733197f76b16c149790da8d3aa8ce0d0c10e
    c07b5c05d10bafdddf46680001022066f0e92224a1cabeda5d7b8263831b8dfe
    3bf93ca0870eeefc5993616a7adb700000406320ba45a7c3e98ed62419ba2418
    60fd61068012147a7ae10d9836a52540975c10c920b9111ca283f06ddfd0c632
    bcbcf1c2189dd8d36023b3f2da394fce289e77d8a52031c4741c7a0cad382698
    4f29ee5683fe001458b83cdd41a065a56319bd023fdf
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: f2c886ee356436afb51781989db8da4e44aa0a515f1febfa04f43613a7df96f6
proofs:
  -
    000000000000000841b70101204fa3c5cb9746a4792d70b1123c3ac3925483c5
    30e6afbe023e7945315e3b9c6920c77eeccc3ae46a63a5039b3087f497693f32
    487ab0685d9ab56bcb8039729392000120b7acdfbfed25e6aa59eb7bd8f5aec2
    05f7503b16c15d44613d6f8dc4019b7eb102000118000100020003000500079a
    9a0006000400080009000a2a2a045a5a6a6a028a8a0a00010002fe00ff00baba
    03208bf2dde271940cc5c706fe7c503f10dbf2e551c0d3fb59cf69b9a42e108f
    dd8a095a5a06d2fa2bd5eba240404e3f24259ba97838a75e0ece24348d5b9b66
    33c63c921019160ce7fc0486766d4ad49f063973b42edc8c8f966cca84b576dd
    5ef18394d3072b1ae6b446cb3c000102205bfda21818c70c1ba03a76ea0d9902
    ddb6d3e25c1a4177b138d7082ecca54a1220428784c1f832c8a58c5b53f26f20
    dd27d187defb1072bec96568bb420e1fb821000102208527bdc96b6eab6a1798
    1544103a4b9ca8456430884cfbd1a1ab7ca5ea973e612022b1f446cf92472016
    da8f296cecc7362cfedf10853a52d6a4a3796d1dd2cf96000102208af74b8d39
    4293745c534f13d8b53d2168ce904bc518818c1b507ed9b8fafb570004000000
    07406320a28731a4e1af14d587d2dc6c775434a5e39c1d8df465ec15776cd2bb
    d328c631204cc9d031111cbe583ca3c8ae22f5202768af2654168f169c414e1c
    cd90c52a49200a1dd1f13efa580b819a039d8f1c798856774c526da3a863e63d
    f48f20b5b439
  -
    000000040000000841bb0101201c51ae01ae57eb63da6e5e9277b54613e7765d
    07846e297b374b161d5de3385b20c7fb2d427ebd9d495eaec3d9030734d7394d
    332db68720d2ba65992bde435ac3000120bc0fa16cbda46ebeb4711db71e639b
    299022c6047b5f072d149edb3f4d66bbd00200011800010002000300054a4a00
    070006000400081a1a0009000a04caca1a1a025a5a0c7a7a00010002fe006a6a
    ff000320e77e353fc004ed772ca14d6590b94405aaed55c51c18300d1442c7a9
    64db453007caca04b307349b40401b5e6e904ea1d1dd8699f2fcd16fc75f8424
    d1875c6de22a0335f46d1b8f33dc70ddef2de432a3f22f2bf9c19ebed645889e
    182505646805a2acda1b9c8e49090102206a8250adbd6d7ce0c247fb5d0523b2
    a894c1ef7023e4a64fb48a959c7e62b35c204e0c9a6e742bca7594be91891918
    5b14a5e48e5f48ad022864a032a7b0b3955a000102201a772accc4c9e3476c01
    1c4ddcd677db08ff204d84004d92929cdfc302bafd202013054befab1af498ae
    a5d715c612bb3eb22540f467e85c6c487d9a892e2b069304000000070102208a
    f74b8d394293745c534f13d8b53d2168ce904bc518818c1b507ed9b8fafb5700
    0400000007406320c9aeefb310a510d1d8a7cbea86eaca04de9ca98d9eaefc55
    ce61b745adf460de2076c910669733d1159b71ad9f4057a11a62a17488c8aa80
    b8f1d5360814c9ee922092210b4888a635a2066101c49c4d5a98f81c93e4ba56
    9e3277d1864f03df375a
  -
    0000000700000008416b0101204ae0ebd152293795ba510cc8f17a497d3f9e02
    e333d913bab8c533a3a52ade6b20c360a0b90ac403e77a707a8fe702f94fcc24
    2c0f5a90586f4bec40ccd959fb1b0001209c02d599900d6410d0b7f61cab1c9c
    f1c166aaf297bea067605831e6fef776350200011a5a5a9a9a00010002000300
    0500070006eaea000400080009000a044a4a1a1a021a1a0c00013a3a0002fe00
    ff00baba010000000000000000ffffffffffffffff0a4a4a07cc451efd508686
    4040924ec55144045938e926d4fecf4742ca72c784b9cf75e772662c1cfbcce9
    320d0f52180b7e174a77e53af6e04d93fead03207b76f4f43217719d1bec938c
    ae00000102201a772accc4c9e3476c011c4ddcd677db08ff204d84004d92929c
    dfc302bafd202013054befab1af498aea5d715c612bb3eb22540f467e85c6c48
    7d9a892e2b069304000000070102208af74b8d394293745c534f13d8b53d2168
    ce904bc518818c1b507ed9b8fafb570004000000074063207229f93f9e8f9c3a
    0c9cc848acdde9d6367551b375a8b07f530a7284b077777e20a2e0081f89426d
    a39e9476d6e63d9f5766f2850a8ad23f01e141388264801b462092210b4888a6
    35a2066101c49c4d5a98f81c93e4ba569e3277d1864f03df375a
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
tree_hash: a28ecebf4b711cd3e7c001ffdb59018d25cc3db73df2cf96fa9cec51f06145c2
proofs:
  -
    000000000000000841b8010120ec18c013e1bd5655e7ae3ef88336ea86f4745c
    ed481497c38d2cae619f11452d20ff535b29e397e38034f59b80c109316ce0cb
    7eb2fd81741f5c81ebb042992cb100012082d746ad98533847d8cb00813fe4bd
    0d44db3b19d7591d5cfb633e4ab040408a020001160001000200030005000700
    06000400081a1a0009000a040a0adada025a5a0a00010002fe00ff00dada0320
    9b5774602220e9dbb098f8fdb9dadb6e3ce88fe3285f50f2b156e87e03bc803f
    0c0a0a09ace396a0150c55e68840400052ced555e139cdef9e0ec0d3886da0f8
    84944fe3368d12bb8ea4d4352ca5e7adbbfee946f7752a6ef933ac1ff1eb526d
    0d6dc3d10cabce21bad451ac66270501022002007a8b243866e24e05f2aa68c8
    013b1d021f9543a983add91490c706dbf137205a3360599b04f22790ec4a7ed4
    9839d9e381e4bac9fc78be0043d6a53de0829400010220c5c774619931531acc
    da3f7d1927ce8be3348edd8bf9659780a139548d4d716420fb8b58629d6c3caf
    075888ce01a0d53b082c4edcd4a6046b6c93997e9f908140000102208c2e1039
    0840e3db8d8e2a0f44c0efab2854b2a7013894c6cedac5fe1437705100040000
    00054063200b69fe27f22cc081efc466503ae8924bea87d8b789da64962dc610
    e89e56528c203e9425d0c47b9ee2abff25a873d526cfd58be76d2c1311812dd6
    69ff4c2631cb20cb1691d9b0099929bece296b85e38e0ccacf60745204907b6a
    3abd16b01d4f01
  -
    000000030000000841670101205e2a87d497d3f6e2039a7621d8952549554a65
    f54951e3f48223b7e006c1ce4620540314d995b38e40eb05669f8429082de304
    c785eaf23de6b408212f14cf05f20001205dd5f1f48300989389a6420c264c64
    078636bee326769579dd178cc734befc470200011800017a7a00020003000500
    070006000400086a6a0009000a043a3aeaea023a3a0c000100027a7afe00ff00
    3a3a010000000000000000ffffffffffffffff0c3a3a09fd12d1866a1b5837e9
    40404404dfa8ac135b5c0773986b7cab8cfb298ea48018cf48081313560a3b66
    55a7a133f13510255df5b157890ecf9b1744bfa21a4068a3de4a34c40dafb956
    5b0500010220c5c774619931531accda3f7d1927ce8be3348edd8bf9659780a1
    39548d4d716420fb8b58629d6c3caf075888ce01a0d53b082c4edcd4a6046b6c
    93997e9f908140000102208c2e10390840e3db8d8e2a0f44c0efab2854b2a701
    3894c6cedac5fe1437705100040000000540632036d41903997f41613f6a82fa
    1729d48719562cc6dfee12ae0bd4514eeab8f71e20e959ba790c00636f43e05a
    fe5f6ab781636c8aef43652ae5db3998e32d79fabb20cb1691d9b0099929bece
    296b85e38e0ccacf60745204907b6a3abd16b01d4f01
  -
    0000000600000008416d0101200cece591dddeb44bdbbf057d8e5c25ef166a0d
    00c95341a0ad50f7d1ef69dc4520bdd3452ceb42371ec29240c62c922a29c886
    9a25deba467168951a6dd61fc778000120317a01365003e0554c605c6cb7bbe0
    b008e9caf78f6f45619750cfeb995e9e57020001160001000200030005000700
    0600042a2a00080009000a047a7a2a2a021a1a0a0001baba0002fe00ff000100
    00000000000000ffffffffffffffff127a7a0f64a35efb7f73d8e88c48d3be4e
    e92440403b3da8eb0a95e1daaea6e013ca438cf2c4615aef9c6cfb00dac67c0c
    b09628daea3409c4d2d2d0ae982cb75f5ba5fcebc29acf7a04e8b019c45551fa
    6acfe20800010220200e4863b5d27138c557267e2adf905b9ff485a7fcf538fa
    6bb07ef957e9c26720963167a796c7489ed32f3061464992d1a275025d76b786
    72e265f2db6e1c4e5504000000050102208c2e10390840e3db8d8e2a0f44c0ef
    ab2854b2a7013894c6cedac5fe143770510004000000054063207fa35246a9a5
    4288f26e442772cfa64c9f7ebab42ebeb24b4dd762f39aa5092e209fdca5a218
    66af8752886ddc20598c404fda9e146bc9794950957d09050966f320b8ac89f1
    8646673729d4385f91097c40c1905187033b5fb08a272ad2247bb23b
]]></sourcecode>
      </section>
      <section anchor="partial-client-updatepath-handling">
        <name>Partial Client UpdatePath Handling</name>
        <t>These vectors exercise the computation of a commit secret from an <tt>UpdatePath</tt>
without a full ratchet tree. For each case, we provide:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cipher_suite</tt>: The MLS ciphersuite.</t>
          </li>
          <li>
            <t><tt>update_path</tt>: The encoded UpdatePath.</t>
          </li>
          <li>
            <t><tt>tree_hash_after</tt>: The root tree hash after the commit is applied.</t>
          </li>
          <li>
            <t><tt>resolution_index</tt>: The index of the ciphertext to select from the
<tt>encrypted_path_secret</tt> vector.</t>
          </li>
          <li>
            <t><tt>sender_membership_proof_after</tt>: A membership proof for the sender in the
post-commit tree.</t>
          </li>
          <li>
            <t><tt>receiver_membership_proof_after</tt>: A membership proof for the receiver in the
post-commit tree.</t>
          </li>
          <li>
            <t><tt>receiver_path_state</tt>: The receiver's retained direct-path private state.</t>
          </li>
          <li>
            <t><tt>commit_secret</tt>: The expected commit secret.</t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-tree-operations-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
update_path:
  203cce1a604767a200d6dedebe27fb9f1b417009f32d49274505b99dde6799d3
  5720874b4b2fc0e05fdd0b5d92539378c364e2a65b80ae7db896533569c4894a
  b6960001209c220b987cfa65764ddf19207c68846361240443de156ceb564168
  edd14b1b700200011c0001000200036a6a00050007eaea00060004000800092a
  2a000a9a9a04eaea7a7a02dada0c00010002fe00ff002a2a1a1a0320f0c56702
  abdecb522d7d08af5af48e27b30b52cd49f5917e1ce8a6b11b8452de057a7a02
  a14140403047b78d55048fd00fb91dc53cf507b7aa9e4d35666bc622cd0c4f5c
  8cd3c9cbab8989485d05345054d7084b98533f2ce5142f6101ebab6fcdb41253
  8f40780b415f204a8b6445b28e92dc81a7011df86666085c81ea477a02b2d2e2
  ea074fb96076274052209571abd323114ae9dcbfdf609846e888771066aacd46
  63a415885310deca323230b15406063f449d3d9581a0ca2da0b22769226b4035
  067c7bd66e33bb9386b554a026df3e88279cf0f48caee3623d902720253cd2d3
  c8d529f86d72d3230f3736592479fda020b82b8d4ad864e591beba37405220aa
  1704d412cb189471161d70d568c2bb08dba867956d2819329ee0ec322b953d30
  76ab297263b469e305da83b87b56a26c05c04b6b23374d77408fa3c2097ba5b8
  4596f5c5e31546e9e96ed5bec9cf550b20054e60b4a7baa9205e1a987d607910
  cd243c090e20a465584e0558e6998e45334052205f541bc708fc0cbe370b5189
  7d58a1e3b2876608eb980018d1d75d99cc01f970300a57963bd986b34e98af38
  8b3a4931ef18a0ef31cafc240b6881b893f66bae9b6ce7ff5c2769b72be2d274
  a213995f22
tree_hash_after:
  c646a1ff46f0d34fa8f5a3d1a9784b2d004a2899badd75e29e46f0915110db60
resolution_index: 0x00000000
sender_membership_proof_after:
  000000000000000841b50101203cce1a604767a200d6dedebe27fb9f1b417009
  f32d49274505b99dde6799d35720874b4b2fc0e05fdd0b5d92539378c364e2a6
  5b80ae7db896533569c4894ab6960001209c220b987cfa65764ddf19207c6884
  6361240443de156ceb564168edd14b1b700200011c0001000200036a6a000500
  07eaea00060004000800092a2a000a9a9a04eaea7a7a02dada0c00010002fe00
  ff002a2a1a1a0320f0c56702abdecb522d7d08af5af48e27b30b52cd49f5917e
  1ce8a6b11b8452de057a7a02a14140403047b78d55048fd00fb91dc53cf507b7
  aa9e4d35666bc622cd0c4f5c8cd3c9cbab8989485d05345054d7084b98533f2c
  e5142f6101ebab6fcdb412538f40780b0102204a8b6445b28e92dc81a7011df8
  6666085c81ea477a02b2d2e2ea074fb960762720468e751b59a57a38d39e126c
  3832b488f4702183bf22b4a471365a0bb91b9d2600010220253cd2d3c8d529f8
  6d72d3230f3736592479fda020b82b8d4ad864e591beba372032a15c6d69e0d2
  86975b64e298c7edcc971b94107ddf0ea6e04c58d2e22a192500010220054e60
  b4a7baa9205e1a987d607910cd243c090e20a465584e0558e6998e4533000040
  63203e61092b3d7dab8d58aa3a1b9637f442a2743fc838f3c5112f2cb37e5c4e
  baa22061e4a1282956a0b3ea624cc55a739a56b97c56b5c66d02a3785a0a2646
  7a24f4203e07af2a8adbdae583b50ec7dae6b127ba6161b6b80b0caac7aa2bd0
  c7fff755
receiver_membership_proof_after:
  000000010000000841b5010120a82bc7ea59fdff886b9dc7bb41fed8bc85e522
  1fe8fc35459018345d9aa828432087976588c88d46cb67196a5265d60a2ce636
  94aac1ac932f500ecdf82767137c000120a1525dd8a3ca0e8557bfe073b40cc1
  7e1ad073b0c6b273d6f190e50bdda92a0d0200011600016a6a00020003000500
  070006000400080009000a027a7a025a5a0a00018a8a0002fe00ff0003206857
  4afb182efa08ece56c785bcbe5e6e444b8a348322f097d94daff4eb140ed0f7a
  7a0c390eebf54ec1bca0e6996377404005110ba84254fa026b5981b445535f33
  46e11776ef9bc31e2b97d55c54b6b6364fadf17fce823b2b38505e41e600552d
  82bf29fbe04a20c9045848c90f23150d0102204a8b6445b28e92dc81a7011df8
  6666085c81ea477a02b2d2e2ea074fb960762720468e751b59a57a38d39e126c
  3832b488f4702183bf22b4a471365a0bb91b9d2600010220253cd2d3c8d529f8
  6d72d3230f3736592479fda020b82b8d4ad864e591beba372032a15c6d69e0d2
  86975b64e298c7edcc971b94107ddf0ea6e04c58d2e22a192500010220054e60
  b4a7baa9205e1a987d607910cd243c090e20a465584e0558e6998e4533000040
  6320adcdfea6f90a9bcad6fcbec5156ee456487a5c676178e2c2d692786d8e6c
  51202061e4a1282956a0b3ea624cc55a739a56b97c56b5c66d02a3785a0a2646
  7a24f4203e07af2a8adbdae583b50ec7dae6b127ba6161b6b80b0caac7aa2bd0
  c7fff755
receiver_path_state:
  -
    encryption_priv:
      14a99d34d980f73c68cb1000d9dc018c93fc1754dde02943d1a346066c9fd32b
    node: 0x00000002
    path_secret:
      ed2d3a9bef3d441d5e3a1ee8dcabfe7a4bada7022e2f4c9c301850762f16c535
  -
    encryption_priv:
      80a77d2336ca29c05f56999fd038f5aff875955d01fd6e65358247cdb8e540e5
    node: 0x00000001
    path_secret:
      9775032a7386ce930858f5cb729acf4a8c3f3fb0e5ccceb139f72bfed3349b5b
  -
    encryption_priv:
      812cdd00ad396ae16fac769adc7ef7c83971832d0e7853c7e6f1b4a47b76480b
    node: 0x00000003
    path_secret:
      8697c1b453f41dcb75f849c3469b500b103e439a4b0eefe4e1112042dc0e1890
  -
    encryption_priv:
      c2f97b1ff7b5b2c1b7d62223290e94da5920510e239f7110c25db53dae1368fe
    node: 0x00000007
    path_secret:
      b0518503fc64d7df08fc24261a77b2090362db2c1a7061430ded178d8de110f2
commit_secret: 166ea7efbd8ea235f3201af7cdc46526bf2937e227a70b76540fa94bd91890ba
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
update_path:
  203cce1a604767a200d6dedebe27fb9f1b417009f32d49274505b99dde6799d3
  5720874b4b2fc0e05fdd0b5d92539378c364e2a65b80ae7db896533569c4894a
  b6960001209c220b987cfa65764ddf19207c68846361240443de156ceb564168
  edd14b1b70020001180001dada00020003000500070006000400080009caca00
  0a041a1a9a9a024a4a0a00010002fe003a3aff000320027e7afec2ed2e099fd4
  a798d3a9138da75f8e1bed24be6d166c65a59b06452e109a9a0d174dc6d36741
  a119dcb5bd7b514040832c7b41c31f1f7c692b621bf8b9ac6d572cda9c143b5f
  0a254506cda19c915af7d91dd282496f3084627e26be120a566f650f474362b0
  5807d3317f0a42c60b415f204a8b6445b28e92dc81a7011df86666085c81ea47
  7a02b2d2e2ea074fb96076274052208b18e59a0256d95959d6bfc5c7bc2b0558
  ff7db101c8c732dba289a9f686890c30c172de81dd344a98df40701cb70dcd59
  e7c607129baef17a9943ab56792b35edcb0e4c6af96a4644b11f4bf0d6a54aa0
  20253cd2d3c8d529f86d72d3230f3736592479fda020b82b8d4ad864e591beba
  37405220632e363edf79a1614213e52de48d2ff59483d9b539a3285e7c555dff
  c023441b3021e456615a2cc89b55056567c8864fb32da2413846f52d735a6091
  5c29bc0a895fb06989b1a6e6181d3c24d88d0f008320054e60b4a7baa9205e1a
  987d607910cd243c090e20a465584e0558e6998e4533405220c210830bf7d8ce
  9716e4bfe3e99cf9bee3d9c7e61ca1ded259969e18e667bf73305dc0ad3104f7
  22965fab1bcfcf99efa0907fff4f04b01a60af892ebda156fde220e7bb3a489c
  f030176c175b18f84ef7
tree_hash_after:
  f3ff4ad42554596c35b62d3daa9a1832b0d5d2fbe291514aa2b882211b9c67d5
resolution_index: 0x00000000
sender_membership_proof_after:
  000000000000000841ba0101203cce1a604767a200d6dedebe27fb9f1b417009
  f32d49274505b99dde6799d35720874b4b2fc0e05fdd0b5d92539378c364e2a6
  5b80ae7db896533569c4894ab6960001209c220b987cfa65764ddf19207c6884
  6361240443de156ceb564168edd14b1b70020001180001dada00020003000500
  070006000400080009caca000a041a1a9a9a024a4a0a00010002fe003a3aff00
  0320027e7afec2ed2e099fd4a798d3a9138da75f8e1bed24be6d166c65a59b06
  452e109a9a0d174dc6d36741a119dcb5bd7b514040832c7b41c31f1f7c692b62
  1bf8b9ac6d572cda9c143b5f0a254506cda19c915af7d91dd282496f3084627e
  26be120a566f650f474362b05807d3317f0a42c60b0102204a8b6445b28e92dc
  81a7011df86666085c81ea477a02b2d2e2ea074fb960762720f1523fc5c6a1c7
  45b088e8008ec89031b8578401de51025cc1d1e6703f0a567900010220253cd2
  d3c8d529f86d72d3230f3736592479fda020b82b8d4ad864e591beba3720eb3a
  5c40422d97949ebaf5f57440c71fe27a12aec1a64edf72ac593b9c158f770001
  0220054e60b4a7baa9205e1a987d607910cd243c090e20a465584e0558e6998e
  45330000406320a306a778d4e4ce00e58980fead0ed7e4ad89911e817d417f55
  86f93be623aa692043952f6ac664f0aa3b16bb429fa6aa8b302c9fab869f8c20
  6a6f5d0947b23fa4208e2264b11acb9cfdc56dbfcdc44c6ae6167f9b2e184499
  198d62d7f8b9f3c450
receiver_membership_proof_after:
  000000070000000841a4010120be7690a2e3bd726d3bf66742bd5815295c7732
  71d45cc3fb17bda3f610c3b93e204798d989c330b1291f46926f649bc8918352
  bfe41ac73941fb76e726d27d38db0001202cfb5a7ee155995bc0fce26b3727b1
  27ebd3e5b10272c922b1f95e68d944414a0200011800019a9a0002caca000300
  0500070006000400080009000a04aaaa3a3a028a8a0a00010002fe00ff00baba
  010000000000000000ffffffffffffffff0baaaa08ced72c5c65290918404003
  bb313b25f62a2509805aea793bbe01f53010c3676724d605425b3016cf0a1441
  c35b2e50360920747ec1c1c920871fe58e2a3246ec07f316414088bfe0620901
  0220a461c48056943854d24a4b27a57afcaba53a6aa1a0894dfe034753ac37c4
  0e692074b9295d3c2402d7f7c5b76e3ed4bc848ca8ad4db59889172207d98da8
  f1ce85000102206ea5fd8c8b1335f7eee35cd5d662b96e76853732e60f94763a
  5d2e0c1289be2920d133844620ca1496e102434c204662a6991a1e85fd7b65d4
  72f7a748d8619fa800010220054e60b4a7baa9205e1a987d607910cd243c090e
  20a465584e0558e6998e45330000406320a4cfe8f092da8aff198f18b9e216cc
  8e7e1904fc75807d6a3f7484e12e9edf2220f537c870891457cbc9672437b1b8
  5d3f04cbc00c91b533f7475961b99a51f97220bcc283ee53996ff61407eeb2ae
  bc230b3d10aa35f678ca6a41fe0e387526edab
receiver_path_state:
  -
    encryption_priv:
      dcf47362ec49a730ced67943cf549a6f7f9428d1acc185ecb2cdec151047c42e
    node: 0x0000000e
    path_secret: ""
  -
    encryption_priv:
      890782c6a3c60142f26e81bd8c47080b11ca3de16d19c9f62246f563da146660
    node: 0x0000000d
    path_secret:
      157b58a1b7c3274fed9fa8d0d7d7e23b5b31beb105516b5fd68eae80008fd058
  -
    encryption_priv:
      45171cc19457fd20b782ca663457e9c76d77ad4b2abe775cd44e0aeac82aff26
    node: 0x0000000b
    path_secret:
      e1e57659be2e2608cd34638129378bfa46beff61d93aa6e6028d2c69e80fdc72
  -
    encryption_priv:
      c2f97b1ff7b5b2c1b7d62223290e94da5920510e239f7110c25db53dae1368fe
    node: 0x00000007
    path_secret:
      b0518503fc64d7df08fc24261a77b2090362db2c1a7061430ded178d8de110f2
commit_secret: 166ea7efbd8ea235f3201af7cdc46526bf2937e227a70b76540fa94bd91890ba
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
update_path:
  203cce1a604767a200d6dedebe27fb9f1b417009f32d49274505b99dde6799d3
  57207d118f039fa24cf95395e8d69d70a294a76532c66c305fe89abc36114242
  eed00001202815ebba746ff92411b00ca7c632886a52a06b865a5632bb87f7cc
  0c291d694b0200011c00010002dada00036a6a00052a2a00070006000400087a
  7a0009000a04baba3a3a02baba0c00010002fe00ff007a7a5a5a03200e348f21
  953c75f2f76e96d4d5aae7d41e5d1298a26da122b97fc514baa820870d3a3a0a
  0b908d3ec43bd7906dcd40402bdbad74fd889074a2a7b7e3ac2acc88a0efc2dd
  5e9ba76d77ed6a7773234b4218449d1c957ba55acadd013004c48a46b5a4f43d
  d1967da019338463aa7afd09415f204a8b6445b28e92dc81a7011df86666085c
  81ea477a02b2d2e2ea074fb9607627405220516f4e5c691b7b3639eabeabb8fe
  a599c24affe085beaaf2c41d64c0ba40185a3026f5cc887e5c4f6ce9d68254f6
  6e05c578d94d36e7aca0e515ac2f1c30e9a661fc1b271eb7f034e3bb15a9d94a
  eb7fb220253cd2d3c8d529f86d72d3230f3736592479fda020b82b8d4ad864e5
  91beba3740522042c553d770515460bf71ed1a643414592240b7c5956f6e3b6d
  b6c3dd0b38fa3b308c14bfd909ebdf31811a8a3b9dd66948ead4a45df4b9ab58
  05f91af4b4200c337f6332d4a0f8e96538f804e2037415dd20054e60b4a7baa9
  205e1a987d607910cd243c090e20a465584e0558e6998e45334052206b64ffb3
  ce1f000665813e8e53c10b3c285874f250f3ae2fa68ac3b0474586033085408f
  19f753154197ca77fd4db2349c41f0f84c56599733bd2bf3c450da5e426d1020
  0092f62fc9527c024377d91fe9
tree_hash_after:
  994700a7ac4d1ecb9e71844456bd60809dc75f592f3ca4afa15084270ae428dc
resolution_index: 0x00000000
sender_membership_proof_after:
  000000040000000841bd0101203cce1a604767a200d6dedebe27fb9f1b417009
  f32d49274505b99dde6799d357207d118f039fa24cf95395e8d69d70a294a765
  32c66c305fe89abc36114242eed00001202815ebba746ff92411b00ca7c63288
  6a52a06b865a5632bb87f7cc0c291d694b0200011c00010002dada00036a6a00
  052a2a00070006000400087a7a0009000a04baba3a3a02baba0c00010002fe00
  ff007a7a5a5a03200e348f21953c75f2f76e96d4d5aae7d41e5d1298a26da122
  b97fc514baa820870d3a3a0a0b908d3ec43bd7906dcd40402bdbad74fd889074
  a2a7b7e3ac2acc88a0efc2dd5e9ba76d77ed6a7773234b4218449d1c957ba55a
  cadd013004c48a46b5a4f43dd1967da019338463aa7afd090102204a8b6445b2
  8e92dc81a7011df86666085c81ea477a02b2d2e2ea074fb96076272067516442
  c1258339c35f1addea0a954a9cbc17d436b2aca39956d897e5df386200010220
  253cd2d3c8d529f86d72d3230f3736592479fda020b82b8d4ad864e591beba37
  2055788e99113a3fa9d7479ff9d9e3d5159b7da53d84a9c4f9f5a041b81040d0
  9d00010220054e60b4a7baa9205e1a987d607910cd243c090e20a465584e0558
  e6998e45330000406320dfce501875a0a0aaf2337df8b01802379dcf1caf71f3
  5ba82c6073162670d08d2085d8f7ac31ce581d917a28a2ee09bdf3de05d3b712
  3d49fe979f86dc578b1e7d2049c3a626cee5a832083a4b502f022f43bbea96d8
  a2d6a7f666ebc021cbf3d20e
receiver_membership_proof_after:
  0000000000000008412d010120e4ad1fbca5bb4b520d8347b097ac1deecf95bc
  232608ae5fb360e93b06a87e42200f490bbc5ec4d0db3028e310484ff6d55458
  49842f3d0cf2840d9edb6894f64c00012074f89864f90bf1acb346c5caf48f11
  1149c9b7980cd0717abeb4e5da576a4e570200011c000100026a6a2a2a000300
  0500070006dada000400083a3a0009000a044a4adada026a6a0a00010002fe00
  0a0aff00032083f6b8c1fbb3464b1e71243ceaca960c00454669d1ad34cab37f
  140cadcab114074a4a04466a3e41404018008efbb0fd2fa00a0e3f829c78ad5d
  aac1ba57759bcd02e4d649db25a06d5238466c34228526dae97f91a6552665f1
  ba9dd476d5585665f86ff0223bbd710d0000010220054e60b4a7baa9205e1a98
  7d607910cd243c090e20a465584e0558e6998e45330000406320a90d4563c6a0
  ae0417ab3110f1ba68592833465954774201b0a69e8c457dc6ad20c0d2b83fa7
  6a6a182e97682d717acc9427d8e7e4dbaee5df157b72fa332732a520fd5f669d
  334ecf938b0d0d23e566dbe6b591143bed5678222f5dffc9e2b76165
receiver_path_state:
  -
    encryption_priv:
      3d5884f022a9574675878b07f45f8fb242b643a3fc12d6b213e07850cd7e4ce2
    node: 0x00000000
    path_secret:
      6b41b40b704c8352822ad18bf864fdd1b4e7814349e82afe9f6ad3dcd65940c0
  -
    encryption_priv:
      5487842769722ae26437e2fb20cf6a2b4cc888a968ed18c8d76620d3e369ed7c
    node: 0x00000007
    path_secret:
      e99894734dcd0b4492b28fb3a1acc803fe305c5a6c040877da7adfe1bfd1a01a
commit_secret: 166ea7efbd8ea235f3201af7cdc46526bf2937e227a70b76540fa94bd91890ba
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
update_path:
  203cce1a604767a200d6dedebe27fb9f1b417009f32d49274505b99dde6799d3
  5720171ea1a5a623810898c2b3bde08b015184637afdd1151094a20ac4b71df9
  6f6e0001208f2ddc42d16b933c60dbc3c4997b9767dd04bb8efa79c6451c96f1
  e4704658b50200011a4a4a00010002000300050007caca0006000400086a6a00
  09000a04dada9a9a022a2a0a4a4a00010002fe00ff0003206640670d4a847297
  1decc12c8a0a2c39ee0db7c9ce8dadafcd513873ce3a869611dada0e8fb9b19d
  93bd4777cff634b3e7f940405ca54184b8965ed8772b67e6d952f4a9f09cd3ea
  a3c533f2f1c730869e4afe488fdf5d79f4aba1dc622ef181c5677f25219a16c2
  cf60ee4528d7a80eaacc61064203204a8b6445b28e92dc81a7011df86666085c
  81ea477a02b2d2e2ea074fb9607627405220195c4cb1751c8d48ed8008655fe0
  e616254f289134d20de13c375ed02ac24f3b304bd8a6d0cb8e4df48bd58dcdee
  bc5f091f3cbe4ac61e1fe9fd3a1a3b25e4dcee869a4a344924bc6c1b2fa924a6
  95deb720253cd2d3c8d529f86d72d3230f3736592479fda020b82b8d4ad864e5
  91beba3740a4204e240606317e5316f127ab0421a0b082787328a37cbaa5f031
  3381a886f2d02a3085c276889b160f9979942d061dc81ea2910c12165c77a177
  c29593099f76dc74b9e7374f83bce1bd70b6f53d17d3ac502037f18126ba1841
  8335cfc97dafef35ae3fe3c8db164ac86d74d44d51227e772530bb7660536fd6
  bd5420332fa29907d4ed982f01dd7b1ff82523ab2ca75356d87af423eef34e60
  f826274541b72d30665220054e60b4a7baa9205e1a987d607910cd243c090e20
  a465584e0558e6998e453340a420d76f54753442b529974a59c8961f9531d260
  9ba3c47e3b832c2c26a1c2046e13300423b4cba28de967264261c41baee72ab0
  906439f3d97ebfbc241c4106e8a49649f827b97f619f7e07d017d1be76c6b920
  406c868040b089692ce237a5e37a94ebdb9c2494c670d63f0214e1bfd646c540
  3011c3f702cfd6f3e3150bfcda0622d02c63ba56ef8c01a05c69e3b8726125b2
  966a0ed7f6faf78886236eaf46feebe5a9
tree_hash_after:
  5a5288f0acb72603f72ab437744543de23debdb57fd571a567e7432efb9a1bff
resolution_index: 0x00000000
sender_membership_proof_after:
  000000000000000841bd0101203cce1a604767a200d6dedebe27fb9f1b417009
  f32d49274505b99dde6799d35720171ea1a5a623810898c2b3bde08b01518463
  7afdd1151094a20ac4b71df96f6e0001208f2ddc42d16b933c60dbc3c4997b97
  67dd04bb8efa79c6451c96f1e4704658b50200011a4a4a000100020003000500
  07caca0006000400086a6a0009000a04dada9a9a022a2a0a4a4a00010002fe00
  ff0003206640670d4a8472971decc12c8a0a2c39ee0db7c9ce8dadafcd513873
  ce3a869611dada0e8fb9b19d93bd4777cff634b3e7f940405ca54184b8965ed8
  772b67e6d952f4a9f09cd3eaa3c533f2f1c730869e4afe488fdf5d79f4aba1dc
  622ef181c5677f25219a16c2cf60ee4528d7a80eaacc61060102204a8b6445b2
  8e92dc81a7011df86666085c81ea477a02b2d2e2ea074fb960762720ba5c8746
  5b31566e3ab2f9b2b7de27aec182c62f1c722d0b12a572ae1455e8fd00010220
  253cd2d3c8d529f86d72d3230f3736592479fda020b82b8d4ad864e591beba37
  20d7770bdc319b16fc59af6d8149a91b124e75921db7b86f6308129a05eb3245
  d400010220054e60b4a7baa9205e1a987d607910cd243c090e20a465584e0558
  e6998e45330000406320362dc9b7d6b776bd49f2202b48f1552dda616a39732b
  e2cce6f1196d7c8a41a620981d5a8c1b10f759f94c6c068f51ce5863f12d29b6
  cd2d2533ef5966b2a93b312068deff53ba52391f08c31b82b86080722a139927
  4a5acb3ea0fa510ca83a8a8d
receiver_membership_proof_after:
  000000040000000841750101209c10cc0ec3fc1658e890bd498579a875098211
  8dee84969e3fece89d859fd32a20ee30c3b3ff1d10fb7a5d551ec22a604dbe26
  83d9ea959747480f0e668817fffc000120feff7eb14dcfa1ca5d199d2ff31a2a
  27465374dd7e4d01286d67d240cb8c409a0200011caaaa000100020003000500
  076a6a0006000400080009000ababa2a2a041a1acaca028a8a0a00010002fe00
  0a0aff000320e38c41e1c68f7ed69df493a8562d80dfc3823463b745b9384bea
  7187ff9e514807caca046b8df4d24040c141cd422d250479c46a5b054728aee7
  1f0182c52ad0136149aa1adeed52abe26b3637f2dbecec1dc7221e66aa1a3ecc
  d268e4b106949605edfd2218234d4c08000102209357ef216ef60d18dd74bb44
  23b47a10ef01bad713756c54011ec4818f06e02b206208dd378c8e494897ee9d
  18d21498531a0c8df1933ca874097307747de17fb00400000005010220054e60
  b4a7baa9205e1a987d607910cd243c090e20a465584e0558e6998e4533000040
  63200fa803fbedc3650cfb18b6bd87e66fc9e0004e703fcf714e70608eb28f14
  a8c7205d529bb5877721e98aa3cc576d48ebe93e940bb2ea89a1451eec1fad5e
  5b849c203aff10bb92294e2569c63ec24b9dc8212e2d8755a219e7c95ceacc7a
  fdec1cb2
receiver_path_state:
  -
    encryption_priv:
      cb39867f27c096e2122a161bf0ec66460d79b0ef45eb4fa0bd4b59385c6f6da2
    node: 0x00000008
    path_secret:
      dae594efa82228d6b0620d7fffae552987a9f1df51d6eda005e0056191ebfb28
  -
    encryption_priv:
      2f42e1db6153f72ceb53863591c1b4b038e1528cd9869f671fa6c8b01afbc994
    node: 0x0000000b
    path_secret:
      133b40377b8d1fc72c5079756a23d82fce024965405ce0ae3288cade9626f783
  -
    encryption_priv:
      0585944781374f947450f721741f58c3aaf81c613d92336e58227da18829a441
    node: 0x00000007
    path_secret:
      1f84214141acb58e53f6ad994a00a51f25c25d9cc9035eb57c7bc12087cbd531
commit_secret: 166ea7efbd8ea235f3201af7cdc46526bf2937e227a70b76540fa94bd91890ba
]]></sourcecode>
      </section>
      <section anchor="partial-message-syntax">
        <name>Partial Message Syntax</name>
        <t>These vectors exercise the TLS presentation syntax for the new Partial MLS
structures. For each case, we provide encoded instances of:</t>
        <ul spacing="normal">
          <li>
            <t><tt>CopathHash</tt></t>
          </li>
          <li>
            <t><tt>MembershipProof</tt></t>
          </li>
          <li>
            <t><tt>SenderAuthenticatedMessage&lt;Welcome&gt;</tt></t>
          </li>
          <li>
            <t><tt>SenderAuthenticatedMessage&lt;GroupInfo&gt;</tt></t>
          </li>
          <li>
            <t><tt>SenderAuthenticatedMessage&lt;PublicMessage&gt;</tt></t>
          </li>
          <li>
            <t><tt>SenderAuthenticatedMessage&lt;PrivateMessage&gt;</tt></t>
          </li>
          <li>
            <t><tt>AnnotatedWelcome</tt></t>
          </li>
          <li>
            <t><tt>AnnotatedCommit</tt></t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-message-syntax-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
copath_hash:
  209f1c43dd0988a69de12ae2d9d95846167685d501f23a3be2f25e0c28dc28c5
  eb
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
membership_proof:
  000000000000000440f201012064a2512b39ad7bdb8c7d0afe208cf617efeecc
  f0c3555ffc04b9198c71283f572069b9a1f249a540917dc99eee145c76d5751b
  68c141b192d5866f15cbad0cd70d00012085e096402f7b4d9dac66567adbbf02
  bd138989d40ade7b7446b410fe03ab32a4020001160001000200030005000700
  060004aaaa00080009000a04baba4a4a02baba0c00010002eaeafe00ff007a7a
  010000000000000000ffffffffffffffff06baba03eda60a4040f15c7c4801e7
  31a7ac0ac223710793196291428632de89458dbc20d38d4a6bacfaab948e041d
  951d44115bd889de7560032f9f00874f96ad4e67455cece3a10200004042209f
  1c43dd0988a69de12ae2d9d95846167685d501f23a3be2f25e0c28dc28c5eb20
  31bbfcf6f3ebcc33735c9049c7107ea29b709039b545c875865a63da5a937365
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
sender_authenticated_welcome:
  000140762058e5cd3e18f52bab22383d1689fce2adb02f7fcf0e477e53b118a7
  0ccc4a7ffa20704d804b3e81578d2b1f7d8c0168627d2e94e34ee5e5bdfa5425
  68e24196913b33a109f00b65a33fa89da774ead38ae94cc494afc70ad86e10dc
  df314504b3f2b654d6633645455464eb4556a31866713797fa4440fad0cb9901
  47ae620fae037c5429080d1503cec3e81a98beaf883d177c616dd55cfd8a8e4b
  16008dec94538f02c120e657570bb2816e97366038f525f6a5e9921353715bb5
  82272f06d2c64429e523032992e4f2a8d8d27679482dde5c50a24f85ed57558b
  f1b738de92df788370215585a1380ed8c8f95dfed734ff021190547f2d51ecf7
  b3ef4ec9c3c0537b60db47c893fb661c5b1c23d8d37fc94d7e55e26bbe4508a7
  a31508620ec41b97715eda35ad3205c811b747419feeb65e5d644139613307f8
  8ed3a0f899bdc7118926764f04d9530f5d639711272067c6b4bf39c51cf1149a
  2a05e2c54bd46cd584d75951b72f03457d5e72aa7513000000000000000440f2
  01012064a2512b39ad7bdb8c7d0afe208cf617efeeccf0c3555ffc04b9198c71
  283f572069b9a1f249a540917dc99eee145c76d5751b68c141b192d5866f15cb
  ad0cd70d00012085e096402f7b4d9dac66567adbbf02bd138989d40ade7b7446
  b410fe03ab32a4020001160001000200030005000700060004aaaa0008000900
  0a04baba4a4a02baba0c00010002eaeafe00ff007a7a010000000000000000ff
  ffffffffffffff06baba03eda60a4040f15c7c4801e731a7ac0ac22371079319
  6291428632de89458dbc20d38d4a6bacfaab948e041d951d44115bd889de7560
  032f9f00874f96ad4e67455cece3a10200004042209f1c43dd0988a69de12ae2
  d9d95846167685d501f23a3be2f25e0c28dc28c5eb2031bbfcf6f3ebcc33735c
  9049c7107ea29b709039b545c875865a63da5a937365
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
sender_authenticated_group_info:
  00010001207c7e9b2e3b6a9b4549a5ef18959665038ed1f1b24c3c8003d03d24
  081205170100000000000000022063b4f9c3710664d0fc52301e314d4bea7965
  e6f6f56aa4e21e0e4d24087f7f6e208d3570c404a1443e748f9b88c4ab941fd1
  e8b6aaac79f003770e88ad6bcd7eaf0030eaea09fd27f2252a54c9055a000421
  20b90f28610f9ac989424704726c3ddcced46940ccbbd54d9870962ec4b7f43e
  6220f1b477e67b97bbe5d25fa52db5792258b8fa619fdadd487698f1409871c3
  b1a9000000004040ec03cab738999361a558979dbd832d7baff1c154216d2ad8
  810897215e4c5f7ad277274a0cef81ecc02e3d6ead0448cbdb65a9aa54eb8d20
  d9b114aa653f9000000000000000000440f201012064a2512b39ad7bdb8c7d0a
  fe208cf617efeeccf0c3555ffc04b9198c71283f572069b9a1f249a540917dc9
  9eee145c76d5751b68c141b192d5866f15cbad0cd70d00012085e096402f7b4d
  9dac66567adbbf02bd138989d40ade7b7446b410fe03ab32a402000116000100
  0200030005000700060004aaaa00080009000a04baba4a4a02baba0c00010002
  eaeafe00ff007a7a010000000000000000ffffffffffffffff06baba03eda60a
  4040f15c7c4801e731a7ac0ac223710793196291428632de89458dbc20d38d4a
  6bacfaab948e041d951d44115bd889de7560032f9f00874f96ad4e67455cece3
  a10200004042209f1c43dd0988a69de12ae2d9d95846167685d501f23a3be2f2
  5e0c28dc28c5eb2031bbfcf6f3ebcc33735c9049c7107ea29b709039b545c875
  865a63da5a937365
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
sender_authenticated_public_message:
  207c7e9b2e3b6a9b4549a5ef18959665038ed1f1b24c3c8003d03d2408120517
  010000000000000002010000000000020001000100012048af21491104bbdc4d
  a4f2f622d4df5d6e867af73c4448ddc483d27c5488623f209ea1a3bf83f48f48
  b61ed0ab9254e12b295998b588b6fc4d89eb6efcbedc594620bb7efc012e03ba
  1bbc5a3b8eeb8ae8ebedc0f7d638cb110227d619d95cafcf2900012040693f35
  f79d8affae7fabb5878bd94123ccb1c8a356b2bfdee4d823d0ab686602000116
  0001000200030005000700060004000800091a1a000a046a6a3a3a02dada0cca
  ca00010002fe00babaff00010000000000000000ffffffffffffffff076a6a04
  c7ad4a2b4040c882e57614da1acda9c5b8783b6a2454ec2ade0d02edaf81d581
  2c4022bfe3b6aed49e8f1519b780e6fbab187637f435c1945c6657ace643fd21
  f4a1bf71330405aaaa024c224040be16a33d0aa8c946ecdbef19ef96b7ab4714
  52831cf222f0f8a5614eddcf84311dfd1e76b0680e0693f6e585abcaff96a0c7
  1752b5fb514c05111727f619080e40404997cd96620a5652feed5915682db385
  86b5f8737431f7813baa14aad13d477d62ec059a5d3d9aee5921ff7abcefb66f
  a9c7ff6e1346c0246b00fcfa39ddef062009714aa426ec5a850a7f6c7d057d22
  7a165f6e9f0bed45d694913036401d8ce6000000000000000440f201012064a2
  512b39ad7bdb8c7d0afe208cf617efeeccf0c3555ffc04b9198c71283f572069
  b9a1f249a540917dc99eee145c76d5751b68c141b192d5866f15cbad0cd70d00
  012085e096402f7b4d9dac66567adbbf02bd138989d40ade7b7446b410fe03ab
  32a4020001160001000200030005000700060004aaaa00080009000a04baba4a
  4a02baba0c00010002eaeafe00ff007a7a010000000000000000ffffffffffff
  ffff06baba03eda60a4040f15c7c4801e731a7ac0ac223710793196291428632
  de89458dbc20d38d4a6bacfaab948e041d951d44115bd889de7560032f9f0087
  4f96ad4e67455cece3a10200004042209f1c43dd0988a69de12ae2d9d9584616
  7685d501f23a3be2f25e0c28dc28c5eb2031bbfcf6f3ebcc33735c9049c7107e
  a29b709039b545c875865a63da5a937365
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
sender_authenticated_private_message:
  207c7e9b2e3b6a9b4549a5ef18959665038ed1f1b24c3c8003d03d2408120517
  01000000000000000201001ce7e4eb2f58bb082f1793af643a4e2853aa282aa8
  3443e3edc9c2121e407393d944d103a5c23e4f86f2513c6096948532817b4878
  fa554e3b57503047caf6c2f23022083286468a7bc86d9c544c7402c02cecef6e
  f32688ac8d13581932bdc2a1f068fbef33a88f45c95ff8614495d98e64081e30
  2e459af3d5d8c4e3e5b56ecb237cadf68710ab6635013086ee3d50d0de000000
  010000000440f9010120032c58f878af02746e47d6a28f9221380a7c2c9d3a4d
  034b987d16fc46a4a87e2003aab15da87002cf647bc963d0448374b29849a35e
  4778ba6bc6c61c9e5c15ae000120d9e342b1794d9dff31be57aa8319937760b5
  ac421590264a20ba4c78d81bf4b80200011600012a2a00020003000500070006
  000400080009000a04eaea4a4a028a8a0c00010002fe00eaeaff008a8a010000
  000000000000ffffffffffffffff0deaea0a0ec5a5cf5f7c13525ed64040212a
  8495b44eee0b93e7fe45c5400718864a62b25fe480fbc1bd565e3fdd4398cee9
  42780caf63c74d62d74711d268353e562d66862b90f151896808d14cbb030000
  404220f7c34d339a04a639dc296056c5c36c2160f2cc2bc0803252b60ecd3002
  925dc82031bbfcf6f3ebcc33735c9049c7107ea29b709039b545c875865a63da
  5a937365
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
annotated_welcome:
  000140762058e5cd3e18f52bab22383d1689fce2adb02f7fcf0e477e53b118a7
  0ccc4a7ffa20704d804b3e81578d2b1f7d8c0168627d2e94e34ee5e5bdfa5425
  68e24196913b33a109f00b65a33fa89da774ead38ae94cc494afc70ad86e10dc
  df314504b3f2b654d6633645455464eb4556a31866713797fa4440fad0cb9901
  47ae620fae037c5429080d1503cec3e81a98beaf883d177c616dd55cfd8a8e4b
  16008dec94538f02c120e657570bb2816e97366038f525f6a5e9921353715bb5
  82272f06d2c64429e523032992e4f2a8d8d27679482dde5c50a24f85ed57558b
  f1b738de92df788370215585a1380ed8c8f95dfed734ff021190547f2d51ecf7
  b3ef4ec9c3c0537b60db47c893fb661c5b1c23d8d37fc94d7e55e26bbe4508a7
  a31508620ec41b97715eda35ad3205c811b747419feeb65e5d644139613307f8
  8ed3a0f899bdc7118926764f04d9530f5d639711272067c6b4bf39c51cf1149a
  2a05e2c54bd46cd584d75951b72f03457d5e72aa7513000000000000000440f2
  01012064a2512b39ad7bdb8c7d0afe208cf617efeeccf0c3555ffc04b9198c71
  283f572069b9a1f249a540917dc99eee145c76d5751b68c141b192d5866f15cb
  ad0cd70d00012085e096402f7b4d9dac66567adbbf02bd138989d40ade7b7446
  b410fe03ab32a4020001160001000200030005000700060004aaaa0008000900
  0a04baba4a4a02baba0c00010002eaeafe00ff007a7a010000000000000000ff
  ffffffffffffff06baba03eda60a4040f15c7c4801e731a7ac0ac22371079319
  6291428632de89458dbc20d38d4a6bacfaab948e041d951d44115bd889de7560
  032f9f00874f96ad4e67455cece3a10200004042209f1c43dd0988a69de12ae2
  d9d95846167685d501f23a3be2f25e0c28dc28c5eb2031bbfcf6f3ebcc33735c
  9049c7107ea29b709039b545c875865a63da5a937365000000020000000440f5
  010120bb084105e658fdc5c68f6582d8530a8f85f3afa4f2cd74deeaa83cfb1f
  13a82920a49d7a47ae396ecd25aff26a0564fc612b2a4833dce23d21d3b2349c
  2df753900001201d220eacd2dfb7f74f5433cbe03c65d88505c00897756936b2
  f17ca0b111b4e10200011a00018a8aaaaacaca00020003000500070006000400
  080009000a04dada8a8a02dada0aaaaa00010002fe00ff000100000000000000
  00ffffffffffffffff07dada04b8691d0b4040ab38a42005e0d82eb36f64bb23
  53719ddb63fe2b81a845efd470c56f7e33ca92690379e0e7b4705b575a4b4760
  bce850c237deac402d6781029df93835deb7090000404220caf009ad02a57a48
  feb8d64d055509e9a81edba8d325e442cfe75e006a520006208d7c8373e1f22a
  aa107b62358cd2f11e58568afc187ac1b6e58b10d651a96cc1
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
annotated_commit:
  00010001207c7e9b2e3b6a9b4549a5ef18959665038ed1f1b24c3c8003d03d24
  081205170100000000000000020100000000000300012080788addc360000254
  1a0690b8f0b37d50240bc55d01b91919ad74f8a62af1542069b9a1f249a54091
  7dc99eee145c76d5751b68c141b192d5866f15cbad0cd70d00012085e096402f
  7b4d9dac66567adbbf02bd138989d40ade7b7446b410fe03ab32a40200011600
  01000200030005000700060004aaaa00080009000a04baba4a4a02baba0c0001
  0002eaeafe00ff007a7a0320acf2364c319d5c0065cee01e0fcbcd73a1da0639
  f3075e5c6ac153009efd434c06baba03eda60a40402b25298dcbdc1f0c8079d4
  5351aec48c0aa459b9c7b49bf20bc7ec63acc143d508cef375af699f6ff6fcf3
  1f63779dfa4e166eed1cae44ca67c0ce05964fec0240ea203008b68d4dde6fff
  5038b36d7548c1a68ccba2b77cc3cf93cac80177d5d56a374052208981dc1253
  57209b2997a61fbf44b78b14df4e2d4fd718ecdd17b8feeae71379304c058fef
  deb05c95dc59c754edddddf37dd33ad6fc7acd60660dcc42fbc619c728d578eb
  f7603656de13541fbf4969fe2001d032164a7bde45ff05ffb49ae9bbbb79c2ee
  54dc6f7946257a9a5a4cf246364052207c19b20d43d26bd17ff1c2b716d0204a
  75522630fa31b0bb76fb15506b07b15930cc55590c380a0d6fb56e92d826ebca
  4815848ebf688b5dfa02f0313e2a5699c3484ac2b98e3cd731d4aba986570d16
  334040285f52376ecd46ff1ce3303b05e940367a2819b92d41a0e1b47a93a9db
  78f119e3dea5d61cc0387841c47b221c76b2d1d658e2c53fd73c8d02abe77aa7
  44e20d209e7994867f101cc05678b5b58de43991017010cf7a57fc50cbbe6488
  e8144f1d20b075631457bb8edd1341cd4a81e5daa4ca8c32ce63c41c9c788286
  21c140541001000000000000000440f201012064a2512b39ad7bdb8c7d0afe20
  8cf617efeeccf0c3555ffc04b9198c71283f572069b9a1f249a540917dc99eee
  145c76d5751b68c141b192d5866f15cbad0cd70d00012085e096402f7b4d9dac
  66567adbbf02bd138989d40ade7b7446b410fe03ab32a4020001160001000200
  030005000700060004aaaa00080009000a04baba4a4a02baba0c00010002eaea
  fe00ff007a7a010000000000000000ffffffffffffffff06baba03eda60a4040
  f15c7c4801e731a7ac0ac223710793196291428632de89458dbc20d38d4a6bac
  faab948e041d951d44115bd889de7560032f9f00874f96ad4e67455cece3a102
  00004042209f1c43dd0988a69de12ae2d9d95846167685d501f23a3be2f25e0c
  28dc28c5eb2031bbfcf6f3ebcc33735c9049c7107ea29b709039b545c875865a
  63da5a93736520669ab6fd05f86e4932cfe025627e37c35a5406d59dd6b6edb2
  7dd33c438b53b401000000000000000000000004416b01012080788addc36000
  02541a0690b8f0b37d50240bc55d01b91919ad74f8a62af1542069b9a1f249a5
  40917dc99eee145c76d5751b68c141b192d5866f15cbad0cd70d00012085e096
  402f7b4d9dac66567adbbf02bd138989d40ade7b7446b410fe03ab32a4020001
  160001000200030005000700060004aaaa00080009000a04baba4a4a02baba0c
  00010002eaeafe00ff007a7a0320acf2364c319d5c0065cee01e0fcbcd73a1da
  0639f3075e5c6ac153009efd434c06baba03eda60a40402b25298dcbdc1f0c80
  79d45351aec48c0aa459b9c7b49bf20bc7ec63acc143d508cef375af699f6ff6
  fcf31f63779dfa4e166eed1cae44ca67c0ce05964fec020102203008b68d4dde
  6fff5038b36d7548c1a68ccba2b77cc3cf93cac80177d5d56a3720cf7195ab3c
  09022169186bf7e44aa26eabcf1f422dcb384f2f14828807862e2b0001022001
  d032164a7bde45ff05ffb49ae9bbbb79c2ee54dc6f7946257a9a5a4cf2463600
  004042209f1c43dd0988a69de12ae2d9d95846167685d501f23a3be2f25e0c28
  dc28c5eb2031bbfcf6f3ebcc33735c9049c7107ea29b709039b545c875865a63
  da5a93736500000002000000044119010120bb084105e658fdc5c68f6582d853
  0a8f85f3afa4f2cd74deeaa83cfb1f13a82920a49d7a47ae396ecd25aff26a05
  64fc612b2a4833dce23d21d3b2349c2df753900001201d220eacd2dfb7f74f54
  33cbe03c65d88505c00897756936b2f17ca0b111b4e10200011a00018a8aaaaa
  caca00020003000500070006000400080009000a04dada8a8a02dada0aaaaa00
  010002fe00ff00010000000000000000ffffffffffffffff07dada04b8691d0b
  4040ab38a42005e0d82eb36f64bb2353719ddb63fe2b81a845efd470c56f7e33
  ca92690379e0e7b4705b575a4b4760bce850c237deac402d6781029df93835de
  b7090001022001d032164a7bde45ff05ffb49ae9bbbb79c2ee54dc6f7946257a
  9a5a4cf246360000404220caf009ad02a57a48feb8d64d055509e9a81edba8d3
  25e442cfe75e006a52000620b373fea9a31778be4dba6db03e38630c9e61e7a8
  98f42cc5cc7be6ee87451ef5
]]></sourcecode>
      </section>
      <section anchor="sender-authenticated-messages-1">
        <name>Sender-Authenticated Messages</name>
        <t>These vectors exercise the use of membership proofs to authenticate signed MLS
messages. For each case, we provide:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cipher_suite</tt>: The MLS ciphersuite.</t>
          </li>
          <li>
            <t><tt>message_type</tt>: The type of sender-authenticated message.</t>
          </li>
          <li>
            <t><tt>sender_authenticated_message</tt>: The encoded
<tt>SenderAuthenticatedMessage&lt;T&gt;</tt>.</t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-sender-authenticated-messages-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
message_type: "PublicMessageProposal"
sender_authenticated_message:
  20fe79a17d828b2f3eff2bd8b080c6c5fd27608223c990e663b0adeba3552a6d
  2a00000000000000020100000000000200010001000120309c7e25399293e95a
  8fb9cb2aa4c4802eddf31d18beacdd4a47353852f55c2b201400ee26cfbfc469
  cbac8fa119646f34713111adc7b08c787d21a069d9fcf603208a249f4b84c202
  2b22d92980a55598e3a1d8ab3795d2746446e3454b4b678b2b0001206a83e13a
  f79e11e0ba9dca3f1ecc1b115a18e205f89ee5df50948997fa9bc1b40200011a
  aaaa000100020003000500076a6a000600048a8a00080009000a041a1ababa02
  1a1a0a00010002fe00ff00caca010000000000000000ffffffffffffffff0c1a
  1a097a957520fa6ac3d1b64040524a42ec161d19a988d8045a1de673d3ead341
  11cd410ba04ff732fd56687ed6a7c55f2ba0debba59d365347498ab2099bd833
  e881aaca8d5fc32fe3f9d371070d2a2a0aa9372607772f7b3a7a0b40401ed23c
  72d2a31f5bdff39cf1617fb0295390484fe218b5bc3985b3cda312848dca5d2f
  a9639cad6c816b1c2844a0f68313edc33e77f43ca53d158066ab4b8a0a404042
  b8d7b64aa300d552736d03cb0f7007f9e9802b931b5bca76eab3488124cb2fcf
  32e4c9de79e1a168ecec467e5e9a9b1130147a8a187b5d55c8e98725e7010820
  e91d4d9ab60ff242a34e56f829e3e7f8db3df35db6071be490727d583ace1a1f
  00000000000000044101010120fcd9b75368fe537c0b250253545fa994240a27
  a2e30dd21e9032891b5cd0d53e202a47d26b3625a55a8ebde2ca5c85b195a98d
  e6d6179ee1c015bb2f86ab420314000120eede2b9dc21d5a8927b1c00d0fa88f
  99d2d66ec30c601c72704b53700833979c0200011800012a2a00020003000500
  0700065a5a000400080009000a045a5aeaea026a6a0c000100025a5afe00ff00
  aaaa010000000000000000ffffffffffffffff135a5a106dc76a6abd4b645185
  9fd82cabab2123404079a68373d838e6819ea93334c9c82bfb4387242c99f50a
  82c0c6d7df487ada3650d36786440733b3bd877e1f742a9abebcba4b1cd97117
  4a48ff24e75b948b0100004042205c559849bce6431f9db48e0acc0cdd278898
  f83a3827b02b7dea4e157b6cf9f520f8db898993af1dde0a3f5410aca1d76b99
  dd44542586782e0d47a801fc3db230
]]></sourcecode>
        <sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
message_type: "PublicMessageCommit"
sender_authenticated_message:
  20fe79a17d828b2f3eff2bd8b080c6c5fd27608223c990e663b0adeba3552a6d
  2a0000000000000002010000000000030001206251d9705904845b0aa52ba71b
  a071c0313e4727cfb4a56916c654e3b4fcef6c202a47d26b3625a55a8ebde2ca
  5c85b195a98de6d6179ee1c015bb2f86ab420314000120eede2b9dc21d5a8927
  b1c00d0fa88f99d2d66ec30c601c72704b53700833979c020001160001000200
  03000500070006000400089a9a0009000a045a5acaca028a8a0c3a3aeaea0001
  0002fe00ff0003202a6a0c4c994902aab90352efc1acab1abaaa2a549c51aa3b
  e200876786778ede0fcaca0cf3bd75cf653d73591f0d43a44040cc07dba4b5fa
  8be01668326cddc9fcd168572ae87582145bde480a83e0bed418cb6eed1917c9
  fe317ff9b706e1e40af3d3bc9a1b8b939ed9b3b13f7d1ef2ea0e40ea20d9d847
  0fb1daebc4df692532d746b6c664777daabf4ef98b5b40bb6bc1d96472405220
  07fcb2e5fed1287d40573c02150029ecb74ad6bbb31b3e6ac9b7b8379de56d7c
  3083db086cb982bd0a7e85b58cf521da1e0c19d75659bfebd11d1073b220991b
  453d7696e0e8f7a7239bbd074dbf74063620a80e8bd7bbdfa00b97f8d3e44d52
  d2b598580ac67b3a265971b7724085a0710040522024b3385cc44d1996e06ba4
  4806f36f886dadc325ed53a563222e523b2d1ecd73304b85072ba3f4e0f6b699
  27821a2f875aa86a833bb598aa64b206c011d7c8dfa3c877a7de5e587f8fe553
  2f81d157cf4440406e2eaf5581c15ab98d27f4a37290e3b0b7095eec68cf6d5f
  ebaa9021ec7613afdf42d04507eb3323f6c7e1fe3f69f07714af5d3069542820
  3975757d22eaf70a200ca17a28db1ebb20479ac24dade6a17a598f8379ebcbba
  a939272bd80dc5ff18203f0f65d78b5d82f9dc8648457e752fb23dcad5fc4502
  8a31e7ddcf9884c6c194000000000000000440fb010120fcd9b75368fe537c0b
  250253545fa994240a27a2e30dd21e9032891b5cd0d53e202a47d26b3625a55a
  8ebde2ca5c85b195a98de6d6179ee1c015bb2f86ab420314000120eede2b9dc2
  1d5a8927b1c00d0fa88f99d2d66ec30c601c72704b53700833979c0200011600
  0100020003000500070006000400089a9a0009000a045a5acaca028a8a0c3a3a
  eaea00010002fe00ff00010000000000000000ffffffffffffffff0fcaca0cf3
  bd75cf653d73591f0d43a4404054704c131d68f29779db771ccdce5f9fd557a7
  506ff7b1dc6fd6e4486b4d8bd666a4ddf74bc749d99f84862ca22d7b27f648ac
  dcfe3be22ba98bb9b8ad849f060000404220711423a63ba695cb333836e8eb1e
  da2a17c64efaff67e08c16b4f0f4cce12018209337438208918a6ddf7306b65d
  33718f891d8c9b433eeb544e5dc4ccbde2c23c
]]></sourcecode>
      </section>
      <section anchor="annotated-welcomes">
        <name>Annotated Welcomes</name>
        <t>These vectors exercise joining a group as a partial client using an
<tt>AnnotatedWelcome</tt>. For each case, we provide:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cipher_suite</tt>: The MLS ciphersuite.</t>
          </li>
          <li>
            <t><tt>external_psks</tt>: The external PSKs used to decrypt the Welcome, if any.</t>
          </li>
          <li>
            <t><tt>key_package</tt>: The joining client's KeyPackage.</t>
          </li>
          <li>
            <t><tt>signature_priv</tt>, <tt>encryption_priv</tt>, and <tt>init_priv</tt>: The joining client's
private keys needed to process the Welcome.</t>
          </li>
          <li>
            <t><tt>annotated_welcome</tt>: The encoded <tt>AnnotatedWelcome</tt>.</t>
          </li>
          <li>
            <t><tt>joiner_leaf_index</tt>: The joining client's leaf index.</t>
          </li>
          <li>
            <t><tt>epoch_authenticator</tt>: The epoch authenticator derived by the partial client.</t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-annotated-welcome-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
key_package:
  000100050001000120afba03cade48049231ba968c40cbb84b8083bf648c8eae
  5b60cf085005e947262069c5ca9ffe9dc396483edb69b1272d268fccd9ea9bbe
  e7fddd97c4370d26202d20a9f89b5a38f9c2a0be1f41fac893e2073c138d1d96
  8dafe71f04cee5019e3064000120cbc2f7b29a6e6443ea3b0d379a9c3358856c
  62d244083bb9d24ce58e6d8416b8020001160001000200030005000700060004
  000800095a5a000a04caca5a5a02caca0a00010002fe00ff005a5a0100000000
  00000000ffffffffffffffff07caca041a702e1140404b16d6959680243ed870
  ec5b052369a4bb90420f0243cb87810d699e23a5060ca56d78a366c29aadc9fc
  c41bbf65a85e2caf490403aefb670bf692f0965b1d0d10aaaa0db53adab45a8a
  4ee450c110cc744040a7758be0dae015090ff5a072b08ef30b472b57bfdad50d
  e373fa6eae857b451e19dbc045bced3ca47012ca50eba32292edded7b52d8b7c
  0f1c8cbe070783470b
signature_priv:
  118e562858f41a3ae69774c2470055c2598b3e251a237f57a8af90447ecde7e9
encryption_priv:
  ec7d424df7c16b8cd490fa98496ff5ebdb488544bd2c1795fcb9f50f39eca9da
init_priv: e3db009c0aed0c38a17147cb3c4e18319d2e59a8d155f9a3e700cfba892db24d
external_psks: []
annotated_welcome:
  0001407620b19d4b94dedb07d00a694fde115fe7a321623ba11d3ad5ab6f34b8
  f06b642f602037830d9198a92fbbab54445ab4ff9199a5b28969645c901c3668
  e6333a11db1333f50e5cc276f66b816cd6c5edd11d5e18b1fa4ff9c15d29631a
  e51fe903894f05028d4d438e7837001fe0c7807e27b49135b78a40fa7d9ef820
  c6cd25be5858b212742fe433d39426777364a0c63cbd8ea3624c8b8878d2ccc2
  5321eaf87e145657dae27ba18ac72be52a222c35ff26d1fcf214210440b68453
  e20db0c846e7fa10b12f6a922a097d4b568952ae8c8b8af70eb5f5eb71df1869
  5d70f439c80d79bba9097eabe822b820a09691893994acb97a3dcc38245a90b1
  a15957823162e1399416dbb8a9fc4e8bb5e522ab524c2066aebc3ecd6923b645
  0d78806d173073751e004c457498e681c4720f3a772e4256f7a6182ba5de217f
  bad4735358fe4282832dbb7da93dbddaedaa97091a48479d7b4f35a748384a83
  74f5e8e7fc6e3faa00b2aa30b9c0e650a131218939f9000000000000000440ed
  010120dbb1d9404971b5bd6490eab26921fa1a7727aa391fbde2acf522eaa7f0
  cd362020853f9fe1c5479a2b24f96f716443437391d4d92ca8e749c9d2bc57fe
  5e44961f00012039d868b71f650c674a2deca847e816ab42c965343890250223
  06a0db30cb41f40200011600010002000300050007000600043a3a0008000900
  0a045a5a4a4a02baba0a4a4a00010002fe00ff00010000000000000000ffffff
  ffffffffff034a4a004040badead157f507ab974920f8e6ddca82109a2763c1a
  37e5671bc239fccf5d423125d6ccdde2799d6a3b4f482562cf0d04a807a21a4c
  f8177c21fcf0f0abce7d020000404220ea58558304edb88e8f396f3b28dc306f
  9c007471f968bf8bd6611ab381e7eab5207c668881e92bb6e98a8709a042111a
  5f452632b0d9680372964ad38f1d406e5b000000020000000440f101012069c5
  ca9ffe9dc396483edb69b1272d268fccd9ea9bbee7fddd97c4370d26202d20a9
  f89b5a38f9c2a0be1f41fac893e2073c138d1d968dafe71f04cee5019e306400
  0120cbc2f7b29a6e6443ea3b0d379a9c3358856c62d244083bb9d24ce58e6d84
  16b8020001160001000200030005000700060004000800095a5a000a04caca5a
  5a02caca0a00010002fe00ff005a5a010000000000000000ffffffffffffffff
  07caca041a702e1140404b16d6959680243ed870ec5b052369a4bb90420f0243
  cb87810d699e23a5060ca56d78a366c29aadc9fcc41bbf65a85e2caf490403ae
  fb670bf692f0965b1d0d0000404220caf009ad02a57a48feb8d64d055509e9a8
  1edba8d325e442cfe75e006a52000620c4aa8eac612c4528d4fd084bb8817052
  1e654d5f039b7189480f7ee3040507d4
joiner_leaf_index: 0x00000002
epoch_authenticator:
  6dd7b6ec4e3dcec3281b34001f81efed6bced01f853cd4e5bb7e52e112f347db
]]></sourcecode>
      </section>
      <section anchor="annotated-commits">
        <name>Annotated Commits</name>
        <t>These vectors exercise processing commits as a partial client using an
<tt>AnnotatedCommit</tt>. For each case, we provide:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cipher_suite</tt>: The MLS ciphersuite.</t>
          </li>
          <li>
            <t><tt>state_before</tt>: The partial client's state before processing the commit.</t>
          </li>
          <li>
            <t><tt>proposals</tt>: Any proposals referenced by the commit.</t>
          </li>
          <li>
            <t><tt>annotated_commit</tt>: The encoded <tt>AnnotatedCommit</tt>.</t>
          </li>
          <li>
            <t><tt>tree_hash_after</tt>: The tree hash after the commit is applied.</t>
          </li>
          <li>
            <t><tt>commit_secret</tt>: The commit secret computed while processing the commit.</t>
          </li>
          <li>
            <t><tt>epoch_authenticator_after</tt>: The epoch authenticator for the next epoch.</t>
          </li>
          <li>
            <t><tt>state_after</tt>: The partial client's state after processing the commit.</t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-annotated-commit-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
state_before:
  confirmed_transcript_hash:
    821ed26b3cf58141dc3b72b111971c3bb0a0ae3c9d12393c693738b580f1cda5
  direct_path_secrets: []
  encryption_secret:
    5ce258a673dde89a50401ff30fcef15ba9b595c33c80e7bec39789a62966217c
  epoch: 0x0000000000000002
  group_id: e3ca77d4487c7eaa03c2644ad271df588ee277b4ba489cbd1ebe57ea337a0c44
  init_secret: bee4f048eb68d6bc2a9428924c2cedf23dcb572f3b0820842d2c4689bf64482f
  interim_transcript_hash:
    bb5cb17c25dbad51292a2490c948e5434bb0e553de7a0c667dadcf8ed1b71860
  membership_key:
    135a9227dd16eb9f0e8fa98d01d910b9f497a1022c9996a0d93404bb2d3d928d
  receiver_leaf_index: 0x00000002
  sender_data_secret:
    b811cc5f5d3d4ee2effc434d0174b75a8fdfc3a2b926a2381dc1e170b3ca8169
  tree_hash: f96b46bc290fd275cc22bbfb2ef62ae10f6c04c0689dcd9bc1fb6de821e820c0
proposals: []
annotated_commit:
  0001000120e3ca77d4487c7eaa03c2644ad271df588ee277b4ba489cbd1ebe57
  ea337a0c440000000000000002010000000000030001201d76905027cef874e4
  f933f1ad5b29fa59a12acc41bb87977e55c5231f88660120ab729634d3e88256
  626dcce845a8b7cf4b7493d3edd328549f94148415538797000120ca0a604d9d
  b20c7611d4f302753db8b98509708e87f7658135d177e9649e97fa0200011c00
  010002eaea000300050007caca00060004000800096a6a7a7a000a02caca021a
  1a0c0001aaaa00024a4afe00ff0003202ef022d23470a8e0255d86e8d079ea86
  1c8612560eed0acf6f4a2445a9ab989908caca0509afc08cc440403fdfe52dc6
  8fe8d54d6ebd3d79fc02624ba38ea25b79811761728ca0961969f33046aec24a
  751c4c1590975b24dc83668e9d171bda6feac5eab53925e452df0440ea20ae87
  fc74bdf7e50b5d2ebb0a084ac78f8c9b7e4aace51a2321643814cc83bb3d4052
  204384562de0851e0fbbfa998931fa3d982bcf0d2ab28415afc2b73d9db9bc9b
  7d3083b6b258a74d67130a28d0d00b8c6d97b3c7eda0c20479a4e8764bc28204
  ff049ac561c071610dc9122bc002a550de26202fec807d86e4df88b9d91957e3
  522df451d5a4cb2bbae1d46ccb447087961417405220314d566ad22c44f803d1
  0e2056ee280558a56bd8a3555fc84905cac8bb6bfd79301221c8452f5b0f8722
  721ef9732f05f78bdeae3bb8d68c715700f22be4091a5e25eb91accb3f4a80b9
  2399044ddae45840408368c886434f1c1ec68b41d1880e25d339f3ebceaac534
  46383005ec9d2882595050a6028d5e7f875ed6fac7c6b63ef623ef9c62d35c57
  83500d3e7d5eb9c80420511c80dd4348daa10bd38c473acbc18ac56fe159aa2f
  94f02344b5b03bd8e5f420eb178abbd7da0c216f6b53ec42a8ffab241576b8fe
  2a4fc9fd97592488988a8f01000000000000000440f801012063c37d0b84049d
  52defec2e4abde40bad3c9c4c24b4ce1fc3f230c8064f8fc5420ab729634d3e8
  8256626dcce845a8b7cf4b7493d3edd328549f94148415538797000120ca0a60
  4d9db20c7611d4f302753db8b98509708e87f7658135d177e9649e97fa020001
  1c00010002eaea000300050007caca00060004000800096a6a7a7a000a02caca
  021a1a0c0001aaaa00024a4afe00ff00010000000000000000ffffffffffffff
  ff08caca0509afc08cc44040e02b8971e45107c5255a7247c786402f285f3fa7
  1d21af1da37b9f7e2a4dce2c0325c3a688681a3875590df380f5b2812786d9cc
  0f17f34489b6c10572f1d00e0000404220b990565226fb7edd02c7f845467862
  8c2b7f2bb2d96a742d07a2f5a0738b6bef204142c73a864fda6cd1df893a39a3
  012d911aac84aec5c74af4be8419afb373f5201bde7445375a0e521aaac260c6
  87441f246c54c5d820b0c3a9b901f7555e773f01000000000000000000000004
  41710101201d76905027cef874e4f933f1ad5b29fa59a12acc41bb87977e55c5
  231f88660120ab729634d3e88256626dcce845a8b7cf4b7493d3edd328549f94
  148415538797000120ca0a604d9db20c7611d4f302753db8b98509708e87f765
  8135d177e9649e97fa0200011c00010002eaea000300050007caca0006000400
  0800096a6a7a7a000a02caca021a1a0c0001aaaa00024a4afe00ff0003202ef0
  22d23470a8e0255d86e8d079ea861c8612560eed0acf6f4a2445a9ab989908ca
  ca0509afc08cc440403fdfe52dc68fe8d54d6ebd3d79fc02624ba38ea25b7981
  1761728ca0961969f33046aec24a751c4c1590975b24dc83668e9d171bda6fea
  c5eab53925e452df04010220ae87fc74bdf7e50b5d2ebb0a084ac78f8c9b7e4a
  ace51a2321643814cc83bb3d201185e5abfa5e37c22f93912c8cb4149837f328
  1ffa980891df4b3c59c393d219000102202fec807d86e4df88b9d91957e3522d
  f451d5a4cb2bbae1d46ccb4470879614170000404220b990565226fb7edd02c7
  f8454678628c2b7f2bb2d96a742d07a2f5a0738b6bef204142c73a864fda6cd1
  df893a39a3012d911aac84aec5c74af4be8419afb373f5000000020000000441
  1401012098460b770a443bd6120967e2774c3c2a59c94d6e58bc81644e7bc05d
  f9a1360120d7b60c76cb013ecdff92ef08ef21f81e449a71971986d32b9f9f74
  b106481c1f00012078d777a3a789d2ae1c7a242cf36acf119fa15fdee7c09ece
  39a26a19faf4849a02000116000100020003000500074a4a0006000400080009
  000a04dada7a7a026a6a0a00010002fe00ff003a3a010000000000000000ffff
  ffffffffffff06dada036a482e4040b0eb0b93c18de78a0e7d424c563de186c8
  39a5f23739cf1308d96c942a88a9077d21df2c2f85a9bbc46be586b8a5012458
  a996186943fa7ca3c19ee15696bb03000102202fec807d86e4df88b9d91957e3
  522df451d5a4cb2bbae1d46ccb4470879614170000404220caf009ad02a57a48
  feb8d64d055509e9a81edba8d325e442cfe75e006a520006204b805219410102
  9dd4123cb7859f236edb375a68c94750d0ce665d552f4e6244
tree_hash_after:
  1bde7445375a0e521aaac260c687441f246c54c5d820b0c3a9b901f7555e773f
commit_secret: c5ebf7b193c389b914fc9df28c84b845ec134e65a4cc8eae3c47ba984e8dca92
epoch_authenticator_after:
  e194515ecf0193e28f8c56c5865608a211e8f4ff07c7cc298d5c50f2a39e6aca
state_after:
  confirmed_transcript_hash:
    688b7ef507501bfea2dc3ccf71497650e54c7b47e01fd5ad0d94960c073cd9eb
  direct_path_secrets:
    -
      encryption_priv:
        0762c3075664239311a812a999733e87db7297b9f23e4ea79c37d27f50143939
      node: 0x00000003
      path_secret:
        e635ee4566b2afd1fab148fdc1563cf8694bf8a48eef064be09dad7861f87023
  encryption_secret:
    93f27aff9c6ee1a4383f0a749cdd9b9a47a10071c0cf406da1b2289f7fa110bc
  epoch: 0x0000000000000003
  group_id: e3ca77d4487c7eaa03c2644ad271df588ee277b4ba489cbd1ebe57ea337a0c44
  init_secret: 3383f7965265d3dc27c5c0f5f2f185b69efa746368b43a54ae90258590dbac11
  interim_transcript_hash:
    09d3b700df4130ea458cefa322e48431b99e9113f0c9a6766417486d25cea027
  membership_key:
    8b97e308c6c56aa296bca70847eff9814e4c878b28fe27dd5d0f72e88b9ea9e6
  receiver_leaf_index: 0x00000002
  sender_data_secret:
    8e415bd5e07fe34ab923a08bbf60f2b80a00b8a2eff0f3b9a7b72c7209f1de0c
  tree_hash: 1bde7445375a0e521aaac260c687441f246c54c5d820b0c3a9b901f7555e773f
]]></sourcecode>
      </section>
      <section anchor="partial-passive-client-scenarios">
        <name>Partial Passive Client Scenarios</name>
        <t>These vectors exercise a partial client joining a group and following several
epochs without storing the full ratchet tree. For each case, we provide:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cipher_suite</tt>: The MLS ciphersuite.</t>
          </li>
          <li>
            <t><tt>external_psks</tt>: The external PSKs used to decrypt the Welcome, if any.</t>
          </li>
          <li>
            <t><tt>key_package</tt>: The partial client's KeyPackage.</t>
          </li>
          <li>
            <t><tt>signature_priv</tt>, <tt>encryption_priv</tt>, and <tt>init_priv</tt>: The partial client's
private keys needed to join the group.</t>
          </li>
          <li>
            <t><tt>annotated_welcome</tt>: The <tt>AnnotatedWelcome</tt> used to join the group.</t>
          </li>
          <li>
            <t><tt>initial_epoch_authenticator</tt>: The epoch authenticator after joining.</t>
          </li>
          <li>
            <t><tt>epochs</tt>: A sequence of proposals, annotated commits, application messages,
and epoch authenticators for subsequent epochs.</t>
          </li>
        </ul>
        <!-- This file is generated by scripts/json-to-md.py. Do not edit by hand. -->

<!-- Source: test-vector-partial-passive-client-scenarios-spec.json -->

<sourcecode type="text"><![CDATA[
cipher_suite: 0x0001
key_package:
  00010005000100012024b2e6c9cf0141917cfc8fe84c7add7dbeb67d5d95e477
  01038005733b2292252037c89d463611a307df9e98b2df32daf0a4aa0a32dca0
  f590b75c9534372f521f20e349c4ab357225bb6fdf57e5d2b53aac7a7afcf009
  6036ea16e7a0f6208265cd0001206b47045927b857930c3fffe23059f96d1111
  bb84d3fb5313094eccfb62e8522a0200011c0001000200030005caca00077a7a
  00063a3a00040008dada0009000a04baba0a0a025a5a0aaaaa00010002fe00ff
  00010000000000000000ffffffffffffffff050a0a0206334040f513ed0efdbf
  49964e5ada1b63e5b61c5d33e43156ace19d8979e4a95c748ffd328cc8a096d9
  21b4317b9bd3282b996a9b0272f5194e8f7dc7b151de5101d308133a3a10fac1
  9abfb26f277c199ff0feab4ea33a40407dc5ce16e816bbabf724b4b3d6f88624
  9b0da9283b06f3ac41a235811b9c91cd0ca6f91a734a11e805ae1d3b24cc25fc
  a064ddf390a9fbe8a2d62f889cdde209
signature_priv:
  d61c88f757d1730fed551a53e4e8662dafd87fe426cbec9b1693bc3e325526f3
encryption_priv:
  f7e9774e3fa3e5d0b79ff2804cfd272e8138e80e6045efb26b422491d2b47238
init_priv: 6179807a85593e612f7dcf05f94ee1e6769377ea9b12963144953a3ffdeb0d07
external_psks: []
annotated_welcome:
  0001407620e7b00d56abfe9dc50fe5c7c2de311687737afc21cbd683d8b60fae
  c3ff83a77f20653f1cfc8adc7e2f20268c287aa8532332368ff652cbfa8d37a3
  d6d2073de45e337824be17f4af25de3ba84c4e945d7bfa28ed58ef3a5b93368e
  4371d2612ce53b4e62763dbadb0475d477ce4fd70905598c1c4240ee14e1fabd
  4defa7804423f73235e688a10a3a3df0d69f849ff1b941156dbb0258e641b0e8
  512dda2670afd1c11e32a39ca986fe771bc356a6b8bc03c512373c10869bb68e
  a8997cd913d6ffc4cd44bd8d4589920f2ebb8b1f491705253a370d8c36922978
  09d66423010e3d734a03c2a9cf93cea688615f67f0534ab81657d40368e6a468
  d1ef13cf29347f1c0471b8195b67d7b091fb7d6b7f9da1faaf820c243e401957
  31903d241e1585dc6f3fb55085b6725f6f4bc9f4b2cb24e69ff5d6303ebac31d
  4a974b6c95c8fc2ca46f0f82e7f9d4f3fab53b9a74839995929ef0193d099285
  ffba6ed22503b23de5de000000000000000440f001012077277ef2675c808ddd
  82da643ffba9c41f8b7affa67aad17bbdda66c6ccb9f1f203e0ee34d110f8d4b
  f3ec009497b5d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072
  ea45c8f5e78c63c9c3613aa111d31d82733659413386f80f97d0a30200011800
  010002000300050007000600046a6a0008dada0009000a044a4acaca02dada0a
  00010002fe00aaaaff00010000000000000000ffffffffffffffff044a4a019b
  40407b000877778dc610a1fd6823a7145935a186ff1c27ca0eca091f93d0a422
  e6505523fb0a0e7d7d0013954771ffd2da1768aed0df94ec2a330fa2d6d4398b
  210500004042206fe0ff831a2869776d762948f50febdb765cf8c09d30214147
  29b1779625edd020dfb7450d78d3ca9016f4640e6e5f36ce54cc10e8b407a53d
  8a1016e50093d9b3000000020000000440f501012037c89d463611a307df9e98
  b2df32daf0a4aa0a32dca0f590b75c9534372f521f20e349c4ab357225bb6fdf
  57e5d2b53aac7a7afcf0096036ea16e7a0f6208265cd0001206b47045927b857
  930c3fffe23059f96d1111bb84d3fb5313094eccfb62e8522a0200011c000100
  0200030005caca00077a7a00063a3a00040008dada0009000a04baba0a0a025a
  5a0aaaaa00010002fe00ff00010000000000000000ffffffffffffffff050a0a
  0206334040f513ed0efdbf49964e5ada1b63e5b61c5d33e43156ace19d8979e4
  a95c748ffd328cc8a096d921b4317b9bd3282b996a9b0272f5194e8f7dc7b151
  de5101d3080000404220caf009ad02a57a48feb8d64d055509e9a81edba8d325
  e442cfe75e006a5200062055a6ca955bbc02019e12b2c11689623550468d6f41
  0ee841469352fd605953cb
initial_epoch_authenticator:
  797749a338c0a57abb4df3a52494e7ad0f12d3e576964b20546e35595f9dd015
epochs:
  -
    annotated_commit:
      00010001202af8e1a35853f84a78f3c49ea2656f505ae35132fd240fedd61a7b
      6084ea16e2000000000000000201000000000003000120774239e9c752940020
      4a47df0089ffe30294f59b7695b80668736aab6cfa073c203e0ee34d110f8d4b
      f3ec009497b5d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072
      ea45c8f5e78c63c9c3613aa111d31d82733659413386f80f97d0a30200011800
      010002000300050007000600046a6a0008dada0009000a044a4acaca02dada0a
      00010002fe00aaaaff000320b8bac7f8019aca2a6b070f62a8654930355076d1
      ca75971e93e0d9a1bb9af5ed044a4a019b4040f8ab715b478e846bbf35620d9e
      2473bec1c18a12ebf0231752e38bc6c206ba8e78d6c6bac62575e621bb79345e
      258834a297159b08dd824a35571221ab1c6d0a40ea20b7978bda81202ca30468
      334be6c124f1fee93799c8ab3a2bdce7e9f7c2a62c5e4052202da9b610227897
      3042423018fe787de8b05d7fdbab056e3fcf881e95f498b637305f4f7be7fe38
      b2785bbc65753bb555f03758b2b1ea665cfbf8b81c1ddd7be520c50a16db16cf
      d46033e892086cbf139720d0dc8105da6dcef361247baf264d6a4eb88f954617
      70063cd069971c32dec62040522049855d45d8ee3818fe9834bd4714faa29cb4
      b8fa5a19c4b0b2ea82220c27bb563064b1e1df2cd5d33bd2c71a1ee761ef16d2
      87c6233d8d000f05ce86c19b2e492d080c7867b7b4981ae67efe5dae48a37940
      402a3c495b8a278f9210876c14c227df304cff9ca1ed215437daec966b33da87
      b6efb048820cb6814f9a568e8c090e88ce32270c7acb6d3eb7e7a244efc8a01f
      0920bd5a83c5dd82cc18e645867a5d1eb2e26af09c6a61ad02a590f3acfe41cf
      f2ff20f42dd4481d8dc003aedc87dd5ed5368de1f3cf8f9e77208f094c776419
      9ed82401000000000000000440f001012077277ef2675c808ddd82da643ffba9
      c41f8b7affa67aad17bbdda66c6ccb9f1f203e0ee34d110f8d4bf3ec009497b5
      d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072ea45c8f5e78c
      63c9c3613aa111d31d82733659413386f80f97d0a30200011800010002000300
      050007000600046a6a0008dada0009000a044a4acaca02dada0a00010002fe00
      aaaaff00010000000000000000ffffffffffffffff044a4a019b40407b000877
      778dc610a1fd6823a7145935a186ff1c27ca0eca091f93d0a422e6505523fb0a
      0e7d7d0013954771ffd2da1768aed0df94ec2a330fa2d6d4398b210500004042
      206fe0ff831a2869776d762948f50febdb765cf8c09d3021414729b1779625ed
      d020dfb7450d78d3ca9016f4640e6e5f36ce54cc10e8b407a53d8a1016e50093
      d9b32074d7afe185c006ea8742578de827102ed83478ef2089f44078af101d0a
      2d6177010000000000000000000000044169010120774239e9c7529400204a47
      df0089ffe30294f59b7695b80668736aab6cfa073c203e0ee34d110f8d4bf3ec
      009497b5d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072ea45
      c8f5e78c63c9c3613aa111d31d82733659413386f80f97d0a302000118000100
      02000300050007000600046a6a0008dada0009000a044a4acaca02dada0a0001
      0002fe00aaaaff000320b8bac7f8019aca2a6b070f62a8654930355076d1ca75
      971e93e0d9a1bb9af5ed044a4a019b4040f8ab715b478e846bbf35620d9e2473
      bec1c18a12ebf0231752e38bc6c206ba8e78d6c6bac62575e621bb79345e2588
      34a297159b08dd824a35571221ab1c6d0a010220b7978bda81202ca30468334b
      e6c124f1fee93799c8ab3a2bdce7e9f7c2a62c5e206d65d28169a4b8ec000867
      9dbf8b30e7a736f06c74840da2bf9a688762d320d100010220d0dc8105da6dce
      f361247baf264d6a4eb88f95461770063cd069971c32dec62000004042206fe0
      ff831a2869776d762948f50febdb765cf8c09d3021414729b1779625edd020df
      b7450d78d3ca9016f4640e6e5f36ce54cc10e8b407a53d8a1016e50093d9b300
      00000200000004411901012037c89d463611a307df9e98b2df32daf0a4aa0a32
      dca0f590b75c9534372f521f20e349c4ab357225bb6fdf57e5d2b53aac7a7afc
      f0096036ea16e7a0f6208265cd0001206b47045927b857930c3fffe23059f96d
      1111bb84d3fb5313094eccfb62e8522a0200011c0001000200030005caca0007
      7a7a00063a3a00040008dada0009000a04baba0a0a025a5a0aaaaa00010002fe
      00ff00010000000000000000ffffffffffffffff050a0a0206334040f513ed0e
      fdbf49964e5ada1b63e5b61c5d33e43156ace19d8979e4a95c748ffd328cc8a0
      96d921b4317b9bd3282b996a9b0272f5194e8f7dc7b151de5101d30800010220
      d0dc8105da6dcef361247baf264d6a4eb88f95461770063cd069971c32dec620
      0000404220caf009ad02a57a48feb8d64d055509e9a81edba8d325e442cfe75e
      006a520006205bd4d7bc424888cbebe5da155008e25e1b8dc986835abee7acb1
      286cfabdb377
    application_messages:
      -
        00010002202af8e1a35853f84a78f3c49ea2656f505ae35132fd240fedd61a7b
        6084ea16e2000000000000000301001ce087fa00006a307707933f4fa91ca3d4
        e85e3e664f2dfec88d2b4d0340732f1c585599e650527d25a56571a5f4bf27f3
        670d23dc583c9dbb14cc832926ae09e4f2d076697a75c206622f08e977b20186
        5a0ebb357ccc80b8a55e8fbc68437ac9524132ea2dbf001a2ecd36896830b68d
        24c58739d31b203549156728701315a6a4be3d5f65b5452a07723db5464e33d5
        7e00000001000000044162010120b8ee593dbb1112f974c4cbb4978440123612
        2102feb656b5e1df364810e1071f20d02d3c2f629e10e39aeb304a38af3a4d83
        029591345bf72aa53fa6b2dec1a8ab000120764f19155935995dc0e06a8df057
        049b871d094555320a35e7797dfdec200c790200011e00010002000300050007
        000600047a7adada00085a5a2a2a0009000acaca04caca0a0a02dada0a2a2a00
        010002fe00ff00010000000000000000ffffffffffffffff08caca05f1d19dd7
        ce4040c8a448335607f0521196510afb549aaf9e3e7cf07810f0dd854159fe23
        84983a28a629948aec5e42b1d164ff6d1bd94dd5a98477c0a4e8f79288323693
        77120a010220b7978bda81202ca30468334be6c124f1fee93799c8ab3a2bdce7
        e9f7c2a62c5e206d65d28169a4b8ec0008679dbf8b30e7a736f06c74840da2bf
        9a688762d320d100010220d0dc8105da6dcef361247baf264d6a4eb88f954617
        70063cd069971c32dec6200000404220b9c09c54dcd15b1035dab218ecd7dfd6
        af7edbbbfe810db7319a57412b5daae320dfb7450d78d3ca9016f4640e6e5f36
        ce54cc10e8b407a53d8a1016e50093d9b3
    epoch_authenticator:
      fbf49347f9670a235ce818073593a9d8399d412bf483b54e2d7fc0038aa1897a
    proposals: []
  -
    annotated_commit:
      00010001202af8e1a35853f84a78f3c49ea2656f505ae35132fd240fedd61a7b
      6084ea16e2000000000000000301000000000003000120500bad2bec440409bf
      9596b093af989b78da891ae6d29f53e73cf6f80c9aef53203e0ee34d110f8d4b
      f3ec009497b5d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072
      ea45c8f5e78c63c9c3613aa111d31d82733659413386f80f97d0a30200011800
      010002000300050007000600046a6a0008dada0009000a044a4acaca02dada0a
      00010002fe00aaaaff000320bd70e4afd05e4ab967b8ec03302a2e8126a62ab1
      940b90db10b4bbc4fe80ff8b044a4a019b4040f5a66dd4ac1f0bd2175f559c86
      0ee6090cb1c376928d5bf38e4c999d837adff13466239322454a4f8d03a423fc
      071263111ae536ea7c6b03a2f595f231195d0940ea2006e43355bb863b9afba8
      e45ce37a3ca875b0a5a6539597a1a3f1d368141a164f405220ebdf7d6a24269b
      7aa90c07058a58f39d799a39397f7d59104e6754026b28533130fae24664dc50
      f357833cffd9a1850fe72badd876164236535d5b88399ef44915685ec526ca32
      7d9491a39d685f9077bf20837b76f30e3dcd620a7bb83a0cb3d03aadb1bae436
      73778d3ec4dc7e0e1438674052203fe91c2566da8b7f60d1b84849650f147595
      be7f46c8211a5de41c84cf5d2242302e167cf1f06820a4d0094358490198f7e9
      bc8275fd13b6f3f105a8cbd73cb4892a423344087beb4963ecd7619b789cd740
      4045078cee6d9df0aac357fea8cd375ce72e82ada6179eea26a7821fa36b120d
      6f391ad5484691d77134740fc547d3a2d2ff5cdb20bf1d9de43d77da576c4723
      0420fc2f3a0434ab485d87d529b34a5e9171c76af65fd51197c6a6a660df3dec
      6c2e20094d3dc4212056ccfbcb510706e73afe4b4c8034efec6a31e5ce095831
      e623dc0100000000000000044169010120774239e9c7529400204a47df0089ff
      e30294f59b7695b80668736aab6cfa073c203e0ee34d110f8d4bf3ec009497b5
      d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072ea45c8f5e78c
      63c9c3613aa111d31d82733659413386f80f97d0a30200011800010002000300
      050007000600046a6a0008dada0009000a044a4acaca02dada0a00010002fe00
      aaaaff000320b8bac7f8019aca2a6b070f62a8654930355076d1ca75971e93e0
      d9a1bb9af5ed044a4a019b4040f8ab715b478e846bbf35620d9e2473bec1c18a
      12ebf0231752e38bc6c206ba8e78d6c6bac62575e621bb79345e258834a29715
      9b08dd824a35571221ab1c6d0a010220b7978bda81202ca30468334be6c124f1
      fee93799c8ab3a2bdce7e9f7c2a62c5e206d65d28169a4b8ec0008679dbf8b30
      e7a736f06c74840da2bf9a688762d320d100010220d0dc8105da6dcef361247b
      af264d6a4eb88f95461770063cd069971c32dec62000004042206fe0ff831a28
      69776d762948f50febdb765cf8c09d3021414729b1779625edd020dfb7450d78
      d3ca9016f4640e6e5f36ce54cc10e8b407a53d8a1016e50093d9b320f659d2c1
      c834bcbb021b47a12f71530b455c394de2f021c5f9635e28e27269b101000000
      0000000000000000044169010120500bad2bec440409bf9596b093af989b78da
      891ae6d29f53e73cf6f80c9aef53203e0ee34d110f8d4bf3ec009497b5d12237
      6470c5ffcadbf1d126eedbcdac527700012052f9a4b072ea45c8f5e78c63c9c3
      613aa111d31d82733659413386f80f97d0a30200011800010002000300050007
      000600046a6a0008dada0009000a044a4acaca02dada0a00010002fe00aaaaff
      000320bd70e4afd05e4ab967b8ec03302a2e8126a62ab1940b90db10b4bbc4fe
      80ff8b044a4a019b4040f5a66dd4ac1f0bd2175f559c860ee6090cb1c376928d
      5bf38e4c999d837adff13466239322454a4f8d03a423fc071263111ae536ea7c
      6b03a2f595f231195d0901022006e43355bb863b9afba8e45ce37a3ca875b0a5
      a6539597a1a3f1d368141a164f2072d43bb60525c3756df7cf9670c026608946
      80310c68fb938b0164de5552eb3000010220837b76f30e3dcd620a7bb83a0cb3
      d03aadb1bae43673778d3ec4dc7e0e14386700004042206fe0ff831a2869776d
      762948f50febdb765cf8c09d3021414729b1779625edd020dfb7450d78d3ca90
      16f4640e6e5f36ce54cc10e8b407a53d8a1016e50093d9b30000000200000004
      411901012037c89d463611a307df9e98b2df32daf0a4aa0a32dca0f590b75c95
      34372f521f20e349c4ab357225bb6fdf57e5d2b53aac7a7afcf0096036ea16e7
      a0f6208265cd0001206b47045927b857930c3fffe23059f96d1111bb84d3fb53
      13094eccfb62e8522a0200011c0001000200030005caca00077a7a00063a3a00
      040008dada0009000a04baba0a0a025a5a0aaaaa00010002fe00ff0001000000
      0000000000ffffffffffffffff050a0a0206334040f513ed0efdbf49964e5ada
      1b63e5b61c5d33e43156ace19d8979e4a95c748ffd328cc8a096d921b4317b9b
      d3282b996a9b0272f5194e8f7dc7b151de5101d30800010220837b76f30e3dcd
      620a7bb83a0cb3d03aadb1bae43673778d3ec4dc7e0e1438670000404220caf0
      09ad02a57a48feb8d64d055509e9a81edba8d325e442cfe75e006a5200062071
      f3bcd57435d50a2271035bd497ff1ad9b7e9ddb46df7c379f78092d5badb1c
    application_messages:
      -
        00010002202af8e1a35853f84a78f3c49ea2656f505ae35132fd240fedd61a7b
        6084ea16e2000000000000000401001c4c101e401044edcfc2c142cd5136b6af
        dbd8c3e83198f022c691110b40731154bebeb00bc796e5c3e346d9753c1382ea
        58340da25270fe039af65a77aee89e30ef0f0f0deaabd6ee50ef04e7133c67fe
        32ccb2f521e7a7f9fa14becc02b199fc81a9dfaaf11f918adf249a1628fe87f6
        e1d2472319c3fcc849e76126026d4d3e63345e82970152d575ea549378ba14f6
        c900000001000000044162010120b8ee593dbb1112f974c4cbb4978440123612
        2102feb656b5e1df364810e1071f20d02d3c2f629e10e39aeb304a38af3a4d83
        029591345bf72aa53fa6b2dec1a8ab000120764f19155935995dc0e06a8df057
        049b871d094555320a35e7797dfdec200c790200011e00010002000300050007
        000600047a7adada00085a5a2a2a0009000acaca04caca0a0a02dada0a2a2a00
        010002fe00ff00010000000000000000ffffffffffffffff08caca05f1d19dd7
        ce4040c8a448335607f0521196510afb549aaf9e3e7cf07810f0dd854159fe23
        84983a28a629948aec5e42b1d164ff6d1bd94dd5a98477c0a4e8f79288323693
        77120a01022006e43355bb863b9afba8e45ce37a3ca875b0a5a6539597a1a3f1
        d368141a164f2072d43bb60525c3756df7cf9670c02660894680310c68fb938b
        0164de5552eb3000010220837b76f30e3dcd620a7bb83a0cb3d03aadb1bae436
        73778d3ec4dc7e0e1438670000404220d0dc23625c7166511a78fcd1a5084fb3
        6f411f08cc6c366b38beaa88dc73400220dfb7450d78d3ca9016f4640e6e5f36
        ce54cc10e8b407a53d8a1016e50093d9b3
    epoch_authenticator:
      ad76f6c0ab7c49653b77ad47e53e35e9d4b0a5364341120bdcceabc62cf9c629
    proposals: []
  -
    annotated_commit:
      00010001202af8e1a35853f84a78f3c49ea2656f505ae35132fd240fedd61a7b
      6084ea16e20000000000000004010000000000030001205fbada517b298cf817
      8350796e001bf74231f74875bfa69d418935ca421cf130203e0ee34d110f8d4b
      f3ec009497b5d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072
      ea45c8f5e78c63c9c3613aa111d31d82733659413386f80f97d0a30200011800
      010002000300050007000600046a6a0008dada0009000a044a4acaca02dada0a
      00010002fe00aaaaff000320f47274a5ca029cbaddd6200c6edffe6953673a6d
      fe14a374dfb2ddb48b2805d4044a4a019b404096888fa26228966af730b8e61e
      9d0f18f9132fff6783eabccf7169d3170ceff0d9ad3834ca52802420d1bc6831
      3908cdc1665f82fd3b8254b86721f0e7a3860640ea20ddeb878addd0fae32eed
      f8b875de7523399bee24174453f9e478cab2b5ce7e6b40522057aa2d1b8793b5
      d3099834ba5108970bd59297940efba6478daaf90c4fa1640130a05abaec867f
      c3fdfc5cedfce085ee91eaa2bcaa87ecfe0ca3e41128d273371c25479ca36424
      e4eb6aa6d128e9eb10ea20462680fd79ee53114f3f501e2ca4102172097b125c
      bfa8b399e89869d4a589394052202b4021afb50091a5633f0aa5312eddd453f5
      3bb00f0b3a58466ee14eb8e4e00c30129db91a5e79c80f4bff38ea1023831036
      53ec45e07a20a1a37d0975f57fe5a4c2ceaf17011b60194fd5a0e2c1af475140
      406e9f3fcff512ae75dc25fb489f9e5dac7cd1f6fc4fbec29bbb7dd8b9b1b636
      eea3b8f928ab949ce9c01319836052e0267cb5eb446130ffba6390cdc427ec4a
      0120bb20efcd286195b793bdab66b44a8da29228365b6197a968a4263d1884ae
      239c205691af015862f4066c657018c4b2b5c3fe81c944d5c30f31aee2ea92d8
      7dd9280100000000000000044169010120500bad2bec440409bf9596b093af98
      9b78da891ae6d29f53e73cf6f80c9aef53203e0ee34d110f8d4bf3ec009497b5
      d122376470c5ffcadbf1d126eedbcdac527700012052f9a4b072ea45c8f5e78c
      63c9c3613aa111d31d82733659413386f80f97d0a30200011800010002000300
      050007000600046a6a0008dada0009000a044a4acaca02dada0a00010002fe00
      aaaaff000320bd70e4afd05e4ab967b8ec03302a2e8126a62ab1940b90db10b4
      bbc4fe80ff8b044a4a019b4040f5a66dd4ac1f0bd2175f559c860ee6090cb1c3
      76928d5bf38e4c999d837adff13466239322454a4f8d03a423fc071263111ae5
      36ea7c6b03a2f595f231195d0901022006e43355bb863b9afba8e45ce37a3ca8
      75b0a5a6539597a1a3f1d368141a164f2072d43bb60525c3756df7cf9670c026
      60894680310c68fb938b0164de5552eb3000010220837b76f30e3dcd620a7bb8
      3a0cb3d03aadb1bae43673778d3ec4dc7e0e14386700004042206fe0ff831a28
      69776d762948f50febdb765cf8c09d3021414729b1779625edd020dfb7450d78
      d3ca9016f4640e6e5f36ce54cc10e8b407a53d8a1016e50093d9b3208c3a8ee7
      ef1b2a39f5a4c0eb23db07f79df81b2789b2948923a64a25b8392c7501000000
      00000000000000000441690101205fbada517b298cf8178350796e001bf74231
      f74875bfa69d418935ca421cf130203e0ee34d110f8d4bf3ec009497b5d12237
      6470c5ffcadbf1d126eedbcdac527700012052f9a4b072ea45c8f5e78c63c9c3
      613aa111d31d82733659413386f80f97d0a30200011800010002000300050007
      000600046a6a0008dada0009000a044a4acaca02dada0a00010002fe00aaaaff
      000320f47274a5ca029cbaddd6200c6edffe6953673a6dfe14a374dfb2ddb48b
      2805d4044a4a019b404096888fa26228966af730b8e61e9d0f18f9132fff6783
      eabccf7169d3170ceff0d9ad3834ca52802420d1bc68313908cdc1665f82fd3b
      8254b86721f0e7a38606010220ddeb878addd0fae32eedf8b875de7523399bee
      24174453f9e478cab2b5ce7e6b205773519a12267e6ed5c31d4e153a38ccf095
      696d9a871ee1b66d3fe3a23395aa00010220462680fd79ee53114f3f501e2ca4
      102172097b125cbfa8b399e89869d4a5893900004042206fe0ff831a2869776d
      762948f50febdb765cf8c09d3021414729b1779625edd020dfb7450d78d3ca90
      16f4640e6e5f36ce54cc10e8b407a53d8a1016e50093d9b30000000200000004
      411901012037c89d463611a307df9e98b2df32daf0a4aa0a32dca0f590b75c95
      34372f521f20e349c4ab357225bb6fdf57e5d2b53aac7a7afcf0096036ea16e7
      a0f6208265cd0001206b47045927b857930c3fffe23059f96d1111bb84d3fb53
      13094eccfb62e8522a0200011c0001000200030005caca00077a7a00063a3a00
      040008dada0009000a04baba0a0a025a5a0aaaaa00010002fe00ff0001000000
      0000000000ffffffffffffffff050a0a0206334040f513ed0efdbf49964e5ada
      1b63e5b61c5d33e43156ace19d8979e4a95c748ffd328cc8a096d921b4317b9b
      d3282b996a9b0272f5194e8f7dc7b151de5101d30800010220462680fd79ee53
      114f3f501e2ca4102172097b125cbfa8b399e89869d4a589390000404220caf0
      09ad02a57a48feb8d64d055509e9a81edba8d325e442cfe75e006a5200062046
      7a05e466a111ccb79268d040b373aa74442324b021689292d7253ca371faf8
    application_messages:
      -
        00010002202af8e1a35853f84a78f3c49ea2656f505ae35132fd240fedd61a7b
        6084ea16e2000000000000000501001c183146fe9ac9fadd10c1e70076ab8d72
        e78ba6afef5a496de407f1694073282ff405f3b430d71036e08dda902495d3cc
        f53d79fcc7c3ceb83be4906d113d7f89b0695a5f288433e4cc779a7e02d4a703
        47804a992f5c99f8ad0b165d94a956f90cd078fb4bb0a171564df95851c92225
        90cf54b37a0e867b82dad8a9db2a9072efcc84fe334fb0e56fdc291eba8141ff
        6700000001000000044162010120b8ee593dbb1112f974c4cbb4978440123612
        2102feb656b5e1df364810e1071f20d02d3c2f629e10e39aeb304a38af3a4d83
        029591345bf72aa53fa6b2dec1a8ab000120764f19155935995dc0e06a8df057
        049b871d094555320a35e7797dfdec200c790200011e00010002000300050007
        000600047a7adada00085a5a2a2a0009000acaca04caca0a0a02dada0a2a2a00
        010002fe00ff00010000000000000000ffffffffffffffff08caca05f1d19dd7
        ce4040c8a448335607f0521196510afb549aaf9e3e7cf07810f0dd854159fe23
        84983a28a629948aec5e42b1d164ff6d1bd94dd5a98477c0a4e8f79288323693
        77120a010220ddeb878addd0fae32eedf8b875de7523399bee24174453f9e478
        cab2b5ce7e6b205773519a12267e6ed5c31d4e153a38ccf095696d9a871ee1b6
        6d3fe3a23395aa00010220462680fd79ee53114f3f501e2ca4102172097b125c
        bfa8b399e89869d4a5893900004042202d1271947cec646a5f0c0eb9a08c1e84
        028a34caaa1bf84a08cbff3dab08cc0c20dfb7450d78d3ca9016f4640e6e5f36
        ce54cc10e8b407a53d8a1016e50093d9b3
    epoch_authenticator:
      13a670728f17ea7543f95756c74d6d4897263ccdf90f565eb9183294509041b7
    proposals: []
]]></sourcecode>
      </section>
    </section>
    <section anchor="known-issues">
      <name>Known Issues</name>
      <ul spacing="normal">
        <li>
          <t>To realize the completely optimized performance profile discussed on
<xref target="operational-considerations"/>, we should define a version of AnnotatedCommit
that sends a SplitCommit instead of a normal Commit.</t>
        </li>
        <li>
          <t>There is no signaling within the group of whether any members are partial
clients, and if so which ones. This was omitted because it didn't seem
clearly necessary, but it could be useful. For example, if a client could
include a LeafNode extension that declares that it is a partial client, then a
committer could use this signal to proactively generate AnnotatedCommits for
the members. An approach like this might be necessary if we wanted to enable
cases where annotations were confidential to the group.</t>
        </li>
        <li>
          <t>There are no WireFormat values registered for the new messages defined here
that are likely to be sent on the wire: AnnotatedCommit,
AnnotatedWelcome, or SenderAuthenticatedMessage&lt;PrivateMessage&gt;. It's not
clear that these WireFormat values would be needed or useful, though, since
the annotations added in these messages are effectively outside the bounds of
MLS. They're more like how the delivery of the ratchet tree is unspecified in
RFC MLS.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8y925Ycx5WmeR9PEQ1d6FDIpJ8PlEpdECmWWBIptkBVTa9e
vQBzc3MgxMyIrIhIgiiKteY15m7u5y1m3mSeZL7fzPwQkZlIgKWZGkqigMwI
c7Nte//73wczv7i4WB03xyv38frJV2Z/3Jir9Rd/eP5kZbpu7749/6k1R/dq
t3/78fpw7Ferfme35prv9nszHC827jhcXF8dLm7Cdy6SbHW47a43h8Nmtz2+
veGTn//268/W65+szdVhx+ibbe9uHP/aHp88XT/5/Nlv+L/dnj/96evPnqy2
t9ed23+86nnuxyu72x7c9nB7+Hg98H23Yn75yuydYaTnzt7uN8e3T1Zvdvtv
Xu13tzf89At3OJhXm+2r9R/MW7dfz5/6xr3lgz0z2h7dfuuOF59qEatv3faW
Z63Xjw+xXl+bzRUfYc3/oMVf7vav9ONXm+Pr2y784s2rjxYiebJamdvj6x1r
Wl+s15sta/nscv37jRvcnm+u18Pt1VUQ6md7s/23zeGb28Py9zzCbDf/Zo6I
9OP1J/u3B+Tnf+PCbIbpa9/4b/3DK/380u6u50f+/nL9m9eGkb4127On/p6J
vt4gHbM9+8yjT/4mfPWyG79236P/dPkHHm6Q+OHsyX/aWL7Yr09/f/bUzcHu
ls/cX3X/sLn59vLw3fyIf7pcP7t6485X9k+7/+v/uFr85nTkZ//yfP0vG/vN
fjm60Yf/svsHc23+bbc9XcgXl+svbq/M3v7b22/OnvQFgjBnv32Pp13fXl3r
m9PjXq9W293+mu98i0quNtth8bfVxcXF2nSH497Y42r19Wu3fkhV1z/Den++
vtnvjju7u9Ifvt307rB2w7CxG4xvbQ5vt/b1frfd3R5WXvXX6MDaHY6mu9oc
Xl/rQzx+zZpeuWAch/UbFH3NR4+7NUp9ezDb/rDeDWt7pUEPlxjXikc/XZvt
2/W1kzGvLYqFIK83PHTNjm8Zzn8/jqoP92tv6/96yyhXb/nJ1VX8+mF1fXs4
rvvdm+3VzvRP19+aq43gIXwNQW6P/M8Ppw0JYwJX/iNvXqNjfgabLaJZm9Vh
82q7QQiG5WlWt1v+rD2Ks7i+uT36vwOBdnc4Hp4ikxtnseWrt4zntuu/7DZb
ydwEuV2uv369OTBDe+uF1rthgzIznjB07b47gmF6AIs+3N7c7PbH9ZObGWVH
4T1hDUYr3f70uLoFItGMb5wWdnBhKqj5evxi+JKWtt0dR/kG6R7uine12zL7
1+YwfV+oxADj4idV48/adX19x7/24zZol+cxV93tcc2i/UfebJggWuO31Y9v
NzeIfx23JUrp8y2yiPsfHwGkX22YuH8ukjbru3Lxu3c2ahRt2Gqvk4ttvXq7
utq9YeZ79Gmzd9qUg5+L21/7dczKxOLwbkGVMBKLPbGzl8HWrjd9f+VWq5/I
Zex3/a3VNB+xvMnmvv/+v/zps0/aIkt++GHttpLPQVp+3GxvsZww+dViG1wf
LHCUkbneScniKpdGpglgzSxZP5Yk4lIPq4XhaDfe32w0ynHv+D2WcnXbs7RV
/I5Wqc/ZvZPfZnsOfhBNwBxveaymsXhymOFh829u1BpGX2l06cwV1mH2o3Is
PxUV5ZMTKIhfHxfM026v/H6u0Ba392q7tW7d7Y7Qmq2z33jt2ro3kyAOzn3j
F7HztotMF6AW7GMJC4fjbm+0ARKUV5BTVdrpcZpWBDiZlcZ1/aWU4wEsOMEB
L+2dZLZ746f75NSuAQOIWvzziAtrWfp9O8r3TzZUm7R367052tfu6LdVD1kt
ZPzH8Mnd1jH9bS8xM2+UF5GixX5ih4U9Rls87lYPGXiww+tbe2aM62CMd7B2
tcBaj7tX7jsMaJ6aR58wOQ29A3EmbV0uzavI6gFchCsyz08CPF57ow34yKPv
hUvWxCLxk84eL9dfne6KZ7HriKXfuvcBUc3rsIoK7neCP7xdbKOmqd+9eb27
GrfnjhrtmKVfT3SfssYdW3y1e7WxEQQWlvtxMMDjHsjCPvmA3/sThZB2b7Sk
w2GHdxP8mCu4PqK+PgSzExwd+EZ/exWkjCUh0eMqiF0jmJubq3H5UbweAp3H
ygAEk9gPnnjwrb2zDlLTr7u3gfDMEo4qZXe3+4MHhoj1B+eDirXRqqGr3unc
boNA+kvI1fH1Kujv+nrXe/XzXmXcXQ3yqbvisdjzc7f/dmNZAzxh24uELhyx
lOdczc1Syc9sdVJPT3oWz74MvsLry9mcTrb3Gj9/8CuLc73aWYb3HMajkfbm
eKbi7JHIJ0MHeV3fYMwMFj2CxwyQUYJnmZHsAbaHAHhLx3MImnoL8bNL/oRU
XVD5EccOu2u3fuJtK6wkkJbV1jFFJt85aYTiO//XMNa8/7swLW8BcuudG72u
14VRsKvJ053bX7BL9pBl72+366g8WvBSecVOtCmrv8AdLzbbi+PmWi4z7j4i
ct9BoqPsCFkP7jg6obtiWGt1QVlRA4bYzg8LIrKvN+5bd4ah/e20nwMPC0s3
B3g4IdvuGq3a+MV6axxdbeShWIrsOPI6z4wisHll0oQOMv6LA4rilsCDzkG0
DrfXRBZ4z0U0P4L6ufYyx13nfccrj5b7KUqwYkZ+u1bin5KQB/OREJzB36tb
Qyh6dEGf3o5W7hd0tTvEb61Mt7kSU+K5UvwIzmy2RNkT790e5HkGHPjBQpz2
m110gdc7tl4bIkEjN9O7i90wyD6///724C6sASZ++IGhPEXaoC17J28tCz6d
bNymjexhM5q7Arin4ihxGmw63+wd0rkKTzlEnneheIWt3Acz4JniiV/DMDfb
HRvzNpi+EFRZh8P6yRd/fv61Uh76//WXf/R//tNv/9ufP//Tbz/Vn5//7tkf
/jD9YRU/8fx3f/zzHz6d/zR/85M/fvHFb7/8NHyZn65PfrR68sWz//4kYPST
P3719ed//PLZH54EdF1CTwSdTiJi629Ad4HNYQXdsvtNFyTwm0+++j//97SI
nDZL0xZOG/7SpHXBXxQYhad5BQ1/lRashAeB7okhWnMD3b+SRoMHr/GCa9y8
Q3q/+B+SzP/8eP2rzt6kxa/jD7Tgkx+OMjv5oZfZ3Z/c+XIQ4j0/uucxkzRP
fn4m6dP5PvvvJ38f5b744a/+q+jv+iJt/uuvCem/lu0fwBsC/I+J7o7T36WF
R6/EmNERo8XveNiAvDozgHz9BC/73e6ItHevnOdMHvkmugE7fS2GPvrVCw2F
vL8I5Pj15ka2sBvuTMCbnDIHLprfCH7z8zcBTbybPmUXfg7jF6Z58NhTRPcP
3S6jvch1I995NH4BF3c3byN2h3j8p4eTqdwTNE/De9/q3XZEfZ5gCGUj17x3
vKdBwyXM3331+9+CDnb/9sZjCtZ+wqeOOy+mUfjRrf30sNxURPKZGO1CHkuv
Fn4siFrf7A4jCYquagrczpn+IpparZ7LHe8vTiPN6JPD88TXXaBAI4c7iMdj
ov/irqx8PmN+5UUUAl93pm5rs7o+06cz/XHep7k9q1988iRDsFo9C8SCucTn
hvmNkxgnd/roJeuOenq238FdKnYJZAPee/Kw4IHCs05DhfXPjHzRydK9LPbe
EcWf/PzM9t5/RuvTGXn666n8tA8jhw/8MPCwfn07etP112waqC1qHR4I1Tua
71YRnYuikj/881acGQeKF19sMzAMBENd9k9jnunseUhohQM1NwTdXlTe5KK+
IIcvnn3yU/40fety/Xy3lvjMW/mUa5kXnhIQ2MR84moRMXgJMLyHsvPH60nz
Ry98Dg5aEj7P6g/e4/6ZL30irz8ji9a3OXh/NvLQMe12q0yaPi0HtXdzEims
1pNDnxp46rF2Nec4RVY2V1d+0uj2FB14lrp+tpjoFeK88ulMCMrGB437jbZr
5eE7rHOeCLD2art+47Bkr80BtyOz8avwmafAjxdL5KmfH1es8/Zw61OTxlp3
c/RpuJ85oa4SJnv9/edBCT1sWWUVN9spNaJlx9TdSgZ6HiprcVu/7R4Rlsng
pxOD3A1HPS8kKGwYEghdxhg+X7rITZ1kfAJXGnbip/qgJ+Q2aAjjeI95fLOT
UBV+LsQnHfjJ+g9+Vl84p8cc1h8BGN0G4ohSeAwNkcbtISjDlOJGlfqL4+5C
y0arTlB8o0yTufKBg+pQgUj6yY2cVDsQxTL9bEHUlRE6TJFnjB4Rx8pzYy+k
HklHP2GQjJ++aLD0YPYBIfKOo7LhMRelr61G/+id4ugiH8wBdW6QQXbO70ZM
2ILJIunXrt+Y1ZkYwhKvR8EGpJ8y/z7vpAGX1jBnkoRrK8nep7Hddnf7CvVW
IObVESWblFsYi+7AOvysCNTAj82caZfznOXz+XAuZXM3VeWltp1DzVlSKx83
EQn368kFnHsYnxy59jI5KtaMAVJI+vHDhb6svKBws95jjvN6A1h4czjPE2nf
5pTZNEWflwzDh2WufjcC8wlgnpgaUcqNl5RPyx7fnrjC0WQJbTXgCpbzxrwN
O/rkTTCQJ+NvFQR55VLAGbNX5ugB1I3Db0KmDEv6Fjxjn0JRwef8t4TWh2NI
C0uttxuhH+zqEBNcu5jPGweVat2NTVdTXtSDYsBDr024W/t2iq2jEoxjxazu
ndD26eos06AiWB8TlWd05XCyZjmIANbeVGMN1+uM3MmY/dLS9DW/Ni3ptwJe
ST6KNfqZeVjNhbWCtZiEYXvCV3+6EPJTIdU+xGODse7El4xob40w0G+AWR2u
Ba2D6oILdjjtn7bmdOfW3h04b41PlZYJm++z+cpI7NbeVKYYon+7NdfooPcz
hyUeBSIj33OYMm0n2r5aaA8Tm9x4UIcx0RM8wLxQMebRu4y5kJgn0ER9TirO
NsSPMxZ7F7V6ZTR+0Oxj2IO9m33liYpqrwMgn++yB57TBUjSS7wbi5cg2ZUf
aHM4YbVTdRNbPgAlXifjdEZnbOyYFTTHkXatzbdmczWC9BZi4Sd9zjye71ab
MYGoXomZ/p+tkUGkMcMcayyeNz5G46xGOfP3jbLy1yEsc4tpjg7sRF6C+bDa
ITqGUNzjt4tUkxzxdvm8MccVXPlv9igerv04JnwPymeFhg2xQ4ceogvA3lFQ
h9Xux1IRVJavdeMA0V0FxhL6SrSBq2837o3bxyTh6Cn97gaAiP4GWS2Gut68
en30eedAWQ/KqvvM5zEk2s/mNdYfog7FT7igKTyQnfsMIbnvjCQci1zeAxMu
7df/7c+ff7L+em+2B09bx5ri01gEOyW189MnWvQ0JC7lGBWE77ASP+ewNjb9
yezJ4oxUC3BXA+xCsTWSujHINRZGfbDzZOTEsAo5aOn5t7urb0NUII3ppW4b
5CoU+v77//r5xaeXoUdo968Xx3E5Plf2+al3igWHsyjpo6W6rjGwmS+PVDns
5vqjFe5dJV995qmKhDdjnhhR/3PY8rsM1Q9xat8el0YlIfw7+qDp6Ugk4rYv
NlX66w4xN7NIMwKrt3sL+Va2fTSZ7U+PZ1bDnPDMeDm2JgR/mMjBN2tMnCDW
7MZ1rPz8BYHHtzcRlUXpY7AVIFRR2eZ4O9UbTCy3+kmFhE2Y/+XqecwiuRBn
ILzwoZOip54ZohS28HWsUhy8yLRJF3fK2WMq2yPHnPIN6OJjt6/GUvkfv1U5
xr0hAn4wVTMmk7GaieeaqB9zBuhuzdOMMCxzPxxFy2IiJaYlxhxPKG0dFlW0
+ExvWTe9d2bxQ6MTDCzOeSsAjf9FdG4ZXnupHULh9C5DDVqxLJ1YlXEMsbKP
9hZlljmZsgmx8rmcpmrHSLR3wwkbnNX9REKLDMRxrtT5st0B1rOYQCRRoWg7
zi9UbN4Gc/xmu3tz5fpXp+X8OXu2OmsvGOtWPgjah7IHpiROEmbz6XPU5N//
/d/Xxhy+fRXSZIt/pmLeyT8jqTz9o767+iSI6tn40VgEPP3+On7qN/MfP5n/
+Knat/569o27Pzj/6fKPYYQYZv8HRhhDlh87wt9dnP7z6x8xhzufvRNQffAI
fz8t7O8EECLmHzTC+bLurO095nDfPz9SDot9/lA5xK/OYvjAEZDF+k9g+VXw
x5+DBv9xST4k1P/XJHlmKB88wmOrOFnQ32oVp+nh/5/Y5n98hLNlffAI/yl7
ceezoR7yDKYyL+RDbfOuJD7cNr1Z/+zZz3/MKv7jKPf/9V7gx1fff7z+ybB5
dbGLfG/tTyL8/ZOR/4k4LI8frH9Yrb7/fvmNH35Yw+BufVQbWYLClamT68F0
+cerVRoJ2p1ijBIKfawULOL2KcydEkehL/6hpOHUbQxF2m8OManps7jn6cUb
lqCh7k9CzcUyT4p8a+EeKpRdrj9TlOHzRhEXQyr1sH7ltupFCLHYSfKBH/SQ
2P7WXJ3MPg5w8l093Y9+KqFL1WjPvqix7lmp2O9pCeG8Unh3zQqQGM3HYueV
s3uobkg5sczdXiI6o7CBqWs8XzKP0piijjwqwV2Gfio3d/nq8qnivf1bnyxf
tLmpRvw0TjgoiG/tnDKL5p4ljp1P5703NqjUMmP2vrXSz2Mrx5RDeONCsjl0
VYSILlYKlkQ+Zv/70NE0EW3fcBg7hE6TRApNQhY7pn7e7G6vvJ4taxQKr6Yu
5GnrPn3+QKn+PDiIpfrPj1N6T1GazzJLKacwwc9nVNh7FzkXtw93OvMJJlc+
ce7LqD5dN451uOf767Fit+7MwZ0VTpkVgl6FPQjp9ytn9tvDCANjy+h+1mC+
s5TtnXaIQ4xQFzHhadZ6TrT64Gu/Q0pqxx41OB5JUNXMN5oh7Km96vxRMUU1
Gs88WOy16jeDV4/Vso90ygmHloSpa2r9rO+frv98MzUk/8ldA9rzqD6mfKt6
0KLmzL/CQ4K6HBafR533LgaLY905dJNEW1Zd8jSCVrJtIZLYwfDV3j1/zSb0
v+ejTOwfJaBPlPT67vjbsSdbFro67U0MQKK/b/axDxAUYPh9qAmxeZ/6o2wy
J2CBRa3PStC9u7navXX9oioYEonjjAPcjZay26/uHLnYeJ0wx9vD+mdnWvTz
p8uGylgbWZ/F7CtUaMZ3X28KoB8HG00OCV1fSQ18FeQk78Y8506+1Zkb+GXI
75wlCg5KHPsOgM2rrdpXQ63+5tXeeHHJrX0KSsW/35P3CTug38f+NP+1k3mZ
0HDrK4rd3FE91gvv9In/8uz7Y1UwPEQjuCtfe/NCDy24y+aiU6Ra/yYUU++w
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
FjO2JKjlc/9W1d9HF/TSTxBDYDK7kaLFCcxk/2lsJrgvpzE/5U6sMfmnUYHi
xRSuf7HYqpeX95rLVoOfCnIOR+xURlheQebvpV487/7derpgEctvL3ZgOedH
2U/Yg/Wf3HEfL1qci+SSVRzo9CquSHp1r0HoiRnVMaZ+/CZGYS2TP7NTWS5j
QW9P5n6HOAerjmL0Cz6E28SXQLyYjb99JYj8Ogb7i8kc7m8AuKv9C41e7p1s
9h128CN2YZ75MNp0TDSMyhb7UV4uFPB/bP8u/Z8vT/31T5bXJi1aNc5uYp0v
xF52LoyXQpw35nuHEdd1ljMZ9v6UvO+fM/MFLPu7eeZw6CM6K5+HW03PjhF4
pzze3lOju/djPVztnFp2zy9znZNEd8LZrTKAB7N/e1aSH88ILLoZYr5yplIP
fXe6XmzkXzMtm2/5fvTJ08Uz4e4y6Ira+rrdt2NNPYbH4Vyzrlzi927jpdYt
h4p8w9+p/y7h7fbzkQUdYRiNc0qenAtv9eb15sqdLDnezxGy/Ez8y90xnumf
NzLEI1PryOHdjQ143G8Oq/tPW8f1RbP99Pn5+edZlOetj6spRhk/MkYguvYD
MPr++2t3NFL6i3g/zg8/TFdvjDeYxv6y8ZPjTTre/P54E68v9aWX5XWmIat5
bf6iu20Wn5oqA+FaVHW3++Tkadv76VUTZ3f6Tr3kI+U961lHUmMh19x3Hdmz
w+rkctbvvx9vx1gcEptJ1/iuCrdEist16E1SJn41NyYpSx8681+ftLSfXcE0
0h4v5v2u06H7kGN7G65QWy7H44E66u5cfGxRG5+eCx3yUuwHzob4669vO11V
fQyvoQhXNQSqBiW6Df0YfoMXt4PF6pdPKa/iuaZQlvBZMM/BwxjhSv54mfCd
ezx9ZWi6bPhO89TiaIm/p3+8sQH73I+5hZvd0Y2Tj/f/azB/dGJYnW3yLyW1
0I093W0zXkpziOqk0wWbV6+c561jBSvc3eFPaZhQat0FUc3XB/n3DRzG812a
2nO29hh/OX41NMH7+0uux5e6+BcdHfTh4O3Ga4YPbr144vnm+tqyvzrCS3Ip
qLEv/TyrtbhMEe0eC4QXuoEZAw83O2sR4eqZSYr3KUPsYjy/dHIqOi4O0a1i
lx3x2n6j91NoipPt+6uGRpc7J1LDca9T9dHbmCQ/pUF1GQ2K/NcZagLXWP9V
CSP/iL+eyOSvYTum7Z5/+3fxN39d/fXj8wOq008+Pvndx2efPP+7fsLcfLfG
4p+/rtd//NmXP/d/+uPP0Pu1/4v/25c/X35u+Vv/k9Vfp4zaeG79dLTFZ8++
fd9oOi97sv/jgdlPxw0ctz/Q8undI9rD8X72H0J3bHw9yX04/4W/QjR+1UPq
4s0lr733m/vpxwuwwRVz9dYnZo9H6T78/OvddG109Fzxs6fnej2w67jUmIyf
X8Gw/IZHZ338jZu1/jyxqNLt682r1/HazcUV5PEefHOIH1fK4GL9i18sDq48
01ESnQz8xS8+PrlV8Ddx2aHHdXkVvPxr+Ps/BtId6l1fPo3vUxjdm64Okivw
KfbDz/3NQPe8KiHe6BxZwjPGO33APLxPtz1b+5chiVKN2QyWufygYsXfxMkM
fkAd7tpt3eE4jaFf/ub0HI33PAtgXxbFzlZ6uRRjjCfZsGcnN/98kEBX63tX
HKbZuSuFfDEp9swfD31g7U9jOn3+JLbxzXi/ZrhUb5zun6M0Ihs9zQWLOTP2
n//v//V/0zHtBSMONyRiLNebg5JvbNYzTXGnu/54zJ+jdHyst1YK7rniH/s2
CuR9FWtcEk/3fmN+Qdfv1z/TiwNieDjmYX/vHY9PJaIcKjn55OTiIOHZJuK5
/MHxp2N50FvxN4gi1Kt+HwfW+aGx3jQ3kmnLzu+9vhOnLr4aD+Es34IyvdYC
mQQdOFHjUc8X0ha+LC7iPIz0MdyZ6I+tR73wK/Uu1nevuzMEm19bJBX74tkn
4ZUY/jVB8VJmRt9/O+a+dJjt97/9wv8/waMHVxhaxJNQh/d7ffoBbfmzY5jY
8khASOMeZzX+zVjImAM3vy0Hh82GZmbfcbQQ6LixsQzFtnsPgBv26VKj1LWe
Gaeonz4PyY0Hpzf2usx5kHmLFlMVoiymNh+K+KDpxck9Cycl9wC0Ce/luGM4
/lx7eO1ObNS5c8WYv593E01Uxr3wAr6B6S7w3vcumpg5GN/qhm88C3qja1qM
PmVSxhefLd/OYnzyZfzaKvhLf77mEN8o4l8eEs5A6pf/5vo7TjBGScE3x2zU
m93psYzjbnelc847X330i/rsF/EdXKfeehM1fX55mBRv+tC1U6Zlc9ArVIw/
fX24GY8jeVrn3ZV/oeJaebKrS7HkZ7/7/RdZ9vef/vHzyzS5TNOi/Cgvi6ZK
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
3NhkYbBaKltBhZhN4Hx77PJB7Ep3elOYV36nhY15MbsFJ8uiP1YxoCiXqxnm
z1wnLGhxtN1BNubJ2oTtl5793HOe0KLJ3bIbzUQoQhtHeS7tdbKfVrQBWlnK
n2OTYfk5KF7JZVleWdKSdRjz96Megtlphws46EYMauIMHVVBQBmhNqT8kqJV
lMl0QOaZiZnO93bSHCP4y6xzjmU3U0mXr9ACMEw3bPezK3mRxxWuhHtHL36h
VGXOgl/6wVwllbqR7FIpbrqV0fmjZ+5KQJbygfZkh9pfiFjJnrKf3eiTCkOC
4mMBQ3kXRZKdIb/g133kpdYNNaxWlwkzYRthuImS9NSrRmhKf2Judk37BZhZ
Z6RWLU8jw4cXz8Igfjy1UjY956aFVjols42cjOldIZfLBAcGHvTBXfBNCLGu
2TXFITmpvcrbGObnEF8IMFErlZZ3mWTt2j3JwoawilxKLxJtwsrhUxWWLZAo
OOOUqSAZoKwseaGGiiQwZikMIJvLiqnadKs2xCiaLE+BUQA7Eu5gTTEK/4Lb
etN0Hztmk5IeSF+Oau/gVFHhuOTO64zwFMBuMYqQqGlNdhITA2ZR6ZORA6i2
m864gBCoctDInMh2MLmVBZI9fD+dswOmC+kohpZbiy5/XxUUhOKVt2b9EMeG
6myA+URJSx27X6QuSky8nwbqOO23nTQoMqgkY3KrOR7PH7r2T0PTYGnMCJE3
yAWSXWKxuldlgbKIx+X4q7rrgOo/4pARh8lO/RGHjDhMgOGPOGTkbwsYvs5n
nh3mCr2vP2T0R5f9jzlkBAGvEtzrDxlBwKdqzWsPGUHAK/N5/SEjCJhFvQeC
mX3LyIMJ10xl/z47kAxs91bIKsrwsCtZEURcAih9YcvlI/UA2lN0nz9ak1tj
X8rfjwHCOoAO/scAhFUzes3Jwp2xr0u85mThzthPNYofAxDunQa+FiBwiZ2p
3NcDBBZVT/tjAAJ7RBjheoBwDNPcBwhYp7bwSwECXBnKEYJWZr3OrOsiVp/2
qvzAw3a/j1LbNJPRpqZsg7No4+WvMczdKrHYziN/LOo10fvp0H3KfH7MVl9T
Jj9uq69Z3WfyXcpU30x2V43iuXz328kui/psvvvtZHfhi+fy3W8nu+vE/Ll8
99vJ7m0m8FS+++1k96h0P5PvfjvZXQ/yXL777WSXjPjId08W/3Jzp9jywOKf
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
ZQg+JhkJCuW+TBv0/crmfPNDCYtS/1ls0mrRX12QgNcFF/W9izCzG9sgHSdL
i0p3K4TkSuHQKWkD/sQNHbGcmmkMdEGwNQDnfVWqQaBaLyUJMBUIwaMsYDZE
avqk4WkyKTQNUmbaZV15rqXByxvl3CSjwdjei93jBugXaJXBFFgDctqVh9LS
5/SKlUdXpML0cUf/2aZ8QL5vPUhJhyKLYZPM5lunozp1wdlMyyAlK1qEZTi0
MbHqceupuR1x86WqICS8Mh05mcGwlV/YveTFMTVWmdmEuUfZE5hSezMwvcmb
3ItfHcuMjRqHTJDzUUuql2j0wRwIDLIU2kBj32ucylv0Ags9xo3mMb+R3VNh
MHmRrpphhOKZ2MLvhg2sH2E1n742mDdkC1YLphcLUffmhuC+W2qv8l3R1x09
9iTba7o5hHDs4Gs9VXWI2vJqiFU2J++vJIJ8tm96V2sufs5alM8ruGzQMsmT
nVUbbv9whrId9SmaXIXrtYD6Rrn23tchSC/I+uhKilVK0Cr5l1IIJHCYKdU/
742ihVC3TN4N2ZXzCjmMqy/C9+mGwopSWkgZDAR9+6I+0gLLQoXVjWXAt7Ze
WtAtHDEt2En33RYPWTIosKaQeKJFWzkq85lyiXKGRohdoXkPskulWXKu28yw
Lro79oI3z40BnlhFvoplFLCOGvJBF3UXuVYoI7RdOQa4LqWFORNF4Ws2+ZQY
kwxDO0xZ/56U20SjGO7gSVksmxb6q0Et2ExWtfh11khjs/yw7Glb1S3a+Y3L
QbvcyAXqdk3cE6MFHYcp23fwiCosLHmHNdtp1hs41ZW0OTe8mGJPYlJi73KJ
WUETN1g7EupK2hsp5raE3DFwK+cbldAy60tvLbxePtAWziCHMidZ+C4fs48w
3d4ocWirD6W3cuzBLdOSd1F01J0gnFLP1PIPyLsPy7yMtlZvwiXAdT3awmtd
BFzXoy2i+EXAdT3aenNfuu8+4Loebb1Z/bFXEXg/hbaOu7gAuK5HW6sueglw
XY+2cL+3gOvORq9nIFtiGZdrnyGUXbYZtPiLqTAvublGhM8weAf5Al11+qMr
gMq+F9SQJ+q7Fja4Vt88k9wBKTheQ5HGQbaoO63Vd2K1oI6XLfVtKkg6NNny
GmwP0CkpJgvbaBuZcMr2udRR2bvUnbQKPnf5jMLP0LYIzB8kryA+XfN5MMm/
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
6fxWuXnPXb07CQouis2/+258XNSW7z/cLJ68d1CrQrV6n9aT3/7hu6G/f4TW
9MyUe1M+3jKO6h4O2spPBzPp23nz6QNSd+07PfH49BcHk+YP5dPNB3354tAc
rXz5pG//rLfT3/85DzB+vy40yke90fcDLbry8Q+/uKlfPvO5tl5JHdCPzi/v
Tmyv/1RYhIN09Uwtuz75BtLg9u5L5/39zSjzv33oB43r+/Uq11uT83ynB/l0
/O0k7fcVkeoveBfvb5a8wHp5UJUeN8MTfObRjtcHJ6rWvLTPb/8RqzhThn69
Zot2dC3cOL/Ov9BnACf89nc3797+w+nCv3/7u+8+89C374MnlYX8UN5/PlhY
x/tS3y06vvJJT/LDWtXTMQ8mpU9/HAdLd2fzHPf5kLb1MAWWVLbwP95+HP8Z
a/l884/lnWxfVv+7tzKlj6Pf0xr84ZZh9WSn/YarnA2Si/Eceg/6Oj3BJ5bm
w2FZP+grfvX1a4Go9Wuy2V/c6Pt+sziS/+pu84/+t8dX/1//6dcHw+3573/5
Fzf/BVJdXeVsTMftfF60xI8f7YezVZ3YcfV1h32x7B++/O67X2hx37dxWq77
77Wgz35z7JVP4+5t8OTKqMfZDD58+cwOX79fP3xhn34Atfzt3/yGnTH+8Of6
hd9/OL2vm+8+/LA+2sc7qKP/wAbk7/epjrHTL++hhn07366b0PX+j//81+ua
uK6/av8g5/Vu9N/9nn355p9/9f4Lhjb6//JnU25u/Nm/vHnzd//9f/3vN+X2
k+Mv3vz/L6CoVOQIAgA=

-->

</rfc>
