<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.31 (Ruby 3.4.7) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-oprea-x-ppc-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="X-PPC">Cross-Platform Policy Parental Control (X-PPC) for Household Governance</title>

    <author fullname="David Emanuel Oprea">
      <organization>ONE NEW EXPERIENCE</organization>
      <address>
        <email>david.emy@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="February" day="27"/>

    <area>General</area>
    
    <keyword>policy control</keyword> <keyword>household governance</keyword> <keyword>trusted computing</keyword> <keyword>remote attestation</keyword>

    <abstract>


<?line 63?>

<t>This document defines the Cross-Platform Policy Parental Control (X-PPC) protocol for consistent policy enforcement across heterogeneous household endpoints including Desktop PCs, Mobile Devices, Gaming Consoles, Handhelds, and Smart TVs. X-PPC 1.0.0 specifies a 3-tier hybrid trust-chain architecture designed to enable policy enforcement during periods of network unavailability. The protocol defines interoperable message formats, signature requirements, and enforcement semantics that OS and device vendors can implement using platform-appropriate mechanisms.</t>



    </abstract>



  </front>

  <middle>


<?line 68?>

<section anchor="introduction"><name>Introduction</name>

<t>Household networks comprise heterogeneous devices including personal computers, mobile phones, gaming consoles, streaming devices, and smart televisions. Managing consistent security policies across these disparate platforms and operating systems remains a challenge due to device-specific enforcement mechanisms, inconsistent policy semantics, and lack of standardized management interfaces.</t>

<t>The Cross-Platform Policy Parental Control (X-PPC) defines an architecture for consistent policy enforcement across heterogeneous endpoints. X-PPC operates through a 3-tier hybrid trust-chain model (Controller, Satellite, Node) designed to maintain policy enforcement during periods of Controller unavailability.</t>

<t>This document specifies the X-PPC 1.0.0 architecture, including:</t>

<t><list style="symbols">
  <t>The three-tier trust model (Controller, Satellite, Node)</t>
  <t>Remote Mode Signaling and ChildSafe Mode state machine</t>
  <t>Standardized cross-platform policy types (Time Quota, Content Filter, Application Control, Hardware Restriction, Behavioral Signal)</t>
  <t>Cross-platform policy semantics and portability requirements</t>
  <t>Enforcement requirements for process control, network filtering, UI restrictions, and hardware access</t>
  <t>Tamper protection and offline resilience mechanisms</t>
  <t>Universal schema definition for policy manifests</t>
  <t>Compliance levels (X-PPC-CL1, X-PPC-CL2, X-PPC-CL3)</t>
</list></t>

<t>This specification relies on the following normative dependencies: JSON data interchange format <xref target="RFC8259"/>, JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/>, Edwards-Curve Digital Signature Algorithm (EdDSA) <xref target="RFC8032"/>, Base64 encoding <xref target="RFC4648"/>, timestamps per <xref target="RFC3339"/>, CDDL schema notation <xref target="RFC8610"/>, TLS 1.3 transport security <xref target="RFC8446"/>, HTTP semantics <xref target="RFC9110"/>, URN syntax <xref target="RFC8141"/>, ABNF <xref target="RFC5234"/>, and UUID generation <xref target="RFC9562"/>. NTP clock synchronization is discussed per <xref target="RFC5905"/>.  Informative references include CBOR <xref target="RFC8949"/>, the FIPS 186-5 Digital Signature Standard <xref target="FIPS186-5"/>, and the TCG TPM 2.0 specification <xref target="TPM2"/>.</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</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?>

<t>This document uses the following terminology:</t>

<dl>
  <dt>Controller:</dt>
  <dd>
    <t>The authoritative source managing the encrypted Household Manifest. May be instantiated as a local NAS, Router, or Cloud service.</t>
  </dd>
  <dt>Satellite:</dt>
  <dd>
    <t>A verified administrator device (typically a mobile app) used for QR Trust-Pairing and secure remote signaling to Nodes.</t>
  </dd>
  <dt>Node:</dt>
  <dd>
    <t>Any X-PPC-compliant endpoint (PC, Phone, TV, Console) that implements X-PPC policies via its kernel or system services.</t>
  </dd>
  <dt>Household Control Plane:</dt>
  <dd>
    <t>The logical management architecture for policy distribution and enforcement across Nodes.</t>
  </dd>
  <dt>ChildSafe Mode (CSM):</dt>
  <dd>
    <t>A restricted execution environment enforcing strict content filtering, time quotas, and access controls as defined in the policy manifest.</t>
  </dd>
  <dt>Remote Mode Signaling (RMS):</dt>
  <dd>
    <t>The asynchronous signaling protocol enabling state transitions on Nodes triggered by the Satellite or Controller.</t>
  </dd>
  <dt>Policy Manifest:</dt>
  <dd>
    <t>A digitally signed JSON document encoding policies and enforcement rules for a household member. Includes policy definitions, security properties, and cryptographic signature using Ed25519 and JCS canonicalization.</t>
  </dd>
  <dt>Rotation Manifest:</dt>
  <dd>
    <t>A signed document from the Controller communicating changes to cryptographic key material, enabling secure key rotation.</t>
  </dd>
  <dt>Hardware Root of Trust:</dt>
  <dd>
    <t>The device's trusted platform module (TPM), Secure Enclave, or equivalent cryptographic anchor for policy storage protection.</t>
  </dd>
</dl>

</section>
<section anchor="system-architecture"><name>System Architecture</name>

<section anchor="the-three-tier-trust-model"><name>The Three-Tier Trust Model</name>

<t>X-PPC operates through a 3-tier hybrid trust-chain designed to maintain policy enforcement during offline operations:</t>

<t><spanx style="verb">
                      +--------------------------------+
                      |      CONTROLLER                |
                      |   (Source of Truth)            |
                      | Household Manifest             |
                      | Ed25519 Signing                |
                      +------------+-------------------+
                                   |
                  Policy Distribution (Signed Updates)
                                   |
             +---------------------+---------------------+
             |                     |                     |
      +------v------+      +------v------+      +------v------+
      | SATELLITE   |      | SATELLITE   |      | SATELLITE   |
      |(Parental    |      |(Parental    |      |(Parental    |
      |  App)       |      |  App)       |      |  App)       |
      | QR Trusted  |      | QR Trusted  |      | QR Trusted  |
      | Pairing     |      | Pairing     |      | Pairing     |
      +------+------+      +------+------+      +------+------+
             |                    |                    |
        Remote Mode Signaling (RMS - Authenticated)
        State Transition Signals
             |                    |                    |
        +----+--------------------+--------------------+----+
        |                         |                         |
        |   NODES (Enforcement Layer)                       |
        |                                                   |
        | +--------------+ +--------------+ +------------+  |
        | | Windows PC   | | Linux/Steam  | |    iOS     |  |
        | |    Node      | |     OS Node  | |  Android   |  |
        | |              | |              | |    Node    |  |
        | +--------------+ +--------------+ +------------+  |
        |                                                   |
        | +--------------+ +--------------+                 |
        | |  Smart TV    | |   Gaming     |                 |
        | |    Node      | |  Console     |                 |
        | |              | |    Node      |                 |
        | +--------------+ +--------------+                 |
        |                                                   |
        | * Policy Caching (TPM/Secure Enclave)             |
        | * Signature Verification                          |
        | * Offline Resilience                              |
        | * State Consistency Watchdog                      |
        |                                                   |
        +---------------------------------------------------+
</spanx></t>

<section anchor="heartbeat-message-schema-normative"><name>Heartbeat Message Schema (Normative)</name>

<t>The Heartbeat message format used for Node-to-Controller quota synchronization is defined using CDDL (RFC 8610). This schema is normative; implementations <bcp14>MUST</bcp14> conform to the following structure when transmitting or receiving Heartbeat messages.</t>

<t><spanx style="verb">cddl
; CDDL Schema for X-PPC Quota Heartbeat (Normative)
Heartbeat = {
  subject_id: tstr,              ; Household member identifier (pseudonymized)
  device_id: tstr,               ; Unique Node identifier (UUID or hardware-derived ID)
  consumed_seconds: uint,        ; Seconds consumed since last sync (non-negative integer)
  remaining_allocated: uint,     ; Seconds remaining in current pre-allocation
  request_type: "REALLOCATION" / "FINAL" / "SYNC",
                                 ; REALLOCATION: request fresh allocation
                                 ; FINAL: session termination report
                                 ; SYNC: periodic sync without reallocation request
  nonce: tstr,                   ; Cryptographic nonce (&gt;=128 bits entropy; UUID v4 or random hex)
  monotonic_seq: uint,           ; Strictly increasing sequence number for this session
  session_id: tstr,              ; Unique session identifier (issued by Controller at session start)
  ? protocol_version: tstr       ; Optional X-PPC protocol version (e.g., "1.0.0") for capability negotiation
}
</spanx></t>

<t><strong>Monotonic-Seq Lifecycle (Normative)</strong>:</t>

<figure><artwork type="ascii-art"><![CDATA[
PHASE 0: Session Init
=============================================
 Node                          Controller
  |                               |
  +-- SessionStartReq(subj, ---->|
  |   dev, nonce=N1, issued_at)  |
  |                       (Validate N1)
  |                       (Gen session_id)
  |                       [Set exp_seq=0]
  |<-- SessionStartResp(--------+
  |    sid=ABC123, nonce=N1,     |
  |    initial_exp_seq=0)        |
  [Store sid, exp_seq=0]         |


PHASE 1: First Heartbeat (seq=0)
=============================================
 Node                          Controller
  |                               |
  (Generate HB1)                  |
  +-- HB(seq=0, sid=ABC123, ---->|
  |   nonce=HB1, consumed=0)     |
  |               [Dedup: (*,*,ABC123,0,HB1)]
  |               [Verify seq(0)==exp(0) Y]
  |               [Update exp_seq=1]
  |<-- ACK(alloc=600, -----------+
  |    next_exp_seq=1)            |
  [Store cache={HB1->0}]         |


PHASE 2: Subsequent Heartbeats
=============================================
 Node                          Controller
  |                               |
  (Generate HB2)                  |
  +-- HB(seq=1, sid=ABC123, ---->|
  |   nonce=HB2, consumed=45)    |
  |               [Dedup: (*,*,ABC123,1,HB2)]
  |               [Verify seq(1)==exp(1) Y]
  |               [Update exp_seq=2]
  |<-- ACK(alloc=555) -----------+
  |                               |
  [Update cache={HB2->1}]        |


PHASE 3: Retransmit (No Double-Count)
=============================================
 Node                          Controller
  |                               |
  [Network timeout]               |
  [HB seq=1 lost]                 |
  |                               |
  +-- HB(seq=1, sid=ABC123, ---->|
  |   nonce=HB2, consumed=45)    |
  |               [RETRANSMIT w/ SAME nonce]
  |               [Dedup (*,*,ABC123,1,HB2)]
  |               [FOUND IN CACHE]
  |               [Return cached result]
  |<-- ACK(alloc=555) -----------+
  |                               |
  [Dedup OK - no double-count]   |


PHASE 4: Replay Attack Rejected
=============================================
 Node                          Controller
  |                               |
  +-- HB(seq=1, sid=ABC123, ---->|
  |   nonce=HB2)                  |
  |               [exp_seq now = 3]
  |               [seq(1)!=exp(3) -> N]
  |               [In cache -> seen before]
  |<-- REJECT(DUP_SEQUENCE) -----+
  |                               |


PHASE 5: Session Reset (Reboot)
=============================================
 Node                          Controller
  |                               |
  [Device reboot detected]        |
  [sid=ABC123 is stale]           |
  [Clear state, cache, exp_seq]   |
  |                               |
  +-- SessionStartReq(N2) ------>|
  |                       (Validate N2)
  |                       (Gen NEW sid=XYZ789)
  |<-- SessionStartResp(---------+
  |    sid=XYZ789, nonce=N2,      |
  |    initial_exp_seq=0)         |
  |                               |
  [New session established]       |
  |                               |
  +-- HB(seq=0, sid=XYZ789, ---->|
  |   nonce=HB3)                  |
  |       [seq=0 for new session] |
  |       [exp_seq increments]    |
  |<-- ACK ----------------------+
]]></artwork></figure>

<t><list style="symbols">
  <t><strong>Initialization</strong>: Set to 0 when the Controller issues the initial allocation and <spanx style="verb">session-id</spanx> at session start. The first Heartbeat <bcp14>MUST</bcp14> be transmitted with <spanx style="verb">seq=0</spanx>; the Controller's <spanx style="verb">initial_expected_seq</spanx> <bcp14>MUST</bcp14> be 0 to match this first heartbeat.</t>
  <t><strong>Increment Rule</strong>: The Node <bcp14>MUST</bcp14> increment <spanx style="verb">monotonic-seq</spanx> by exactly 1 for each Heartbeat transmitted within the same <spanx style="verb">session-id</spanx>.</t>
  <t><strong>Controller Validation</strong>: Controllers <bcp14>MUST</bcp14> reject Heartbeats where <spanx style="verb">monotonic-seq</spanx> is not exactly <spanx style="verb">previous_seq + 1</spanx> for the same (<spanx style="verb">subject_id</spanx>, <spanx style="verb">device_id</spanx>, <spanx style="verb">session_id</spanx>) tuple. Rejected Heartbeats <bcp14>MUST</bcp14> generate an audit event of type <spanx style="verb">HEARTBEAT_REPLAY_REJECTED</spanx>. The Controller increments its expected <spanx style="verb">monotonic-seq</spanx> counter only upon successful acceptance of a Heartbeat; rejected Heartbeats do not advance the expected sequence.</t>
  <t><strong>Session Reset</strong>: On device reboot, session timeout, or explicit session termination, the Node <bcp14>MUST</bcp14> request a fresh <spanx style="verb">session_start</spanx> from the Controller. The Controller issues a new <spanx style="verb">session-id</spanx> and resets the expected <spanx style="verb">monotonic-seq</spanx> to 0.</t>
  <t><strong>Replay Protection</strong>: This lifecycle mitigates replay attacks: captured Heartbeats from old sessions are rejected due to stale <spanx style="verb">session_id</spanx>, and replayed Heartbeats within a session are rejected due to non-increasing <spanx style="verb">monotonic_seq</spanx>.</t>
  <t><strong>Idempotent Retransmission (Normative)</strong>: When a Heartbeat is lost or the response is not received, the Node <bcp14>MUST</bcp14> retransmit the same Heartbeat with the identical monotonic_seq and nonce. The Controller <bcp14>MUST</bcp14> treat this retransmission as a duplicate, apply deduplication based on the 5-tuple (subject_id, device_id, session_id, seq, nonce), and return the cached result of the previous acceptance without re-applying quota accounting or state transitions. This ensures idempotency: packet loss does not cause quota double-counting or state inconsistency. If quota tracking drift occurs despite these protections, the Node <bcp14>MAY</bcp14> initiate a fresh session with <spanx style="verb">session_start</spanx> to resynchronize.</t>
</list></t>

<t><strong>Field Constraints</strong>:</t>

<t><list style="symbols">
  <t><spanx style="verb">subject_id</spanx> and <spanx style="verb">device_id</spanx>: <bcp14>MUST</bcp14> be non-empty strings. <bcp14>SHOULD</bcp14> be pseudonymized identifiers (UUIDs or hashed identifiers) per Privacy Considerations.</t>
  <t><spanx style="verb">consumed_seconds</spanx> and <spanx style="verb">remaining_allocated</spanx>: <bcp14>MUST</bcp14> be non-negative integers representing seconds.</t>
  <t><spanx style="verb">nonce</spanx>: <bcp14>MUST</bcp14> be a unique value generated per Heartbeat sequence that is REUSED for retransmission attempts of the same sequence. That is, when a Node first sends a Heartbeat with <spanx style="verb">seq=N</spanx>, it generates a nonce and transmits it. If that Heartbeat is lost and the Node retransmits the same <spanx style="verb">seq=N</spanx>, it <bcp14>MUST</bcp14> transmit the identical nonce (regenerating a new nonce is forbidden and breaks idempotency). A Heartbeat is uniquely identified by the tuple (<spanx style="verb">subject_id</spanx>, <spanx style="verb">device_id</spanx>, <spanx style="verb">session_id</spanx>, <spanx style="verb">monotonic_seq</spanx>, <spanx style="verb">nonce</spanx>). Controllers <bcp14>MUST</bcp14> deduplicate based on this tuple and <bcp14>MUST NOT</bcp14> apply quota accounting or state transitions twice for the same unique heartbeat. If a Node retransmits a Heartbeat with the same seq and nonce after a suspected lost ACK, the Controller recognizes it as a duplicate, applies the state change only once, and returns the same response as before (or idempotency confirmation). This ensures that packet loss does not cause quota double-counting. Nodes <bcp14>MUST</bcp14> implement nonce reuse persistence (store <spanx style="verb">nonce -&gt; seq</spanx> mapping in local cache) to survive application restarts during active sessions.  <vspace blankLines='1'/>
<strong>Dedup Result Cache Lifetime</strong> (Normative): When a Heartbeat is accepted (seq matches expected and is not in the dedup cache), the Controller <bcp14>MUST</bcp14> cache the response (allocation status, next_expected_seq, and any audit event) under the 5-tuple key (subject_id, device_id, session_id, seq, nonce) for the entire duration of the session (session_timeout or until session_id is explicitly terminated). Controllers <bcp14>MAY</bcp14> evict dedup cache entries only after: (a) the session expires (no Heartbeat received within session_timeout), OR (b) the Node explicitly sends a FINAL-type Heartbeat terminating the session. This invariant ensures that any Node retransmitting with a valid session_id and seq can reliably receive the cached response. For Nodes with very long gaps between Heartbeats (e.g., sleeping devices), the cache lifetime equals the session lifetime. Cache entries <bcp14>MUST</bcp14> survive Controller process crashes, reboots, and restarts via persistent storage to maintain idempotency guarantees across restarts.</t>
  <t><spanx style="verb">session_id</spanx>: <bcp14>MUST</bcp14> be issued by the Controller and <bcp14>MUST</bcp14> remain constant for the duration of a Node's active quota session.</t>
  <t><spanx style="verb">protocol_version</spanx>: If present, <bcp14>MUST</bcp14> be a SemVer 2.0.0 version string (e.g., "1.0.0"). Controllers <bcp14>MAY</bcp14> use this field for capability negotiation and forward compatibility.</t>
</list></t>

<t><strong>Encoding</strong>: Heartbeat messages <bcp14>MUST</bcp14> be encoded as UTF-8 JSON and transmitted via HTTPS POST to the Controller's Heartbeat endpoint (see "Protocol Bindings and Transport").</t>

<section anchor="session-initialization-sessionstart-schema-normative"><name>Session Initialization (session_start) Schema (Normative)</name>

<t>Before transmitting the first Heartbeat with <spanx style="verb">seq=0</spanx>, a Node <bcp14>MUST</bcp14> initiate a session by performing a session_start handshake with the Controller. This handshake establishes the session_id and initial expected sequence number.</t>

<t><strong>Node Request</strong> (Node -&gt; Controller):</t>

<t><spanx style="verb">cddl
SessionStartRequest = {
  subject_id: tstr,              ; Household member identifier (pseudonymized)
  device_id: tstr,               ; Unique Node identifier (UUID or hardware-derived ID)
  nonce: tstr,                   ; Unique nonce for replay protection (UUID or random hex, &gt;=128 bits)
  issued_at: tstr,               ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  ? protocol_version: tstr,      ; Optional X-PPC protocol version (e.g., "1.0.0")
  ? device_capabilities: tstr    ; Optional device capability string (e.g., "CL3:mTLS:TPM")
}
</spanx></t>

<t><strong>Controller Response</strong> (Controller -&gt; Node):</t>

<t><spanx style="verb">cddl
SessionStartResponse = {
  session_id: tstr,              ; Unique session identifier (generated by Controller)
  nonce: tstr,                   ; Echo of the request nonce for request-response binding
  initial_expected_seq: uint,    ; Initial expected sequence for first heartbeat (MUST be 0)
  allocation_seconds: uint,      ; Initial quota pre-allocation in seconds
  issued_at: tstr,               ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  expires_at: tstr,              ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  ? next_sync_deadline: tstr,    ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  signature: tstr                ; Base64 (RFC 4648 Section 4) Ed25519 signature (see Signature Encoding)
}
</spanx></t>

<t><strong>Validation by Node</strong>:
1. Verify the Controller's Ed25519 signature over the JCS-canonicalized response (excluding the signature field)
2. Validate <spanx style="verb">nonce</spanx> matches the request nonce (<bcp14>MUST</bcp14> be identical) -- <strong>primary replay defense</strong>
3. Validate <spanx style="verb">issued_at</spanx> timestamp freshness: <bcp14>SHOULD</bcp14> be recent (within +/-600 seconds / +/-10 minutes of local time) IF the Node has access to a secure time service. If secure time is unavailable (see Clock Integrity section), Nodes <bcp14>MAY</bcp14> relax this check or treat clock misalignment as a warning rather than rejection. <strong>Rationale</strong>: Replay defense relies primarily on nonce caching (step 2), not wall-clock checks. Wall-clock validation is a secondary defense to catch far-future timestamps, but should not be a hard blocker on devices with clock drift issues. <strong>Replay Protection Invariant</strong>: Replay protection <bcp14>MUST NOT</bcp14> rely solely on wall-clock timestamp validation. The nonce cache (step 2) is the primary replay defense; timestamp freshness is a defense-in-depth measure. Implementations that cannot validate timestamps (e.g., no secure time source) remain protected by nonce-based dedup.
4. Store <spanx style="verb">session_id</spanx> and initialize expected_seq counter to <spanx style="verb">initial_expected_seq</spanx> (which <bcp14>MUST</bcp14> be 0 for the first session)</t>

<t><strong>Validation by Controller</strong>:
1. Verify requestor is an authorized Device (via mutual TLS for CL3, or certificate pinning for all levels)
2. <strong>Controller Nonce Caching (Anti-Replay Defense)</strong>: Check <spanx style="verb">nonce</spanx> against recent SessionStart requests to prevent network-level replay attacks. Controllers <bcp14>MUST</bcp14> maintain a deduplicated nonce cache for at least 24 hours or the configured session_timeout, whichever is longer. Controllers <bcp14>MUST</bcp14> implement this as a server-side cache keyed by <spanx style="verb">(subject_id, device_id, nonce)</spanx> to detect and reject accidental retransmissions of SessionStart requests (e.g., due to network timeouts on the client side). If an incoming SessionStart request has a nonce already present in the cache, the Controller <bcp14>MUST</bcp14> return the cached session_id response rather than re-initializing.</t>

<t><list style="numbers" type="1">
  <t>Generate a unique <spanx style="verb">session_id</spanx> and set <spanx style="verb">initial_expected_seq = 0</spanx> (normative)</t>
  <t>Echo the request <spanx style="verb">nonce</spanx> in the response to enable cryptographic request-response binding</t>
  <t>Sign the response using Ed25519 over JCS-canonicalized response (excluding signature field)</t>
  <t>Persist the tuple (<spanx style="verb">subject_id</spanx>, <spanx style="verb">device_id</spanx>, <spanx style="verb">session_id</spanx>, <spanx style="verb">initial_expected_seq</spanx>=0) in durable storage for replay protection across controller reboots</t>
</list></t>

<t><strong>Node-Side SessionStart Nonce Management (Duplicate Initialization Prevention)</strong>: When a Node initiates SessionStart requests, it <bcp14>MUST</bcp14> maintain a separate local nonce cache to avoid unintended duplicate session initialization in fault scenarios:
   - <strong>Cache Capacity</strong>: Nodes <bcp14>SHOULD</bcp14> retain at least the last 100 unique nonces per subject_id to protect against burst retransmissions or connection failures
   - <strong>Retention Window</strong>: Nodes <bcp14>SHOULD</bcp14> retain cached SessionStart nonces for at least 24 hours (86,400 seconds) or until 10 minutes after the corresponding session_id is terminated, whichever is longer
   - <strong>Eviction Policy</strong>: Nodes implementing capacity limits <bcp14>SHOULD</bcp14> use FIFO or LRU eviction; do not silently drop recent entries
   - <strong>Persistence</strong>: For CL2+, Nodes <bcp14>SHOULD</bcp14> persist nonce cache to durable storage to survive application restarts and reboots. For CL1, in-memory persistence is acceptable.
   - <strong>Deduplication Logic</strong>: If a Node receives a SessionStart response with a session_id that was already successfully established for a cached nonce, the Node <bcp14>SHOULD</bcp14> treat the response as a duplicate acknowledgment and continue using the existing session_id without re-initializing. This prevents accidental session proliferation if responses are delayed or retried.</t>

<t><strong>Transport Identity Binding (Normative)</strong>: Controllers <bcp14>MUST</bcp14> bind each SessionStartRequest to an authenticated transport identity to prevent session metadata leakage via replay:
- <strong>CL3</strong>: The <spanx style="verb">(subject_id, device_id)</spanx> tuple <bcp14>MUST</bcp14> be cryptographically bound to the mTLS client certificate presented during the TLS handshake. Controllers <bcp14>MUST</bcp14> reject SessionStart requests where the claimed <spanx style="verb">device_id</spanx> does not match the authenticated client certificate identity.
- <strong>CL2</strong>: The <spanx style="verb">(subject_id, device_id)</spanx> tuple <bcp14>MUST</bcp14> be bound to a device key or client certificate. Controllers <bcp14>MUST</bcp14> reject requests where the transport identity does not match the claimed tuple. If mTLS is not available, the Node <bcp14>MUST</bcp14> present a device attestation token (signed by a device-specific key established during trust bootstrap) in the <spanx style="verb">device_capabilities</spanx> field, and the Controller <bcp14>MUST</bcp14> validate this token before issuing a session.
- <strong>CL1</strong>: Gateway-proxied requests inherit the Gateway's authenticated transport identity. The Gateway <bcp14>MUST</bcp14> authenticate end-devices via its own mechanism (e.g., MAC-based or IP-based binding within the local network) and <bcp14>MUST NOT</bcp14> forward SessionStart requests from unauthenticated sources.
- <strong>Unauthenticated Rejection</strong>: SessionStart requests received over unauthenticated transport (no client certificate, no device attestation, no gateway binding) <bcp14>MUST</bcp14> be rejected with HTTP 401 Unauthorized. Controllers <bcp14>MUST NOT</bcp14> return session metadata (session_id, allocation_seconds, expires_at) to unauthenticated requestors.</t>

<t><strong>Transport</strong>: Session_start <bcp14>MUST</bcp14> use HTTPS POST to the Controller's <spanx style="verb">/session-start</spanx> endpoint. For CL3 deployments, mutual TLS authentication is <bcp14>REQUIRED</bcp14>. For CL1/CL2, certificate pinning is <bcp14>RECOMMENDED</bcp14>.</t>

<t><strong>Controller State Persistence</strong>: Controllers <bcp14>MUST</bcp14> persist session state to durable storage (database, filesystem, or stable log) to survive graceful shutdowns and reboots. Upon restart, Controllers <bcp14>MUST</bcp14> reconstruct in-memory session state from persistent storage. If a Node sends a Heartbeat for a <spanx style="verb">session_id</spanx> that is not in the Controller's recovered state, the Controller <bcp14>MUST</bcp14> respond with HTTP 409 Conflict and reason "Unknown Session" to signal the Node to perform a fresh <spanx style="verb">session_start</spanx>. This prevents quota double-counting across Controller reboots.</t>

<t><strong>Normative Invariant: Dedup Cache Persistence on Restart</strong>: The dedup cache (5-tuple entries with cached responses) <bcp14>MUST</bcp14> be persisted to durable storage. If a Controller restarts and cannot recover the dedup cache from persistent storage (e.g., database corruption, failed backup recovery), the Controller <bcp14>MUST</bcp14> treat ALL sessions as suspect and <bcp14>MUST</bcp14> reply with 409 Unknown Session to any incoming Heartbeat, forcing Nodes to re-establish sessions. <strong>Rationale</strong>: If a Heartbeat seq=N was received and cached, but the cache is lost on restart, accepting a subsequent retransmit of seq=N would cause the quota to be deducted twice -- once before restart and again after. This is a "ghost session" double-count scenario that can only occur in failure modes. Forcing re-establishment is the safe failure mode.</t>

<t><strong>Graceful Recovery from Persistence Failure (Normative)</strong>: If persistent state cannot be safely recovered (e.g., storage corruption on a low-end home router or NAS device), the Controller <bcp14>MUST</bcp14> invalidate all active sessions and require fresh <spanx style="verb">session_start</spanx> handshakes, but <bcp14>MUST NOT</bcp14> enter a household-wide locked state solely due to persistence failure. Specifically:
- The Controller <bcp14>MUST</bcp14> respond with 409 Unknown Session to all incoming Heartbeats until sessions are re-established.
- The Controller <bcp14>MUST</bcp14> accept new <spanx style="verb">session_start</spanx> requests normally (fresh sessions start with seq=0 and new dedup state).
- The Controller <bcp14>MUST</bcp14> log <spanx style="verb">PERSISTENCE_RECOVERY_FAILED</spanx> with details of the failure and the number of invalidated sessions.
- Nodes receiving 409 responses <bcp14>MUST</bcp14> perform fresh <spanx style="verb">session_start</spanx> and resume normal operation. This ensures that a storage failure causes temporary session disruption (requiring re-handshake) but does NOT cause a household-wide denial of service or permanent locked state.
- <strong>Rationale</strong>: Low-end Controllers (home routers, NAS devices) may lack transactional durable storage. A crash mid-write could corrupt the dedup table, making full recovery impossible. The safe behavior is session invalidation and re-establishment, not household lockdown.
- <strong>Storage Recommendation</strong>: Controllers <bcp14>SHOULD</bcp14> use transactional durable storage (e.g., a database with write-ahead logging, or an ACID-compliant key-value store) for the dedup cache and session state to minimize the frequency of this failure mode. Controllers that use non-transactional storage (flat files, memory-mapped I/O without fsync) <bcp14>MUST</bcp14> document this limitation in their compliance statement and <bcp14>MUST</bcp14> implement the graceful recovery path above.</t>

<t><strong>Session Timeout and Minimum Persistence Windows (Normative)</strong>:
- <strong>Session Timeout Default</strong>: Sessions expire after 24 hours of inactivity (no Heartbeat received). Controllers <bcp14>MUST</bcp14> allow this timeout to be configured per household policy but <bcp14>MUST NOT</bcp14> use a timeout shorter than 1 hour.
- <strong>Controller Dedup Cache Retention</strong>: Controllers <bcp14>MUST</bcp14> retain the 5-tuple dedup cache entry (subject_id, device_id, session_id, seq, nonce) and its cached response for the entire lifetime of the session (i.e., until session_id explicitly expires or is terminated). <strong>Ghost-Session Prevention (Normative)</strong>: Dedup cache entries <bcp14>MUST</bcp14> expire strictly AFTER session_timeout has elapsed since the last accepted Heartbeat for that session. Controllers <bcp14>MUST NOT</bcp14> evict dedup entries at or before the session_timeout boundary -- the retention window <bcp14>MUST</bcp14> be strictly greater than session_timeout (recommended: session_timeout + 60 seconds) to eliminate boundary-condition races where a retransmission arrives at the exact timeout instant. This ensures that any Node retransmitting after a network outage or reboot will find its dedup entry and not be treated as a new message. Cache entries <bcp14>MUST</bcp14> persist to durable storage to survive Controller reboots within the session lifetime. Premature cache eviction risks accepting duplicate Heartbeats as new:
  - If seq=5 was accepted and cached, the cache entry <bcp14>MUST</bcp14> remain valid for any subsequent retransmit of seq=5 during the session, regardless of how many higher seq values have been processed.
  - Expected sequence state and dedup entries <bcp14>MUST</bcp14> be persisted to durable storage to survive Controller reboots within the session lifetime.
- <strong>Node Session State Persistence</strong>: Nodes <bcp14>MUST</bcp14> persist the current (subject_id, device_id, session_id, expected_seq, last_sent_nonce, last_sent_seq) tuple to durable storage for CL2+. For CL1 (network-only), in-memory persistence is acceptable. This ensures that cold boot cannot cause a Node to "forget" session state and inadvertently send an old seq that a newly-online Controller might accept as new (sequence reset vulnerability).
- <strong>Nonce Cache Persistence</strong>: Nodes <bcp14>MUST</bcp14> retain nonce-&gt;seq mapping in local cache for at least the session lifetime. Nodes operating CL3 <bcp14>MUST</bcp14> persist this to tamper-resistant storage (TPM, Secure Enclave) to survive hostile reboots.</t>

<t><strong>Example Request</strong> (informative):
<spanx style="verb">json
{
  "subject_id": "household_user_alpha",
  "device_id": "device_windows_01",
  "nonce": "f4a3b2c1-9876-5432-1098-abcdef123456",
  "issued_at": "2026-02-24T14:30:00Z",
  "protocol_version": "1.0.0",
  "device_capabilities": "CL3:mTLS:TPM"
}
</spanx></t>

<t><strong>Example Response</strong> (informative):
<spanx style="verb">json
{
  "session_id": "sess_2026-02-24_14-30-ABC123",
  "nonce": "f4a3b2c1-9876-5432-1098-abcdef123456",
  "initial_expected_seq": 0,
  "allocation_seconds": 600,
  "issued_at": "2026-02-24T14:30:01Z",
  "expires_at": "2026-02-24T15:30:01Z",
  "next_sync_deadline": "2026-02-24T14:31:00Z",
  "signature": "Base64Ed25519SignatureOverCanonicalizedResponse"
}
</spanx></t>

</section>
<section anchor="heartbeat-response-schema-normative"><name>Heartbeat Response Schema (Normative)</name>

<t>When a Node transmits a Heartbeat to the Controller, the Controller responds with an acknowledgment containing the updated quota allocation and next expected sequence number. The response <bcp14>MUST</bcp14> conform to the following CDDL schema.</t>

<t><strong>Controller Response</strong> (Controller -&gt; Node):</t>

<t><spanx style="verb">cddl
HeartbeatResponse = {
  session_id: tstr,              ; Echo of the request session_id for request-response binding
  nonce: tstr,                   ; Echo of the request nonce confirming delivery
  next_expected_seq: uint,       ; Expected sequence number for next heartbeat (typically seq+1 if accepted)
  allocation_seconds: uint,      ; Remaining seconds in current quota period after accounting for consumed_seconds
  issued_at: tstr,               ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  ? reallocation_triggered: bool ; Optional flag (true if fresh reallocation granted, false if period continues)
  ? expires_at: tstr,            ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  ? next_sync_deadline: tstr,    ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  signature: tstr                ; Base64 (RFC 4648 Section 4) Ed25519 signature (see Signature Encoding)
}
</spanx></t>

<t><strong>Validation by Node</strong>:
1. Verify the Controller's Ed25519 signature over the JCS-canonicalized response (excluding the signature field)
2. Verify the <spanx style="verb">session_id</spanx> and <spanx style="verb">nonce</spanx> match the request to ensure binding
3. Verify the <spanx style="verb">next_expected_seq</spanx> is exactly <spanx style="verb">(current_seq + 1)</spanx> to detect tampering or out-of-order responses
4. Compare <spanx style="verb">allocation_seconds</spanx> to the Node's locally-cached expected remaining allocation; if significantly discrepant (&gt;5% delta), log a warning and update local state to match Controller's authoritative value
5. Persist updated allocation and next sequence state to durable storage</t>

<t><strong>Encoding</strong>: HeartbeatResponse messages <bcp14>MUST</bcp14> be encoded as UTF-8 JSON and transmitted via HTTPS in the response body to the Node's Heartbeat endpoint.</t>

<t><strong>Example Request</strong> (informative):
<spanx style="verb">json
{
  "subject_id": "household_user_alpha",
  "device_id": "device_windows_01",
  "consumed_seconds": 120,
  "remaining_allocated": 480,
  "request_type": "SYNC",
  "nonce": "d9c8b7a6-5432-1098-fedc-ba9876543210",
  "monotonic_seq": 5,
  "session_id": "sess_2026-02-24_14-30-ABC123",
  "protocol_version": "1.0.0"
}
</spanx></t>

<t><strong>Example Response</strong> (informative):
<spanx style="verb">json
{
  "session_id": "sess_2026-02-24_14-30-ABC123",
  "nonce": "d9c8b7a6-5432-1098-fedc-ba9876543210",
  "next_expected_seq": 6,
  "allocation_seconds": 480,
  "issued_at": "2026-02-24T14:35:02Z",
  "reallocation_triggered": false,
  "expires_at": "2026-02-24T15:30:01Z",
  "next_sync_deadline": "2026-02-24T14:41:00Z",
  "signature": "Base64Ed25519SignatureOverCanonicalizedResponse"
}
</spanx></t>

<t><strong>HTTP Status Codes and Recovery (Normative)</strong>:</t>

<t>Nodes <bcp14>MUST</bcp14> implement deterministic recovery logic based on HTTP response status codes from both session/start and heartbeat endpoints. The following status codes and recovery behaviors are mandatory for OS-vendor compatibility:</t>

<t><list style="symbols">
  <t><spanx style="verb">200 OK</spanx>: Request processed successfully; response includes session_id or heartbeat acknowledgment.</t>
  <t><spanx style="verb">400 Bad Request</spanx>: Malformed request (missing required fields, invalid JSON, invalid timestamp format, or invalid nonce format). Node <bcp14>MUST</bcp14> validate request schema locally before transmission and log 400 responses for diagnostics. Node <bcp14>MAY</bcp14> retry after fixing schema errors but <bcp14>SHOULD NOT</bcp14> apply exponential backoff.</t>
  <t><spanx style="verb">401 Unauthorized</spanx>: Device not authenticated or certificate validation failed (e.g., mTLS client cert rejected). Node <bcp14>MUST</bcp14> log the error, check local credential cache, and if no local cached policy, <bcp14>MUST</bcp14> block access. Node <bcp14>SHOULD</bcp14> retry after 60 seconds OR if local credentials are refreshed.</t>
  <t><spanx style="verb">403 Forbidden</spanx>: Device authenticated but not authorized (e.g., device not registered in household, or exceeds per-device session limit). Node <bcp14>MUST</bcp14> log the error and block access. Node <bcp14>SHOULD NOT</bcp14> retry immediately; retry after 1 hour OR after administrative re-provisioning of device.</t>
  <t><spanx style="verb">409 Conflict</spanx> (with reason "Unknown Session"): Heartbeat received for unknown session_id. Node <bcp14>MUST</bcp14> discard the session_id, perform a fresh session_start, and establish a new session.</t>
  <t><spanx style="verb">422 Unprocessable Entity</spanx>: Request schema valid but semantically invalid (e.g., signature validation failed, nonce validation failed, or policy manifest rejected due to signature or schema error). Controllers <bcp14>MUST</bcp14> include a JSON error response body with at minimum {<spanx style="verb">error</spanx>: machine-readable error code string (e.g., <spanx style="verb">"SIGNATURE_INVALID"</spanx>, <spanx style="verb">"NONCE_REPLAY"</spanx>, <spanx style="verb">"SCHEMA_SEMANTIC_ERROR"</spanx>), <spanx style="verb">detail</spanx>: human-readable description}. This structured error body ensures that upstream proxies or WAFs that may also emit 422 responses can be distinguished from X-PPC-originated 422 responses by the presence of the <spanx style="verb">error</spanx> field. Node <bcp14>MUST</bcp14> log the error (including the <spanx style="verb">error</spanx> code if present), NOT retry with same parameters, and continue enforcing cached policy. Retry only after receiving out-of-band re-provisioning signal from administrator.</t>
  <t><spanx style="verb">429 Too Many Requests</spanx>: Controller has applied rate limiting. Node <bcp14>MUST</bcp14> apply exponential backoff with initial delay of 1 second, doubling up to a maximum of 5 minutes between retries. Once backoff is triggered, Node <bcp14>MUST</bcp14> continue enforcing cached policy without interruption.</t>
  <t><spanx style="verb">503 Service Unavailable</spanx>: Temporary Controller failure (maintenance, overload, or network issue). Node <bcp14>MUST</bcp14> apply exponential backoff (initial 5 seconds, max 5 minutes) and continue enforcing cached policy.</t>
  <t><strong>Other Status Codes</strong> (5xx errors not listed, or unexpected codes): Node <bcp14>MUST</bcp14> log the status code, treat as temporary failure (like 503), apply exponential backoff, and continue enforcing cached policy.</t>
</list></t>

<t><strong>Exponential Backoff Algorithm (HTTP Status Codes)</strong>: For transient HTTP status code errors (429, 503), initial delay = 1 second for 429, 5 seconds for 5xx. Double delay on each retry, with maximum delay capped at 5 minutes (300 seconds). After reaching maximum backoff, Node <bcp14>MAY</bcp14> continue retrying at 5-minute intervals indefinitely or until administrative intervention.</t>

<t><strong>Distinct Backoff Domains</strong>: HTTP transient error backoff (300-second maximum) and Heartbeat sync backoff (3600-second maximum, per RMS Signal Processing section) are intentionally separate domains. Transient HTTP errors (429, 503) typically resolve within seconds to minutes; longer backoff only delays recovery. Heartbeat sync failures may indicate network partitions or Controller unavailability requiring extended patience to preserve cached policy and session state. Implementations <bcp14>MUST NOT</bcp14> conflate these domains or apply HTTP backoff caps to heartbeat synchronization logic.</t>

<t><list style="numbers" type="1">
  <t><strong>Controller (Source of Truth)</strong>: Maintains the encrypted Household Manifest. May be deployed as a local Network-Attached Storage device, home router, or cloud-based service. The Controller digitally signs all policy distributions using Ed25519 per FIPS 186-5; manifests <bcp14>MUST</bcp14> be canonicalized with JCS (RFC 8785) before signing.</t>
  <t><strong>Satellite (Administrator Interface)</strong>: A verified device (e.g., parental control mobile app) authorized to signal state transitions. The Satellite establishes trust via QR-code based pairing and communicates with Nodes through authenticated channels.</t>
  <t><strong>Node (Enforcement Point)</strong>: Any X-PPC-compliant endpoint that enforces policies using platform-appropriate privileged mechanisms (e.g., system services, device management APIs, sandboxing frameworks). Nodes validate policy signatures against the Controller's public key.</t>
</list></t>

</section>
</section>
<section anchor="trust-bootstrap-and-registration"><name>Trust Bootstrap and Registration</name>

<t>The initial trust bootstrap sequence <bcp14>MUST</bcp14> be explicit and auditable. Implementations <bcp14>MUST</bcp14> support one of the following bootstrap modes:</t>

<t><list style="symbols">
  <t><strong>Direct Controller QR</strong>: The Controller exposes its public key fingerprint (and optional signed attestation) as a QR code or printable token. A Node or Satellite scans the QR to obtain and locally pin the Controller public key.</t>
  <t><strong>Satellite-as-RA (Registration Authority)</strong>: The Satellite acts as an RA for household setups where the Controller cannot present a QR directly. In this mode:
  <list style="numbers" type="1">
      <t>The Controller publishes its public key to the Satellite over an authenticated channel (e.g., local network pairing or cloud-authenticated upload).
    2. The Satellite produces a Registration Assertion containing the Controller public key fingerprint, a timestamp, and the Satellite's own attestation signature.
    3. The Node, upon receiving the Registration Assertion (typically via QR, Bluetooth, or BLE), verifies the Satellite's attestation (using a previous long-term pairing or out-of-band verification) and pins the Controller public key in tamper-resistant storage. Upon successfully committing the pinned key from an RA assertion, the Node <bcp14>MUST</bcp14> generate an internal audit event recording the RA source identifier, timestamp, and Controller public key fingerprint to ensure the bootstrap is traceable in the household log.</t>
    </list></t>
</list></t>

<t><list style="numbers" type="1">
  <t>To limit RA-based hijack windows, Registration Assertions <bcp14>MUST</bcp14> include an <spanx style="verb">issued_at</spanx> and an <spanx style="verb">expires_at</spanx> timestamp and <bcp14>SHALL</bcp14> be considered invalid by Nodes if <spanx style="verb">now &gt; expires_at</spanx>. Implementations <bcp14>SHOULD</bcp14> enforce a Maximum RA Assertion Lifetime of 1 hour (3600 seconds) unless an explicit longer lifetime is cryptographically endorsed by the Controller and recorded in household policy. Nodes <bcp14>MUST</bcp14> reject stale or overlong assertions and log the rejection.</t>
</list></t>

<t>Implementations <bcp14>MUST</bcp14> include anti-replay protections (nonce/timestamp) in bootstrap assertions. Nodes <bcp14>MUST</bcp14> store the Controller public key fingerprint in tamper-resistant storage (TPM, Secure Enclave, or equivalent) and treat unexpected key rotations as a <bcp14>MUST</bcp14>-verify event requiring reauthorization.</t>

<t>Key rotation and re-provisioning <bcp14>MUST</bcp14> be handled via signed rotation manifests from the Controller; Satellites <bcp14>MAY</bcp14> assist as RA but <bcp14>MUST NOT</bcp14> be the sole long-term source of truth for Controller key material unless explicitly authorized in household policy.</t>

<t><strong>CL3 Restriction on Satellite-as-RA</strong>: For CL3 deployments, the Satellite-as-RA bootstrap mode <bcp14>MUST NOT</bcp14> be enabled by default. CL3 implementations <bcp14>MUST</bcp14> require explicit household policy authorization (e.g., a Controller-signed policy flag <spanx style="verb">allow_satellite_ra: true</spanx>) before accepting Registration Assertions from Satellites. This restriction reflects the elevated trust weight that Satellite-as-RA places on the Satellite's integrity; in CL3 threat environments, Satellite compromise could bootstrap a rogue Controller key if RA is unconditionally enabled. CL0, CL1, and CL2 deployments <bcp14>MAY</bcp14> enable Satellite-as-RA by default.</t>

<section anchor="registration-assertion-example"><name>Registration Assertion Example</name>

<t>Implementations <bcp14>SHOULD</bcp14> support a concise registration assertion format to be consumed by Nodes during onboarding. The following illustrative JSON structure demonstrates the minimum fields; implementations <bcp14>MAY</bcp14> encode this as CBOR or another compact representation for transport efficiency:</t>

<t><spanx style="verb">json
{
  "type": "RegistrationAssertion",
  "controller_key_fingerprint": "sha256:abcdef...",
  "controller_attestation": "base64(...)",
  "issued_by": "satellite_id:device123",
  "issued_at": "2026-02-24T12:34:56Z",
  "nonce": "random-unique-value",
  "satellite_signature": "base64(...)"
}
</spanx></t>

<t>Nodes <bcp14>MUST</bcp14> verify the <spanx style="verb">satellite_signature</spanx> against a previously established Satellite trust relationship (e.g., long-term pairing or out-of-band verification) and validate <spanx style="verb">issued_at</spanx>/<spanx style="verb">nonce</spanx> to protect against replay.</t>

<t><strong>Optional Controller Attestation</strong>: The <spanx style="verb">controller_attestation</spanx> field is <bcp14>OPTIONAL</bcp14> and provided for informational purposes (e.g., to convey a Controller-signed statement about its identity or capabilities). Verification of <spanx style="verb">controller_attestation</spanx> is <bcp14>OPTIONAL</bcp14>; the mandatory trust anchor is the <spanx style="verb">controller_key_fingerprint</spanx> verified via the <spanx style="verb">satellite_signature</spanx>. Implementations <bcp14>MAY</bcp14> define additional attestation verification procedures. Such procedures are outside the scope of this specification and are left as implementation-specific design choices.</t>

</section>
<section anchor="key-rotation-protocol-overview"><name>Key Rotation Protocol (Overview)</name>

<t>Controller key rotation <bcp14>MUST</bcp14> be an auditable, signed operation that preserves continuity of trust for Nodes and Satellites. The following protocol describes normative expectations:</t>

<t><list style="numbers" type="1">
  <t><strong>Rotation Manifest Creation</strong>: The Controller creates a Rotation Manifest containing:
  <list style="symbols">
      <t><spanx style="verb">old_key_fingerprint</spanx> (optional if out-of-band)</t>
      <t><spanx style="verb">new_key_public</spanx> (public key material for the new Controller key)</t>
      <t><spanx style="verb">new_key_fingerprint</spanx></t>
      <t><spanx style="verb">effective_from</spanx> (UTC timestamp)</t>
      <t><spanx style="verb">effective_until</spanx> (optional)</t>
      <t><spanx style="verb">rotation_id</spanx> (unique identifier)</t>
      <t><spanx style="verb">nonce</spanx> and <spanx style="verb">issued_at</spanx></t>
    </list></t>
  <t><strong>Rotation Manifest Signing</strong>: The Rotation Manifest <bcp14>MUST</bcp14> be signed by the Controller's current private key. If the current private key is unavailable (compromise or loss), out-of-band re-provisioning (Direct Controller QR) is required; this exceptional path <bcp14>MUST</bcp14> be documented in local policy. Additionally, to mitigate risk during key transitions, the Rotation Manifest <bcp14>SHOULD</bcp14> also be signed by the new key (once generated) to provide duplicated trust. This dual-signing approach strengthens the transition by allowing nodes to verify the rotation via two independent signatures, reducing the window of vulnerability.  <vspace blankLines='1'/>
<strong>Dual-Signature Schema (Normative)</strong>: When dual-signing is used, the Rotation Manifest <bcp14>MUST</bcp14> include both signature fields:
<spanx style="verb">
controller_signature_old: tstr    ; Base64 (RFC 4648 Section 4) Ed25519 signature by current (old) key (see Signature Encoding)
controller_signature_new: tstr    ; Base64 (RFC 4648 Section 4) Ed25519 signature by new key (see Signature Encoding)
</spanx>
<strong>Validation Logic</strong>:
- <strong>Normal rotation (no compromise)</strong>: During the grace window, Nodes <bcp14>MUST</bcp14> accept the manifest if at least one signature is valid (either <spanx style="verb">controller_signature_old</spanx> verified against pinned key, or <spanx style="verb">controller_signature_new</spanx> verified against <spanx style="verb">new_key_public</spanx> in the manifest). Nodes <bcp14>SHOULD</bcp14> verify both signatures and log a warning if either fails.
- <strong>Compromise scenario</strong>: If a revocation manifest has been received for the old key, Nodes <bcp14>MUST</bcp14> require <spanx style="verb">controller_signature_new</spanx> to be valid and <bcp14>MUST</bcp14> reject manifests that only carry <spanx style="verb">controller_signature_old</spanx>.
- <strong>Single-signature fallback</strong>: If only <spanx style="verb">controller_signature_old</spanx> is present (no <spanx style="verb">controller_signature_new</spanx>), the manifest is valid during the grace window but Nodes <bcp14>SHOULD</bcp14> log <spanx style="verb">ROTATION_SINGLE_SIGNED</spanx> as a warning. After the grace window expires, Nodes <bcp14>MUST</bcp14> reject manifests signed only by the old key.</t>
  <t><strong>Distribution and Authentication</strong>: The Controller publishes the signed Rotation Manifest to its registered Satellites and makes it available via its distribution endpoint. Satellites forwarding the manifest to Nodes <bcp14>MUST</bcp14> authenticate their role by signing the forwarded manifest with their own device keypair (distinct from the Controller keypair) to create an auditable distribution chain. This enables tracing which Satellite forwarded the rotation manifest and prevents unsigned relaying. Nodes receiving rotation manifests from Satellites <bcp14>MUST</bcp14> verify both the Controller's signature over the rotation manifest AND the Satellite's forwarding signature to establish a clear chain of custody.  <vspace blankLines='1'/>
<strong>Forwarding Signature Failure Handling (Normative)</strong>: If a Node receives a Rotation Manifest where the Controller's signature is valid but the Satellite's forwarding signature is invalid (wrong key, corrupted, or missing):
- The Node <bcp14>MUST</bcp14> reject the manifest. The Satellite forwarding signature is <bcp14>REQUIRED</bcp14> for acceptance when the manifest is received via a Satellite relay path, not advisory.
- The Node <bcp14>MUST</bcp14> log <spanx style="verb">ROTATION_FORWARDING_SIG_FAILED</spanx> with the Satellite identifier, manifest <spanx style="verb">rotation_id</spanx>, and failure reason.
- The Node <bcp14>SHOULD</bcp14> attempt to retrieve the Rotation Manifest directly from the Controller's distribution endpoint (bypassing the Satellite) as a fallback. If direct retrieval succeeds and the Controller's signature is valid, the forwarding signature requirement does not apply (the Node is communicating directly with the Controller, not via relay).
- <strong>Rationale</strong>: The forwarding signature prevents a network MITM from injecting a modified manifest that retains the Controller's valid signature but alters metadata (e.g., <spanx style="verb">effective_from</spanx>). Treating it as advisory would negate this protection.
- <strong>Offline Nodes</strong>: Nodes that cannot reach the Controller directly and receive rotation manifests exclusively via Satellites <bcp14>MUST</bcp14> require the forwarding signature. If the forwarding signature consistently fails, the Node <bcp14>MUST</bcp14> log <spanx style="verb">ROTATION_DELIVERY_BLOCKED</spanx> and continue using the current (pre-rotation) key until the issue is resolved by administrator intervention or successful direct Controller contact.</t>
  <t><strong>Verification by Nodes</strong>: Upon receipt, Nodes <bcp14>MUST</bcp14>:
  <list style="symbols">
      <t>Verify the Rotation Manifest signature against the Controller's current pinned public key</t>
      <t>Validate the <spanx style="verb">effective_from</spanx> timestamp and <spanx style="verb">rotation_id</spanx> uniqueness</t>
      <t>Cache the <spanx style="verb">new_key_public</spanx> in a pending state but continue accepting manifests signed by the old key until <spanx style="verb">effective_from</spanx></t>
    </list></t>
  <t><strong>Grace Window &amp; Cutover</strong>: Implementations <bcp14>MUST</bcp14> support a configurable grace window (suggested default: 24 hours) during which both old and new keys are accepted for signature validation. After <spanx style="verb">effective_from + grace_window</spanx>, Nodes <bcp14>MUST</bcp14> reject manifests signed by the old key and <bcp14>MUST</bcp14> have already cached at least one valid policy signed by the new key. If a Node has not cached a new-key-signed policy when the grace window expires, the Node <bcp14>MUST</bcp14> enter Default Deny mode (restricting all non-emergency activity) and attempt immediate synchronization with the Controller. Upon successful retrieval of a new-key-signed policy, the Node exits Default Deny and resumes normal operation. Nodes offline for the entire grace window period <bcp14>MUST</bcp14> upon reconnection immediately verify that the cached Controller public key matches the expected fingerprint from their last successful sync; if fingerprint validation fails, the Node <bcp14>MUST</bcp14> treat this as a potential compromise attempt and enter strict Default Deny until manual administrative intervention re-establishes trust via Direct Controller QR verification.</t>
  <t><strong>Revocation &amp; Rollback</strong>: The Controller <bcp14>MUST</bcp14> publish a Revocation List (or signed revocation manifest) if a key is revoked prematurely. Revocation manifests present a special case: if the old key is revoked due to compromise, it cannot be used to sign the revocation. Therefore, revocation manifests <bcp14>MUST</bcp14> be signed by one of the following (in priority order):
a. The new Controller key (if rotation occurred and new key is already deployed)
b. Out-of-band confirmation (administrator verifies revocation via phone call, email from pre-registered address, or physical visit). Out-of-band confirmation <bcp14>MUST</bcp14> produce a signed Revocation Assertion recorded in the Node's local Revocation Authority list; a UI toggle or verbal acknowledgment alone is not sufficient. The Revocation Assertion <bcp14>MUST</bcp14> contain the revoked key fingerprint, the administrator identity, a timestamp (RFC 3339 UTC 'Z'), and a nonce, and <bcp14>MUST</bcp14> be signed by the administrator's pre-registered credential (e.g., a device keypair or hardware token). Nodes <bcp14>MUST NOT</bcp14> accept unstructured or unsigned revocation signals via out-of-band channels.
c. Satellite-attested revocation (a Satellite, previously established as trusted via registration, signs the revocation manifest using its device keypair; Nodes verify against the Satellite's pinned key)
Nodes <bcp14>MUST</bcp14> treat revocation manifests as high-priority and immediately cease accepting manifests signed by the revoked key. Nodes <bcp14>MUST</bcp14> log all revocation events with event type <spanx style="verb">CONTROLLER_KEY_REVOKED</spanx> and follow any re-provisioning steps mandated in the revocation manifest.</t>
  <t><strong>Satellite-assisted Recovery</strong>: If the Controller key has been compromised and cannot sign a Rotation Manifest, a Satellite <bcp14>MAY</bcp14> initiate out-of-band re-provisioning using a Direct Controller QR or other explicitly authorized RA flow. Such recovery <bcp14>MUST</bcp14> produce an auditable assertion and require manual administrator confirmation. Specifically:
  <list style="symbols">
      <t>The administrator <bcp14>MUST</bcp14> perform out-of-band verification of the new Controller key (e.g., by physically visiting the Controller device or via a pre-established communication channel)</t>
      <t>The Satellite signs a Recovery Assertion containing the new Controller key fingerprint, timestamp, and nonce using its device keypair</t>
      <t>Nodes receiving the Recovery Assertion <bcp14>MUST</bcp14> verify the Satellite's signature using the pre-established Satellite trust relationship</t>
      <t>Nodes <bcp14>MUST</bcp14> record the recovery event in the audit log with event type <spanx style="verb">CONTROLLER_KEY_RECOVERY_BY_SATELLITE</spanx> and the administrator confirmation method</t>
      <t>Satellites <bcp14>MUST NOT</bcp14> unilaterally override Controller key trust without explicit manual administrator action</t>
      <t>Recovery assertions <bcp14>MUST</bcp14> include an expiration time (suggested maximum: 1 hour) to prevent indefinite acceptance</t>
    </list></t>
</list></t>

</section>
<section anchor="satellite-trust-lifecycle-normative"><name>Satellite Trust Lifecycle (Normative)</name>

<t>Because Satellites can sign revocation manifests, recovery assertions, and forwarded rotation manifests, a compromised Satellite represents a significant trust anchor compromise. The following normative requirements govern Satellite key lifecycle:</t>

<t><strong>Satellite Key Expiration</strong>: Satellite device keys <bcp14>MUST</bcp14> have a finite validity period. The suggested maximum validity is 365 days from initial pairing. Controllers <bcp14>MUST</bcp14> track Satellite key expiration timestamps and refuse to accept Satellite-signed messages (forwarding signatures, revocation attestations, recovery assertions) from expired keys. Nodes <bcp14>SHOULD</bcp14> cache Satellite key expiration timestamps received during trust bootstrap and reject Satellite-signed messages after expiration.</t>

<t><strong>Satellite Revocation</strong>: Controllers <bcp14>MUST</bcp14> support revocation of individual Satellite devices via a Controller-signed <spanx style="verb">SatelliteRevocationManifest</spanx>:</t>

<t><spanx style="verb">json
{
  "type": "SatelliteRevocationManifest",
  "revoked_satellite_id": "satellite_id:device123",
  "revoked_key_fingerprint": "sha256:satellitefingerprint...",
  "reason": "device_lost",
  "issued_at": "2026-02-24T12:00:00Z",
  "nonce": "random-unique-value",
  "controller_signature": "Base64Ed25519Signature"
}
</spanx></t>

<t><list style="symbols">
  <t>Controllers <bcp14>MUST</bcp14> distribute <spanx style="verb">SatelliteRevocationManifest</spanx> to all registered Nodes via the standard policy distribution channel.</t>
  <t>Nodes receiving a valid <spanx style="verb">SatelliteRevocationManifest</spanx> <bcp14>MUST</bcp14> immediately add the revoked Satellite's key fingerprint to a local Satellite Revocation List (SRL) and cease accepting any messages signed by the revoked key.</t>
  <t>Nodes <bcp14>MUST</bcp14> persist the SRL to durable storage (CL2+) or in-memory cache (CL1) and <bcp14>MUST</bcp14> check the SRL before accepting any Satellite-signed message.</t>
  <t>Nodes <bcp14>MUST</bcp14> log <spanx style="verb">SATELLITE_KEY_REVOKED</spanx> with the Satellite ID and reason.</t>
</list></t>

<t><strong>Satellite Compromise Handling</strong>: If a Satellite device is lost, stolen, or suspected compromised:
1. The administrator <bcp14>MUST</bcp14> immediately issue a <spanx style="verb">SatelliteRevocationManifest</spanx> via the Controller.
2. The Controller <bcp14>MUST</bcp14> reject all subsequent messages claiming to originate from the revoked Satellite.
3. If the compromised Satellite has already issued a rogue revocation or recovery assertion, the Controller <bcp14>MUST</bcp14> publish an explicit countermand manifest (signed by the Controller key) instructing Nodes to disregard the rogue assertion. Nodes <bcp14>MUST</bcp14> log <spanx style="verb">SATELLITE_COMPROMISE_COUNTERMAND</spanx> and re-verify their Controller key trust state.
4. Remaining authorized Satellites <bcp14>MAY</bcp14> be used for recovery flows, but the compromised Satellite <bcp14>MUST NOT</bcp14> participate in any trust operations.</t>

<t><spanx style="verb">json
{
  "type": "RotationManifest",
  "rotation_id": "rot-2026-02-24-01",
  "old_key_fingerprint": "sha256:oldfingerprint...",
  "new_key_public": "Base64EncodedPublicKey...",
  "new_key_fingerprint": "sha256:newfingerprint...",
  "effective_from": "2026-02-25T00:00:00Z",
  "issued_at": "2026-02-24T12:00:00Z",
  "nonce": "random-unique-value",
  "controller_signature_old": "Base64SignatureByOldKey",
  "controller_signature_new": "Base64SignatureByNewKey"
}
</spanx></t>

<t>Nodes and Satellites <bcp14>MUST</bcp14> log rotation events to the audit trail to support post-incident analysis and compliance verification.</t>

</section>
<section anchor="compromise-detection-and-grace-window-management-normative"><name>Compromise Detection and Grace Window Management (Normative)</name>

<t>This subsection addresses the secure handling of key compromise scenarios and grace window enforcement:</t>

<t><strong>Compromise Detection Responsibility</strong>: Administrators are responsible for detecting Controller key compromise through security monitoring, intrusion detection, or external notification (e.g., security announcements). Once compromise is suspected or confirmed, the administrator <bcp14>MUST</bcp14> immediately:
1. Generate a new Controller keypair (out-of-band from the compromised system if necessary)
2. Publish a Revocation Manifest using one of the priority methods specified in Step 6 (new key, out-of-band confirmation, or Satellite-attested)
3. Issue a Rotation Manifest announcing the new key
4. Monitor audit logs for any policies issued during the compromise window</t>

<t><strong>Grace Window Duration and Adjustment</strong>: The default 24-hour grace window balances deployment time for large households against attack window duration. Households with heightened security requirements <bcp14>MAY</bcp14> shorten the grace window (minimum suggested: 4 hours) in their deployment policy. Administrators <bcp14>SHOULD</bcp14> configure <spanx style="verb">grace_window</spanx> to be at least as long as the maximum expected offline duration for any Node in the household; deployments serving rural or satellite-connectivity environments where multi-day outages are common <bcp14>SHOULD</bcp14> use grace windows of 48-72 hours. In case of detected compromise, the grace window <bcp14>SHOULD</bcp14> be shortened retroactively: revocation manifests <bcp14>MAY</bcp14> specify an abbreviated grace window cutoff (e.g., "cease accepting old key immediately" or "cease after 4 hours from revocation timestamp") to reduce the active attack window. Nodes <bcp14>MUST</bcp14> obey grace window adjustments from revocation manifests signed by authorized entities (new key, out-of-band confirmation, or trusted Satellites).</t>

<t><strong>Policy Coverage During Transitions</strong>: Controllers <bcp14>MUST</bcp14> ensure that during the entire transition period (<spanx style="verb">effective_from</spanx> through <spanx style="verb">effective_from + grace_window</spanx>), at least one valid policy signed by the new key is distributed to all registered Nodes. Failure to do so risks Nodes entering Default Deny at grace window expiry if they have cached only old-key policies. Pre-signing new-key policies before the rotation manifest is published is <bcp14>RECOMMENDED</bcp14>.</t>

<t><strong>Offline Node Handling</strong>: Nodes offline for more than 48 hours <bcp14>SHOULD</bcp14> attempt synchronization with the Controller upon reconnection, even if they have recent cached policies. This mitigates scenarios where grace window expiry occurred during offline periods and the node is unaware of key changes. Nodes detecting that their cached Controller public key fingerprint differs from the freshly-fetched fingerprint upon reconnection <bcp14>MUST</bcp14> treat this as a potential compromise attempt: they <bcp14>MUST</bcp14> enter strict Default Deny, log event type <spanx style="verb">CONTROLLER_KEY_MISMATCH_DETECTED</spanx>, and require manual administrative re-verification via Direct Controller QR before resuming normal operation.</t>

<t>To ensure interoperability between independently-implemented Controllers, Satellites, and Nodes, X-PPC specifies mandatory-to-implement (MTI) transport and message encoding requirements.</t>

</section>
<section anchor="transport-layer-normative"><name>Transport Layer (Normative)</name>

<t>X-PPC implementations <bcp14>MUST</bcp14> support HTTPS over TLS 1.3 (RFC 8446) as the primary transport protocol for the following communication channels:</t>

<t><list style="numbers" type="1">
  <t><strong>Controller-to-Node Policy Distribution</strong>: Nodes <bcp14>MUST</bcp14> support HTTPS endpoints for retrieving signed Policy Manifests, Rotation Manifests, and quota allocation responses from Controllers. Controllers <bcp14>MAY</bcp14> support additional transports (CoAP, MQTT) but <bcp14>MUST</bcp14> support HTTPS.</t>
  <t><strong>Node-to-Controller Heartbeat and Synchronization</strong>: Nodes <bcp14>MUST</bcp14> transmit Heartbeat messages (quota consumption reports, reallocation requests) to Controllers via HTTPS POST requests. The request body <bcp14>MUST</bcp14> conform to the Heartbeat CDDL schema (see "Message Format Requirements" below).</t>
  <t><strong>Satellite-to-Node Remote Mode Signaling (RMS)</strong>: Satellites <bcp14>MAY</bcp14> use platform-specific push notification services (APNs, FCM, WebSocket) for RMS delivery to Nodes, but <bcp14>MUST</bcp14> fall back to HTTPS polling if push services are unavailable. Nodes <bcp14>MUST</bcp14> support HTTPS-based RMS signal retrieval.</t>
  <t><strong>Satellite-to-Controller Administrative Operations</strong>: Satellites <bcp14>MUST</bcp14> use HTTPS for administrative operations including manifest uploads, user management, and audit log retrieval.</t>
</list></t>

<t><strong>TLS Requirements</strong>: All HTTPS connections <bcp14>MUST</bcp14> use TLS 1.3 or later (RFC 8446). Implementations <bcp14>MUST</bcp14> support server certificate validation using the Web PKI trust model or explicit certificate pinning. Controllers <bcp14>SHOULD</bcp14> enforce mutual TLS authentication for Node and Satellite connections where platform support permits. X-PPC-CL3 implementations <bcp14>MUST</bcp14> enforce mutual TLS authentication for all Node and Satellite connections; CL3 implementations that cannot enforce mTLS due to platform limitations <bcp14>MUST</bcp14> document this limitation and declare reduced compliance status. For CL1 and CL2 deployments, mTLS is <bcp14>RECOMMENDED</bcp14> but not required.</t>

<t><strong>Fallback and Offline Mode</strong>: During network partitions or Controller unavailability, Nodes <bcp14>MUST</bcp14> continue enforcing cached policies as specified in "Offline Resilience" (Section 2.4.5). Heartbeat transmission failures <bcp14>MUST</bcp14> trigger exponential backoff with jitter (+/-10%) to prevent synchronized retry storms.</t>

</section>
<section anchor="message-format-requirements-normative"><name>Message Format Requirements (Normative)</name>

<t>All X-PPC protocol messages exchanged over the wire <bcp14>MUST</bcp14> conform to the following encoding and schema requirements:</t>

<t><list style="numbers" type="1">
  <t><strong>Policy Manifest Encoding</strong>: Policy Manifests <bcp14>MUST</bcp14> be encoded as UTF-8 JSON conforming to the JSON-LD schema defined in "Universal Schema (JSON-LD)" (Section 3.6). Manifests <bcp14>MUST</bcp14> include a valid Ed25519 signature per the "Signature Pipeline" (Section 4.1).</t>
  <t><strong>Heartbeat Message Format</strong>: Heartbeat messages (Node-to-Controller quota synchronization) <bcp14>MUST</bcp14> conform to the CDDL schema specified in "The Three-Tier Trust Model" (Section 2.1). The CDDL definition is normative; all fields marked as mandatory in the schema <bcp14>MUST</bcp14> be present.</t>
  <t><strong>Registration Assertion Format</strong>: Registration Assertions (Satellite-as-RA trust bootstrap) <bcp14>MUST</bcp14> conform to the signature and encoding requirements specified in "Registration Assertion Signing" (Section 2.1.1) below.</t>
  <t><strong>Content-Type</strong>: All JSON messages <bcp14>MUST</bcp14> be transmitted with <spanx style="verb">Content-Type: application/json; charset=utf-8</spanx>. JSON-LD manifests <bcp14>MAY</bcp14> additionally include <spanx style="verb">Content-Type: application/ld+json; charset=utf-8</spanx>.</t>
  <t><strong>HTTP Response Codes</strong>: Comprehensive HTTP status code mapping and recovery logic is specified in detail in the "HTTP Status Codes and Recovery (Normative)" section. Controllers and Nodes <bcp14>MUST</bcp14> implement all specified status codes (200, 400, 401, 403, 409, 422, 429, 503) and recovery behaviors for deterministic interoperability.</t>
</list></t>

</section>
<section anchor="registration-assertion-signing-normative"><name>Registration Assertion Signing (Normative)</name>

<t>Registration Assertions used in the Satellite-as-RA trust bootstrap mode (see "Trust Bootstrap and Registration") <bcp14>MUST</bcp14> be signed using the same cryptographic pipeline as Policy Manifests to ensure verifiable trust delegation.</t>

<t><strong>Signing Requirements</strong>:</t>

<t><list style="numbers" type="1">
  <t><strong>Canonicalization</strong>: The unsigned Registration Assertion JSON object <bcp14>MUST</bcp14> be canonicalized using JCS (RFC 8785) prior to signing, following the same procedure as Policy Manifest signing (remove signature field, canonicalize, sign).</t>
  <t><strong>Signature Algorithm</strong>: Satellites <bcp14>MUST</bcp14> sign Registration Assertions using Ed25519 (RFC 8032, FIPS 186-5) with the Satellite's long-term device key. This key <bcp14>MUST</bcp14> be distinct from the Controller's signing key and <bcp14>MUST</bcp14> be established during Satellite-Controller initial pairing.</t>
  <t><strong>Signature Field</strong>: The <spanx style="verb">satellite_signature</spanx> field in the Registration Assertion JSON <bcp14>MUST</bcp14> contain the Base64 (RFC 4648 Section 4) encoded raw 64-byte Ed25519 signature computed over the JCS-canonicalized assertion (with the <spanx style="verb">satellite_signature</spanx> field removed prior to canonicalization). See <strong>Signature Encoding</strong> in Security Considerations for normative encoding rules.</t>
  <t><strong>Verification by Nodes</strong>: Nodes receiving a Registration Assertion <bcp14>MUST</bcp14>:
  <list style="symbols">
      <t>Remove the <spanx style="verb">satellite_signature</spanx> field from the received JSON</t>
      <t>JCS-canonicalize the remaining JSON object</t>
      <t>Verify the Ed25519 signature using the Satellite's public key (obtained via prior out-of-band pairing or platform-specific device attestation)</t>
      <t>Validate the <spanx style="verb">issued_at</spanx> and <spanx style="verb">expires_at</spanx> timestamps and reject expired assertions</t>
      <t>Validate the <spanx style="verb">nonce</spanx> for replay protection (Nodes <bcp14>MUST</bcp14> maintain a short-term cache of recently-seen nonces for anti-replay validation; see nonce requirements below)</t>
    </list>
<strong>Registration Assertion Nonce Requirements (Normative)</strong>:
- <strong>Minimum Entropy</strong>: RA nonces <bcp14>MUST</bcp14> contain at least 128 bits of cryptographic entropy (e.g., UUID v4, or 32 hex characters from a CSPRNG). Nonces with insufficient entropy (e.g., sequential counters, timestamps, or predictable values) <bcp14>MUST</bcp14> be rejected.
- <strong>Minimum Cache Size</strong>: Nodes <bcp14>MUST</bcp14> maintain an RA nonce cache of at least 256 entries (sufficient for high-frequency pairing scenarios). Eviction policy <bcp14>MUST</bcp14> be oldest-first by <spanx style="verb">issued_at</spanx> timestamp.
- <strong>Cache Lifetime</strong>: RA nonce cache entries <bcp14>MUST</bcp14> be retained for at least the maximum RA assertion lifetime (default: 1 hour). Entries older than the maximum lifetime <bcp14>MAY</bcp14> be evicted.
- <strong>Fail-Closed</strong>: If the nonce cache is full and all entries are still within the retention window, the Node <bcp14>MUST</bcp14> reject the incoming assertion and log <spanx style="verb">RA_NONCE_CACHE_OVERFLOW</spanx>.</t>
  <t><strong>Expiration Enforcement</strong>: Registration Assertions <bcp14>MUST</bcp14> include both <spanx style="verb">issued_at</spanx> and <spanx style="verb">expires_at</spanx> timestamps (RFC 3339 date-time, UTC "Z" suffix). Nodes <bcp14>MUST</bcp14> reject assertions where <spanx style="verb">current_time &gt; expires_at</spanx>. Controllers <bcp14>SHOULD</bcp14> enforce a maximum RA assertion lifetime of 1 hour (3600 seconds) unless explicitly overridden in household policy.</t>
</list></t>

<t><strong>Example Signed Registration Assertion</strong> (informative):</t>

<t><spanx style="verb">json
{
  "type": "RegistrationAssertion",
  "controller_key_fingerprint": "sha256:abcdef1234567890...",
  "controller_attestation": "base64EncodedControllerAttestation...",
  "issued_by": "satellite_id:device123",
  "issued_at": "2026-02-24T12:34:56Z",
  "expires_at": "2026-02-24T13:34:56Z",
  "nonce": "f4a3b2c1-9876-5432-1098-abcdef123456",
  "satellite_signature": "base64Ed25519SignatureOverCanonicalizedJSON..."
}
</spanx></t>

<t>The <spanx style="verb">satellite_signature</spanx> is computed as:</t>

<t><spanx style="verb">
sigma_RA = Ed25519Sign(K_satellite_private, JCS(RA_unsigned))
</spanx></t>

<t>where RA_unsigned is the Registration Assertion JSON with the <spanx style="verb">satellite_signature</spanx> field removed.</t>

</section>
</section>
</section>
<section anchor="remote-mode-signaling-rms-childsafe-mode"><name>Remote Mode Signaling (RMS) &amp; ChildSafe Mode</name>

<t>Remote Mode Signaling (RMS) is the asynchronous protocol enabling Satellites and Controllers to trigger state transitions on Nodes. RMS signals carry authenticated commands to change enforcement modes, update quotas, or lock/unlock devices.</t>

<section anchor="rms-signal-message-format-normative"><name>RMS Signal Message Format (Normative)</name>

<t>RMS signals <bcp14>MUST</bcp14> conform to the following CDDL schema to ensure interoperability between Satellites, Controllers, and Nodes.</t>

<t>```cddl
; CDDL Schema for X-PPC RMS Signal (Normative)
RMSSignal = {
  signal_type: "MODE_TRANSITION" / "QUOTA_UPDATE" / "LOCK" / "UNLOCK" / "POLICY_REFRESH",
  target_node_id: tstr,                   ; Unique Node identifier (or "*" for broadcast to all household Nodes)
  subject_id: tstr,                       ; Subject (household member) identifier
  issued_by: tstr,                        ; Satellite or Controller identifier
  issued_at: tstr,                        ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  nonce: tstr,                            ; Replay protection nonce (&gt;=128 bits entropy; UUID v4 or random hex)
  ? payload: RMSPayload,                  ; Signal-specific payload (required for some signal types)
  signature: tstr                         ; Base64 (RFC 4648 Section 4) Ed25519 signature (see Signature Encoding)
}</t>

<t>RMSPayload = ModeTransitionPayload / QuotaUpdatePayload / PolicyRefreshPayload</t>

<t>ModeTransitionPayload = {
  target_mode: "CHILD_SAFE_MODE" / "SUPERVISED" / "UNRESTRICTED" / "LOCKED",
  ? reason: tstr                          ; Human-readable reason (for audit logging)
}</t>

<t>QuotaUpdatePayload = {
  new_allocation_seconds: uint,           ; Fresh quota allocation in seconds
  session_id: tstr,                       ; Session identifier (for monotonic-seq tracking)
  ? next_sync_deadline: tstr              ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
}</t>

<t>PolicyRefreshPayload = {
  manifest_url: tstr,                     ; HTTPS URL to fetch updated PolicyManifest
  ? manifest_hash: tstr,                  ; SHA-256 hash of manifest for integrity verification
  ? max_retry_attempts: uint              ; Maximum retry attempts (default: 3 if omitted)
}
```</t>

<t><strong>Signature Validation</strong>: RMS signals <bcp14>MUST</bcp14> be signed using Ed25519 by the issuing Satellite or Controller. Nodes <bcp14>MUST</bcp14> verify the signature before processing the signal:
1. Remove the <spanx style="verb">signature</spanx> field from the received JSON
2. JCS-canonicalize the remaining RMSSignal object (RFC 8785)
3. Verify the Ed25519 signature using the issuer's public key (Satellite or Controller key obtained during trust bootstrap)
4. Validate the <spanx style="verb">nonce</spanx> for replay protection (Nodes <bcp14>MUST</bcp14> maintain a rolling window cache of recently-seen nonces for at least the maximum accepted signal freshness window, expiring entries older than the freshness window)
5. Validate the <spanx style="verb">issued_at</spanx> timestamp (reject signals older than the configured freshness window to prevent replay)</t>

<t><strong>RMS Signal Freshness Window (Configurable)</strong>: The default freshness window for RMS signals is 5 minutes (300 seconds), which accommodates most network latencies and push notification delays. However, deployments operating on high-latency or intermittent networks (e.g., satellite-based connectivity, rural areas with poor signal) <bcp14>MAY</bcp14> extend the freshness window via deployment policy without compromising security, provided that nonce caching is implemented to prevent replay attacks. The recommended maximum extension is 15 minutes for most deployments. Deployments with extreme latency conditions (e.g., store-and-forward satellite links, maritime environments, queued push notification gateways) <bcp14>MAY</bcp14> configure freshness windows of up to 1 hour (3600 seconds), provided the nonce cache retention is scaled accordingly (cache size <bcp14>SHOULD</bcp14> be at least <spanx style="verb">signal_rate x freshness_window_seconds x 1.5</spanx>). Freshness windows exceeding 1 hour are <bcp14>NOT RECOMMENDED</bcp14> as they significantly widen the replay acceptance window even with nonce protection. Replay protection remains bounded by nonce cache size; operators <bcp14>MUST</bcp14> ensure cache capacity scales proportionally to the configured freshness window (see Minimum Cache Size below). Nodes <bcp14>MUST</bcp14> log RMS signals rejected due to exceeding the configured freshness window for diagnostics.</t>

<t><strong>RMS Nonce Cache Requirements (Normative)</strong>: Nodes <bcp14>MUST</bcp14> maintain a nonce cache for RMS replay protection with the following minimum properties:</t>

<t><list style="symbols">
  <t><strong>Minimum Cache Size</strong>: The nonce cache <bcp14>MUST</bcp14> hold at least 1024 entries. Implementations <bcp14>SHOULD</bcp14> size the cache based on the expected RMS signal rate multiplied by the freshness window duration plus a safety margin (e.g., at 1 signal/second with a 5-minute freshness window = 300 entries minimum; 1024 provides margin for burst traffic).</t>
  <t><strong>Eviction Policy</strong>: When the nonce cache reaches capacity, the implementation <bcp14>MUST</bcp14> evict the oldest entry (by <spanx style="verb">issued_at</spanx> timestamp). Implementations <bcp14>MUST NOT</bcp14> evict entries that are still within the active freshness window unless the cache is at capacity AND the new nonce's timestamp is more recent than the oldest cached entry. If the cache is full and the incoming nonce's timestamp is older than all cached entries, the signal <bcp14>MUST</bcp14> be rejected (fail-closed).</t>
  <t><strong>Cache Overflow Behavior (Fail-Closed)</strong>: If the nonce cache is exhausted and cannot accept a new entry without evicting a still-valid entry (an entry within the freshness window), the Node <bcp14>MUST</bcp14> reject the incoming signal and log <spanx style="verb">RMS_NONCE_CACHE_OVERFLOW</spanx> with the cache size, oldest entry age, and rejected nonce. This is a fail-closed design: resource exhaustion causes safety, not bypass. Implementations <bcp14>SHOULD</bcp14> emit a user-visible diagnostic (e.g., push notification, system tray alert, or on-screen banner) when RMS signals are rejected due to cache exhaustion, so that administrators and support personnel can distinguish cache-pressure failures from normal operation.</t>
  <t><strong>Reboot Persistence by Compliance Level</strong>:
  <list style="symbols">
      <t><strong>CL1</strong>: Nonce cache <bcp14>MAY</bcp14> be in-memory only. Cache loss on reboot is acceptable because CL1 enforcement occurs at the Gateway level.</t>
      <t><strong>CL2</strong>: Nonce cache <bcp14>SHOULD</bcp14> be persisted to durable storage (filesystem or database). On reboot without persisted cache, the Node <bcp14>MUST</bcp14> reject all RMS signals with timestamps older than the reboot time and enter a conservative re-sync window of one freshness window duration (default 5 minutes) during which only signals with timestamps after reboot are accepted.</t>
      <t><strong>CL3</strong>: Nonce cache <bcp14>MUST</bcp14> be persisted to tamper-resistant storage (TPM-sealed, Secure Enclave, or equivalent). Cache loss on CL3 devices <bcp14>MUST</bcp14> be treated as a tamper event and logged with <spanx style="verb">NONCE_CACHE_TAMPER_SUSPECTED</spanx>.</t>
    </list></t>
  <t><strong>Cache Key</strong>: Each nonce cache entry <bcp14>MUST</bcp14> be keyed by the nonce value itself. Storing only a hash of the nonce is acceptable provided the hash function is collision-resistant (SHA-256 minimum).</t>
  <t><strong>Per-Issuer Namespace Isolation (DoS Mitigation)</strong>: To prevent a compromised or misbehaving Satellite from exhausting the nonce cache and causing fail-closed denial of legitimate signals, implementations <bcp14>SHOULD</bcp14> partition the nonce cache by <spanx style="verb">issued_by</spanx> (signal originator). Each issuer partition <bcp14>SHOULD</bcp14> have its own sub-cache allocation (e.g., if three Satellites are registered, each receives at most 1/3 of the total cache capacity plus a shared overflow pool). A single issuer <bcp14>MUST NOT</bcp14> be able to evict entries belonging to other issuers. Implementations <bcp14>SHOULD</bcp14> additionally apply per-issuer rate limiting: if a single issuer exceeds a configurable signal rate threshold (default: 10 signals per second), subsequent signals from that issuer <bcp14>SHOULD</bcp14> be rejected with <spanx style="verb">RMS_RATE_LIMIT_EXCEEDED</spanx> and the event <bcp14>MUST</bcp14> be logged. This rate limit does not affect signals from other registered issuers.</t>
  <t><strong>Optional Bloom Filter Optimization</strong>: For memory-constrained devices, implementations <bcp14>MAY</bcp14> supplement the exact nonce cache with a counting Bloom filter as a probabilistic pre-filter. If the Bloom filter indicates "definitely not seen," the signal may be accepted without full cache lookup. False positives (signal incorrectly flagged as a replay) are acceptable because they result in fail-closed rejection, not bypass. The exact nonce cache remains authoritative for entries within the freshness window.</t>
</list></t>

<t><strong>Transport</strong>: RMS signals <bcp14>MAY</bcp14> be delivered via:
- Platform-specific push notifications (APNs, FCM) with the signal encoded in the notification payload
- HTTPS POST to a Node-exposed webhook (for Nodes with reachable network endpoints)
- HTTPS polling by the Node to a Controller-provided RMS endpoint (fallback for NAT-traversal scenarios)</t>

<t>Nodes <bcp14>MUST</bcp14> support at least one RMS delivery mechanism appropriate to the platform's capabilities.</t>

</section>
<section anchor="rms-signal-processing"><name>RMS Signal Processing</name>

<t>When a Node receives a <spanx style="verb">CHILD_SAFE_MODE</spanx> signal or other RMS state transition signal via X-PPC, the Node <bcp14>MUST</bcp14> execute a Two-Phase Apply process to ensure atomicity and fail-safe behavior:</t>

<t><strong>Phase 1: Preflight Check</strong> (Non-State-Modifying)
1. Verify the RMS signal signature using the issuing Satellite or Controller's public key
2. Parse and validate the signal payload (mode, policies, etc.)
3. Check platform capabilities: Can this device perform all required actions?\n   - Does the OS support DNS redirection to supervised resolver?
   - Is hardware blocking API available?
   - Can the UI restriction be properly applied?
   - Are all required enforcement hooks present?
4. If ANY required capability is unavailable, log <spanx style="verb">RMS_PREFLIGHT_FAILED</spanx> with capability name and failure reason. Do NOT proceed to Phase 2. Return REJECT to Controller (if transport allows) and remain in current state.</t>

<t><strong>Phase 2: Atomic Commit</strong> (State-Modifying)
If Preflight succeeds, the Node <bcp14>MUST</bcp14> atomically apply ALL operations below. If ANY operation fails mid-execution, ROLLBACK all successfully-applied changes and enter ERROR state:</t>

<t><list style="symbols">
  <t><strong>Process Quiescence</strong>: Prevent policy-violating applications from executing (e.g., via process suspension, session termination, or sandbox restriction). If enforcement fails, log <spanx style="verb">RMS_PROCESS_SUSPENSION_FAILED</spanx> with identifier and error, abort Phase 2, and rollback.</t>
  <t><strong>Network Reconfiguration</strong>: Redirect DNS resolution through a supervised resolver and apply traffic filtering rules as required by policy. If configuration fails, log <spanx style="verb">RMS_NETWORK_CONFIG_FAILED</spanx> with error details, abort Phase 2, and rollback.</t>
  <t><strong>UI/Environment Transition</strong>: Activate a restricted execution environment appropriate to the platform and policy. If transition fails, log <spanx style="verb">RMS_UI_TRANSITION_FAILED</spanx> with error details, abort Phase 2, and rollback.</t>
  <t><strong>Hardware Access Restriction</strong>: Restrict access to peripherals and hardware interfaces as specified in policy. If restriction fails, log <spanx style="verb">RMS_HARDWARE_RESTRICTION_FAILED</spanx> with interface name and error, abort Phase 2, and rollback.</t>
</list></t>

<t><strong>Rollback and Safe State (Normative Hierarchy)</strong>: If any Phase 2 operation fails, the Node <bcp14>MUST</bcp14> execute a fail-safe recovery sequence. <strong>Key Requirement</strong>: If at any point a Phase 2 operation or its corresponding rollback cannot be guaranteed atomic or idempotent, the device <bcp14>MUST</bcp14> enter the most restrictive enforcement state supported by the platform (see Platform Classes below) to prevent inconsistent enforcement. The term "hard-locked safe state" throughout this section refers to this platform-relative maximum restriction, not an absolute device lockout that may be technically infeasible on some platforms.</t>

<t><list style="numbers" type="1">
  <t><strong>Attempt Rollback</strong>: Revert all successfully-applied changes in strict REVERSE order to restore the previous enforced state.</t>
  <t><strong>Rollback Verification</strong>: If ANY rollback step fails or cannot be verified (e.g., firewall refuses to revert rule, MDM restriction prevents undo, enforcement state becomes indeterminate), proceed immediately to step 4 (Hard Lock Safe State). Do NOT assume partial rollback success; treat any rollback failure as total failure.</t>
  <t><strong>If Rollback Succeeds</strong>: Log <spanx style="verb">RMS_ATOMIC_OPERATION_FAILED</spanx> with event type, operation name, and failure reason. Remain in previous state (pre-Phase 2) and notify Controller.</t>
  <t><strong>Hard Lock Safe State (Mandatory on Rollback Failure)</strong>: If rollback cannot be completed, fails mid-execution, or enforcement state becomes indeterminate:
  <list style="symbols">
      <t>The Node <bcp14>MUST</bcp14> immediately enter the most restrictive enforcement state feasible on the platform (LOCKED or Default Deny). The specific mechanism is platform-dependent; examples include:
      <list style="symbols">
          <t>Blocking all non-emergency network traffic (DEFAULT_DENY)</t>
          <t>Revoking all active user sessions</t>
          <t>Preventing any new resource access</t>
        </list></t>
      <t><strong>Implementation Feasibility Requirement (Outcome-Based)</strong>: This hard-lock requirement specifies an outcome, not a mechanism. The minimum enforcement behavior depends on the platform class:      <vspace blankLines='1'/>
<strong>Platform Class A -- Managed OS / MDM-Capable</strong> (e.g., MDM-enrolled iOS/Android, Windows with Group Policy, ChromeOS managed devices):
- Hard-lock <bcp14>MUST</bcp14> block all non-emergency network traffic and app launches via MDM or OS-level policy APIs.
- Manual intervention means: administrator removes the device from hard-lock via MDM console or local secure recovery.
- Controller cannot remotely recover; the MDM action is considered "manual" because it requires administrator authentication.
- Residual risk: negligible if MDM profile is non-removable.      <vspace blankLines='1'/>
<strong>Platform Class B -- App-Layer Only</strong> (e.g., non-MDM iOS/Android apps, desktop applications without system privilege):
- Hard-lock <bcp14>MUST</bcp14> revoke all active sessions, refuse to start new sessions, and display a persistent "locked -- contact administrator" UI.
- Manual intervention means: administrator authenticates to the app/controller and explicitly clears the lock.
- The implementation <bcp14>MUST NOT</bcp14> claim to "prevent the user from using the device" -- it can only prevent X-PPC-mediated access.
- Residual risk: user may force-quit, uninstall, or disable the app. Implementations <bcp14>MUST</bcp14> document this residual risk in their compliance statement.
- <strong>Compensating control</strong>: If the app detects it has been force-stopped and restarted, it <bcp14>MUST</bcp14> re-enter hard-lock state and log <spanx style="verb">ENFORCEMENT_REENTRY_AFTER_KILL</spanx>.      <vspace blankLines='1'/>
<strong>Platform Class C -- Console / Embedded Sandbox</strong> (e.g., gaming consoles, Smart TVs, IoT devices with limited OS access):
- Hard-lock <bcp14>MUST</bcp14> invoke the platform's most restrictive available enforcement (e.g., revoking content licenses, blocking network access at app level, entering a "parental lock" screen).
- Manual intervention means: administrator performs recovery via the console's parental control UI, a companion app, or a physical button sequence.
- Residual risk: platform may allow sideloading or factory reset to bypass enforcement. Implementations <bcp14>MUST</bcp14> document platform-specific bypass paths.      <vspace blankLines='1'/>
Implementations <bcp14>MUST</bcp14> declare which platform class they fall into and <bcp14>MUST</bcp14> document enforcement guarantees and residual risk for that class in their compliance statement.</t>
      <t>Log <spanx style="verb">RMS_ROLLBACK_FAILED</spanx> with the operation that failed, reason, and enforcement state at time of failure</t>
      <t>Log <spanx style="verb">ENFORCEMENT_STATE_UNSAFE_RECOVERY</spanx> indicating the device has entered hard-lock safe mode due to indeterminate state</t>
      <t>Enter ERROR state with HIGHEST audit priority flag (requires administrative recovery)</t>
    </list></t>
  <t><strong>Administrator Notification</strong>: Emit a fatal audit event of type <spanx style="verb">RMS_RECOVERY_REQUIRED</spanx> with device ID, timestamp, and reason for lock. This event <bcp14>MUST NOT</bcp14> be suppressible and <bcp14>MUST</bcp14> be transmitted to the Controller and household audit log at highest priority.</t>
  <t><strong>Recovery Path</strong>: Device remains in hard-lock safe state until:
  <list style="symbols">
      <t>Administrator manually performs recovery via the mechanism appropriate to the platform class: MDM console action (Class A), in-app administrator authentication (Class B), or platform parental control UI (Class C)</t>
      <t>Controller cannot remotely recover a device in hard-lock state without administrator authentication; unauthenticated remote commands <bcp14>MUST NOT</bcp14> clear hard-lock</t>
      <t>Recovery erases suspect enforcement state and requires re-establishment of policy from Controller</t>
    </list></t>
  <t><strong>Operational Implication</strong>: Hard-lock state <bcp14>MUST</bcp14> prevent any policy enforcement from being modified or disabled until administrator action appropriate to the platform class. This state is more restrictive than Default Deny and prevents any policy re-application until manual recovery occurs.</t>
</list></t>

<t>This hierarchy ensures that if enforcement changes cannot be cleanly applied OR rolled back, the device defaults to the most restrictive state rather than attempting partial enforcement or leaving the device in an inconsistent state where some controls are applied and others are not.</t>

<t>This Two-Phase approach ensures that either the policy is fully enforced or the device enters a safe Default Deny state, preventing malformed or dangerous intermediate enforcement states.</t>

<t><strong>Time Quota Synchronization via RMS</strong>: Time quota reallocation is managed as part of the RMS protocol. Nodes <bcp14>MUST</bcp14> periodically send consumption reports to the Controller (nominally every 60 seconds during active sessions or when pre-allocated balance falls below the reallocation threshold). To avoid synchronized signaling spikes in large households, each Node <bcp14>MUST</bcp14> apply a randomized jitter of +/-10% to its reporting interval and include a locally-generated monotonic nonce with each report. The Controller <bcp14>MAY</bcp14> instruct Nodes to change their reporting interval; Nodes <bcp14>MUST</bcp14> obey platform limits and apply jitter on any adjusted interval. Nodes <bcp14>MUST</bcp14> implement exponential backoff on repeated communication failures and stagger reconnection attempts to mitigate thundering-herd effects. <strong>Maximum Backoff Cap</strong>: Exponential backoff <bcp14>MUST</bcp14> be capped at a maximum interval of 3600 seconds (1 hour).</t>

<t><strong>Bounded Offline Grace Model (Normative)</strong>: When a Node cannot reach the Controller, the following graduated response applies:</t>

<t><list style="numbers" type="1">
  <t><strong>Grace Period (0-10 consecutive failures or &lt;=1 hour accumulated retry time)</strong>: Node continues enforcing cached policy and counting down pre-allocated balance. Normal operation except no fresh allocations.</t>
  <t><strong>Restricted Mode (&gt;10 consecutive failures or &gt;1 hour accumulated retry time)</strong>: Node <bcp14>MUST</bcp14> log <spanx style="verb">HEARTBEAT_SYNC_EXHAUSTED</spanx> and enter Restricted Mode:
  <list style="symbols">
      <t>Existing sessions <bcp14>MAY</bcp14> continue until locally pre-allocated time elapses naturally.</t>
      <t>No new sessions <bcp14>MUST</bcp14> be initiated for any subject.</t>
      <t>No quota reallocation requests are honored locally.</t>
      <t>Emergency bypass (SOS, panic alarms, health monitoring per <spanx style="verb">emergency.allowedServices</spanx>) <bcp14>MUST</bcp14> remain functional.</t>
    </list></t>
  <t><strong>Strict Default Deny (explicit policy override)</strong>: Strict Default Deny (immediate termination of all sessions including active ones) is entered ONLY if the policy manifest explicitly sets <spanx style="verb">offlinePolicy: "strict-deny"</spanx>. Implementations <bcp14>MUST NOT</bcp14> default to strict Default Deny on sync exhaustion unless the manifest requires it.</t>
  <t><strong>Recovery</strong>: The Node exits Restricted Mode (or strict Default Deny) when the Controller becomes reachable and acknowledges the session, OR upon manual administrative intervention.</t>
</list></t>

<t><strong>Availability vs. Safety Trade-Off</strong>: The Restricted Mode default balances safety (no unbounded offline usage) against availability (existing sessions degrade gracefully rather than hard-cutting). Deployments in unstable network environments (e.g., rural LTE, satellite connectivity) benefit from Restricted Mode as the default, while high-security deployments <bcp14>MAY</bcp14> opt into strict Default Deny via manifest policy. Implementations <bcp14>MUST</bcp14> document which offline mode is active and expose it in audit logs.</t>

<t>The Controller responds with updated allocations for fair distribution across all active Nodes for a given subject/household.</t>

<t><strong>Policy Refresh Retry Semantics</strong>: When the Node receives a POLICY_REFRESH RMS signal, it <bcp14>MUST</bcp14> attempt to fetch the updated manifest from the provided URL. Retry behavior is controlled by the optional <spanx style="verb">max_retry_attempts</spanx> field in PolicyRefreshPayload (default: 3 if omitted). The Node <bcp14>MUST</bcp14>:
1. Attempt to fetch the manifest up to <spanx style="verb">max_retry_attempts</spanx> times with exponential backoff (capped at 3600 seconds per the Maximum Backoff rule above)
2. If all retry attempts are exhausted and the fetch fails, log <spanx style="verb">POLICY_REFRESH_FAILED</spanx> with reason (network error, signature verification failure, manifest hash mismatch, etc.)
3. Continue enforcing the last-cached policy; do NOT enter ERROR state due to POLICY_REFRESH failure alone
4. The cached policy remains the normative baseline until a successful refresh is completed or until the cached policy reaches its <spanx style="verb">effective_until</spanx> expiration
5. Log subsequent successful refresh as <spanx style="verb">POLICY_REFRESH_SUCCESS</spanx> for audit trail completion</t>

<t><strong>Control-Plane Exemption (Normative)</strong>: To prevent policy deadlocks where a new policy blocks the network path required to fetch future updates, Nodes <bcp14>MUST</bcp14> exempt policy refresh traffic from the content filtering rules and quota enforcement of the currently-enforced policies. This exemption is carefully scoped to prevent abuse:</t>

<t><strong>Scope</strong>: The exemption applies ONLY to HTTPS requests to manifest URL origins explicitly specified in the <spanx style="verb">manifest_url</spanx> field of PolicyRefreshPayload RMS signals or to Controller-managed policy distribution endpoints registered at install time. Requests to any other origins fall outside the exemption and are subject to normal policy enforcement and filtering.</t>

<t><strong>Exemption Details</strong>:
- Policy refresh HTTP(S) requests to the exempt manifest URLs <bcp14>MUST NOT</bcp14> be subject to ContentFilterPolicy blocking or domain filtering
- Policy refresh requests <bcp14>MUST NOT</bcp14> consume quota from the subject's time allocation (control-plane traffic is out-of-band)
- Nodes <bcp14>SHOULD</bcp14> implement a dedicated control-plane network path or priority queue for policy refresh traffic to ensure management operations remain reachable even during heavy user traffic
- Manifest fetch responses <bcp14>MUST</bcp14> be validated via signature verification (Ed25519 over JCS-canonicalized manifest) before installation. Failed signature validation <bcp14>MUST</bcp14> trigger <spanx style="verb">POLICY_REFRESH_FAILED</spanx> audit event; the manifest <bcp14>MUST NOT</bcp14> be installed.</t>

<t><strong>Tighter Transport Security (CL3 requirement)</strong>: For CL3 deployments, policy refresh HTTPS connections to manifest URLs <bcp14>MUST</bcp14> use TLS pinning or mutual TLS (mTLS) to bind the update to the intended Controller instance and prevent dynamic DNS hijacking or BGP-based network interception of control-plane traffic.</t>

<t>This exemption applies only to policy fetch operations; once a new policy is successfully installed and signature-verified, it becomes subject to enforcement.</t>

<t><strong>RMS Two-Phase Apply Flow Diagram</strong>:</t>

<t>```mermaid
flowchart TD
    REC["RMS Signal Received\n(MODE_TRANSITION, QUOTA_UPDATE, etc.)"]
    SIGSIG["Verify signature\nParse payload"]</t>

<figure><artwork><![CDATA[
P1["PHASE 1: PREFLIGHT CHECK\n(Non-State-Modifying)"]
CAPSIG{"Signature\nValid?"}
NONCE{"Nonce fresh?\n(not in cache)"}
TSTAMP{"Timestamp within\nfreshness window?"}
CAPS1{"Check Capability 1:\nDNS Redirection?"}
CAPS2{"Check Capability 2:\nUI Restriction?"}
CAPS3{"Check Capability 3:\nHardware Block?"}
CAPS4{"Check Capability 4:\nProcess Control?"}
ALLCAPS{"All capabilities\navailable?"}

LOG_SIG["Log RMS_SIGNATURE_INVALID\nReject signal"]
LOG_NONCE["Log RMS_NONCE_REPLAY\nReject signal"]
LOG_TSTAMP["Log RMS_TIMESTAMP_STALE\nReject signal"]
LOG_FAIL["Log RMS_PREFLIGHT_FAILED\nwith reason"]
REJECT["Return REJECT to Controller\nRemain in current state"]

P2["PHASE 2: ATOMIC COMMIT\n(State-Modifying)"]
APPLY1["Process Quiescence\n(enforce policy)"]
FAIL1{"Process step\nsucceeds?"}
APPLY2["Network Reconfig\n(DNS, filtering)"]
FAIL2{"Network step\nsucceeds?"}
APPLY3["UI Transition\n(lock UI)"]
FAIL3{"UI step\nsucceeds?"}
APPLY4["Hardware Restrict\n(block access)"]
FAIL4{"Hardware step\nsucceeds?"}

SUCCESS["All steps succeeded\nPolicy ENFORCED\nLog RMS_SUCCESS"]

ROLLBACK["ROLLBACK:\nRevert changes\nin reverse order"]
ERRORSTATE["ERROR state\nDefault Deny\nLog ATOMIC_FAILED"]

REC --> SIGSIG
SIGSIG --> P1
P1 --> CAPSIG
CAPSIG -->|Invalid| LOG_SIG
CAPSIG -->|Valid| NONCE
NONCE -->|Replay| LOG_NONCE
NONCE -->|Fresh| TSTAMP
TSTAMP -->|Stale| LOG_TSTAMP
TSTAMP -->|Valid| CAPS1
LOG_SIG --> REJECT
LOG_NONCE --> REJECT
LOG_TSTAMP --> REJECT
CAPS1 --> CAPS2
CAPS2 --> CAPS3
CAPS3 --> CAPS4
CAPS4 --> ALLCAPS
ALLCAPS -->|No| LOG_FAIL
LOG_FAIL --> REJECT
ALLCAPS -->|Yes| P2

P2 --> APPLY1
APPLY1 --> FAIL1
FAIL1 -->|No| ROLLBACK
FAIL1 -->|Yes| APPLY2
APPLY2 --> FAIL2
FAIL2 -->|No| ROLLBACK
FAIL2 -->|Yes| APPLY3
APPLY3 --> FAIL3
FAIL3 -->|No| ROLLBACK
FAIL3 -->|Yes| APPLY4
APPLY4 --> FAIL4
FAIL4 -->|No| ROLLBACK
FAIL4 -->|Yes| SUCCESS

ROLLBACK --> ERRORSTATE
SUCCESS --> END["[End]\nContinue normal op"]
ERRORSTATE --> END
REJECT --> END ```
]]></artwork></figure>

<t>This Two-Phase Apply process ensures atomicity: if any platform capability is unavailable (Phase 1) or any enforcement step fails (Phase 2), the device safely rejects the signal and remains in its previous state.</t>

<t><strong>Controller Heartbeat Validation</strong>: Controllers <bcp14>MUST</bcp14> reject heartbeats with non-increasing <spanx style="verb">monotonic-seq</spanx> values for the same (<spanx style="verb">subject_id</spanx>, <spanx style="verb">device_id</spanx>, <spanx style="verb">session_id</spanx>) tuple to mitigate replay attacks where captured heartbeats from earlier in a session are replayed to extend quota allocations. Controllers <bcp14>MUST</bcp14> maintain per-session sequence tracking and log rejected heartbeats with event type <spanx style="verb">HEARTBEAT_REPLAY_REJECTED</spanx>.</t>

<t>This streaming model prevents quota multiplication when multiple devices are simultaneously active.</t>

</section>
<section anchor="global-safety-invariant"><name>Global Safety Invariant</name>

<t>X-PPC specifies the following invariant for quota accounting for any subject S with global limit GlobalLimit(S), across a set of n Nodes:</t>

<figure><artwork><![CDATA[
TotalConsumed(S) <= GlobalLimit(S)
                   + sum(PreAlloc(N_i), i=1..n)
]]></artwork></figure>

<t><strong>Invariant Constraints (Normative)</strong>:
- <strong>PreAllocation Bounds</strong>: Each PreAllocation(N_i) is bounded by the per-device allocation policy (typically 5-10 minutes per session). PreAllocations <bcp14>MUST NOT</bcp14> exceed the remaining global quota at allocation time; if insufficient quota remains, the Controller <bcp14>MUST</bcp14> reduce the proposed PreAllocation to fit within GlobalLimit(S).
- <strong>Allocation Enforcement</strong>: The Controller <bcp14>MUST</bcp14> NEVER issue a new PreAllocation that would cause sum(PreAllocation(N_i)) to exceed remaining GlobalLimit(S). If the subject has zero or negative remaining global quota, the Controller <bcp14>MUST NOT</bcp14> issue new sessions or allocations; it <bcp14>MUST</bcp14> enter LOCKED state.
- <strong>Race Condition Handling</strong>: Between Heartbeat receives, multiple devices may request allocations in parallel race windows. Controllers <bcp14>MUST</bcp14> apply atomic per-subject quota accounting: updates to TotalConsumed(S) and allocation decisions <bcp14>MUST</bcp14> use one of the following synchronization mechanisms to prevent allocation races that could overshoot GlobalLimit(S):
  - <strong>(a) ACID-compliant database transactions</strong>: Each allocation decision reads current TotalConsumed(S) and writes the updated value within a single serializable transaction. This is the <bcp14>RECOMMENDED</bcp14> approach for Controllers backed by relational databases.
  - <strong>(b) Per-subject mutex or lock</strong>: A single-threaded lock serializes all allocation decisions for a given subject. Suitable for in-memory Controllers or single-process deployments.
  - <strong>(c) Compare-and-swap (CAS)</strong>: The Controller reads TotalConsumed(S), computes the new allocation, and atomically updates only if the value has not changed since the read. On CAS failure, the Controller <bcp14>MUST</bcp14> retry.
  - Implementations <bcp14>MUST</bcp14> declare which mechanism is used and <bcp14>MUST</bcp14> document its failure semantics (e.g., retry count for CAS, lock timeout for mutex). If none of the above mechanisms can be guaranteed, the Controller <bcp14>MUST</bcp14> serialize all allocation decisions through a single processing queue.</t>

<t>If after reconnection and reconciliation the Controller detects that the sum of pre-allocations plus already-consumed time exceeds the GlobalLimit(S), the Controller <bcp14>MUST</bcp14> apply a "Negative Balance" to the subject's next quota cycle. Negative balances reduce the next allocation proportionally and <bcp14>MUST</bcp14> be recorded in the audit trail.</t>

<t><strong>Negative Balance Reconciliation Algorithm</strong>: Negative balances <bcp14>MUST</bcp14> carry forward across multiple quota cycles until fully amortized according to the following normative algorithm:</t>

<t><list style="numbers" type="1">
  <t><strong>Detection</strong>: After quota reconciliation at cycle boundary t, compute:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
NB_t = max(0, TotalConsumed_t - GlobalLimit_t)
]]></artwork></figure>
  </t>
  <t><strong>Carry-Forward at Cycle Start</strong>: At the start of cycle t+1, if NB_t &gt; 0:
  <list style="symbols">
      <t>If NB_t &gt;= NextCycleLimit_(t+1): Subject enters LOCKED state for the entire cycle. At cycle end, set NB_(t+1) = NB_t - NextCycleLimit_(t+1).</t>
      <t>If NB_t &lt; NextCycleLimit_(t+1): Subject receives reduced allocation: Allocation_(t+1) = NextCycleLimit_(t+1) - NB_t. At cycle end, set NB_(t+1) = 0.</t>
    </list></t>
  <t><strong>Iteration</strong>: Repeat step 2 for each subsequent cycle until NB_k = 0 (fully amortized).</t>
  <t><strong>Audit Trail</strong>: Each negative balance adjustment <bcp14>MUST</bcp14> be logged with event type <spanx style="verb">QUOTA_NEGATIVE_BALANCE_APPLIED</spanx>, including fields: <spanx style="verb">subject_id</spanx>, <spanx style="verb">cycle_id</spanx>, <spanx style="verb">negative_balance_start</spanx>, <spanx style="verb">negative_balance_end</spanx>, <spanx style="verb">allocation_granted</spanx>, and <spanx style="verb">locked_entire_cycle</spanx> (boolean).</t>
  <t><strong>Emergency Bypass Interaction</strong>: Emergency services (SOS calls, panic alarms, critical health monitoring as enumerated in <spanx style="verb">emergency.allowedServices</spanx>) <bcp14>MUST</bcp14> remain accessible even when a subject is in LOCKED state due to negative balance. Emergency bypass is the highest-priority override and <bcp14>MUST NOT</bcp14> be blocked by quota enforcement.</t>
</list></t>

<t>Example: If a subject exceeds their 2-hour daily limit by 5 hours (NB = 18000 seconds) on Monday, Tuesday is fully locked (NB reduced to 10800), Wednesday is fully locked (NB reduced to 3600), Thursday grants 3600 seconds (2 hours - 1 hour debt = 1 hour allocation), and Friday returns to normal.</t>

<t><strong>Negative Balance Constraints (Normative)</strong>:</t>

<t><list style="numbers" type="1">
  <t><strong>Maximum Carry-Forward Duration</strong>: Negative balances <bcp14>MUST NOT</bcp14> carry forward for more than 7 consecutive quota cycles (e.g., 7 days for daily quotas). If NB_k &gt; 0 after 7 cycles of amortization, the remaining negative balance <bcp14>MUST</bcp14> be written off (set NB_(k+1) = 0) and logged with event type <spanx style="verb">QUOTA_NEGATIVE_BALANCE_EXPIRED</spanx>. <strong>Rationale</strong>: Unbounded carry-forward creates perverse incentives and potential indefinite lockout from a single overage event.</t>
  <t><strong>No Compounding</strong>: Negative balances do NOT compound. If a subject incurs a new overage during a cycle where a previous negative balance is being amortized, the new overage is computed independently: NB_new = max(0, TotalConsumed_current - Allocation_current). The total negative balance for the next cycle is: NB_(t+1) = NB_previous_remaining + NB_new. Negative balances are additive, not multiplicative.</t>
  <t><strong>Per-Subject Scope</strong>: Negative balances apply to the individual subject only. A negative balance for one household member <bcp14>MUST NOT</bcp14> reduce allocations for other household members. Each subject's negative balance is tracked independently by the Controller.</t>
  <t><strong>Rounding Behavior</strong>: All negative balance computations <bcp14>MUST</bcp14> use integer arithmetic in seconds. Division or proportional reduction <bcp14>MUST</bcp14> round down (floor) to avoid fractional-second artifacts. Example: If NB = 3601 and cycle limit = 7200, allocation = 7200 - 3601 = 3599 seconds.</t>
  <t><strong>Minimum Allocation Floor</strong>: Even when a negative balance reduces a subject's allocation, the Controller <bcp14>MUST</bcp14> guarantee a minimum allocation floor of 60 seconds (1 minute) per cycle unless the subject is in LOCKED state (NB &gt;= cycle limit). This prevents degenerate cases where a small overage results in an effectively zero allocation that provides no usable session time. If the computed allocation after negative balance deduction is less than 60 seconds but greater than 0, the Controller <bcp14>MUST</bcp14> set the allocation to 60 seconds.</t>
</list></t>

<t>The jitter requirement (+/-10%) remains mandatory to reduce simultaneous reallocation requests and avoid temporary invariant violations due to reporting bursts.</t>

<t>```mermaid
stateDiagram-v2
  [*] --&gt; IDLE</t>

<t>IDLE --&gt; SESSION_START: bootstrap_signal
  SESSION_START --&gt; ACTIVE: session_id_granted
  SESSION_START --&gt; BOOTSTRAP_FAILED: nonce_validation_failed / clock_skew</t>

<t>ACTIVE --&gt; CHILD_SAFE_MODE: rms_signal(MODE_TRANSITION)\n[Preflight succeeds, Phase 2 succeeds]
  CHILD_SAFE_MODE --&gt; ACTIVE: rms_signal(UNRESTRICT)\n[Phase 2 succeeds, quota available]
  ACTIVE --&gt; [*]: session_timeout / explicit_end</t>

<t>ACTIVE --&gt; ONLINE_CACHED: network_loss
  ONLINE_CACHED --&gt; ACTIVE: restore_connectivity / sync_success
  ONLINE_CACHED --&gt; DEFAULT_DENY: cached_policy_expires / pre_alloc_exhausted
  ONLINE_CACHED --&gt; ACTIVE: quota_restored_by_controller</t>

<t>ACTIVE --&gt; ERROR: rms_signal [Phase 2 operation fails]\nrms_signal [Preflight + Phase 2 fail with rollback_incomplete]
  ACTIVE --&gt; ERROR: enforcement_failure / watchdog_fail
  ACTIVE --&gt; ERROR: signature_validation_failure</t>

<t>ERROR --&gt; ACTIVE: corrective_rms_signal [Preflight &amp; Phase 2 succeed]
  ERROR --&gt; ACTIVE: manual_recovery / daemon_restarted
  ERROR --&gt; ERROR: awaiting_resolution
  ERROR --&gt; RECOVERY_PENDING: requires_key_re_establishment</t>

<t>CHILD_SAFE_MODE --&gt; DEFAULT_DENY: quota_exhausted
  DEFAULT_DENY --&gt; ACTIVE: quota_reset_by_controller
  DEFAULT_DENY --&gt; ACTIVE: manual_override
  DEFAULT_DENY --&gt; LOCKED: administrative_lock / tamper_detected</t>

<t>ACTIVE --&gt; LOCKED: administrative_lock / tamper_detected
  SESSION_START --&gt; LOCKED: administrative_lock / tamper_detected
  ONLINE_CACHED --&gt; LOCKED: administrative_lock / tamper_detected
  CHILD_SAFE_MODE --&gt; LOCKED: administrative_lock / tamper_detected
  ERROR --&gt; LOCKED: administrative_lock / tamper_detected
  RECOVERY_PENDING --&gt; LOCKED: administrative_lock / tamper_detected</t>

<t>RECOVERY_PENDING --&gt; ACTIVE: controller_qr_scanned / new_key_established
  RECOVERY_PENDING --&gt; RECOVERY_PENDING: attestation_pending</t>

<t>LOCKED --&gt; [<em>]
  BOOTSTRAP_FAILED --&gt; [</em>]</t>

<t>note right of ACTIVE: Enforcing policy\nHeartbeats flowing\nQuota counting
  note left of CHILD_SAFE_MODE: Restricted mode\nQuota pre-allocated\nTimers active
  note right of DEFAULT_DENY: Time exhausted\nNo new sessions\nOFF enforcement
  note right of ERROR: Phase 2 failed + rollback done\nOr enforcement integrity lost\nManual recovery required
  note right of RECOVERY_PENDING: Awaiting out-of-band\nrecovery credentials\n(QR scan, attestation, etc.)
  note right of ONLINE_CACHED: Network unavailable\nUsing pre-allocated quota\nEnforcing cached policy
```</t>

</section>
</section>
<section anchor="enforcement-requirements"><name>Enforcement Requirements</name>

<t>This section specifies enforcement requirements using an <strong>outcome-based model</strong> that accommodates platform diversity. Rather than prescribing implementation mechanisms, this specification defines security and policy outcomes that compliant implementations <bcp14>MUST</bcp14> achieve using platform-appropriate methods. Different platforms (iOS, Android, Windows, Linux, Smart TVs) offer varying levels of privileged access and enforcement APIs. Implementations <bcp14>MUST</bcp14> achieve the specified outcomes within their platform's constraints and declare the corresponding compliance level (CL1, CL2, or CL3) based on demonstrated capabilities.</t>

<t>X-PPC-compliant Nodes <bcp14>MUST</bcp14> implement enforcement mechanisms across the following control domains. These requirements specify <strong>enforcement outcomes</strong> that implementations must achieve, regardless of the platform-specific mechanisms used. Implementations are free to use any privileged API, system service, or architectural approach provided by the platform vendor that achieves the required outcome.</t>

<section anchor="process-and-application-control"><name>Process and Application Control</name>

<t>Nodes <bcp14>MUST</bcp14> achieve the following enforcement outcomes:</t>

<t><list style="symbols">
  <t><strong>Application Integrity Verification</strong>: Prevent execution or continued operation of applications that fail integrity checks (e.g., hash mismatch, missing signature, or revoked certificate) as defined in the policy manifest.</t>
  <t><strong>Unauthorized Process Prevention</strong>: Block or terminate processes that violate the active policy during restricted modes.</t>
  <t><strong>Application Allow/Deny Enforcement</strong>: Enforce application whitelisting/blacklisting as specified in ApplicationControlPolicy such that denied applications cannot execute and allowed applications can run.</t>
</list></t>

<t><strong>Platform Implementation Guidance</strong> (non-normative): Implementations <bcp14>MAY</bcp14> use platform-appropriate mechanisms such as kernel-mode hooks, mandatory access control frameworks, code signing policies, mobile device management APIs, user-space process monitors with privilege separation, or application-layer sandboxing. Implementations <bcp14>MUST</bcp14> achieve the specified enforcement outcomes with sufficient tamper-resistance for the declared compliance level.</t>

</section>
<section anchor="network-control"><name>Network Control</name>

<t>Nodes <bcp14>MUST</bcp14> achieve the following enforcement outcomes:</t>

<t><list style="symbols">
  <t><strong>Content-Based Traffic Filtering</strong>: Block or allow network traffic according to ContentFilterPolicy rules such that blocked domains/IPs are unreachable and allowed categories remain accessible.</t>
  <t><strong>DNS Supervision</strong>: Enforce DNS resolution through supervised resolvers when specified in policy to mitigate circumvention via alternate DNS providers.</t>
  <t><strong>Protocol and Port Restrictions</strong>: Block access to protocols and port ranges specified as denied in policy to prevent unauthorized services.</t>
</list></t>

<t><strong>Platform Implementation Guidance</strong> (non-normative): Implementations <bcp14>MAY</bcp14> use platform-appropriate mechanisms such as kernel network stack filtering, firewall APIs, DNS interception at system resolver level, VPN-based filtering, transparent proxies, or supervised network configuration profiles. Implementations <bcp14>MUST</bcp14> achieve the specified filtering outcomes with sufficient completeness for the declared compliance level.</t>

</section>
<section anchor="user-interface-and-session-control"><name>User Interface and Session Control</name>

<t>Nodes <bcp14>MUST</bcp14> achieve the following enforcement outcomes:</t>

<t><list style="symbols">
  <t><strong>Restricted Environment Presentation</strong>: Present a visually and functionally restricted user interface when in ChildSafe Mode, clearly indicating the restricted state and blocking access to unrestricted functionality.</t>
  <t><strong>Settings and Account Isolation</strong>: Prevent users in restricted mode from accessing system settings, administrative controls, or switching to unrestricted user accounts without proper authentication.</t>
  <t><strong>Time Quota Enforcement</strong>: Terminate or prevent user sessions when time quota is exhausted such that over-quota usage is not possible without Controller authorization.</t>
</list></t>

<t><strong>Platform Implementation Guidance</strong> (non-normative): Implementations <bcp14>MAY</bcp14> use native OS UI frameworks, separate user profiles with access control, kiosk modes, session managers, or custom launcher replacements. Implementations <bcp14>MUST</bcp14> achieve the specified isolation outcomes with sufficient resistance to user bypass for the declared compliance level.</t>

</section>
<section anchor="hardware-access-control"><name>Hardware Access Control</name>

<t>Nodes <bcp14>MUST</bcp14> achieve the following enforcement outcomes when specified in HardwareRestrictionPolicy:</t>

<t><list style="symbols">
  <t><strong>Storage Interface Restriction</strong>: Prevent access to external storage interfaces (USB, SD card, external drives) as specified in policy.</t>
  <t><strong>Network Interface Control</strong>: Disable or restrict networking capabilities when policy requires offline operation or specific interface blocking.</t>
  <t><strong>Sensor and I/O Restriction</strong>: Block access to camera, microphone, location sensors, and other I/O devices as specified in policy.</t>
  <t><strong>Peripheral Control</strong>: Restrict Bluetooth and wireless peripheral connectivity as specified in policy.</t>
</list></t>

<t><strong>Platform Implementation Guidance</strong> (non-normative): Implementations <bcp14>MAY</bcp14> use hardware abstraction layer controls, permission frameworks, driver-level blocking, MDM configuration profiles, or system daemon enforcement. Implementations <bcp14>MUST</bcp14> achieve the specified hardware restrictions with sufficient completeness for the declared compliance level.</t>

</section>
<section anchor="state-consistency-and-offline-resilience"><name>State Consistency and Offline Resilience</name>

<t>Nodes <bcp14>MUST</bcp14> achieve the following enforcement outcomes:</t>

<t><list style="symbols">
  <t><strong>Persistent Policy Caching</strong>: Store policy manifests in tamper-resistant storage to enable offline enforcement and maintain policy effectiveness during network disconnections.</t>
  <t><strong>Quota Tracking and Synchronization</strong>: Maintain accurate quota consumption tracking using pre-allocated balance management, periodically synchronizing with the Controller to respect global quota limits.</t>
  <t><strong>Enforcement Integrity Monitoring</strong>: Detect policy enforcement bypass attempts or daemon failures, entering Default Deny mode when integrity violations are detected.</t>
  <t><strong>Automatic Default Deny</strong>: Enforce Default Deny automatically when connection to Controller is lost and cached policy expires or pre-allocated quota is exhausted.</t>
  <t><strong>Offline Operation</strong>: Continue enforcing pre-signed, time-bounded policies during network outages, with time quotas degrading to local pre-allocation limits.</t>
</list></t>

<t><strong>Platform Implementation Guidance</strong> (non-normative): Implementations <bcp14>MAY</bcp14> use TPM-sealed storage, Secure Enclave protection, encrypted filesystems with hardware-backed keys, kernel watchdogs, privileged monitoring daemons, scheduled tasks for periodic checks, or hardware timers. Implementations <bcp14>MUST</bcp14> provide policy persistence across device reboots, detection of tampering within reasonable time bounds (compliance-level dependent), and correct Default Deny behavior when enforcement cannot be verified.</t>

<t>When offline, Nodes <bcp14>MUST</bcp14>:
1. Continue enforcing policies using cached (last-known) state
2. Decrement pre-allocated time quota from local counter
3. Enforce Default Deny if pre-allocated quota exhausted before reconnection
4. Upon reconnection, synchronize actual consumption with Controller and receive fresh allocation</t>

</section>
</section>
<section anchor="policy-definition-and-cross-platform-compatibility"><name>Policy Definition and Cross-Platform Compatibility</name>

<t>X-PPC standardizes a set of policy types that Households can define and apply across all devices. These policies are platform-neutral in their semantics but platform-specific in their enforcement implementation.</t>

<section anchor="core-policy-types-normative"><name>Core Policy Types (Normative)</name>

<t>X-PPC defines the following mandatory policy types:</t>

<t><strong>1. Time Quota Policies</strong></t>

<t>Define daily or weekly time allowances for device/mode usage.</t>

<t>Normative fields:
- <spanx style="verb">weekdayLimit</spanx>: Maximum seconds per weekday (default: 32400 = 9 hours)
- <spanx style="verb">weekendLimit</spanx>: Maximum seconds per weekend day (default: 57600 = 16 hours)
- <spanx style="verb">timezone</spanx>: IANA timezone identifier for quota scheduling (e.g., "America/Toronto"). Nodes <bcp14>MUST</bcp14> use the timezone specified in the policy for quota cycle boundary calculations (daily reset times, weekday/weekend determination) regardless of the device's local system timezone to provide consistent quota enforcement across devices in different physical locations or with misconfigured system clocks.
- <spanx style="verb">enforcementMode</spanx>: Either "session-termination" (active sessions terminated at limit) or "lockout" (new sessions blocked)
- <spanx style="verb">sharedQuota</spanx>: Boolean; true means quota shared across all devices of this subject
- <spanx style="verb">preAllocationPerDevice</spanx>: Seconds pre-allocated to each device (default: 600 = 10 minutes)</t>

<t><strong>Streaming Time Quota Mechanism</strong>:</t>

<t>Time quotas employ a "streaming" model to prevent quota inflation when multiple devices operate simultaneously:</t>

<t><list style="numbers" type="1">
  <t><strong>Pre-Allocation</strong>: The Controller allocates a small time chunk (typically 5-10 minutes) to each Node at session start or quota reset. This amount is cached locally on the device.</t>
  <t><strong>Consumption Tracking</strong>: As the user's session runs on a device, the Node counts down the pre-allocated balance. When the pre-allocated balance approaches exhaustion (e.g., 1 minute remaining), the Node contacts the Controller.</t>
  <t><strong>On-Demand Redistribution</strong>: The Controller queries the aggregate quota consumption across all Nodes for the subject and redistributes the remaining quota. Example:
  <list style="symbols">
      <t>Subject's daily limit: 2 hours (7200 seconds)</t>
      <t>Device A consumed: 300 seconds (5 minutes)</t>
      <t>Device B consumed: 0 seconds (not yet active)</t>
      <t>Device C pre-allocated: 600 seconds (and running)</t>
      <t>Controller redistributes: Remaining 6300 seconds across active/pending Nodes</t>
    </list></t>
  <t><strong>Offline Resilience</strong>: If a Node cannot reach the Controller, it continues with the pre-allocated balance. Upon reconnection, it synchronizes actual consumption with the Controller and receives a refreshed allocation.</t>
  <t><strong>Mitigation of Quota Duplication</strong>: By using pre-allocation + streaming consumption, this mechanism prevents scenarios where each device independently consumes the full quota. For example:
  <list style="symbols">
      <t>WITHOUT streaming: Child opens a video-streaming app on PC (consumes 1 hour), then opens the same app on tablet (consumes another hour) = 2 hours spent instead of 1</t>
      <t>WITH streaming: PC pre-allocated 10 min, tablet pre-allocated 10 min. When PC nears limit, Controller verifies total consumed and redistributes remaining quota fairly.</t>
    </list></t>
</list></t>

<t><strong>Implementation Examples</strong> (non-normative): Platform-specific mechanisms include session timers with authenticated heartbeat to Controller (Windows, macOS, Linux), app session tracking with background refresh (iOS), or network callback-based reallocation (Smart TV platforms).</t>

<t><strong>Quota Synchronization Protocol</strong>:</t>

<t>When a Node's pre-allocated balance falls below the <spanx style="verb">preAllocationThreshold</spanx> (default: 60 seconds):</t>

<t>```
Node -&gt; Controller: {
  "subject_id": "household_user_alpha",
  "device_id": "device_windows_01",
  "consumed_seconds": 1234,
  "remaining_allocated": 42,
  "request_type": "REALLOCATION"
}</t>

<t>Controller -&gt; Node: {
  "new_allocation_seconds": 600,
  "aggregate_consumed": 1234,
  "aggregate_remaining": 5966,
  "next_sync_deadline": "2026-02-24T16:45:00Z"
}
```</t>

<t><strong>Offline Fallback</strong>: If a Node cannot reach the Controller:
- Continue with remaining pre-allocated balance
- Enforce earliest of: (1) pre-allocated balance exhausted, or (2) local policy cutoff time
- Upon reconnection, validate actual consumption and synchronize</t>

<t><strong>Default Deny on Sync Failure</strong>: If a Node is offline for more than 1 hour (configurable) and pre-allocated balance exhausted, enforce strict Default Deny until Controller confirms quota status.</t>

<t><strong>2. Content Filter Policies</strong></t>

<t>Define accessible content categories and blocked domains/IPs.</t>

<t>Normative fields:
- <spanx style="verb">filterLevel</spanx>: Enumeration: <spanx style="verb">minimal</spanx>, <spanx style="verb">moderate</spanx>, <spanx style="verb">strict</spanx> corresponding to <spanx style="verb">urn:xppc:filter:*</spanx> URNs
- <spanx style="verb">allowedCategories</spanx>: List of content categories (news, education, entertainment, social-media, gaming, adult)
- <spanx style="verb">blockedDomains</spanx>: Explicit list of fully-qualified domain names
- <spanx style="verb">blockedIPs</spanx>: CIDR ranges to block
- <spanx style="verb">serviceOverrides</spanx>: Map of <spanx style="verb">urn:xppc:category:*</spanx> URN to boolean; if true, the service category is added to allowed list; if false, added to blocked list (subject to union-of-deny resolution). Example: <spanx style="verb">{"urn:xppc:category:video-streaming": false}</spanx> blocks all video-streaming services.</t>

<t><strong>Implementation Examples</strong> (non-normative): Platform-specific mechanisms include network stack filtering with DNS redirection, content restriction APIs with supervised DNS, or application-layer filtering combined with DNS-over-HTTPS supervision.</t>

<t><strong>3. Application Control Policies</strong></t>

<t>Restrict or permit specific applications/executables.</t>

<t>Normative fields:
- <spanx style="verb">mode</spanx>: Either "whitelist" (only listed apps allowed) or "blacklist" (all except listed)
- <spanx style="verb">apps</spanx>: List of app identifiers using <spanx style="verb">urn:xppc:app:*</spanx> URN format (see IANA Considerations for registered namespace). Platform-specific identifiers <bcp14>MAY</bcp14> be used alongside URNs but <bcp14>MUST</bcp14> be accompanied by the corresponding URN for cross-platform interoperability.
- <spanx style="verb">updateAllowed</spanx>: Boolean; if false, app updates blocked during restricted mode
- <spanx style="verb">backgroundRestricted</spanx>: Boolean; if true, app cannot run in background</t>

<t><strong>Conflict Resolution Note</strong>: When multiple ApplicationControlPolicy policies apply, the union-of-deny rule takes precedence. If one policy operates in "whitelist" mode (allowing only listed apps) and another operates in "blacklist" mode (blocking listed apps), an app appearing in a blacklist is DENIED even if it appears in another policy's whitelist. <strong>Whitelist Mode as Implicit Deny</strong>: A policy in "whitelist" mode implicitly denies all applications not listed; for conflict resolution purposes, such policies are treated as having explicit deny predicates for all unlisted applications. Similarly, if one policy operates in "whitelist" mode and an app is not listed, the implicit deny is evaluated in the Union of Deny step (step 2 of the conflict resolution algorithm).</t>

<t><strong>Implementation Examples</strong> (non-normative): Platform-specific mechanisms include application whitelisting policies, restrictions APIs with app limits, permitted application lists, or process execution controls via security frameworks.</t>

<t><strong>4. Hardware Restriction Policies</strong></t>

<t>Control access to device peripherals.</t>

<t>Normative fields:
- <spanx style="verb">cameraDisabled</spanx>: Boolean
- <spanx style="verb">microphoneDisabled</spanx>: Boolean
- <spanx style="verb">usbStorageDisabled</spanx>: Boolean
- <spanx style="verb">bluetoothDisabled</spanx>: Boolean or restricted (paired devices only)
- <spanx style="verb">locationAccess</spanx>: Enumeration: <spanx style="verb">allowed</spanx>, <spanx style="verb">disabled</spanx>, <spanx style="verb">approximate-only</spanx></t>

<t><strong>Implementation Examples</strong> (non-normative): Platform-specific mechanisms include device manager controls, restrictions frameworks with permission denial, or manifest-based permission removal.</t>

<t><strong>5. Behavioral Signal Policies</strong></t>

<t>Trigger state changes based on user behavior or time-based events.</t>

<t>Normative fields:
- <spanx style="verb">lockdownOnIdle</spanx>: Boolean; if true, after N seconds of inactivity, re-engage restrictions
- <spanx style="verb">idleTimeout</spanx>: Seconds before lockdown triggered (default: 600)
- <spanx style="verb">geofenceEnable</spanx>: Boolean; if true, restrictions apply only outside home (requires location consent)
- <spanx style="verb">bedtimeMode</spanx>: Time range (HH:MM format) when device enters restricted mode automatically
- <spanx style="verb">emergencyBypassEnabled</spanx>: Boolean; if true, SOS calls always allowed regardless of restrictions</t>

<t><strong>Emergency Bypass Configuration (Normative)</strong>: When <spanx style="verb">breakGlassEnabled</spanx> is set to <spanx style="verb">true</spanx> in the manifest-level <spanx style="verb">emergency</spanx> object, the <spanx style="verb">allowedServices</spanx> array <bcp14>MUST</bcp14> be present and <bcp14>MUST</bcp14> contain at least one service identifier. Nodes <bcp14>MUST</bcp14> reject any manifest where <spanx style="verb">breakGlassEnabled</spanx> is <spanx style="verb">true</spanx> but <spanx style="verb">allowedServices</spanx> is absent or empty. If <spanx style="verb">breakGlassEnabled</spanx> is <spanx style="verb">false</spanx> or the <spanx style="verb">emergency</spanx> object is absent, no emergency bypass applies and all policies are enforced without exception. The <spanx style="verb">allowedServices</spanx> list is exhaustive: only services explicitly enumerated receive emergency bypass treatment. Nodes <bcp14>MUST NOT</bcp14> infer or expand the bypass scope beyond the listed services.</t>

<t><strong>Implementation Examples</strong> (non-normative): Platform-specific mechanisms include idle detection with scheduled mode switching, scheduled downtime APIs, or geofencing services for location-based policy triggers.</t>

</section>
<section anchor="cross-platform-policy-semantics"><name>Cross-Platform Policy Semantics</name>

<t>Implementations <bcp14>MUST</bcp14> interpret policies according to the following semantics:</t>

<t><strong>Semantic Equivalence</strong>: Two platform implementations satisfy a policy requirement if:
1. They achieve the same enforcement outcome (e.g., both block the same service category, or both enforce a 2-hour daily limit)
2. They do so within defined tolerance (e.g., +/-30 seconds for enforcement timing)
3. They log equivalent state transitions for audit</t>

<t><strong>Conflict Resolution (Deterministic - Union of Deny / Intersection of Allow)</strong>:
- If multiple policies apply to the same resource, the most restrictive wins through the "union-of-deny, intersection-of-allow" lattice model.
- Example: "Allow urn:xppc:app:web-browser" + "Block all internet" = Web browser blocked (deny wins)
- Example: Whitelist entry for "video.example.com" + Blacklist entry for "video.example.com" = Blocked (deny wins)
- This rule is mandatory and NOT configurable by a manifest-level <spanx style="verb">priority</spanx> field.</t>

<t>Nodes and Controllers <bcp14>MUST</bcp14> implement the union-of-deny lattice resolution algorithm as the definitive conflict resolution behavior (see detailed algorithm in "Policy Composition and Resolution" section). Manifests <bcp14>MUST NOT</bcp14> include a <spanx style="verb">priority</spanx> field to change resolution semantics. Implementations <bcp14>MAY</bcp14> produce diagnostic logs explaining which predicates matched and why the final decision was reached for audit purposes.</t>

<t><strong>Portability</strong>:
- Policies written for one platform <bcp14>SHOULD</bcp14> be portable to another
- Platform-specific features (e.g., iOS geofencing) degrade gracefully if not supported
- Nodes <bcp14>MUST</bcp14> report unsupported policy features; Controllers <bcp14>MAY</bcp14> choose strict or lenient handling</t>

</section>
<section anchor="extended-policy-manifest-schema"><name>Extended Policy Manifest Schema</name>

<t>All policies are embedded in a unified Policy Manifest conforming to this extended schema:</t>

<t><spanx style="verb">json
{
  "@context": "https://xppc.example.org/schema/context-1.0.0.jsonld",
  "@type": "PolicyManifest",
  "version": "1.0.0",
  "subject_id": "household_user_alpha",
  "subject_mode": "CHILD_SAFE_MODE",
  "subject_device_scopes": ["windows", "ios", "android"],
  "effective_from": "2026-02-24T00:00:00Z",
  "effective_until": "2026-12-31T23:59:59Z",
  "policies": [
    {
      "@type": "TimeQuotaPolicy",
      "id": "policy_timequota_1",
      "weekdayLimit": 7200,
      "weekendLimit": 14400,
      "timezone": "America/Toronto",
      "enforcementMode": "session-termination",
      "sharedQuota": true,
      "preAllocationPerDevice": 600
    },
    {
      "@type": "ContentFilterPolicy",
      "id": "policy_content_1",
      "filterLevel": "strict",
      "allowedCategories": ["news", "education", "family"],
      "blockedDomains": ["video.example.com", "social.example.com", "forum.example.com"],
      "serviceOverrides": {"urn:xppc:category:video-streaming": false}
    },
    {
      "@type": "ApplicationControlPolicy",
      "id": "policy_app_1",
      "mode": "whitelist",
      "apps": [
        "urn:xppc:app:web-browser",
        "urn:xppc:app:e-reader",
        "urn:xppc:app:calculator",
        "urn:xppc:app:text-editor"
      ],
      "backgroundRestricted": true
    },
    {
      "@type": "HardwareRestrictionPolicy",
      "id": "policy_hw_1",
      "cameraDisabled": true,
      "microphoneDisabled": false,
      "usbStorageDisabled": true,
      "bluetoothDisabled": false,
      "locationAccess": "approximate-only"
    },
    {
      "@type": "BehavioralSignalPolicy",
      "id": "policy_behavior_1",
      "lockdownOnIdle": true,
      "idleTimeout": 600,
      "geofenceEnable": false,
      "bedtimeMode": "21:00-07:00",
      "emergencyBypassEnabled": true
    }
  ],
  "emergency": {
    "allowedServices": ["sos_call", "panic_alarm", "health_monitoring"],
    "breakGlassEnabled": true,
    "auditRequired": true
  },
  "signature": {
    "type": "Ed25519-JCS",
    "canonicalization": "JCS (RFC 8785)",
    "algorithm": "Ed25519 (FIPS 186-5)",
    "proofValue": "..."
  }
}
</spanx></t>

</section>
<section anchor="policy-composition-and-resolution"><name>Policy Composition and Resolution</name>

<t><strong>Allowed Combinations</strong>: Policies may be combined in a single manifest. When multiple policies apply:</t>

<t><list style="numbers" type="1">
  <t>Time Quota + Content Filter: Time quota is evaluated first; within the allowed time window, content filtering applies</t>
  <t>Application Control + Hardware Restriction: Both apply simultaneously; an app is allowed only if whitelisted AND hardware it requires isn't restricted</t>
  <t>Behavioral Signal + Time Quota: Behavioral signals can trigger early termination of time quota (e.g., bedtime mode activates lockdown regardless of remaining time)</t>
</list></t>

<t><strong>Conflict Resolution (Lattice Model)</strong>: X-PPC mandates a deterministic, most-restrictive-wins algorithm based on the "union-of-deny, intersection-of-allow" lattice model. Implementations <bcp14>MUST</bcp14> apply the following evaluation sequence for any resource request:</t>

<t><list style="numbers" type="1">
  <t><strong>Emergency Bypass (SOS/Critical Services)</strong>: Emergency services (SOS calls, panic alarms, critical health monitoring) are evaluated first and always result in ALLOW. Emergency bypass is the only exception to the union-of-deny rule and applies exclusively to life-safety resources explicitly enumerated in the manifest's <spanx style="verb">emergency.allowedServices</spanx> list.</t>
  <t><strong>Union of Deny (Explicit Blacklist)</strong>: Collect all deny/blacklist predicates from applicable policies. If ANY deny predicate matches the resource, the effective decision is DENY. This step implements the "union-of-deny" rule: a single deny from any policy is sufficient to block the resource.</t>
  <t><strong>Intersection of Allow (Explicit Whitelist)</strong>: If no deny predicates matched in step 2, collect all allow/whitelist predicates from applicable policies that define allow/deny semantics for the resource type. A resource is ALLOWED if and only if:
  <list style="symbols">
      <t>At least one policy explicitly allows the resource, AND</t>
      <t>No applicable policy is "silent" on the resource type itself (see definition below)</t>
    </list>
<strong>Definition of "Silent" for Policy and Resource Type</strong>:
- A policy is <strong>silent on resource type R</strong> if and only if that policy contains NO rules or fields pertaining to resource type R at all.
  - Example: A TimeQuotaPolicy has no fields for applications, domains, or hardware -&gt; it is silent on all those resource types.
  - Example: A ContentFilterPolicy with <spanx style="verb">blockedDomains: []</spanx> (empty list) is <strong>NOT</strong> silent; it has rules for the domain type (the rule is "block nothing of this type").
- A policy is <strong>NEVER silent</strong> if it declares <spanx style="verb">mode: "whitelist"</spanx> for its resource type. Whitelist mode universally applies allow/deny semantics to every possible resource of that type.
  - Example: ApplicationControlPolicy with <spanx style="verb">mode: "whitelist"</spanx> and <spanx style="verb">apps: [urn:xppc:app:browser-a, urn:xppc:app:browser-b]</spanx> implicitly denies all other apps -&gt; it is NOT silent on applications.
- A policy that is silent on resource type R does NOT constrain that resource type; resources of type R are evaluated independent of that policy.  <vspace blankLines='1'/>
<strong>Updated Intersection Algorithm</strong>:
Let P be the set of applicable policies and R be the resource type in question. Let A(p, r) be true if policy p explicitly allows resource r, and Silent(p, R) be true if p is silent on resource type R.  <vspace blankLines='1'/>
For resource r of type R to be ALLOWED:
- There must exist at least one applicable policy p where A(p, r) = true (explicit allow), AND
- For every applicable policy p where Silent(p, R) = false (policy is NOT silent on the type):
  - Either A(p, r) = true (policy allows it), OR
  - The policy's deny rules do not match r (no deny overrides the allow)  <vspace blankLines='1'/>
<strong>Whitelist Mode Clarification</strong>: A policy in whitelist mode (e.g., ApplicationControlPolicy with <spanx style="verb">mode: "whitelist"</spanx>, listing only <spanx style="verb">[urn:xppc:app:browser-a, urn:xppc:app:browser-b]</spanx>) implicitly treats all unlisted resources as explicitly DENIED for that resource type. This denial is encoded in step 2 (Union of Deny). Therefore:
- Listing an app in a whitelist policy is an explicit allow predicate
- Omitting an app from a whitelist policy is an explicit deny predicate
- A whitelist policy can never be "silent" on its resource type  <vspace blankLines='1'/>
This eliminates the "silent policy creates allow" footgun: whitelists are always opinionated about every resource in their type.  <vspace blankLines='1'/>
<strong>Policy Authoring Guidance (Normative for Manifest Conformance)</strong>: Policy authors creating manifests <bcp14>MUST</bcp14> be aware that a policy which does not mention a resource type implicitly becomes "silent" on that type and does not participate in conflict resolution for that type. To ensure predictable enforcement:
- <strong>Recommended</strong>: If a policy is not intended to constrain a resource type R, the policy <bcp14>SHOULD</bcp14> explicitly declare empty or null rule sets for R (e.g., <spanx style="verb">"blockedDomains": []</spanx>, <spanx style="verb">"allowedCategories": []</spanx>, or <spanx style="verb">"apps": null</spanx>) rather than omitting the field entirely.
- <strong>Impact of Omission</strong>: A TimeQuotaPolicy that omits application-related fields will be silent on applications; other policies controlling applications will then determine the outcome. This is often intentional but can be a usability footgun if policy authors are unaware.
- <strong>Best Practice</strong>: Manifest editors and validation tools <bcp14>SHOULD</bcp14> warn authors when a policy is silent on a resource type that is constrained by other policies in the same manifest. This helps prevent accidental enforcement gaps.
- <strong>Deployment Note</strong>: This guidance applies especially when combining multiple policy types; explicit field declarations ensure manifest intent is unambiguous and reduce support burden from correctness disputes.</t>
  <t><strong>Default Deny</strong>: If neither deny nor allow predicates match (i.e., the resource is not mentioned in any policy), apply the manifest-level default. In restricted modes (e.g., CHILD_SAFE_MODE), the default <bcp14>MUST</bcp14> be DENY. In unrestricted modes (e.g., when no policy applies or subject mode is UNRESTRICTED), the default <bcp14>MAY</bcp14> be ALLOW, subject to platform and deployment policy.</t>
</list></t>

<t>This algorithm ensures explicit denials always take precedence over explicit allows, implementing "most-restrictive-wins" semantics. Nodes and Controllers <bcp14>MUST NOT</bcp14> implement a manifest-level <spanx style="verb">priority</spanx> field or any other mechanism that allows allow-rules to override deny-rules. Implementations <bcp14>SHOULD</bcp14> emit diagnostic logs explaining which predicates matched and why the final decision was reached for auditability.</t>

</section>
<section anchor="policy-algorithm-test-vectors-normative"><name>Policy Algorithm Test Vectors (Normative)</name>

<t>The following test vectors define expected outcomes for the union-of-deny / intersection-of-allow algorithm. Conforming implementations <bcp14>MUST</bcp14> produce the specified result for each case.</t>

<dl>
  <dt>TV-1:</dt>
  <dd>
    <t>Policy: ContentFilter, blockedDomains=evil.example.
Resource: evil.example.
Result: DENY.
Rationale: Explicit deny in step 2 (union-of-deny).</t>
  </dd>
  <dt>TV-2:</dt>
  <dd>
    <t>Policy: ContentFilter, blockedDomains=evil.example.
Resource: safe.example.
Result: ALLOW (or Default Deny if CHILD_SAFE_MODE).
Rationale: No deny match; no allow match; falls to
step 4 default. CHILD_SAFE_MODE -&gt; DENY;
UNRESTRICTED -&gt; ALLOW.</t>
  </dd>
  <dt>TV-3:</dt>
  <dd>
    <t>Policy: AppControl, mode=whitelist,
apps=chrome,safari.
Resource: firefox.
Result: DENY.
Rationale: Whitelist mode: unlisted app is implicit
deny (step 2).</t>
  </dd>
  <dt>TV-4:</dt>
  <dd>
    <t>Policy: AppControl, mode=whitelist,
apps=chrome,safari.
Resource: chrome.
Result: ALLOW.
Rationale: Whitelist mode: listed app is explicit
allow (step 3).</t>
  </dd>
  <dt>TV-5:</dt>
  <dd>
    <t>Policy: AppControl mode=whitelist apps=chrome +
AppControl mode=blacklist apps=chrome.
Resource: chrome.
Result: DENY.
Rationale: Union-of-deny: blacklist deny overrides
whitelist allow.</t>
  </dd>
  <dt>TV-6:</dt>
  <dd>
    <t>Policy: ContentFilter, blockedDomains=(empty).
Resource: any.example.
Result: ALLOW (or Default Deny).
Rationale: Policy is NOT silent but no deny
predicate matches. Falls to step 3/4.</t>
  </dd>
  <dt>TV-7:</dt>
  <dd>
    <t>Policy: TimeQuota dailyLimit=3600 (no app fields) +
AppControl mode=whitelist apps=chrome.
Resource: firefox.
Result: DENY.
Rationale: TimeQuota silent on app type; AppControl
whitelist denies firefox.</t>
  </dd>
  <dt>TV-8:</dt>
  <dd>
    <t>Policy: TimeQuota dailyLimit=3600 (no app fields) +
AppControl mode=whitelist apps=chrome.
Resource: chrome.
Result: ALLOW (within time quota).
Rationale: TimeQuota silent on apps; AppControl
allows chrome. Time evaluated first per composition.</t>
  </dd>
  <dt>TV-9:</dt>
  <dd>
    <t>Policy: No policies in manifest.
Resource: any resource.
Result: Default Deny (CHILD_SAFE_MODE) or ALLOW
(UNRESTRICTED).
Rationale: Step 4: no predicates match; default
applies based on mode.</t>
  </dd>
  <dt>TV-10:</dt>
  <dd>
    <t>Policy: ContentFilter blockedDomains=video.example.com
+ ContentFilter allowedDomains=video.example.com.
Resource: video.example.com.
Result: DENY.
Rationale: Union-of-deny: explicit deny wins over
explicit allow (step 2 before step 3).</t>
  </dd>
  <dt>TV-11:</dt>
  <dd>
    <t>Policy: Emergency allowedServices=sos_call +
AppControl mode=blacklist apps=sos_call.
Resource: sos_call.
Result: ALLOW.
Rationale: Step 1 emergency bypass: SOS services in
allowedServices always allowed regardless of other
policies.</t>
  </dd>
  <dt>TV-12:</dt>
  <dd>
    <t>Policy: AppControl mode=whitelist apps=(empty).
Resource: any app.
Result: DENY.
Rationale: Whitelist with empty list: all apps are
unlisted, therefore all implicitly denied.</t>
  </dd>
  <dt>TV-13:</dt>
  <dd>
    <t>Policy: AppControl mode=blacklist apps=(empty).
Resource: any app.
Result: ALLOW (or Default Deny).
Rationale: Blacklist with empty list: no deny
predicates match; falls to step 3/4.</t>
  </dd>
  <dt>TV-14:</dt>
  <dd>
    <t>Policy: ContentFilter
blockedDomains=*.example.com.
Resource: sub.example.com.
Result: DENY.
Rationale: Wildcard domain match in deny predicate
(if implementation supports glob patterns).</t>
  </dd>
  <dt>TV-15:</dt>
  <dd>
    <t>Policy: AppControl mode=whitelist apps=chrome +
HardwareRestriction blockedInterfaces=camera.
Resource: chrome (requires camera).
Result: DENY.
Rationale: App allowed by AppControl but hardware
restricted; composition rule 2: both must pass.</t>
  </dd>
</dl>

<t><strong>Implementer Note</strong>: Test vectors TV-2, TV-6, TV-9, and TV-13 have mode-dependent outcomes. Implementations <bcp14>MUST</bcp14> test both CHILD_SAFE_MODE (default=DENY) and UNRESTRICTED (default=ALLOW) variants for these vectors.</t>

</section>
</section>
<section anchor="security-tamper-protection"><name>Security &amp; Tamper Protection</name>

<section anchor="kernel-watchdog"><name>Kernel Watchdog</name>

<t>To prevent bypass of userspace agents, X-PPC implements a State Consistency Watchdog:</t>

<t><list style="symbols">
  <t><strong>Heartbeat Mechanism</strong>: If the userspace daemon fails to report policy state within defined intervals, the system enters "Default Deny" mode (blocking all non-emergency traffic).</t>
  <t><strong>Immutable Storage</strong>: Policy manifests <bcp14>MUST</bcp14> be cached in tamper-resistant storage appropriate to the platform (e.g., TPM-protected partitions, Secure Enclave, or equivalent secure storage mechanisms) to provide offline resilience and integrity protection.</t>
  <t><strong>Signature Verification</strong>: Every policy update must include a valid Ed25519 signature from the Controller's private key.</t>
</list></t>

</section>
<section anchor="audit-and-break-glass"><name>Audit and Break-Glass</name>

<t>X-PPC implements emergency override mechanisms:</t>

<t><list style="symbols">
  <t><strong>Break-Glass Recovery</strong>: Administrators may unlock the device using a high-entropy recovery code stored offline.</t>
  <t><strong>Audit Trail</strong>: All state transitions, policy changes, and override events are logged in tamper-evident format.</t>
</list></t>

<t>Example audit entry schema (JSON):</t>

<t><spanx style="verb">json
{
  "sequence": 1024,
  "timestamp_monotonic": 987654321,
  "timestamp_wallclock": "2026-02-24T12:34:56Z",
  "event_type": "STATE_TRANSITION",
  "subject_id": "household_user_alpha",
  "device_id": "device_windows_01",
  "from_state": "ACTIVE",
  "to_state": "CHILD_SAFE_MODE",
  "reason": "rms_signal:CHILD_SAFE_MODE",
  "details": { "quota_remaining": 42 },
  "prev_hash": "sha256:...",
  "signature": "Base64SignatureOverEntry"
}
</spanx></t>

<t>Notes:</t>

<t><list style="symbols">
  <t><spanx style="verb">sequence</spanx> and <spanx style="verb">prev_hash</spanx> form a lightweight chain to detect deletion or reordering. <spanx style="verb">prev_hash</spanx> <bcp14>MUST</bcp14> be the SHA-256 hash of the entire prior JSON audit entry (canonicalized using JCS for deterministic hashing) and recorded as <spanx style="verb">sha256:&lt;hex&gt;</spanx>.</t>
  <t>Entries <bcp14>MUST</bcp14> include both monotonic and wall-clock timestamps.</t>
  <t>Audit entries <bcp14>SHOULD</bcp14> be exported to a remote, append-only collector (syslog, secure cloud auditor) to reduce local tampering risk.</t>
  <t><strong>Audit Entry Signing</strong>: Nodes <bcp14>MUST</bcp14> sign audit entries using a device-unique key derived from or stored in the Hardware Root of Trust (TPM-backed key, Secure Enclave attestation key, or equivalent hardware-backed private key). Controllers sign reconciliation reports and quota adjustment events using the Controller's primary Ed25519 private key. This separation ensures that local audit events are attributable to specific devices while global policy events are attributable to the Controller.</t>
  <t><strong>Truncation Limitation</strong>: The <spanx style="verb">prev_hash</spanx> chaining mechanism detects modification or deletion within a retained audit chain but does not prevent wholesale truncation of the audit log prior to remote export. Implementations <bcp14>SHOULD</bcp14> export audit entries to a remote collector promptly (recommended: within 5 minutes of generation) to minimize the window for undetected truncation. Nodes operating offline for extended periods <bcp14>MUST</bcp14> retain audit entries in tamper-resistant storage until export succeeds.</t>
  <t><strong>Audit Log Rotation and Storage Guidance (Normative)</strong>: To prevent audit logging from exhausting storage on resource-constrained devices (e.g., consumer routers, embedded Nodes):
  <list style="symbols">
      <t><strong>Minimum Storage Reservation</strong>: Implementations <bcp14>MUST</bcp14> reserve at least 1 MB of persistent storage for audit log retention. Implementations on devices with ample storage <bcp14>SHOULD</bcp14> reserve at least 10 MB.</t>
      <t><strong>Log Rotation</strong>: When audit storage reaches the reserved capacity, the implementation <bcp14>MUST</bcp14> rotate logs by exporting the oldest entries to a remote collector (if available) and then evicting them locally. If no remote collector is reachable, the implementation <bcp14>MUST</bcp14> retain the most recent entries (newest-first retention) and log <spanx style="verb">AUDIT_LOG_TRUNCATED</spanx> with the number of evicted entries and the timestamp range lost.</t>
      <t><strong>Maximum Local Retention</strong>: Audit entries that have been successfully exported to a remote collector <bcp14>MAY</bcp14> be evicted from local storage after 7 days (168 hours). Entries that have NOT been exported <bcp14>MUST</bcp14> be retained until export succeeds or storage capacity forces rotation.</t>
      <t><strong>Rate-Limiting for Repeated Events</strong>: Implementations <bcp14>SHOULD</bcp14> coalesce repeated identical audit events (same <spanx style="verb">event_type</spanx>, <spanx style="verb">subject_id</spanx>, <spanx style="verb">device_id</spanx>, and <spanx style="verb">reason</spanx> within a 60-second window) into a single entry with a <spanx style="verb">repeat_count</spanx> field. This prevents log flooding from sustained attack scenarios (e.g., continuous replay attempts, persistent signature failures) while preserving audit completeness. The first and last occurrence within the coalescing window <bcp14>MUST</bcp14> be individually logged; intermediate occurrences are counted.</t>
    </list></t>
</list></t>

</section>
</section>
<section anchor="universal-schema-json-ld"><name>Universal Schema (JSON-LD)</name>

<t>The X-PPC Policy Manifest is encoded as JSON-LD for interoperability. A basic manifest structure is shown here; the complete extended schema with all policy types is defined in section "Policy Definition and Cross-Platform Compatibility".</t>

<t><strong>JSON-LD Context Pinning (Normative)</strong>: To prevent remote context fetching attacks and ensure offline resilience, Nodes <bcp14>MUST NOT</bcp14> perform remote HTTP(S) fetches of the <spanx style="verb">@context</spanx> URL during manifest verification.</t>

<t>Nodes <bcp14>MUST</bcp14> use one of the following immutable context pinning strategies:</t>

<t><list style="numbers" type="1">
  <t><strong>Bundled Local Context</strong>: Ship the complete <spanx style="verb">@context</spanx> schema definition with the enforcement agent. Verify the bundled context matches the spec-defined schema by comparing a SHA-256 hash. Implementations <bcp14>MUST</bcp14> hardcode a context hash such as <spanx style="verb">sha256:46bd1d6a45ceed98...</spanx> (corresponding to X-PPC specification version 1.0.0) and document both the bundled context version and the corresponding specification release or commit hash.</t>
  <t><strong>Content-Addressed Context URL (Recommended for Interoperability)</strong>: Use an immutable context identifier such as:
  <list style="symbols">
      <t>Versioned URN: <spanx style="verb">urn:xppc:context:1.0.0</spanx> (version-locked, never changes)</t>
      <t>Versioned HTTPS URL: <spanx style="verb">https://xppc.example.org/schema/context-1.0.0.jsonld</spanx> (version-pinned in the path itself, not via query parameters)</t>
      <t>IPFS/content-addressed URL: <spanx style="verb">ipfs://QmXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</spanx> (hash-based, immutable)</t>
      <t>Hash-pinned HTTPS: An HTTPS URL paired with a manifest-embedded <spanx style="verb">context_hash</spanx> object: <spanx style="verb">{ "algorithm": "sha256", "value": "46bd1d6a45ceed98..." }</spanx></t>
    </list></t>
  <t><strong>Locally-Verified Context (Vendor Flexibility)</strong>: Maintain a local cache of known context versions with their hashes keyed by specification version string (e.g., "1.0.0"). Before accepting a manifest with a new <spanx style="verb">@context</spanx> value, verify the content hash (if provided) against the locally-cached hash for that version. Controllers <bcp14>MUST</bcp14> embed the context hash in the manifest signature pipeline to prevent MITM substitution.</t>
</list></t>

<t><strong>Immutability Requirement (Mandatory for Implementers)</strong>: All controllers generating manifests <bcp14>MUST</bcp14> use only immutable <spanx style="verb">@context</spanx> identifiers that are version-locked in their URI form (e.g., <spanx style="verb">https://xppc.example.org/schema/context-1.0.0.jsonld</spanx>, NOT unversioned base URLs like <spanx style="verb">https://xppc.example.org/v1</spanx>). Using unversioned or mutable URLs (e.g., base <spanx style="verb">https://xppc.example.org/v1</spanx> without release-version pinning) risks breaking interoperability and signature verification if the context definition is updated.</t>

<t><strong>Context Hash Commitment (Normative)</strong>: Implementers <bcp14>MUST</bcp14> validate the X-PPC context using one of the following concrete hash values corresponding to specification release versions:
   - For X-PPC 1.0.0 and later: <spanx style="verb">sha256:46bd1d6a45ceed98...</spanx> (canonical context SHA-256 at specification release)
   - Vendors <bcp14>MUST NOT</bcp14> accept or trust context URLs without explicit version pins in the identifier itself
   - Vendors <bcp14>MUST</bcp14> maintain a local mapping table of spec-version -&gt; immutable-context-URL -&gt; context-SHA256 for all supported releases</t>

<t><strong>Future IANA Registry (Informational)</strong>: If this specification is adopted as an RFC, the authors intend to request IANA creation of an "X-PPC Context Version" registry with the following structure:
   - <strong>Registry name</strong>: X-PPC Context Versions
   - <strong>Columns</strong>: Specification Version (e.g., "1.0.0"), Context URI, SHA-256 Hash, Reference (RFC number)
   - <strong>Registration policy</strong>: Standards Action
   Until such a registry is established, implementers <bcp14>MUST</bcp14> rely on the hash values published in the normative specification text above.</t>

<t>Remote context resolution introduces both a security risk (MITM attacks on context definitions) and an availability dependency that contradicts X-PPC's offline-first design.</t>

<t><spanx style="verb">json
{
  "@context": "https://xppc.example.org/schema/context-1.0.0.jsonld",
  "@type": "PolicyManifest",
  "version": "1.0.0",
  "subject_id": "household_user_alpha",
  "subject_mode": "CHILD_SAFE_MODE",
  "policies": [
    {
      "@type": "TimeQuotaPolicy",
      "weekdayLimit": 7200,
      "weekendLimit": 14400,
      "timezone": "America/Toronto"
    }
  ],
  "signature": {
    "type": "Ed25519-JCS",
    "canonicalization": "JCS (RFC 8785)",
    "algorithm": "Ed25519 (FIPS 186-5)",
    "proofValue": "..."
  }
}
</spanx></t>

<section anchor="policymanifest-schema-normative"><name>PolicyManifest Schema (Normative)</name>

<t>To ensure interoperability, the PolicyManifest structure is formally defined using CDDL (RFC 8610). This schema is normative; implementations <bcp14>MUST</bcp14> conform to the following structure when generating or validating Policy Manifests.</t>

<t><strong>Normative Field Structural Requirement</strong>: The <spanx style="verb">subject_id</spanx> and <spanx style="verb">subject_mode</spanx> fields <bcp14>MUST</bcp14> be represented as flat, top-level fields in the JSON object. They <bcp14>MUST NOT</bcp14> be nested within a separate <spanx style="verb">subject</spanx> object (e.g., <spanx style="verb">"subject": { "id": "...", "mode": "..." }</spanx>). This flat structure is essential for deterministic JCS (RFC 8785) canonicalization and signature verification. Deviations from this flat structure will cause cross-implementation signature verification failures. (Note: JCS defines a deterministic serialization independent of source field order; this requirement constrains field <em>placement</em>, not field <em>order</em>.)</t>

<t>```cddl
; CDDL Schema for X-PPC PolicyManifest (Normative)
PolicyManifest = {
  @context: tstr,                         ; <bcp14>MUST</bcp14> be versioned immutable URI (e.g., "https://xppc.example.org/schema/context-1.0.0.jsonld" or "urn:xppc:context:1.0.0")
  @type: "PolicyManifest",                ; Fixed value for type identification
  version: tstr,                          ; Protocol version (e.g., "1.0.0")
  subject_id: tstr,                       ; Subject (household member) identifier (<bcp14>SHOULD</bcp14> be pseudonymized UUID)
  subject_mode: "CHILD_SAFE_MODE" / "SUPERVISED" / "UNRESTRICTED",
  ? subject_display_name: tstr,           ; Optional human-readable name (not used in enforcement)
  ? subject_device_scopes: [* tstr],      ; Optional device type restrictions (e.g., ["windows", "ios"])
  ? effective_from: tstr,                 ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  ? effective_until: tstr,                ; RFC 3339 date-time, UTC "Z" suffix (see Timestamp Format)
  policies: [+ Policy],                   ; Array of one or more policies (<bcp14>MUST NOT</bcp14> be empty)
  ? emergency: EmergencyConfig,            ; Emergency bypass configuration (see below)
  ? metadata: Metadata,                   ; Optional manifest metadata
  signature: Signature                    ; Ed25519 signature over canonicalized manifest
}</t>

<t>Policy = TimeQuotaPolicy / ContentFilterPolicy / ApplicationControlPolicy /
         HardwareRestrictionPolicy / BehavioralSignalPolicy / ExtensionPolicy</t>

<t>TimeQuotaPolicy = {
  @type: "TimeQuotaPolicy",
  weekdayLimit: uint,                     ; Seconds per weekday (Monday-Friday)
  weekendLimit: uint,                     ; Seconds per weekend day (Saturday-Sunday)
  timezone: tstr,                         ; IANA timezone identifier (e.g., "America/Toronto")
  ? enforcementMode: "session-termination" / "lockout",
  ? sharedQuota: bool,                    ; Default: true
  ? preAllocationPerDevice: uint,         ; Seconds (default: 600)
  ? critical: bool,                       ; If true, Nodes <bcp14>MUST</bcp14> reject manifest if unsupported
  * tstr =&gt; any                           ; Unknown fields for forward compatibility
}</t>

<t>ContentFilterPolicy = {
  @type: "ContentFilterPolicy",
  filterLevel: "minimal" / "moderate" / "strict",
  ? allowedCategories: [* tstr],          ; Category URNs to explicitly allow (e.g., "urn:xppc:category:education")
  ? blockedCategories: [* tstr],          ; Category URNs to explicitly block (e.g., "urn:xppc:category:video-streaming")
  ? blockedDomains: [* tstr],             ; FQDNs to block
  ? blockedIPs: [* tstr],                 ; CIDR ranges to block
  ? serviceOverrides: {* tstr =&gt; bool},   ; Map of category URN to bool override (true=allow, false=block)
  ? critical: bool,                       ; If true, Nodes <bcp14>MUST</bcp14> reject manifest if unsupported
  * tstr =&gt; any
}</t>

<t>ApplicationControlPolicy = {
  @type: "ApplicationControlPolicy",
  mode: "whitelist" / "blacklist",
  apps: [* tstr],                         ; Application identifiers (platform-specific or URNs)
  ? updateAllowed: bool,
  ? backgroundRestricted: bool,
  ? critical: bool,                       ; If true, Nodes <bcp14>MUST</bcp14> reject manifest if unsupported
  * tstr =&gt; any
}</t>

<t>HardwareRestrictionPolicy = {
  @type: "HardwareRestrictionPolicy",
  ? cameraDisabled: bool,
  ? microphoneDisabled: bool,
  ? usbStorageDisabled: bool,
  ? bluetoothDisabled: bool,
  ? locationAccess: "allowed" / "disabled" / "approximate-only",
  ? critical: bool,                       ; If true, Nodes <bcp14>MUST</bcp14> reject manifest if unsupported
  * tstr =&gt; any
}</t>

<t>BehavioralSignalPolicy = {
  @type: "BehavioralSignalPolicy",
  ? lockdownOnIdle: bool,
  ? idleTimeout: uint,                    ; Seconds
  ? geofenceEnable: bool,
  ? bedtimeMode: tstr,                    ; Time range in HH:MM-HH:MM format (e.g., "21:00-07:00")
  ? emergencyBypassEnabled: bool,
  ? critical: bool,                       ; If true, Nodes <bcp14>MUST</bcp14> reject manifest if unsupported
  * tstr =&gt; any
}</t>

<t>ExtensionPolicy = {
  @type: tstr,                            ; Custom policy type (unrecognized by this version)
  ? critical: bool,                       ; If true, Nodes <bcp14>MUST</bcp14> reject manifest if unsupported
  * tstr =&gt; any                           ; Arbitrary fields for extensibility
}</t>

<t>; Emergency bypass configuration.
; When breakGlassEnabled is true, allowedServices <bcp14>MUST</bcp14> be present and non-empty.
; Omitting allowedServices when breakGlassEnabled is true is a validation error.
EmergencyConfig = {
  allowedServices: [+ tstr],              ; <bcp14>REQUIRED</bcp14> list of bypass-eligible services (e.g., "sos_call", "panic_alarm", "health_monitoring")
  breakGlassEnabled: bool,                ; If true, allowedServices are exempt from ALL policy restrictions
  ? auditRequired: bool,                  ; If true, all emergency bypass invocations <bcp14>MUST</bcp14> be logged
  * tstr =&gt; any
}</t>

<t>Metadata = {
  ? effectiveFrom: tstr,                  ; RFC 3339 date-time, UTC "Z" suffix
  ? effectiveUntil: tstr,                 ; RFC 3339 date-time, UTC "Z" suffix
  ? issuedBy: tstr,                       ; Controller identifier
  ? policyId: tstr,                       ; Unique policy identifier
  * tstr =&gt; any
}</t>

<t>Signature = {
  type: "Ed25519-JCS",                    ; Fixed signature type
  canonicalization: tstr,                 ; "JCS (RFC 8785)"
  algorithm: tstr,                        ; "Ed25519 (FIPS 186-5)"
  proofValue: tstr                        ; Base64 (RFC 4648 Section 4) Ed25519 signature (see Signature Encoding)
}
```</t>

<t><strong>Required Fields</strong>: The following fields are <bcp14>REQUIRED</bcp14> in all PolicyManifest instances:
- <spanx style="verb">@context</spanx>, <spanx style="verb">@type</spanx>, <spanx style="verb">version</spanx>, <spanx style="verb">subject_id</spanx>, <spanx style="verb">subject_mode</spanx>, <spanx style="verb">policies</spanx> (non-empty array), <spanx style="verb">signature</spanx>
- Within <spanx style="verb">signature</spanx>: all fields (<spanx style="verb">type</spanx>, <spanx style="verb">canonicalization</spanx>, <spanx style="verb">algorithm</spanx>, <spanx style="verb">proofValue</spanx>)</t>

<t><strong>Optional Fields</strong>: All other fields are optional. Implementations <bcp14>MAY</bcp14> include additional fields for future extensibility.</t>

<t><strong>Unknown Field Handling</strong>: Nodes receiving a PolicyManifest with unknown fields (fields not defined in this specification or the Node's supported version) <bcp14>MUST</bcp14>:
1. Ignore unknown fields at the manifest root level or within known policy objects
2. Log unknown fields at DEBUG level (informational, not error) for diagnostic purposes
3. Continue processing all known fields normally
4. NOT reject the manifest solely due to unknown fields (unless the manifest is otherwise invalid)</t>

<t>Unknown policy types (e.g., <spanx style="verb">ExtensionPolicy</spanx> with unrecognized <spanx style="verb">@type</spanx>) <bcp14>MUST</bcp14> be handled according to the "Unknown Policy Type Handling" rules in the "Protocol Versioning and Interoperability" section.</t>

<t><strong>Optional Field Extension for Policy Robustness</strong>: The optional <spanx style="verb">critical</spanx> boolean field <bcp14>MAY</bcp14> appear in any policy object within the PolicyManifest. When <spanx style="verb">critical: true</spanx> is present in a policy the Node does not support (unrecognized <spanx style="verb">@type</spanx> or unrecognized required fields within a known policy type), Nodes <bcp14>MUST</bcp14> reject the entire manifest and return an error to the Controller. Absence of the <spanx style="verb">critical</spanx> field or <spanx style="verb">critical: false</spanx> implies non-critical behavior: the Node <bcp14>SHOULD</bcp14> ignore the unsupported policy and continue enforcing supported policies. This mechanism allows future protocol versions to introduce mandatory features while maintaining backward compatibility for optional features.</t>

</section>
</section>
<section anchor="compliance-levels-x-ppc-cl"><name>Compliance Levels (X-PPC-CL)</name>

<t>X-PPC defines four compliance tiers:</t>

<t><list style="symbols">
  <t><strong>X-PPC-CL0 (Minimal)</strong>: Policy distribution and signature verification only. CL0 is designed for constrained devices and simple deployment scenarios where full session tracking and time quota enforcement are not feasible or not required.
  <list style="symbols">
      <t><strong>Scope</strong>: CL0 devices receive signed PolicyManifests from a Controller and verify signatures. They do NOT implement session tracking (<spanx style="verb">session_start</spanx>/<spanx style="verb">heartbeat</spanx>), time quota accounting, or Remote Mode Signaling (RMS).</t>
      <t><strong>Required capabilities</strong>:
      <list style="symbols">
          <t>HTTPS (TLS 1.3+) connectivity to Controller for manifest retrieval</t>
          <t>Ed25519 signature verification of PolicyManifests (JCS-canonicalized)</t>
          <t>Local storage for the current active manifest</t>
          <t>Application of boolean (allow/deny) policy rules from the manifest (e.g., app category blocks, content filter lists)</t>
        </list></t>
      <t><strong>Explicitly excluded from CL0</strong>:
      <list style="symbols">
          <t>Session lifecycle (<spanx style="verb">session_start</spanx>, <spanx style="verb">heartbeat</spanx>, <spanx style="verb">session_end</spanx>)</t>
          <t>Time quota tracking and enforcement</t>
          <t>Negative balance reconciliation</t>
          <t>RMS signals and Two-Phase Apply</t>
          <t>Satellite pairing and RegistrationAssertions</t>
          <t>Watchdog mechanisms</t>
        </list></t>
      <t><strong>Use cases</strong>: Simple home routers applying DNS-level category blocks, IoT devices enforcing content filters, legacy devices that can fetch and verify a signed policy but cannot maintain persistent sessions.</t>
      <t><strong>Testable requirements for CL0</strong>:
      <list style="symbols">
          <t><strong>Signature Validation Test</strong>: Device must validate a signed, JCS-canonicalized manifest and reject manifests with invalid signatures.</t>
          <t><strong>Policy Application Test</strong>: Device must demonstrate enforcement of at least one boolean policy rule (e.g., blocking a denied app category).</t>
          <t><strong>Manifest Refresh Test</strong>: Device must fetch updated manifests at a configurable interval (<bcp14>RECOMMENDED</bcp14>: every 15 minutes) and apply changes within one refresh cycle.</t>
        </list></t>
      <t><strong>Rationale</strong>: CL0 lowers the adoption barrier by providing a minimal safety profile that requires no session state. Deployments can start at CL0 and upgrade to CL1+ as platform capabilities permit.</t>
    </list></t>
  <t><strong>X-PPC-CL1 (Basic)</strong>: Network-level enforcement via X-PPC Gateway/Proxy. Suitable for legacy devices without native support.</t>
  <t><strong>X-PPC-CL2 (Standard)</strong>: Native system-service integration plus Remote Mode Signaling.
  <list style="symbols">
      <t>Note: On mobile operating systems (iOS, Android) and other vendor-locked platforms, achieving X-PPC-CL2 requires enrollment in device management or supervised mode (e.g., MDM provisioning, enterprise supervision). Without such enrollment, a third-party app cannot provide CL2 semantics.</t>
      <t>Testable requirements for CL2:
      <list style="symbols">
          <t><strong>Signature Validation Test</strong>: Device must validate a signed, JCS-canonicalized manifest and reject manifests with invalid signatures.</t>
          <t><strong>Heartbeat Failure Test</strong>: Device must enter Default Deny enforcement state within 60 seconds of missed heartbeats (subject to platform timer granularity) and log the transition.</t>
        </list></t>
    </list></t>
  <t><strong>X-PPC-CL3 (Full)</strong>: Kernel-integrated enforcement, Hardware Root of Trust, and Watchdog mechanisms.
  <list style="symbols">
      <t>Note: X-PPC-CL3 on mobile/OEM platforms typically requires vendor/OEM cooperation (platform APIs, signed system extensions, or OEM-provided enforcement hooks). CL3 semantics may be unattainable for ordinary third-party applications on locked platforms; vendors <bcp14>MUST</bcp14> provide integration points (MDM, supervised APIs, or firmware-level hooks) for full CL3 compliance.</t>
      <t>Testable requirements for CL3:
      <list style="symbols">
          <t><strong>Hardware Key Test</strong>: Device must demonstrate hardware-backed private key storage (TPM/Secure Enclave) for Controller key material and produce attestation evidence.</t>
          <t><strong>Cold-Boot Persistence Test</strong>: Device must maintain enforcement state (policy applied and watchdog active) across a full power-cycle without network connectivity and resume audit chaining on network restoration.</t>
        </list></t>
    </list></t>
</list></t>

<section anchor="wire-protocol-requirements-by-compliance-level"><name>Wire Protocol Requirements by Compliance Level</name>

<t>The following clarifies which protocol roles and message types are required at each compliance level:</t>

<t><strong>CL1 (Network-Level Gateway Enforcement)</strong>:
- <strong>Wire protocol endpoints</strong>: X-PPC Gateway and Controller communicate over HTTPS (RFC 9110, TLS 1.3+). End-user devices do NOT implement X-PPC protocol; Gateway intercepts and enforces on their behalf.
- <strong>Mandatory message flows</strong>: Gateway &lt;-&gt; Controller (session_start, heartbeat). Gateway &lt;-&gt; End-devices (transparent proxying, no X-PPC awareness required).
- <strong>Signature validation location</strong>: Gateway <bcp14>MUST</bcp14> validate all manifest signatures against the Controller's public key. End-devices are NOT responsible for validation.
- <strong>Policy parsing</strong>: Gateway <bcp14>MUST</bcp14> parse and enforce PolicyManifest schemas. End-devices are NOT required to understand PolicyManifest format.
- <strong>Rationale</strong>: CL1 provides network-observable enforcement without requiring OS-level integration or device-side implementation.</t>

<t><strong>CL2 (Native Device Integration)</strong>:
- <strong>Wire protocol endpoints</strong>: Node and Controller communicate via HTTPS (RFC 9110, TLS 1.3+). CL2 Nodes <bcp14>MUST</bcp14> implement the full X-PPC protocol.
- <strong>Mandatory message flows</strong>: Node &lt;-&gt; Controller (session_start, heartbeat, RMS signals). Node &lt;-&gt; Satellite (optional, for pairing/updates).
- <strong>Signature validation location</strong>: Node <bcp14>MUST</bcp14> validate all manifest signatures. The Node cannot delegate validation to any intermediary.
- <strong>Policy parsing</strong>: Node <bcp14>MUST</bcp14> parse PolicyManifest schemas and enforce policies locally.
- <strong>Rationale</strong>: CL2 requires device-side implementation for guaranteed offline resilience and tamper-evidence.</t>

<t><strong>CL3 (Kernel-Integrated Enforcement)</strong>:
- <strong>Wire protocol endpoints</strong>: Node and Controller communicate via HTTPS (RFC 9110, TLS 1.3+). CL3 Nodes <bcp14>MUST</bcp14> also enforce via kernel or privileged system service.
- <strong>Mandatory message flows</strong>: Same as CL2, plus attestation/audit telemetry channels.
- <strong>Signature validation</strong>: Node <bcp14>MUST</bcp14> validate signatures at kernel-mode or equivalent privilege level.
- <strong>Policy parsing</strong>: Kernel or privileged service parses and enforces PolicyManifests with mandatory watchdog monitoring.
- <strong>Hardware evidence</strong>: CL3 Nodes <bcp14>MUST</bcp14> be capable of producing hardware attestation over private key storage and enforcement state.
- <strong>Rationale</strong>: CL3 provides tamper risk reduction for high-security deployments via kernel-mode isolation.</t>

<t><strong>Summary - All CLs Require</strong>:
- End-to-end TLS (1.3+) between enforcer (Gateway for CL1, Node for CL2/CL3) and Controller
- Signature validation of all manifests (at Gateway level for CL1; at Node level for CL2/CL3)
- Nonce and monotonic-seq based replay protection
- JCS + Ed25519 signature verification per this spec
- 409 session restart recovery on heartbeat loss (CL1+ only)</t>

<t><strong>Summary - Enforcement Variations</strong>:
- <strong>CL0</strong>: Signed policy distribution + boolean enforcement only (no sessions)
- <strong>CL1</strong>: Network interception (transparent to end-devices)
- <strong>CL2</strong>: System service + local policy database
- <strong>CL3</strong>: Kernel hooks + privileged watchdog + hardware attestation</t>

</section>
<section anchor="compliance-matrix-normative"><name>Compliance Matrix (Normative)</name>

<t>The following matrix consolidates all per-level requirements into a single reference. "R" = <bcp14>REQUIRED</bcp14>, "N/A" = Not Applicable, "O" = <bcp14>OPTIONAL</bcp14>.</t>

<texttable>
      <ttcol align='left'>Requirement</ttcol>
      <ttcol align='left'>CL0</ttcol>
      <ttcol align='left'>CL1</ttcol>
      <ttcol align='left'>CL2</ttcol>
      <ttcol align='left'>CL3</ttcol>
      <c>TLS 1.3+ to Controller</c>
      <c>R</c>
      <c>R (Gateway)</c>
      <c>R (Node)</c>
      <c>R (Node, mTLS)</c>
      <c>Manifest signature verification (Ed25519/JCS)</c>
      <c>R</c>
      <c>R (Gateway)</c>
      <c>R (Node)</c>
      <c>R (Kernel-mode)</c>
      <c>PolicyManifest parsing &amp; boolean enforcement</c>
      <c>R</c>
      <c>R (Gateway)</c>
      <c>R (Node)</c>
      <c>R (Kernel)</c>
      <c>Session lifecycle (<spanx style="verb">session_start</spanx>, <spanx style="verb">heartbeat</spanx>)</c>
      <c>N/A</c>
      <c>R (Gateway)</c>
      <c>R (Node)</c>
      <c>R (Node)</c>
      <c>Time quota tracking &amp; enforcement</c>
      <c>N/A</c>
      <c>R</c>
      <c>R</c>
      <c>R</c>
      <c>Monotonic-seq + nonce replay protection</c>
      <c>N/A</c>
      <c>R</c>
      <c>R</c>
      <c>R</c>
      <c>409 session restart recovery</c>
      <c>N/A</c>
      <c>R</c>
      <c>R</c>
      <c>R</c>
      <c>RMS signal processing (Two-Phase Apply)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>R</c>
      <c>R</c>
      <c>Satellite pairing / RegistrationAssertions</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>O</c>
      <c>O</c>
      <c>Nonce cache persistence (reboot survival)</c>
      <c>N/A</c>
      <c>In-memory OK</c>
      <c>Durable storage</c>
      <c>Tamper-resistant</c>
      <c>Dedup cache persistence (Controller)</c>
      <c>N/A</c>
      <c>R</c>
      <c>R</c>
      <c>R</c>
      <c>Transport identity binding</c>
      <c>N/A</c>
      <c>Gateway auth</c>
      <c>Device key/cert</c>
      <c>mTLS client cert</c>
      <c>Hardware-backed key storage (TPM/SE)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>R</c>
      <c>Hardware attestation evidence</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>R</c>
      <c>Watchdog enforcement monitor</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>R</c>
      <c>Cold-boot persistence (enforcement survives power cycle)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>R</c>
      <c>Hard-lock platform class</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>B or A</c>
      <c>A</c>
      <c>Negative balance reconciliation</c>
      <c>N/A</c>
      <c>R</c>
      <c>R</c>
      <c>R</c>
      <c>Audit log chaining</c>
      <c>N/A</c>
      <c>O</c>
      <c>R</c>
      <c>R</c>
      <c>Manifest refresh interval</c>
      <c>15 min (R)</c>
      <c>Per session</c>
      <c>Per session</c>
      <c>Per session</c>
</texttable>

<t><strong>Compliance Declaration</strong>: Implementations claiming a compliance level <bcp14>MUST</bcp14> pass all <bcp14>REQUIRED</bcp14> tests for that level and <bcp14>MUST</bcp14> declare their platform class (A/B/C) for hard-lock behavior. Implementations that cannot meet all <bcp14>REQUIRED</bcp14> items for a level <bcp14>MUST</bcp14> declare the next lower level. Partial compliance within a level is not permitted -- an implementation is either fully compliant at a level or it is not.</t>

</section>
</section>
<section anchor="protocol-versioning-and-interoperability"><name>Protocol Versioning and Interoperability</name>

<t>To ensure forward compatibility and graceful degradation as X-PPC evolves, implementations <bcp14>MUST</bcp14> follow the versioning rules specified in this section.</t>

<section anchor="version-identification"><name>Version Identification</name>

<t>X-PPC protocol version is identified by a semantic version triple MAJOR DOT MINOR DOT PATCH (e.g., "1.0.0") following SemVer 2.0.0 conventions:</t>

<t><list style="symbols">
  <t><strong>MAJOR</strong>: Incremented for incompatible changes (e.g., breaking changes to message schemas, signature algorithms, or transport requirements).</t>
  <t><strong>MINOR</strong>: Incremented for backward-compatible feature additions (e.g., new policy types, optional fields).</t>
  <t><strong>PATCH</strong>: Incremented for backward-compatible bug fixes and clarifications.</t>
</list></t>

<t>The protocol version <bcp14>MUST</bcp14> be declared in:
1. <strong>Policy Manifests</strong>: via the <spanx style="verb">version</spanx> field at the manifest root (e.g., <spanx style="verb">"version": "1.0.0"</spanx>).
2. <strong>Heartbeat Messages</strong>: via an optional <spanx style="verb">protocol_version</spanx> field (<bcp14>RECOMMENDED</bcp14> for Nodes to declare supported version).
3. <strong>Registration Assertions</strong>: via the <spanx style="verb">protocol_version</spanx> field.</t>

</section>
<section anchor="version-negotiation-and-compatibility-rules"><name>Version Negotiation and Compatibility Rules</name>

<t>Implementations <bcp14>MUST</bcp14> apply the following rules when encountering manifests or messages with version identifiers:</t>

<t><list style="numbers" type="1">
  <t><strong>Major Version Compatibility</strong>: Nodes <bcp14>MUST</bcp14> reject manifests with a MAJOR version higher than the highest MAJOR version they support. Example: A Node supporting version 1.x.x <bcp14>MUST</bcp14> reject a manifest declaring version 2.0.0.</t>
  <t><strong>Minor Version Forward Compatibility</strong>: Nodes <bcp14>SHOULD</bcp14> accept manifests with a MINOR version higher than their implementation version, provided the MAJOR version matches. Nodes <bcp14>MUST</bcp14> ignore unknown fields and unknown policy types within a supported MAJOR version (see "Unknown Field Handling" below and "PolicyManifest Schema" for detailed field-level rules).</t>
  <t><strong>Unknown Field Handling</strong>: When processing a manifest or message containing fields not defined in the Node's implementation version, the Node <bcp14>MUST</bcp14>:
  <list style="symbols">
      <t>Ignore unknown fields at the root level or within known objects</t>
      <t>Log a diagnostic message indicating the field name and version mismatch (informational, not error)</t>
      <t>Continue processing known fields normally</t>
      <t>NOT reject the manifest solely due to the presence of unknown fields</t>
    </list>
Detailed unknown field handling rules, including the <spanx style="verb">critical: true</spanx> field extension mechanism, are specified in the "PolicyManifest Schema (Normative)" section. RMS signal unknown fields follow the same ignore-and-log policy.</t>
  <t><strong>Unknown Policy Type Handling</strong>: When a manifest contains a policy type unsupported by the Node (e.g., a future policy type introduced in a later MINOR version), the Node <bcp14>MUST</bcp14>:
  <list style="symbols">
      <t>Log the unsupported policy type to the audit trail</t>
      <t>Continue enforcing all other policies in the manifest</t>
      <t>Report the unsupported policy type to the Controller via a capability report (see "Feature Discovery" below)</t>
    </list></t>
  <t><strong>Downgrade Protection</strong>: Controllers <bcp14>MUST NOT</bcp14> send manifests with a MAJOR version lower than the Node's declared supported version during active sessions, as this may indicate a rollback attack. Nodes <bcp14>MAY</bcp14> accept lower MAJOR versions during initial bootstrap for legacy support, but <bcp14>MUST</bcp14> log such transitions.</t>
</list></t>

</section>
<section anchor="feature-discovery-and-capability-reporting"><name>Feature Discovery and Capability Reporting</name>

<t>To facilitate heterogeneous deployments where different Nodes support different enforcement capabilities, X-PPC defines a capability reporting mechanism.</t>

<t><strong>Node Capability Report (Normative)</strong>:</t>

<t>Nodes <bcp14>SHOULD</bcp14> transmit a Capability Report to the Controller during initial registration or whenever enforcement capabilities change (e.g., after OS update, permission grant/revocation). The Capability Report <bcp14>MUST</bcp14> include:</t>

<t><list style="symbols">
  <t><spanx style="verb">node_id</spanx>: Unique device identifier</t>
  <t><spanx style="verb">protocol_version</spanx>: Highest X-PPC version supported (e.g., "1.2.0")</t>
  <t><spanx style="verb">compliance_level</spanx>: Declared compliance level (CL1, CL2, or CL3)</t>
  <t><spanx style="verb">supported_policy_types</spanx>: Array of policy type URIs supported (e.g., <spanx style="verb">["TimeQuotaPolicy", "ContentFilterPolicy", "ApplicationControlPolicy"]</spanx>)</t>
  <t><spanx style="verb">unsupported_features</spanx>: Array of feature names or policy types the Node cannot enforce</t>
  <t><spanx style="verb">platform</spanx>: Platform identifier (e.g., "iOS-17.2", "Windows-11", "Linux-6.5-SteamOS")</t>
</list></t>

<t><strong>Transport and Signature</strong>: Capability Reports <bcp14>MUST</bcp14> be transmitted via HTTPS POST to the Controller's capability reporting endpoint. Reports <bcp14>MUST</bcp14> be signed using the Node's device-unique audit signing key (derived from or stored in the Hardware Root of Trust) following the JCS + Ed25519 pipeline: the report JSON is canonicalized using JCS (RFC 8785), signed with Ed25519, and the signature is included in a <spanx style="verb">signature</spanx> field (same structure as PolicyManifest signatures). Controllers <bcp14>MUST</bcp14> verify the signature before accepting the report.</t>

<t>Example Capability Report (informative JSON):</t>

<t><spanx style="verb">json
{
  "node_id": "device-uuid-123",
  "protocol_version": "1.0.0",
  "compliance_level": "CL2",
  "supported_policy_types": [
    "TimeQuotaPolicy",
    "ContentFilterPolicy",
    "ApplicationControlPolicy"
  ],
  "unsupported_features": ["HardwareRestrictionPolicy.bluetoothDisabled"],
  "platform": "iOS-17.2",
  "reported_at": "2026-02-24T14:00:00Z"
}
</spanx></t>

<t><strong>Controller Response to Capability Gaps</strong>:</t>

<t>When a Controller receives a Capability Report indicating unsupported features:</t>

<t><list style="numbers" type="1">
  <t><strong>Strict Mode (Default)</strong>: Controller <bcp14>MUST</bcp14> refuse to activate policies containing unsupported features and return an error to the administrator to provide predictable enforcement.</t>
  <t><strong>Lenient Mode (Optional)</strong>: Controller <bcp14>MAY</bcp14> allow policy activation with unsupported features if explicitly configured for lenient handling. In this mode:  <list style="symbols">
      <t>Controller <bcp14>MUST</bcp14> notify the administrator that certain policies will not be enforced on specific Nodes</t>
      <t>Controller <bcp14>MUST</bcp14> log capability gaps in the audit trail</t>
      <t>Nodes <bcp14>MUST</bcp14> continue enforcing supported policies and log unsupported features locally</t>
    </list></t>
</list></t>

<t><strong>Unsupported Hardware/Feature Handling</strong>:</t>

<t>If a Node receives a policy specifying restrictions for hardware it does not possess (e.g., <spanx style="verb">HardwareRestrictionPolicy</spanx> blocking a USB port on a device without USB), the Node <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Log the discrepancy with event type <spanx style="verb">POLICY_HARDWARE_NOT_PRESENT</spanx>, including the hardware type and policy identifier.</t>
  <t>Continue enforcing the remainder of the manifest normally.</t>
  <t>Include the missing hardware capability in its next Capability Report to the Controller.</t>
</list></t>

<t>This enables policy portability across heterogeneous device fleets without enforcement failures due to hardware variability.</t>

</section>
</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document specifies a security-sensitive protocol involving cryptographic signatures, key rotation, and enforcement semantics. Implementations <bcp14>MUST</bcp14> carefully validate signatures, enforce nonce freshness, protect private keys, and ensure secure storage of trust anchors. Failure to implement replay protection, durable state persistence, or proper key revocation handling may result in privilege escalation or denial of service.</t>

<t>The X-PPC architecture addresses these threats through multiple layers:</t>

<section anchor="policy-integrity"><name>Policy Integrity</name>

<t>All policy manifests are digitally signed using Ed25519 per FIPS 186-5 and <bcp14>MUST</bcp14> be canonicalized using the JSON Canonicalization Scheme (JCS, RFC 8785) prior to signing.</t>

</section>
<section anchor="timestamp-format-normative"><name>Timestamp Format (Normative)</name>

<t>All timestamp fields in X-PPC protocol messages and manifests (<spanx style="verb">issued_at</spanx>, <spanx style="verb">expires_at</spanx>, <spanx style="verb">effective_from</spanx>, <spanx style="verb">effective_until</spanx>, <spanx style="verb">next_sync_deadline</spanx>) <bcp14>MUST</bcp14> conform to the following normative profile:</t>

<t><list style="symbols">
  <t>Timestamps <bcp14>MUST</bcp14> conform to the <spanx style="verb">date-time</spanx> production in RFC 3339 Section 5.6 (which is a constrained profile of ISO 8601).</t>
  <t>Timestamps <bcp14>MUST</bcp14> use UTC and the literal "Z" suffix. Numeric timezone offsets (e.g., <spanx style="verb">+00:00</spanx>, <spanx style="verb">-05:00</spanx>, <spanx style="verb">+02:00</spanx>) <bcp14>MUST NOT</bcp14> be used. This eliminates the normalization ambiguity where <spanx style="verb">"2026-02-24T14:30:00Z"</spanx> and <spanx style="verb">"2026-02-24T16:30:00+02:00"</spanx> represent the same instant but produce different byte sequences under JCS.</t>
  <t>Fractional seconds <bcp14>MUST NOT</bcp14> be included. Timestamps <bcp14>MUST</bcp14> have whole-second precision only (e.g., <spanx style="verb">"2026-02-24T14:30:00Z"</spanx>, not <spanx style="verb">"2026-02-24T14:30:00.123Z"</spanx>). <strong>Rationale</strong>: Fractional seconds create canonicalization divergence -- <spanx style="verb">"14:30:00.0Z"</spanx> vs <spanx style="verb">"14:30:00.000Z"</spanx> vs <spanx style="verb">"14:30:00Z"</spanx> would produce different JCS outputs and break signature verification.</t>
  <t>The only valid timestamp format is: <spanx style="verb">YYYY-MM-DDThh:mm:ssZ</spanx> (exactly 20 ASCII characters).</t>
  <t>Implementations receiving a timestamp that does not conform to this profile (wrong format, numeric offset, fractional seconds, lowercase <spanx style="verb">t</spanx> or <spanx style="verb">z</spanx>) <bcp14>MUST</bcp14> reject the containing message or manifest as malformed.</t>
</list></t>

</section>
<section anchor="signature-encoding-normative"><name>Signature Encoding (Normative)</name>

<t>All signature fields in this specification (<spanx style="verb">signature</spanx>, <spanx style="verb">proofValue</spanx>, <spanx style="verb">controller_signature_old</spanx>, <spanx style="verb">controller_signature_new</spanx>, <spanx style="verb">satellite_signature</spanx>, and any future signature-bearing field) <bcp14>MUST</bcp14> conform to the following normative encoding rules:</t>

<t><list style="symbols">
  <t>The value <bcp14>MUST</bcp14> be the raw 64-byte Ed25519 signature (as defined in RFC 8032 Section 5.1.6).</t>
  <t>The raw signature <bcp14>MUST</bcp14> be encoded using Base64 as defined in RFC 4648 Section 4 (standard alphabet: A-Z, a-z, 0-9, +, /).</t>
  <t>Padding characters ("=") <bcp14>MUST</bcp14> be preserved; implementations <bcp14>MUST NOT</bcp14> strip trailing padding.</t>
  <t>Base64URL encoding (RFC 4648, Section 5) <bcp14>MUST NOT</bcp14> be used.</t>
  <t>The encoded string <bcp14>MUST NOT</bcp14> contain line breaks, whitespace, or any characters outside the Base64 alphabet and padding.</t>
  <t>The decoded value <bcp14>MUST</bcp14> be exactly 64 bytes. Implementations <bcp14>MUST</bcp14> reject signatures that decode to any other length.</t>
  <t>Public keys, when transmitted in protocol fields (e.g., <spanx style="verb">new_key_public</spanx>), <bcp14>MUST</bcp14> use the same Base64 encoding (RFC 4648 Section 4) of the raw 32-byte Ed25519 public key.</t>
</list></t>

<t>This section is the single authoritative definition for signature encoding across all X-PPC protocol messages. All CDDL schemas and JSON examples in this specification reference this section.</t>

</section>
<section anchor="nonce-entropy-requirements-normative"><name>Nonce Entropy Requirements (Normative)</name>

<t>All <spanx style="verb">nonce</spanx> fields across X-PPC protocol messages (SessionStartRequest, HeartbeatRequest, RMSSignal, RegistrationAssertion) <bcp14>MUST</bcp14> satisfy the following requirements:</t>

<t><list style="symbols">
  <t>Nonces <bcp14>MUST</bcp14> contain at least 128 bits of entropy generated by a cryptographically secure pseudorandom number generator (CSPRNG).</t>
  <t>Acceptable formats: UUID v4 (RFC 9562), or a random hexadecimal string of at least 32 characters (128 bits).</t>
  <t>Sequential counters, timestamps, device identifiers, or other predictable values <bcp14>MUST NOT</bcp14> be used as nonces.</t>
  <t>Nonces <bcp14>MUST</bcp14> be unique per message context. Reuse of a nonce value across different message types or sessions constitutes a protocol violation.</t>
  <t>The sole exception to nonce uniqueness is Heartbeat retransmission: when retransmitting a Heartbeat with the same <spanx style="verb">monotonic_seq</spanx>, the Node <bcp14>MUST</bcp14> reuse the original nonce (see Heartbeat idempotency requirements).</t>
</list></t>

<t>This requirement ensures that brute-force replay attacks against the nonce space are computationally infeasible.</t>

<t><strong>JCS Canonicalization Scope (Normative)</strong>: When preparing a JSON object for signing or verification via JCS (RFC 8785), the following constraints apply to the input JSON:
- The JSON object <bcp14>MUST NOT</bcp14> contain duplicate keys at any nesting level. If duplicate keys are detected, the implementation <bcp14>MUST</bcp14> reject the object as malformed.
- All timestamp fields (<spanx style="verb">issued_at</spanx>, <spanx style="verb">effective_from</spanx>, <spanx style="verb">effective_until</spanx>, <spanx style="verb">expires_at</spanx>, <spanx style="verb">next_sync_deadline</spanx>) <bcp14>MUST</bcp14> be formatted as RFC 3339 timestamps in UTC with the "Z" suffix (e.g., <spanx style="verb">"2026-02-24T14:30:00Z"</spanx>). Numeric timezone offsets (e.g., <spanx style="verb">+00:00</spanx>) <bcp14>MUST NOT</bcp14> be used.
- Numeric fields (integers) <bcp14>MUST</bcp14> be serialized without leading zeros, decimal points, or exponent notation (e.g., <spanx style="verb">600</spanx>, not <spanx style="verb">0600</spanx>, <spanx style="verb">600.0</spanx>, or <spanx style="verb">6e2</spanx>).
- Boolean fields <bcp14>MUST</bcp14> be lowercase <spanx style="verb">true</spanx> or <spanx style="verb">false</spanx>.
- String fields <bcp14>MUST NOT</bcp14> contain unescaped control characters (U+0000 through U+001F).
- <spanx style="verb">null</spanx> values <bcp14>MUST</bcp14> be serialized as JSON <spanx style="verb">null</spanx>; omitting a field and setting it to <spanx style="verb">null</spanx> are semantically distinct.
- These constraints ensure that JCS canonicalization produces identical byte sequences across all implementations, preventing signature verification failures due to serialization ambiguity.</t>

<t><strong>Signature Pipeline (Normative)</strong>:</t>

<t><list style="numbers" type="1">
  <t><strong>Prepare Unsigned Manifest</strong>: Create the Policy Manifest JSON object with all required fields. Include a <spanx style="verb">signature</spanx> object with <spanx style="verb">type</spanx> and <spanx style="verb">canonicalization</spanx> fields, but set <spanx style="verb">proofValue</spanx> to an empty string or omit it.</t>
  <t><strong>Remove Signature Field</strong>: Create a copy of the manifest with the <spanx style="verb">signature</spanx> field entirely removed from the JSON object to avoid self-referential signatures.</t>
  <t><strong>Canonicalize</strong>: Serialize the unsigned manifest (from step 2) using JCS (RFC 8785) to produce a deterministic octet sequence M_canonical.</t>
  <t><strong>Sign</strong>: Compute the Ed25519 signature per FIPS 186-5:</t>
</list></t>

<t><spanx style="verb">
sigma = Ed25519Sign(K_private, M_canonical)
</spanx></t>

<t>where K_private is the Controller's private key.</t>

<t><list style="numbers" type="1">
  <t><strong>Embed Signature</strong>: Base64-encode sigma and insert it as the <spanx style="verb">proofValue</spanx> field in the <spanx style="verb">signature</spanx> block of the original manifest.</t>
</list></t>

<t><strong>Verification</strong>: Nodes <bcp14>MUST</bcp14>: (1) extract the <spanx style="verb">proofValue</spanx>, (2) remove the entire <spanx style="verb">signature</spanx> field from the received manifest, (3) JCS-canonicalize the remaining manifest, (4) verify the Ed25519 signature against the Controller's pinned public key, and (5) <strong>defer all @context processing until after signature verification succeeds</strong>. If verification fails, the manifest <bcp14>MUST</bcp14> be rejected and an audit event logged. Nodes <bcp14>MUST NOT</bcp14> fetch or resolve remote @context URLs during signature verification; any JSON-LD context resolution must be deferred until after the raw JSON signature validates successfully.</t>

<t><strong>JSON-LD Processing Constraint (CRITICAL)</strong>: Manifest verification <bcp14>MUST</bcp14> operate on the raw JSON representation and <bcp14>MUST NOT</bcp14> apply JSON-LD semantic expansion, RDF <xref target="W3C.RDF"/> graph transformations, or context resolution prior to signature validation. JCS canonicalization applies to the JSON syntax tree, not to semantically-expanded RDF graphs. <strong>Nodes <bcp14>MUST NOT</bcp14> fetch or resolve remote @context URLs during signature verification; any @context resolution must be deferred until after signature validation succeeds on raw JSON.</strong> This prohibition prevents SSRF attacks, MITM interception of context definitions, and semantic rewriting vulnerabilities. Implementations that perform JSON-LD processing for other purposes (e.g., policy reasoning, UI presentation) <bcp14>MAY</bcp14> do so only after successful signature verification on the raw JSON.</t>

<t><strong>Rationale for JCS + Ed25519</strong>: JCS (RFC 8785) eliminates JSON whitespace and ordering ambiguities that can otherwise break signatures across different JSON serializers. The signature-field-removal approach follows standard practice (e.g., JWS detached signatures) and provides deterministic verification across implementations.</t>

<section anchor="adversary-model"><name>Adversary Model</name>

<t>This section defines the primary adversary roles considered by X-PPC and the threats they present.</t>

<t><list style="symbols">
  <t><strong>Local User with Physical Access</strong>: A user with physical access to the Node who may attempt clock-tampering, process termination, daemon disabling, or local filesystem modification to circumvent quota enforcement. Defenses: monotonic clocks for accounting, kernel watchdogs, and tamper-evident audit chains.</t>
  <t><strong>Network Adversary</strong>: Can intercept, replay, or delay RMS and quota messages. Threats include replaying old "remaining_allocated" signals to extend sessions. Defenses: nonce and monotonic-seq in heartbeats, strict JCS canonicalized signatures, and server-side reconciliation that enforces the Global Safety Invariant.</t>
  <t><strong>Malicious Satellite (Compromised Admin Device)</strong>: A satellite device with admin privileges attempts to push rogue manifests or unauthorized rotation events. Defenses: Controller key pinning, multi-factor rotation/rotation-manifest approval flows, and audit trail alerts for unexpected rotations.</t>
  <t><strong>Compromised Controller</strong>: If the Controller's private key is compromised, an attacker gains the ability to sign arbitrary manifests and rotation events, fully subverting household policy enforcement. <strong>Assumptions</strong>: X-PPC assumes Controllers employ appropriate key protection (HSMs for cloud deployments, TPM/Secure Boot for local deployments). <strong>Detection</strong>: Unauthorized manifest changes may be detected through out-of-band channels (e.g., parent notification, audit log review). <strong>Recovery</strong>: If compromise is detected, recovery requires out-of-band re-provisioning (Direct Controller QR) to all Nodes and Satellites, as the compromised key can no longer be trusted. <strong>Multi-Party Approval (Optional)</strong>: Deployments requiring higher assurance <bcp14>MAY</bcp14> implement multi-party approval for key rotation events, requiring signatures from multiple authorized administrators before Nodes accept rotation manifests. <strong>Insider Risk</strong>: Cloud-based multi-tenant Controllers face insider/administrative access risks; such deployments <bcp14>SHOULD</bcp14> employ HSM-backed keys with access logging and split-knowledge key management.</t>
</list></t>

<t><strong>Fundamental Trust Anchor Assumption</strong>: X-PPC's security model assumes that at least one uncompromised trust anchor (the Controller's private key or a trusted Satellite authorized for recovery flows) remains available to the household at all times. If both the Controller key AND all authorized Satellites are simultaneously compromised, the household is irrecoverable without full manual re-provisioning of all Nodes and Satellites via out-of-band mechanisms (e.g., Direct Controller QR with a freshly generated key pair). This is an inherent limitation of any delegated-trust architecture and is not unique to X-PPC.</t>

<t>Controller key pinning, rotation manifests, JCS-canonicalized signatures, and audit chaining are primary mitigations against these adversaries.</t>

</section>
</section>
<section anchor="clock-integrity-and-time-synchronization"><name>Clock Integrity and Time Synchronization</name>

<t>Time-based policies and quotas depend on accurate session measurement. Nodes <bcp14>MUST</bcp14> use a monotonic clock (i.e., a clock that is not subject to system wall-clock adjustments) for session tracking and quota accounting to prevent manipulation by local wall-clock changes. For user-visible timestamps and scheduling (e.g., <spanx style="verb">effectiveFrom</spanx>, <spanx style="verb">bedtimeMode</spanx>), Nodes <bcp14>SHOULD</bcp14> also maintain an authenticated wall-clock synchronized via platform-provided secure time services (e.g., Apple Secure Time, Android Network Time Protocol with certificate pinning, Windows Time Service with authentication), or other cryptographically-authenticated time sources.</t>

<t>Nodes <bcp14>SHOULD</bcp14> use platform-provided secure time services where available. RFC 5905 NTP with autokey is deprecated in practice and not recommended for new deployments. If authenticated time synchronization is unavailable, Nodes <bcp14>MUST</bcp14> log the absence of secure time and <bcp14>MAY</bcp14> enforce stricter local controls (reduce pre-allocation sizes, shorten grace windows) to mitigate time-travel exploits.</t>

<t>Nodes <bcp14>MUST</bcp14> record both monotonic and wall-clock timestamps in audit logs to support post-incident analysis.</t>

</section>
<section anchor="device-tamper-detection"><name>Device Tamper Detection</name>

<t>The Kernel Watchdog (or equivalent privileged monitoring component) continuously monitors policy enforcement consistency. Anomalies indicating potential tampering or enforcement bypass <bcp14>MUST</bcp14> trigger immediate lockdown and audit logging.</t>

</section>
<section anchor="offline-resilience"><name>Offline Resilience</name>

<t>Policy manifests are cached in TPM-protected storage, enabling offline enforcement. Controllers may pre-sign time-bounded policies allowing autonomous operation during network disconnections.</t>

</section>
<section anchor="private-key-management"><name>Private Key Management</name>

<t>Controller private keys <bcp14>MUST</bcp14> be protected using cryptographically secure storage mechanisms appropriate to the deployment context. Cloud-based Controllers <bcp14>SHOULD</bcp14> employ hardware security modules (HSMs) or equivalent. Local or edge-based Controllers <bcp14>SHOULD</bcp14> employ Secure Boot, measured launch, or equivalent tamper-protection mechanisms to ensure key material is never exposed to unauthorized processes.</t>

</section>
<section anchor="denial-of-service-protection"><name>Denial-of-Service Protection</name>

<t>X-PPC implements rate limiting on policy update channels to prevent administrative DoS attacks. Failed authentication attempts trigger exponential backoff.</t>

</section>
<section anchor="audit-logging"><name>Audit Logging</name>

<t>All policy state transitions, access control decisions, and emergency overrides <bcp14>MUST</bcp14> be logged in tamper-evident format. Audit logs <bcp14>SHOULD</bcp14> be forwarded to a remote syslog server to prevent local tampering.</t>

</section>
<section anchor="known-limitations"><name>Known Limitations</name>

<t><list style="symbols">
  <t>X-PPC-CL1 (network-only) deployments provide no protection against localhost attacks or kernel-level tampering.</t>
  <t>Smart TV enforcement depends on application-layer cooperation; determined attackers with system access may bypass restrictions.</t>
  <t>Offline resilience creates a window where time-bounded policies may expire; Controllers <bcp14>SHOULD</bcp14> synchronize with Nodes periodically.</t>
  <t><strong>Default Deny and Availability</strong>: Default Deny mode (triggered by quota exhaustion, offline threshold, or heartbeat failure) may impact device availability during Controller outages or network partitions. Implementations <bcp14>SHOULD</bcp14> consider: (1) Emergency bypass rules (SOS, panic alarms) <bcp14>MUST</bcp14> remain functional in Default Deny, (2) Administrators may configure longer offline grace periods for environments with unreliable connectivity, (3) Local recovery mechanisms (e.g., administrator PIN override with audit logging) <bcp14>MAY</bcp14> be implemented to restore service during extended Controller unavailability. The security vs. availability trade-off is configurable per deployment risk tolerance.</t>
</list></t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>X-PPC handles sensitive behavioral and usage information that may constitute personally identifiable information (PII). Implementers and Controllers <bcp14>MUST</bcp14> follow privacy-preserving practices.</t>

<section anchor="data-minimization-and-pseudonymization"><name>Data Minimization and Pseudonymization</name>

<t><list style="symbols">
  <t><strong>PII minimization</strong>: <spanx style="verb">subject_id</spanx> values in manifests and runtime telemetry <bcp14>SHOULD</bcp14> be pseudonymized identifiers (opaque UUIDs or hashed identifiers) rather than real names, email addresses, or account identifiers.</t>
  <t><strong>Pseudonymization requirements (Normative)</strong>: Controllers <bcp14>MUST NOT</bcp14> include real names, email addresses, phone numbers, or other directly identifying information in any X-PPC protocol message (<spanx style="verb">session_start</spanx>, <spanx style="verb">heartbeat</spanx>, <spanx style="verb">PolicyManifest</spanx>, <spanx style="verb">RotationManifest</spanx>, or <spanx style="verb">RegistrationAssertion</spanx>). The <spanx style="verb">subject_id</spanx> field <bcp14>MUST</bcp14> be a pseudonymous identifier that cannot be reversed to a natural person without access to a separate mapping table. The mapping table <bcp14>MUST</bcp14> be stored separately from X-PPC operational data and protected with access controls equivalent to or stronger than the X-PPC data itself.</t>
  <t><strong>Encrypted subject identifiers in transit</strong>: Transport of sensitive identifiers <bcp14>SHOULD</bcp14> use end-to-end encryption; where end-to-end is not available, minimize plaintext identifiers and apply tokenization.</t>
  <t><strong>Local Processing First</strong>: Where possible, perform matching and aggregation on-device and send only minimized metrics to Controllers.</t>
</list></t>

</section>
<section anchor="data-retention-policy"><name>Data Retention Policy</name>

<t><list style="symbols">
  <t><strong>Retention limits (Normative)</strong>: Controllers <bcp14>MUST</bcp14> define and enforce a maximum retention period for behavioral logs (heartbeat history, session records, usage telemetry). The default maximum retention period <bcp14>SHOULD NOT</bcp14> exceed 90 days. After the retention period expires, logs <bcp14>MUST</bcp14> be either permanently deleted or irreversibly aggregated (such that individual session records cannot be reconstructed).</t>
  <t><strong>Log minimization</strong>: Controllers <bcp14>SHOULD</bcp14> transmit only aggregated metrics (e.g., total daily usage per subject) rather than per-heartbeat granular records when reporting to external systems. Per-heartbeat records <bcp14>MUST</bcp14> remain on the Controller only and <bcp14>MUST NOT</bcp14> be shared with third parties.</t>
  <t><strong>Audit log retention</strong>: Security audit logs (e.g., <spanx style="verb">QUOTA_NEGATIVE_BALANCE_APPLIED</spanx>, <spanx style="verb">RMS_ATOMIC_OPERATION_FAILED</spanx>, <spanx style="verb">PERSISTENCE_RECOVERY_FAILED</spanx>) <bcp14>MAY</bcp14> be retained longer than behavioral logs for security investigation purposes, but <bcp14>MUST</bcp14> still be subject to a defined retention period (<bcp14>RECOMMENDED</bcp14>: 1 year maximum).</t>
</list></t>

</section>
<section anchor="encryption-and-access-control"><name>Encryption and Access Control</name>

<t><list style="symbols">
  <t><strong>Encryption at rest</strong>: Any locally-stored logs, manifests, or telemetry containing PII or sensitive usage data <bcp14>MUST</bcp14> be encrypted at rest using platform-appropriate mechanisms (e.g., OS-provided encrypted filesystems, Secure Enclave/Keychain wrappers, TPM-sealed storage).</t>
  <t><strong>Access control</strong>: Controllers <bcp14>MUST</bcp14> implement role-based access controls for logs. Access to pseudonymous-to-real-identity mapping tables <bcp14>MUST</bcp14> be restricted to authorized personnel only and <bcp14>MUST</bcp14> be logged.</t>
</list></t>

</section>
<section anchor="consent-parental-controls-and-regulatory-alignment"><name>Consent, Parental Controls, and Regulatory Alignment</name>

<t><list style="symbols">
  <t><strong>Consent and Parental Controls</strong>: Controllers <bcp14>SHOULD</bcp14> provide clear consent flows and parental consent management for collection and processing of child-related data, in accordance with applicable law (e.g., COPPA, GDPR child provisions).</t>
  <t><strong>GDPR Article 25 (Data Protection by Design)</strong>: Deployments in jurisdictions covered by GDPR <bcp14>MUST</bcp14> implement data protection by design and by default. This includes: pseudonymization of subject identifiers (as specified above), data minimization in protocol messages, purpose limitation (X-PPC data <bcp14>MUST NOT</bcp14> be repurposed for advertising, profiling, or behavioral analytics beyond parental control enforcement), and storage limitation (retention policy above).</t>
  <t><strong>CCPA / US State Privacy Laws</strong>: Deployments subject to CCPA or equivalent US state privacy laws <bcp14>MUST</bcp14> provide data subject access rights: the ability for authorized parents/guardians to request export or deletion of their household's X-PPC usage data. Controllers <bcp14>MUST</bcp14> respond to verified deletion requests within 45 days.</t>
  <t><strong>Data subject access rights</strong>: Controllers <bcp14>MUST</bcp14> support authenticated requests from authorized household members (parents/guardians) to: (a) export all X-PPC data associated with their household in a machine-readable format (JSON <bcp14>RECOMMENDED</bcp14>), (b) request deletion of all non-audit-trail X-PPC data, and (c) review which data categories are collected and their retention periods.</t>
</list></t>

</section>
<section anchor="privacy-impact-assessment"><name>Privacy Impact Assessment</name>

<t>Nodes and Controllers <bcp14>MUST</bcp14> include a Privacy Impact Assessment (PIA) reference in deployments expected to collect child usage data at scale. The PIA <bcp14>MUST</bcp14> address: categories of data collected, retention periods, access controls, cross-border data transfer mechanisms (if applicable), and risk mitigation measures for data breach scenarios.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="urn-formal-namespace-registration-urnxppc"><name>URN Formal Namespace Registration: urn:xppc</name>

<t>This specification requests IANA registration of the Formal Uniform Resource Name (URN) Namespace Identifier (NID) <strong>"xppc"</strong> in accordance with RFC 8141 Section 6 and the procedures defined in RFC 3406 (Uniform Resource Names Namespace Definition Mechanisms).</t>

<t>The registration template below follows the format specified in RFC 3406 Section 4.3.</t>

<section anchor="registration-information"><name>Registration Information</name>

<t><list style="symbols">
  <t><strong>Namespace ID (NID)</strong>: xppc</t>
  <t><strong>Version</strong>: 1</t>
  <t><strong>Date</strong>: 2026-02-24</t>
</list></t>

</section>
<section anchor="declared-registrant-of-the-namespace"><name>Declared Registrant of the Namespace</name>

<t><list style="symbols">
  <t><strong>Registering organization</strong>: David Emanuel Oprea (individual submission)</t>
  <t><strong>Designated contact person</strong>: David Emanuel Oprea</t>
  <t><strong>Designated contact email</strong>: david.emy@gmail.com</t>
</list></t>

<t>Note: This is an individual Internet-Draft. If adopted by an IETF working group, the registrant will be updated to reflect the adopting working group. Future maintenance of this namespace is expected to be handled by designated experts appointed by the IESG.</t>

</section>
<section anchor="declaration-of-syntactic-structure"><name>Declaration of Syntactic Structure</name>

<t>The Namespace Specific String (NSS) of URNs using the "xppc" NID has the following ABNF (RFC 5234) structure:</t>

<t><spanx style="verb">
NSS = category ":" name [ ":" version ]
category = "policy" / "app" / "category" / "hardware" / "context" / "schema" / "filter" / "mode"
name = ldh-str
version = 1*( ALPHA / DIGIT / "." / "_" / "-" )
ldh-str = ( ALPHA / DIGIT ) *( ALPHA / DIGIT / "-" ) ( ALPHA / DIGIT )
</spanx></t>

<t>The NSS is case-sensitive. All components <bcp14>MUST</bcp14> be lowercase by construction (i.e., producers <bcp14>MUST</bcp14> emit only lowercase NSS values). Consumers <bcp14>MUST</bcp14> treat URNs with uppercase characters in the NSS as invalid. This avoids the need for case-fold canonicalization and ensures registry uniqueness without ambiguity. (Note: per RFC 8141, the <spanx style="verb">urn</spanx> scheme and NID are case-insensitive; this rule applies only to the NSS.)</t>

</section>
<section anchor="relevant-ancillary-documentation"><name>Relevant Ancillary Documentation</name>

<t>This Internet-Draft (draft-oprea-x-ppc) defines the X-PPC protocol and is the authoritative reference for the semantics of all URNs in the <spanx style="verb">urn:xppc</spanx> namespace.</t>

</section>
<section anchor="identifier-uniqueness-considerations"><name>Identifier Uniqueness Considerations</name>

<t>Uniqueness is guaranteed by the IANA registration process. Each <spanx style="verb">{category}:{name}</spanx> combination <bcp14>MUST</bcp14> be unique within the namespace. The optional <spanx style="verb">:{version}</spanx> component allows multiple versions of the same identifier to coexist without collision.</t>

</section>
<section anchor="identifier-persistence-considerations"><name>Identifier Persistence Considerations</name>

<t>Once registered, an <spanx style="verb">urn:xppc</spanx> identifier <bcp14>MUST NOT</bcp14> be reassigned to a different meaning. Identifiers may be deprecated but <bcp14>MUST NOT</bcp14> be deleted from the registry. This ensures that deployed implementations can always resolve the identifier.</t>

</section>
<section anchor="process-of-identifier-assignment"><name>Process of Identifier Assignment</name>

<t>Identifier assignments within the <spanx style="verb">urn:xppc</spanx> namespace are managed through two sub-registries with distinct IANA registration policies:</t>

<t><list style="numbers" type="1">
  <t><strong>Filter, Mode, and Category Identifiers</strong> (<spanx style="verb">urn:xppc:filter:*</spanx>, <spanx style="verb">urn:xppc:mode:*</spanx>, <spanx style="verb">urn:xppc:category:*</spanx>) -- <strong>Specification Required</strong>.
New registrations <bcp14>MUST</bcp14> reference a published specification describing semantics, enforcement effects, and audit/logging behavior.</t>
  <t><strong>Application Identifiers</strong> (<spanx style="verb">urn:xppc:app:*</spanx>) -- <strong>Expert Review</strong>.
Application URNs <bcp14>SHOULD</bcp14> include a public documentation link and platform app identifier mapping guidance.</t>
  <t><strong>Policy and Schema Identifiers</strong> (<spanx style="verb">urn:xppc:policy:*</spanx>, <spanx style="verb">urn:xppc:schema:*</spanx>, <spanx style="verb">urn:xppc:context:*</spanx>) -- <strong>Standards Action</strong>.
New policy types and schema identifiers require IETF Standards Action (RFC or equivalent).</t>
</list></t>

</section>
<section anchor="process-of-identifier-resolution"><name>Process of Identifier Resolution</name>

<t>This specification does not define a resolution mechanism for <spanx style="verb">urn:xppc</spanx> URNs. These URNs are used as opaque identifiers within X-PPC protocol messages and manifests, not as locators.</t>

</section>
<section anchor="rules-for-lexical-equivalence"><name>Rules for Lexical Equivalence</name>

<t>Two <spanx style="verb">urn:xppc</spanx> URNs are lexically equivalent if and only if their NID and NSS components are byte-for-byte identical in their canonical lowercase form. Because the NSS <bcp14>MUST</bcp14> be lowercase by construction (see Declaration of Syntactic Structure above), no case-fold normalization step is required or permitted; implementations <bcp14>MUST</bcp14> compare the NSS as an exact octet string.</t>

</section>
<section anchor="conformance-with-urn-syntax"><name>Conformance with URN Syntax</name>

<t><spanx style="verb">urn:xppc</spanx> URNs conform to the syntax requirements of RFC 8141.</t>

</section>
<section anchor="validation-mechanism"><name>Validation Mechanism</name>

<t>Validation is performed by checking conformance to the ABNF above and verifying registration in the IANA <spanx style="verb">urn:xppc</spanx> registry.</t>

</section>
<section anchor="scope"><name>Scope</name>

<t>Global.</t>

</section>
<section anchor="examples"><name>Examples</name>

<t><list style="symbols">
  <t><spanx style="verb">urn:xppc:policy:time-quota-policy</spanx> (corresponds to <spanx style="verb">@type</spanx> value <spanx style="verb">"TimeQuotaPolicy"</spanx> in JSON-LD)</t>
  <t><spanx style="verb">urn:xppc:policy:content-filter-policy:1.0</spanx> (corresponds to <spanx style="verb">@type</spanx> value <spanx style="verb">"ContentFilterPolicy"</spanx> in JSON-LD)</t>
  <t><spanx style="verb">urn:xppc:app:com.apple.mobilesafari:ios</spanx> (informative; platform-specific app mappings)</t>
  <t><spanx style="verb">urn:xppc:category:educational</spanx></t>
  <t><spanx style="verb">urn:xppc:category:social-media</spanx></t>
  <t><spanx style="verb">urn:xppc:category:video-streaming</spanx></t>
  <t><spanx style="verb">urn:xppc:hardware:microphone</spanx></t>
  <t><spanx style="verb">urn:xppc:context:1.0.0</spanx></t>
  <t><spanx style="verb">urn:xppc:filter:strict</spanx></t>
</list></t>

</section>
<section anchor="collision-risk-assessment"><name>Collision Risk Assessment</name>

<t>An existing URI scheme reference labeled "xpc" was reviewed (e.g., iris.xpc commerce protocol). To avoid namespace collision, this specification uses the NID <strong>"xppc"</strong> (double-p) to ensure unambiguous distinction.</t>

</section>
</section>
<section anchor="json-ld-context-uri-governance"><name>JSON-LD Context URI Governance</name>

<t>The JSON-LD <spanx style="verb">@context</spanx> URL for X-PPC PolicyManifest schemas (e.g., <spanx style="verb">https://xppc.example.org/schema/context-1.0.0.jsonld</spanx>) is maintained by the document author (David Emanuel Oprea) as an individual submission. This URL is informational and is NOT assigned a separate IANA registry entry. Instead:</t>

<t><list style="symbols">
  <t>The context definition itself is versioned using semantic versioning in the URL path (e.g., <spanx style="verb">-1.0.0</spanx>) to ensure immutability.</t>
  <t>Implementations <bcp14>MUST</bcp14> locally pin or bundle the context definition (per Security Considerations) and <bcp14>MUST NOT</bcp14> perform remote context resolution during signature verification.</t>
  <t>The context document, when published, will include a canonical SHA-256 hash for cross-implementation verification.</t>
</list></t>

<t>If adopted by an IETF working group, governance of the context URI may transfer to the adopting working group or the IETF Trust as appropriate.</t>

<section anchor="urn-registration-request-requirements"><name>URN Registration Request Requirements</name>

<t>All registration requests to IANA for identifiers within the <spanx style="verb">urn:xppc</spanx> namespace <bcp14>MUST</bcp14> include:
- The requested URN (e.g., <spanx style="verb">urn:xppc:filter:myfilter</spanx>)
- A reference to the normative specification (RFC, IETF draft, or other published spec)
- A short description of semantics and intended enforcement behavior
- Contact information for the responsible party</t>

</section>
</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC8785">
  <front>
    <title>JSON Canonicalization Scheme (JCS)</title>
    <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
    <author fullname="B. Jordan" initials="B." surname="Jordan"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
      <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8785"/>
  <seriesInfo name="DOI" value="10.17487/RFC8785"/>
</reference>
<reference anchor="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC5905">
  <front>
    <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
    <author fullname="D. Mills" initials="D." surname="Mills"/>
    <author fullname="J. Martin" initials="J." role="editor" surname="Martin"/>
    <author fullname="J. Burbank" initials="J." surname="Burbank"/>
    <author fullname="W. Kasch" initials="W." surname="Kasch"/>
    <date month="June" year="2010"/>
    <abstract>
      <t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet. This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family. NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs. It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required. It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5905"/>
  <seriesInfo name="DOI" value="10.17487/RFC5905"/>
</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>
<reference anchor="RFC3339">
  <front>
    <title>Date and Time on the Internet: Timestamps</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2002"/>
    <abstract>
      <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3339"/>
  <seriesInfo name="DOI" value="10.17487/RFC3339"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<reference anchor="RFC5234">
  <front>
    <title>Augmented BNF for Syntax Specifications: ABNF</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="P. Overell" initials="P." surname="Overell"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="68"/>
  <seriesInfo name="RFC" value="5234"/>
  <seriesInfo name="DOI" value="10.17487/RFC5234"/>
</reference>
<reference anchor="RFC8141">
  <front>
    <title>Uniform Resource Names (URNs)</title>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="April" year="2017"/>
    <abstract>
      <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier. With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance. With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA). This document obsoletes both RFCs 2141 and 3406.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8141"/>
  <seriesInfo name="DOI" value="10.17487/RFC8141"/>
</reference>
<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>
<reference anchor="RFC9562">
  <front>
    <title>Universally Unique IDentifiers (UUIDs)</title>
    <author fullname="K. Davis" initials="K." surname="Davis"/>
    <author fullname="B. Peabody" initials="B." surname="Peabody"/>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <date month="May" year="2024"/>
    <abstract>
      <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
      <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9562"/>
  <seriesInfo name="DOI" value="10.17487/RFC9562"/>
</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>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>

<reference anchor="W3C.RDF" target="https://www.w3.org/RDF/">
  <front>
    <title>Resource Description Framework (RDF)</title>
    <author >
      <organization></organization>
    </author>
    <date year="2004" month="February"/>
  </front>
</reference>
<reference anchor="FIPS186-5" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf">
  <front>
    <title>Digital Signature Standard (DSS)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2023" month="August"/>
  </front>
</reference>
<reference anchor="TPM2" target="https://trustedcomputinggroup.org/resource/tpm-2-0-library-specification/">
  <front>
    <title>Trusted Platform Module 2.0 Library - Part 1: Architecture Specification</title>
    <author >
      <organization>Trusted Computing Group</organization>
    </author>
    <date year="2019" month="June"/>
  </front>
</reference>


    </references>

</references>


<?line 2323?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author appreciates feedback from the community on technical feasibility, threat modeling, and platform-specific policy enforcement mechanisms.</t>

</section>
<section numbered="false" anchor="contributors"><name>Contributors</name>

<t>Contributions, implementation feedback, and platform-specific insights are welcome. Those wishing to refine this specification should participate in the IETF standards process.</t>

</section>
<section numbered="false" anchor="authors-addresses"><name>Authors' Addresses</name>

<dl>
  <dt>David Emanuel Oprea (editor)</dt>
  <dd>
    <t>ONE NEW EXPERIENCE</t>
  </dd>
  <dt/>
  <dd>
    <t>Targoviste, DB</t>
  </dd>
  <dt/>
  <dd>
    <t>Romania</t>
  </dd>
  <dt/>
  <dd>
    <t>Email: david.emy@gmail.com</t>
  </dd>
</dl>

</section>


  </back>

<!-- ##markdown-source:
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
keaQ7STSvumu4iUrPg+V0SCZd0WWtzgrDyeKCStYRTGLPxJfw69euqIyhezi
4huQkueUCyjvSE0775aZ1VNEdYkVWBaoKXNEl5dwbwwl6efS4x8AZUYu3cjQ
SJM/GlSQmMxjihShDjbNYhYTGhQlzbr5PNo1lG4vI5enDuTxdGk+j3coCnNO
1bdW1UXr5OXHj6p+4C03pchdiwv7nM1OmmXzsOYkGNWzJQmusU3JcoSZpu+T
CKjabG1e7zNPAhta/uk3Qq3u9A7N+/tZ1Kho9U2t3WPMS2qug78x81cyNOBM
tGSqId9+5diWrj3+nVNK8COgZkc6uCivz7nIi85/i0+Dcjj/Ysx5PkA5z+6N
fVNl2Ym6ct6lTF+fd2RzKqajHb2OPCQwbJuHZS5/QEUJzHTuJ0/wEFrEWVId
+OecyUBEPyIBOy4cxY8y5PecHB5ITU9cEfLKx7CctlBOJs+ca7KOsYOd//2r
ygOkMETYYJjbBiMoBl794humOmJSAOkAspeV3M5SFjzhuXakAbHjgMquR95n
DRI8mz4kHjaRd5qTwXCjXku5qps5iWfaV5f/D6K7tEyt16VLDX15pJWrgID5
FgLKinFjL2QcDguDUfnMRrCcuagZrThG/s34+oHtK0m8SmpbFY/DJcNggGAa
OwRooSDl1dERJvrpyseIrAjvvQ/Want7kj0MjLRbwqCodINHfjqVym6BeJ9T
CSJm9FR6wHfgrzUnjGO1jGaOsHUgDYza1PeGip0lvstKcMumRDOIxjRbTaQ0
y2HilPJsJ6BOFMxdwIo5ZQ8LeSemo3teggNA/n17fDGMdr941X752mmM3iUY
upRJVvy5N5T2p3/84mVT7dCcG9kDMQnQY4h2wRRTQRtde8UTRs/yNh5zwlUX
YdEYqlisFFEHF9ocXWr9o1l2g7HtGHueG6vIF5zUApaD2eImEgD2UVkgejK/
G7RJ1DJ9F9LTnKX+bLaa00mQ6KBUMQAHre7uy4Wc9/F8nkxzxo2QvJCg//YF
ekp41aDZsB7os0AdyCLplnzRYDk+biKqnrxxC2B+NFEQu32ZLZYpF7WCzjVN
7pKJr/Dz+KFU36SMkzsDcuYBEboXx/B5Dmu+ycgHcIuKIDJp3tTEBeeNEK5y
JkTucAEq0YoFqlFUmcl4kNxuPnqjxZji17oT+Z7NuXev3nCl0k3v8Xbuam3/
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
O7upoH7Ip0o0zRHEP5ez6QZCbv8BF+7nJeKFy+W87G9tkbyxUz1b3Gzxq1vy
aHe79yz8L7UxGXOs8D801scd0v7wHwGlMpvSn/Em//axoUp9jiQkPVlB/0kf
klAmlB6KG/5pU6Kam51ss5jhv4aMfbL5E96MVOuU3FsJCD571sf//XGz8iwC
Tvbw9k73+fb5zvP+y2/C/8nDunrUCwDU/1Vg6uNkkSGDsDLPGt7DEzwngjtH
ChHDgW3HJ3zKZ3gW+J7+b5rFSeHRFy/cHzUXkT5Qza+0hyqJgvRsU4agPe+S
+8KzMJb0T80pehzSxTO/dNbMTkMF/JoZkiiEnx8XdEPvcR7jn2uxMuwViojR
DrGYGP1wPbwLqhDvFrybxr3wYv0eDC9y/Kz62zCxq7vkl7HlaqgrtP1rgkYP
T+c63/SaOQ3qhp9PPX3RLRnncj6Pmxy/WauzdNY8k3fBTbP+Ac3Una1/BJIp
3Fv0jDzi1qwhFiA79eFZW1vLuWbabj/5WUtdfNWjUXfy6VLaI3U/X7WRmqev
1kbqyKO+Vp10mw/PQfR8sePrwQlQ1chPQ+rDqo7AeaFipgf+knqXagNzXiGI
4u0gqbvPfhP+v5Nkjd6dZOk3ZKPEZzf7MgubFaMeh72clRfkBaLTDFqEC9Ai
0I9Mh3ARi3r0cG/WXBbJLGxCZxK4M9e7X/hyU/yf2C9dGuG17/7n7pmMedMx
27MMC4+FP2et03e72de/+fplW580ddW1lLXeHZycZdtfv+rGB8NumV1/T1xJ
9GSv16MN84vmyPxLLClZr+qSFiixPXrqSq4Q4HaYMkiMZ1d5jAN7Zi0DMqqE
3FKjjVOkXb7200q2h3gPY92bxUmuiwWF/SMCmXn34JFgPSJGvGPYWtxGZCU3
RaSfNkYRyL3IYQxyCCVp3q9dnEe7oKRVJn4Jg+toL5aAFQZ+R2QX06+WzvFJ
tnbde/3UTVPf/52RWLlyRxwqGaNMuLsfQaM4k+p04BMpnlZSlWBEmCu56ifV
fCh6qb3Wvj8Ug40O+gQ+Uq7KYSsSWa5j7wLowEDvOgO9CwM9mmfml6dlfpSp
XrXU11Q3s+MgrRrmHVZ4FlLl3FS3guJfa4Z/zWNMVCxbu8q6ouKo/U8kbmmz
lZEeB3GFwtfNOOdA2To8PP5hPckK9qp5R9WN0hDt1nowoDh+DqZuybjpVP8Z
znq3ZKJTnaR1/tKKG/yr8iHKGbg/tSAhdRS1LH/JfB1tLnsN5t1oKbUo0/sI
QZYEfYFzwuf/yskleKwHR3+oRInFsNYsfe9dMisjmtgcXf+DVF0gbGsejrJh
E29igvtReuLj3MWplauhlibCaM2cu1B7ZFRNTS40N2PmR2pLIuB0VguLqyuB
CBIQeCZhGqcWK7VlAu4xc6uIbpyzh/fx0VgdqFUSdtDo4iS2CvtFmATs5/09
ZoY2WSsp5gMf/Yjl1LoP8dXqKg6YrpqcCbVuY9rDlU7ezk0VQUn3iPkvn1yr
b8mKNJEz3AbZGXIx9fdhOTbPpD0ar9zFev+iXapsJM8LD8n15MkT7kqGgKfv
xemTJ5UZEQIDSS7l6FCZHR0LLtlsIXFLCqIuVbLPqs0KuW2PNTTnixxkFXtY
iBm11es0fYwKlWdCfuuLobu/pcuQ9rYNDBVQt7OyMtFlUx+acNcQv6jkOwZN
8KfLcO9RVApCpc3TeXR8HiaOvw2uWBoET5BBVnAaJKajheUXtyibluSSAuiR
FrxB2VM+t3TxmG+Xv8brhRwQQGKUnLWWGG2XTNu5LKsnIjqCudx0CgBchqnS
sFjTAaOiMQAKG8iRNTyTDYMP1Gd6XaoUT3ZDz0F2RsZmmPrE8hPrsjvsZI2/
vwoL1ZwhxDlJSNqzbUOOV7d1fOpOZQUYi9VvtOpWH8/yUt3bjF/LLyXPvXY3
HM2ZnJLkNnYVMjavhiEDgfBBeGkTSe2ZH+mxw3yZnZCKzbmwS4dRmshVyA59
riKcphlUFQQ+qb1Ba97JFm08TcWchRWEzxsEZdR4GBSABRc1cZo28eDE8qDf
cSaLtOfmjq6yXMW6CL1zRKGBlJt/pn2ehLXrUnoucWsd3hvuWsuyvjCgthP2
KE/CWVjfWjLcN2zPZq14otPNh+rmMCTwHfPx4fzTaqekAZnjghAXjk/1nXOr
hP6qzEz7Au0WyKHoWg7T19IrW+kDymgE6a1TydPbDWImwcb1SXqfUokiFsKv
PvadTHPCcAtd/uqj3/ZnHyH0Ms3Oi6dvmKiYks94rfjEFYkJVYwTiWBITgll
1Wk3WStRL5kHbIHcGtmSh4piK+YeWbtO/7FNQbRCya6LuhE3dEzpb64l4WX7
UlupgqbCrfYW2YFT2th0qLzmUrtGsEswLzlFjqdDLUOVt6xFIZ0Ty+p6Nlve
rIJJbJ8WEjM2PGbzgiaSsy+vkHohYPiqwinYA980vFVlWw0YX4/Y4wUaxuXb
YG0tdrLLsRN6pm1uiXtB6Cu50wL74AN1lAfNKCwAsdYxciQNFwBOmcCcDqvi
NO7Nq5wB5VLlUC5QRj3X1uZEATYq5mRIFNPGEKVtW9mtBChVEqYNLzhH1Jyf
X/Yk4VkSID5CRlbUE/cPfZ0M5KmURMSLrTqy047HYJBwnjteCuHOGhRV51Gp
J1ShcDOxtnSqYuOywev+E+UbNnvy6U/h9Uv1TVPTQRAsHJT/TM8MRzQpppqD
QXVy39OpCDb+cMSkB5IUyEKuqqcy+iMloyb1DeBthykN/fVTEcZ3la9RLl5n
LkGa7mAl9jAXk2Yyo50lZ7qx14PvaUVKN6r52fVScKmw94KcojQrIfsGRiWH
ZPUAuqtbNz2jCWN/26y8pcNyAnQ5Tm6xE8Ted1YfIg1Q2CaUais7IDQ1teaF
P87Zo3FuKttJlS3bcFxzUJk08QUgZyN6DDEht/lkbuxulNGDFLYwKT475WY4
L22ge8Zab+n+aOlGJYk5LxCD9ghd5MCErEjclIIQ8zqKYN54fBRkeeWYWvoc
rx+I4qfD0O7NitjTpKIXrGocnSYCtDFF0kn4C9YSY8EVJTHJlcqMXMUdI2s9
Z70CN8LUAKqrxnvWKnp5r5NqhUUi4MRra04GLtYVp1glpUOySXtBZ61hxuvB
r0R7BYRB3jQBzM6R0EwCEps0hIUJKo5ucFk6wBlzduCdVC5GjrP9ver3uC4G
mmUncwVglrbA5BS2b0xHZ7gMc0DyIpfJXUxcLHrnUSGIqwOBTlZRAoLZaz4g
2mqbjU7PTZ8U8kDCDNJNLGnmi9k3mTgw+fjFcn++A1kNxX91WdcMU2RUy7TJ
+Nd1L6peE1Sr9b+RpmIFSD6KYVZTdk4H8PuwxrNFBRfqPPHxEmlO9lGeE39U
6C5g/yJSrNr/qSt0q9nhHDdLTzWTOutMhHiDJEhBNcVha1TqRGJJO/H77nZ/
Q9Wbfurw6GTpPfsm/1jEEDYRSMmx72cNf0FqOM4i/TzkSyd3haFcnRI15GQm
2ty5nX9G58h13NQ5nNysFaakCtZWFTSVIRyJcYSN9poECa+S/MxV/ctZeAlj
exGFW42B7LeYotfhUS9p6PfsWMcsPPezEIymXUVjJin1xhRlCtCRjvOG6rTv
8k4YdzDJ0rkgVPjr2ecvrFHqAOonxUsgUBVFNbyFiZDiIVm0F/+87vKfaov2
he6mnVVJSZ9jTzV6+1x6+7K5t5XO+p5mT0NT1SdjHMA9+aXBNEz9B38K+q6o
LjXHw0uubzQsHs2rxx8Ydle20z4GOf74o1I9FydNrgtSM8WbEJ6uxTx6AFPA
pcDLsvWCR/IbPxJTsjkXGdlMb0BTT54KmLnQq9uNa9O4in/PuYjdSPR28dzF
zyarIy5G+wIN7uv/1cGtOUVZS+PbFrutruiaAZeVwcolL9/hWHI1eghS5pgS
wPPwjZ+Ho1miu0e2osoGdQEpt1pehLeqApxUFIw5vNFKdLrKgM8gsPtQDisa
xWsV4yy3oDFa7JiWQu7TZ2uPYPUE1jLFQstPK6+ISbv2lXR21v35kdIm9QYh
Tk4SJ7xT8TlptaiUhyUCdTvRKGJguBJ9faOpM48Rp/ps5WJPf7v2fsCibtdq
aPqo4bJAeTHVnRw7+XBtF6cfZzG8y+Pf+RU3yjohTH999CUNd2kMPvW14Bkm
e3hJr2/YL+x15DqBShxkLANYo280rsxjB/C4GyQWFtTG1HCHlFWNq3KFbL9Y
exRDM5XD+GT9qQq23a84Uz8UkzGxL2hoj61lFMlUXKwtCtGl1VZiv5cAN8/m
BEK+mJZ6sv5OXaUhb1FHb1wP4QXkJzbdHK4ikx9qf2EKBoQOIEfm6t73lLQB
jc6Gd6KB/tpfDuz52+lzPRLiNHRg0/I0KnNVT4w3uchs6ND/f4X//w3HlrCv
qVqfk3a6LoQmJtmaNB6Yc+hHVXnXCtg3NAMMq5Ao8fZ37P12JsT1ZvuVufYZ
JifjjJML7l+zcwBtA1BM0KBhk/6O0cN/EPTwsCkimKjk3QSxBPodULUNbygn
pCMpUi5LZNhAhaCtCouBUfEmMKfkIFJ8Tv6Gw8YvOcIPB5S4VriEq1IlBhs3
qAel4PAwNq3U6G56+VADoiCxRVWIUZYLYVqbseoP7u4YvCWTVFnnvK/76gWo
9CHyBc/CJdlL5t8RbxJhxgsoPFWFkDtechJS5Hi4oX15G/9VvxRLJ9seG1ix
sxYGO4mdFhkGIh69UKZohmiNrXJfgvOYDcZO4cMVa4vgqc00/9OSTdmRmGKa
AdUOSX2EbS9ekwHqfaiDbynJtYssV0XOdhswrp+5guL4ZQe6FrJT4SqGzz2y
RNF5p0TRcMNptpJUfAvhb3Zb3Nx2qUptNr+P3MlMgkhUHGOdYGVkoP6fL8Ju
xqcmk3oVYsdCV1zZL4wyOg7BuByibP7mJtlf+Uc4mqVGPcyZpEBInRRX03GB
Tdb6z7Pjo3a1REfTBqmW49kOQ90BoJq+QMnGsyVl/IY/f/P1b169fPF8Z7vy
DJHCAQe6Cni303/+ov/ylda30DAMtu/sfHC+f3F+Ojg6OwB0368q23kMwiDt
sAvMNQoUQBHOf1nO4u8bC36YhYD+vLgrLzhltd/4JFfnoZYi2+Q6Go8O+GJH
sqxJqF4QAyvqRW6HOy9f9SnVuZaCvUkMj69e2Jmjco19WkVDDaQ7inY00Mt4
7SR9xT6CRBwK0k6IV/tTDnbtsLmKKYOIgKlknE9yTvGiRIfZYoyE417SjMo1
Ogdn3w26odvMIyuoLhzUyuC/zWh7Jfuu5bLFQatGJ4iyxRl/3tfVUqOcJ8oA
s9QdwOFcymT9223++beXqGENbRdGliyChu913azsqQ3bsjviY6x7FUjlA+si
NRNLAYNJwnV4VAoIgI4l4zeFex2VDJpRiNLM+zIcxo7K3PCd1ZgHP1u0+dqC
15QxEyPPxaIof6ZOqGTA2iJrWvCqXYkg7Qs3oZFpQlGru6tpEXYAicuMlu8j
GcckWCnwwMJIYlYxS3w2Q8zxfEFyukVXTeQTqVGTOMZ2/nt64VQpSZz4bveS
MACGAnzIUbh0uEG+2DlkwInew/GfQ6+Y+5qFHo+36Z64I4x9vVf8vSFprEYa
a+EQhA94PWRSo2ANAwV4rZaCWt2nItcEZTj8RRiCNFNz/ftV6G5a8DDlU0nf
h0smAVj3pw4nFQE+C33wmSWO3HGkfccpkkMsGhHt2yXHL3mMfOpJS47xfVHw
PgXRmpfDCfKitGdysPllKp/ns40NTQdCTsn64Ar+XNm17kC5MxT0jGCOhWPV
WsSsgL6OxKC+qUvhZhdwoDazvE7DBP6F5RLLfcgUYgcSrSkOSSNTwhOH1MeI
HmoFrMyBY8W5DE6SjOIhrY4xQmXw5Wo0yvNx6c/5YZjK05kcJeSmyZsNmSNI
EHGauC3GDfUeB1xhPwgjQhpyiWxdH8fWHSzKpUDbBpkf7BRwLFrxL+YJ6WBd
4HdPwc+hHQ3mGSnZumkbbZsFnslj+tt29v4tWFwihZn2N1Zz0zZb5JJIUN9Z
s2k8hUDngoKjzci+q3/5Wfh0T8biZ99gcPjj2g5H7yzZmhobg4VwBJwjxUFz
pjWPeAZtDjHEq3vZASqzguqSl186BmS0Dz8GLSLC1SL/goasLd0p90FP0t9r
rRQSf6RGHugt72sHMzGCsJUOEmorhWXZwWpLwp2iVbocfNg7OL84PP42qG4f
jnaDDrd3GYHip6uwlZAric7nY2tZcWPsJhaIJaIU00VSQphDiOhT/TrU5lSc
kCCH5X2VEz3mCrWHXHTfdIm7aZIYu3bPUS6ZfQa8q98QBU2YkO1XXwvnTM8U
j/h5ikqgC/ZVVZhMCjcKBr2f6Xu6xTLkiZS8oWB7ScYU1VHivsDhp7ylfM5o
gfu4f5oOoxyK0SxI9xIVQPIKIyvVrsAWclouo4oOnGBTxoHDpir3JZsnl6wk
X8ab59WzLuOyiEhuk005i2UirBTyEabXqUsXYNtQ1A2+ug3Vn3bc9WQ2G5vY
K4PMk9ttCQjZCPwfxRuBYlMWC4hi7413r5MIoWiICgdfW674OR9+qFl8gzpi
SEZjitVLE6T4EnnhAoa0q++TuWd0W9xQujeITjmYbUzTzBbda3ZhAA2ZuIKt
RdYumA5szF6dD5o9L3AObNd1D/ckcYBN4yp2g0siDVq1vMH5+lW81GxAYQjC
XtKXw12yGmG2SLO6pWI78vu+loHy/FSxIGSlJ5MkPSkrSue2UYQShXb4NbRh
m/De6Uh2GT0iOynA2vHAbWoygV+4zoUFmncUiypJk6q7SjpVcKwwb+iatEpw
wq2zNreaG3PTpQJhELTuocLK2vx+dH6VXsIVSjRUlEIu7cSkkML8UjqQuYwc
foz8poCRiIK/t0EvIgQZFqwyU+AOvS3m6Rq6jsoquhohk/MJm9QNMMPgGuLU
mCv5nHbMF6ORXt3V9ZcvXN3j+4z8OkzszDUuVLI74HEZ2kdglSqVvRqNL15d
jbfHr4YvXpLY/ebrYHFfEjx8Bfdc6OdE5efrUmBFMmCKtCVBdrRiQs+ZzEN1
pPqS3nbpl9IPEKfvsAT/MSm/XMtz69iMSE51B+NxaKHMx7bBaf+0XBotzvBB
5Qxjz38oybPXsFMcQ5rMmOTnfs/9D41+OD3qewh0frOP2QhTKAPtss+/Ixnc
4r5qVxtjjO3Q8dDk34MC4z5ImzxatUEY3EpBWwemDSGuEunRPXlNw5VGCq50
5+Dk3dmW1Fd3hzat3Ktifk2d+v3dfz36f0KnaMEYIq4TZ1k+9x39TXqL8Qcl
ZhpnIhNgVLkNLSHOdPFLmQgxCRljkHDeK5X1vNMJHuCjltA37PrN7JdLKbY8
ZEWy+73wXtrGan0f9lPYS+8m+efCbaNI0qvklKQok0QCx2V180c2omKBLR1O
fjDLOXDTfMYoZOOI+RjGp01l5RxZHKHaF8Ih4j7yxBEjnJNZmIMOy1OFDOcM
V8iHFngz4QYfhzN9Q3E6BvES9borDnw8bUnu0s9ePbERyxW/o3KoUjTstI15
Mc9xpTjWtvcH5+8pJBjMueVKrgALPHAO9anD7Gu9N3wzHP0YvuKSbXIxj1xH
1XauFxfw5ULVlyYi3Fx6yHbOvFzkWXrwY3HEh9ODzIcw/r5z3sGVupp+NNFB
p4vOC/ER/Zw/0OzH7cuwYz7AXeQbIBBeGRuaUSwBavfB1gyKUwR1V3er3LNt
uPKC0UdBBcYsT2Uwk5zYyvs7nstd46ZxdyxlYnOxXU8gC/AEiRNSf8I9wZsg
VW/8JuC1NfaVpamE+jX2qTVqFeSfI7OPtzFOU1nnCWm+yPT892PBGn8XSyzq
MkAyvnA9q9PYOqwawXDZ/Gm7cEh+Od2MBQcgW+HtHMUrtHRIq5KI4tbXUv3d
TcnXTMOX7qry8W44n2OmhGKdlR5tnkpB9bh19RTQjRD+oD+GAdN4Feo9IsTJ
gAH8+26FfQVqhlPwMJDL/YDLjDhy3rYAa1FWpg7UJLO5gM4HNeH03W5HXH9c
PsGFOOz5Q1Emf4orldhTGF7b5DXWfSqX/qYwQ6i9V0E1VXPClQXJ08QiETE4
Kq2W+vjubLK6Y3iXs2RU8mD1Kuk47emgY/uJDlUnzB24T8kDRyA27MNoV3rG
zbMhg88KV3GZDTicHh7/AFOfNao4fjK8SlrtgnjyXFq9HVWqCtKCTH/u5it5
SXejIeVW1hIjG17NPlLG2Glq3riirYLuBApKlKzBOnB6EmXhYqGLSM2g2bRB
PBnZg3qsWNJp7oNWK+H6GVIhWMkr+ZVRNolvKRg4QTL2/n8JF/iPYPP9jyDv
baRIVP+fQXyq4FZWaiSs5rB68bIYqzSRuDAgIifIUmNLlK/E3b29QxnXq+1n
bY0k8cdRiSSff91cKSH4mA0wzvZxFAo5jSxIeK1lCz9VnDacnxQLSt+hOOZM
GoOP1NRCiyM5rx376fyevdRyweinFGR2vgeIODhM32wulTnytMgfBHjZEhF8
Zbtqr4jbCUny5g6UCFzskiGlW9ml/IGj53z2EBSPiIBiu+haUP/SpSQrLsjd
MBn1oHK6TbPqTn5AQeuBJlbWVlJV6p9HreRoSGo0cxBVc++alT/1OPZoQy/z
PvqpJPAVtCnKJi1ijytIDVIkp0VT43zxmjvqMb4tFlTKg0/mkyE7b56w1Sy/
RgNPem0I5dF4PNl4zUdCjt+1aXSVs+XPZeVPbyBhVK73s2XoSidb9z+vbV9G
BT7aJmRj6MX+d90OoMxq9mls0oUP8dxwb9S7+a74nI/5nmYzEdXWoizyMof2
ZBBfGnVoT4k+TQmtKDBU+WPn+uH2Xivvctayeyy7y6HUeH225TCQy3w1nk3v
75Cm8eHDwZ7/oKAmVK+6bCvbPPtwsn/6/cHZ/h5+9MmKkPX/bo1QmehkeH9B
+l29/6+z47kUEd+ugpEKwE6sOT3PRM6gCyum3vfYTj/h0XnD1fsEn/mpU/uE
JHRhzRL+EJn0GqzvT/yhFMx33Sq8Jk06e/78+TcZ2V9dupg72Yfz3Wzzj5sM
ifWZ0ZfOLRb2jhlGKl9B6GjNZ/6xr6iGEmbpqRzmn5r20+tsABaPGTNJKdmm
FVW0vPznvG0egybjuXR9piXppM3XUN5GKXkJDUCQqajdu3wZ9gUhCr6XfzX3
2pbaPDD6Ju1rlcr9LGY2NjZTz1pEpWya1aSfIOpZub/f1Gr4txqRn7bWA5Zs
bVg/1oLEhvebwVPDHwABXtqjQV2q9EgEs0i8Jn3Uq6L9bFUQsUnzPCm3D2UY
y1tha4RfDe+77xZBucG28Orrr2uPzFC0eUarQK2erabSquq9X75aYL3q44kk
FFlbVZtlL6do1WvAqkn8kU+MYGZF8kXU6j74Qhv79lqrFwyV9d+zZlDr6pTF
aaoQJ1ETisT4wJd5TpR8qM6yEyECrj1IfWieBWv25rcoy1j/P6+DRcwuYoex
Fv7ziWoZRj6Up7TN1QOSbtJ1kN0OjbtPuMcgvcWKKOstfnAo3f+uxQQR2KN2
YfAIdpXKFfSUhEdWAZ2y3VNH0o5A37woUiHxD32TMdzWf7OK3p18OYLL1T+L
L7/7/d6R48d1rx6crH1NOt1EsItzUIEdD7p+3EC0O3/poAGh3R25wSvTbkyF
btFufYOJ7zC+1Rt86X9719OGXSu70137IDJ6DZGKNmpkzdSK5oemPg7L4wN7
531rXmOzmC2wuXjaEm5UmTte+wZcc//3/935Xn8PphP+MKj6v2cpbLofTx0y
3f+1jpaezFUVKd3/MQVJ7xvyN5ZbCQ7xQw08/f/GTK/RKtJpfgC3/d8Nk5kx
2f1UODz2B5QAu9zwTorUnsx6BGl/QAF4nTlSv2BCgNav68n9TKJ6mPeKLptg
vP/fOwYVzS5dlS8YmhDUq3I5u/M5OYSUQRm4N1MotOBaLko1Rf+fUigGi6ti
uaDMb6dS5DwjUZX4kl3RC08gA7SGmw+Uaaa9rNTtNhEZct0YEQeGBiNMXuXN
Tw9+CYEYj2cVbrrZordRsZtkmSttw35ruheCebj/+w8Hp/t7TBQYLlaeiG64
Zm6ApBrxvGXr/yrmAdoVtTGt2RxuV9SqoQmi7TPNIXvZBoeHkabO8VxCZfMs
Bmv3YfqxOs1hMf04G3mn7ZVWVTUdNjUzZfqddf7uARfAo6zztLkPD9j6j2+u
KMtVPn57/yUPUcxjcIoC2x6Y/IMv+pg+cOGJYqv5RmqTGK1snkW5QJJYQ/NX
2M0WzW/AQGY1R+76eatGKnCEJErxBWn5ek0Mg9wnFr/gNtY3wcVc3IMXr158
TdcaTvmLdoN3Ae6OOFv7lK8JOkOJjFA0krc/hwJKdfrHSIOIRVT6qAQoGKO6
4pml1BeqO2AiYEv76IR/awKw3AD1XOAkpBB+VofQJTN6cpU9CGDb9LSO6DJ8
6QcOD7hfMrqAdLx1qR+vLjL4n3Xt8FFbhUuwO5jTJ87NwFCY3bzM5LlmGjur
XB2PC2nPW68cc09uHARp1NLlEM13QscW67mYdpVzmCoLgQD5KrWUW/Lf5Ph0
2bINcXxB/aKvfFW6TAG9vSHkQPJ5cDOdAXAx+dJwmaYqLag+jIM/oWkJ5vAb
ctg5iANGEiqrqLe3t//2w7fSRqvw+QgcbsAN1+Z4TURhU0o/ylLb5STuXMnV
tVA7+dJUgniEO0guSFEz0sSr2YSC6+MVEq6qk7yaAngjeYOQLWnHfCpK0hVx
MYftpeubpDJrHKuikl3qkjqlSg5V2+4cMPZR0K1K/vrjpn5LFDxC17cd9eOm
4CtLSO7HTQsdSO4DI/WOaymhkQ6yVz8t0V/oQf5PZ1dBWaS8dxU0enbC8RSF
8BIXMTG/cxSJzhCVTA4XKVSjxv5chnx6DoR65zJqmsJDXZrOVTg4T930saxN
kSpbTROfoTrM/X6hktTwUyVsWVvndpMy64pfbetw6WoQEFMAIdMubygFzAZE
Ej2y5Cs3kwZ+6CZBaKeBrIKBTrtGs6JsWP04GxLUKfisMx5gjWCSOjrSI8b+
TUSp0+dAL4KoayxDFFwmEYPzStQKnh/LMnE8rEaeySUWmjFFHyUfQ90hyIyd
utn0da5/oCKASYGSOfj8wjlEVLK7e9hWYACNpl4T2/AovrAkh4igAehLz7LW
e/YZemDmMWXvUEXnw4Fi5E8GgRVaQWEDPSU52U01eNwQ6tccjmcsYmEcd6pk
ysTLTDgBglQxHXtSpCQHf5FzIDcfMk0CAR7PjLRprLVEZxQbA+tM6K/2SRnB
pevpqVR6FK8yAoCXM2xtUspI4pyCfdaG0bqUX1EN/mJ5uXV5q8AglwSIGkdI
onEF+FHUHUtiE7Dh2eWA5k7fn7WtVkoPNRVVYScVxDPOAPddyb5unR8GZa73
/GmblmgK/Zu2XNi7bpC0gvFSzKnyK9wF0lBddUv3xHVtFltBEe0mgaO2tHWY
VJ8piifX/yyZ5irKGHnHe/rItBMJ3IokGm0zo5gcRNE2bEhydxEYnLlc4Uot
qyxksCDhKqQp3ncsSZ+hKkkVXdhScabPZNWJaWl0Pwo7srrslCJs605Kovw1
n44vdWocmVpyCtzWlyeP8htOkbkKNusUBW++1FyeClvF+McA4fNp1j25pdxV
mtB77XuYjknYOjly9PWbPg9wUAbjWQ1TekWRbhzkiEwX1WAQNCrnKvLJvyUE
JKm+Zfxi+sje0Zkk3dTW42B2bqc1iut0lcJjkzAJJLnkSc7Eo4uZapH8qR3q
WZc9IsDdzNcgyay+Vo6XptRTds75jLnPMmH1ONkDCXBM9G/Q2zQZHNViuBhL
VtaedbLaeanes4lPSYoORF/zYsk6o/C77ug0dWVM4ENcQpWIWMp29Zweeubc
MbPccsMWEhS05JS1Y5fMBDjNr0Nfbxs7xKsnOeFuwKADSIjNFQUpyMT93eP3
7/eP9vb3+sJnsG319G2jRjPAGdV+Zqh1477g2LoiVFzFdnmQG2chHB5jvqjD
2VssKJ56dS9FFlKywZdrJoRr4U/XpAQI64XAgE1ndlMAmoUSsPR+ZLJAiA0a
NX2eRrCaM+M2ye3D7aeUvmZASl7+01a+Kwgbx9/621nrLRU54s4/ypefZouf
5fz5ZaeCIlYpvg29+jS83wr69udw45+tCj4E16DhTk6eppZPJVmX9ape8v2d
rKU5xNwFeRbQVV1xzgkokyQfT1Zl8yXIq8S5ZMcEHXlFExzxDrjRcAkVx2ed
bMAM1bwN2Dr+iHx2LerQWSQcotFtuPeojdhvW7N8SnflnWjmklUTNmi4x/jI
UHnZnEZSCl66npD3e+95i4jB0mGsrvmCjC59h6zXHvwFNJdIq45fDF0ja3gx
7hI81r2csCnDWzDOFfU1wpNjih6SXDv/j8qtCJv2jvMGG3vC8HUJZqnfxglq
2qtnWSmpA0GqEfcEVTzpZ6gYvAF6nvSyBbHbT1fEy7O8j6AAqOs3NKt0mz/P
Wu+CNostzmBzXd3TeXKRd9ZA1HCxecMF6zd9/NpMt//W8f77uJPJkCtQ4RW3
L296PDeayWGhnCMb8uDkIBwBuSoVU07tZOaFCy93taAsmfDb2exnwgygPkU+
M6GgXU0pyb6YmvyAB4CiGpUtHWk5SJeqnM7XMoII045tn4iMWYHq/nDeOv4s
8shAqbe4A4APSz7utXi6gg1CvY/W05fP0PN4hmw1fxesgi9dtA/gCJlmTFBF
Wyk8EffUKe30PIVOKWUW+0ax6z2OEUOmjfJ4xHZnk3H3Le26E9V6Rs3HzNSj
+uEymiwg+QpZgG5bVuPDkUGecBAXmN45XaJd1o/tzuCrKDVNWHIQbItH9eEq
LnuDAiYzDXAhi/4Hck+Yf+jUr9fVfc2OrtIOjJh/i612ECJIQwuCDUKf7sKV
TWvD7jBabXOrBHnFvADxK9hjfVS10fWrly4+rtdrWNqY3km6JK3PD4V3NoRN
z/s61gnpyyn5BOqqV1NGB0fmnhiA5I3/Znv7WSczU5DQPcZdKvewW7xmyvK3
tB+v7avQu6jSrPTWSSklPcUCfprJNaMBxeJNnbxrcqnQWLS9f+v+1o+ilRhO
nSipQ6f9KzQAw/qBPA5yhPpNGQX3uGWnWusOzh3wt+iCtbl78epzIUlNX/Cd
TIsMyTlbr3YtkxLbFMCLaptGjNflO057iJ25VHDIzoxrVyRBe9tp82GEpfjZ
k47R73O/GrVyEKSJl+s+LpsYPuNxkAmkqVWbUMjFBv14W6VxqaezO7sCelKF
F8sVmdIn6dgdqxnoBflMt2W3hIxPAhdcKEoapSiRIrEOYgOPOUrwHz5wgkgV
fugAUQ+cozSeG9TCkLxLD9AXzwM69NjD0PHWfbsXX47mfEsdih1sKbHut9i0
Kh97ANDwo3Y/g8XgeVFNCa3tBnPp+avgJY/4L4v7dVs8fpr3d/OeTra9pWor
flTTdnU6/fpdhjm7WQ2DYFnmEeW0CiOb4JKC4pn2ZlADRfs7iNrfrxT1//j+
fO73Z9gmM5smevdnxkIGMF24dsNKRbVP7LEvbtkzKlcISxDmtMMGm9M8tvju
DtsxjJlKQ0mVDZ8s1++8NRvOS9ildLwLAyvFZ7SB8N27bl/9rnHkYoJiq1Vu
tqp3E0ZMdPeb2hMTRvjTphTq9uD9l6zLFUNiSek0K3AkF42C2etyuNWbtMWK
m1CcCk2b/3mU1bx3uRgW8J227wH6a9WyY+eaiDunKxRfs0mUymerO+BUdhGK
3j0sVQvj/U6Xz3LWpfx22qgt9kpfhSsDoGLc/yD09G5jLXubA1Jqt26FMbQr
ByO03SjIyIvlhFVQFML+0dal5I+/8Zp2Fj7jf80f2yC7Sw+8ga6G+flv4a8Q
5K0IJB3eoEyMp1/ynM9BoChB7vDSi2ffmF+I9FtyARnm8mwaxT8ByYXRwBFE
IZl2OvtO1ASbfiGVfSp02G2JGYtO0SQA9NT8fYlPkLAzWtF1VbaluW3nVIrq
IaxLr5hRandUP/TlHfQlkTvh+wwtoH0bBhMszLS88dwdYphw4Xl3ku04Pm08
RGwrOGvg/TAM/PNDjGR3/ARFuGYskpj1liQ/b5fEOExh4BZab9/LNk83szeW
qNLJNo+2BvSbYNWroxZwhpvH9NvjEwKKHhyGk/W3BBHlb/AJ/g2K199wn/0N
B/tvG3/rdru1/4S39VqoBH1Cs/iPHrg2/0THwP2zk92F99vUfMRXW7OhW7Lh
t8L2bz+i/d9FUcIfqNzxIrWzf23ckI9tn5v+lUEaaiGszyMmiJtvit78a6W7
2p79h6Y0EShPKeTNCIapSFnz9oMSo/mVqDj6fJNWJToUh5+0QfNYCxhtrQkX
VZo45v+EJlicMrDS3PkgWov8aobchiAHghyPnTiYdu/yO7ptj38XftyTGIDe
f38TxgcHVUvf2Qu32rzpO/EQtNfM0jkEFyVYcLZfuAevCoaE0RfMDF8FdeBv
aoaEa3kr3GK03HRushFpi8uMfxUa/q7i/Kk7ffarc2/9c683+ngeeM9cin5H
isLywGvwFWFNkvlLdA0sFgUeyL/DgZQvjQC+dxe/AEdB+vBbcE6Ffwx4yzwc
8lyzigMD3DUXkt+N7hTG2DfHgyy69DeJJQU1m0Z1QihycuAe/InhjOyW2Yu0
tE0IpuGPxR0HkKouJDWBSr50LM9xyfkKitrFz5KKgueVEZpdMpWZbg223m7t
sj/x1pZD82vqmYIaW2Vu2nyZdqRAtAXoPb7HrgfZlHBVEEQT1Tw7IZoPgB7Z
aC0nSRwCAt+NcBYZUN0u4/slZhphIjDfLgPiantLjhhaal+xlAbDdbqBxJrH
ZpJ57I3Gcj68FYy8UR66EIZNcTpBXBA8mHBAZ5OPuWeZ9TnZrGlgoj7GvnAq
Q6QgtYRIS2sjRUYhgA7SavyN1PlghfZEPqnZy6h9GJq/3p4Jyg7F7d8P/vP4
NNs7Ps/eHxzJv04G57vfVav1naZ0lt+FDmU7gMAK5/MjYxozf0MwJalJbH/C
3bpjHA4GZdUZJdxGidJqfFkRx/T3hIgulqj4ADpOH7GkWXb5L02Oex1NvB8Y
WFN/NE2r67olaVmWKmsdJFA+nyjZcalcTDwolihN3mO/drWi7ObPYoqKc1rC
Iz1WUGuLqwalnDzaMn2GRK0irVAvyJRDRp7mPUtCXmOKrGGY1ACFLsPogOHp
CY+wOvYVYoi3TErt9UXlsz6Kj1lhIxkEHixI6tm+PcZ4TECrovqRDHLNZyun
KNwys2UR4VISBN7slE7kxkYjRmsk5o6ngU8wCmIIjJhAjRMgXABjy1YWr4Kd
01jQqLC274d/Do9rT5OeVYg0mqOuQznR+gky8mF/DgWLi34ul5WnlpTmpiH9
TOh2+uFShrEsf6BBRQTZz73PST8cjCUvpX8cokJhYN8XUzfEdyJs1wxVcj8F
9a4+WAitNYMNV2LlHpEHOwaYiTlJ58IoV73ftznNnBI2mnKoI1yQbeb0GyiK
iEnRaYL9j5sMD4H2f6wAtwhuTXhGoIGGxUQTftVMpQ1JZHg4NuuT+JGa7JPR
4wrGHYuMLFGq1uXvW6b+utm2TF7O20eE8sHM/QcS9jVTX/IMkZAUE+6116TE
j4bGWcDCB7grkjLGS12UzDu4PqOfv9OUu9+ct8+Ze4/K3AfYL7LAOXE6nYoN
ampP1zf5G+fZm+zpSH2HDraWbc4vWZQ/5ht0EB2qKB/5uj3nnScu8d6bmqsq
NoKpPMDi52PUDb3vgoUFXwkb9YXfqE0VApHeIk6mbMzSpc/TKz41/Mql1Gtu
qOV5u3csvXvM6fiA9ExlS7t5Fx9KqkhDQjpalmUWJzkRplU2VEx9HFpdj+f3
9fuHXz1l6sBHfNU5gXBBxwyyeyUghCDafCdKz15RslNhUwFqNl7S0uyFdeG8
tMi1CEdzFToYjNbk+f3CrcRGgl1KIj5Mo6npAAouL5nD6prskO4NdfkOIWsh
zR5SNH9C+pYAP5ospzoOvkm4B0mvSv0KcCGpFCFIIdI45j4fTvrWQYIpBk1b
GZlcjv1ONI7axLK+EZeBFzN8FPbH9ZBMXWRe3BJg2oxA9Yj1wTvnOZ1+XFzD
47iUoWmhSPy9t9596qASXUZwttq2SGiaBK+Pks+q/a4g9irIv9zZmA7CgB82
vFnfopXJX3h1jy6BcPwByL5uXGI52EEH5cnxmWSZdtjEZLOdMr6WW4tcq2bb
HNWs99LTsTE73TSMkAoG+1otKimCrlq026CH9rPvRPHiyTeUcNvp0dzaATha
l9DS1Wq+wF142RcHQz6u+w9aiKEgRsdpS2jC2r9g+QAelDI0ZBhYXm58OD0o
6126/FMdSmkNcM0DyCA/XaJDTmRdaAmM747aX3RXQ3NOFKtlJfYsewFTLs6P
0JhRazTgIRXHZ93t3/R2qK8/MCJad3ubfjoM8vhz91XvZfdsmQ/vjs82EW+J
LkIQXKkFCvFX3S8x2qd7HzLMYrgnx0SVW935X5XNJ1ADxb1a65K+F3nkTIB6
Aj2hgmIWPnggW38Pn563/AGYmcS8FPu9LxxTmClgahZlto4qMRYvWyoirglp
tGNcE9HgJ5fGVEozcEe7Ylu1LaFjRCTLYTWm60LM7QbcewewH797VYXrj8N0
xKQNktE0yo+MMVrjKBVJEsk+u6tVMe5u7zwXxN2KDKmg+1aFA5B7D3cU0rfp
2Bt27xqo3rVgVNkD59oQeJtONn1xPXZNr4Yvs8lN6VmmMcUDuwESU/nCcFkl
Zn3Rf/Ys/N8fN2NlubtdTjn3ijPr42p9O5wjYroh2qV7Q0rIysbry9kXXgnT
cas1f4YBc2Z7SxKZ26nmpEb09Yo7BxWHNADTAp0F1vSth0o0h54E2PMlM8H6
spq6pSb6IZV4TLXjWlZb6zmpU9DwNU2U+14orU5jd4trj/2lxR7iJJvIh9XC
6WUH4hAFqlRUnv3khZtAD25lwPBo5wsu/tH5BMIt3R5XNvYxxd0NSApaTPOn
EGSIu+EmbB+VnjUd3/kPHlWYarnnjdMmuU5clx//rodrS1VNZzJtbBxch92L
C9PtZiUdx3BRppUAhmq4ADdB4Sk2ZyUp3qYWrD3Xl75a6MPZ2wxHhpxtqi1p
hmD4Y92woqOjdtU4KM7hzA8J7ARbitlFoK1cnhwfHuz+4eK7weneD4PT/Ytg
fVycnO6f7R+dX1aNYhsRXkUadRXmAx7OBsOMJT5lSY+ZBzCx6dXyh5fyQIAW
8ETBfgL7sts3YcsUy5IDJo/QjeEKBtkZHdhSu04PGy8HJ2FXzQbM9vUkz5eO
HMIp0ArbrD4J6+xHSigxLIiNf2ESXfrSLqWwjqWyoJSeGY2UOhNKh8TfLXPY
RR+dN5sgayYowhkt7ufLWVDJ57cEDW1XdAcqizIHdurZT1YG08ynNRqSUKVo
UUOKWcey5DgSj3Ag5Q53NBrvM7BK/TrCQxVG+tm1MHGETUocEz2raaHCcUsY
rcX6O2TxSHwb8j6GXjuctkbhKZ4Es1Si64csXkqfn6BQKSbF5WWQEy7BdkrG
FMFqa7af49MbLkYE0jfSiAfoo6Bl0110u0DlTPjv2ermNrsLn0LIKAyDHdaG
aS9ZuQijDSI3nqvrg8V6E0xbWo9EfTVFMow1QtLEECdS5+pqpEG371YB0OGs
ylGc3MkiULpR/opCzHX3VSDhNEGIxhLJPSNufCXsZs79YeL5aF0ydNEFFwOH
S4+yUfWnBHc5/Q0wkulXJB8uyvvp6GKcD2nZDWxjLSp/pNOQmkSYrTbMZlD/
S0NgupTkRAFmjxhNivHzsvcqa3HtBEC+PCCAVkGG3XZwdpx9/erZNoJi1a+T
pkNAT6rlU5oJIf9H4KdedrQCcG3Etp1dX5ckxfT2eQptj2ap++yl/Ovpsx36
VzuB8CeMbcF8CJYKwG3FkmTRbcD5d1dBESEJxx6Wy4p2+Zy1SyEgSP74iv/I
nw9PGAGBc31OOWGFvEZawBN9NVf3JJ2E+L7k/HyylGj23i2GIwmraYWbH55a
Rb3aNIPNFXzYSmEaejVCDaJk+Wm4r3mg7AZv/GsvWCl/pKBgNfW0obPg1slr
+FZh9B8ZxiynmP/lprWNSf5YJr96Vv8l/eLTbDUZN8wnGZnhqpuvpHwF0eV1
tAi0Q2+FNIxLFt2ZZ6lQlP3s8g/hf7rv33f39s5vb/t3d/2y/ONlmMTPYcjh
1Z1n2eBs9+CA/FA0C0RdRm1XLyePmhQ/BFXVVK3kfAIshk9W69NixoS5d1Qd
MJVDwmejE26x6ux32NE5AjPYEogxl3/RA+JCFM7G0BCKx4oYkod1Qp9VwtY6
oldddDo+Wke5UUN7ajlTPoXA6jBjICtBF/bUxQy0as1/m+afAL2g+WsXvnHm
+bnXGID9qXuVc8ASHX28jM117AjEsKi9zYVDwXxBpD8OP2WvXnRxzhsw0oYJ
fywurWfPd5zQ3e69autGpbbiu/oVJcLl61Ew2urtpoBtWauUeu0MhEBX+bKf
Dbp/DDPV/Usne9b9ppM97WRb+PYJ5URwhobs76y1+WYzwj/NlWJ8DZUMogOU
d8JWErU15zapee4ykYbZrBrEXCdORYNwl3nRGRDmRXtM9naGyg5IgnAsgE5c
zoeibNGmcOMKsgPVIrR0OpUyP2w7xG7Tl8c5fzlddxUM4WVa93V6qpxCV/7A
sgBtaiUNB4aCdXyzvMVaWKkZxpJPE48jFEJRThQXTGR9OB4X4a0LrlUjcBq7
ku2ukhHXl8Ej/YkdRJvx+U66sV0dnJgHyohcCGEuJ00zKRvFO+gsOb5AMkHj
Drd+aKFprerKNLAelyQQv4svHIKiKIQq66SQZXDX868kk3WfpM084a0s60Lv
EgaFcRJJn9dpjC3JVz6jnN5TpqTrZJZkY785fX/GyAid5ixcORVB6hXldS1D
xXUYMgrjca4JEP0pEMj2ztfZFVmnxHgvQxZyJ00mS0w2VunZJmLSlbATx7M7
IZ3Td8OStnbPTk6PvoUwGcChqsXiYQbDDUskLdlHQZb85uWrnTafzUwavA1L
GI4FA2/wIfcIJkFgetGk48DnzqBbSS4iUnTKTrx9w79rYRxOLJOArPOWCY9d
VQiRqMXKo/DJTzBq4xlYNE/TKoJ2T759MJaSo4ZNURYism+iSpOWJc8sB7Vk
FZxYVtm7Y/lihRXtsJSi7APCN5KqjSBZ+IPcOxTOho0fE7wIIAoypWTCH4gZ
+6XgArvnjRQRQuTSamgugmJ7WfHyhHZU5AQJcFOQysK9QUQ6NhoW5G4+WwLt
tpLbx6LFs0KxgS4C9GoRZqTLRr4Y38aG7ip4+au4CYSW/i6ojaLTEo3sVAHI
mJo9aJYNJueMEKdT+lJJr8mNA9wxjZmEU7o0X15B8aJqlKTGaMpG17LUlDTW
UYpp6Ds+1JdF9x+t3YjjFTv12cmBXNpw1xDnGX1FcngPrmvPkTWfk9+AwEHw
3TTxp6pdyvdTLZLLx2rmddVqfoydnJrW663mKxU2wgxn1m2UBHQ7kG1qm9lT
Dz1sL7Ufb7U2KzH6ts4EiqXJjIiBPyFOk4AZefOC7MPl+Jc8CAySYywfucQU
MizMTujKlFyVsj7am1cwm2HlPeN/06969A8yFF7lO5eQnm89GqaHmI6mBRKN
6CXGdoTMXUaVuqxvvtWUXFVzYZoPenwivT+EmXr2zJxP9OP2O3TmcrqaTC4T
OZzOTFhY7Hp+8HU2i8JKcl8JsDDn3xVwt0qbyIYStyJTKRJf3XS0FBFa5snR
E38gpA0d2JqJO1dqUr5WAG+ZWvpOpamozB2l0kaw4GHSPfXeprx65tDgqk1r
4kTpuqvZG5xEDImVZx+m4qbT6CmCP2zLR6DTWFLhBQ3n/EysYk4BSaODPI3f
+tcYK5mdLDW4ZGmHk2/CEibWIuvKTNll+sECy58VFtoisKmPHpEaiZFucOTT
mt/X/PwmEOqBZ8ZMBQwPtT2OyIR+Uqh3H2cEiJRPrruibkIj8QhJnLTpbhi4
Vc50d2vaFy9NBD7EF8tlPs922o2Bdgn+MXBMhY5xFs7c0jZl9v7C5l1z82i2
OPhHlyP3om7Gpi5cjndvhD/fEdS8PE4ttX53Ic71jv9Ym8O2WSYOOHtKzYYU
bCO653uSprYP4vokRYNNmS6bhhn3hbZWuP6pVKtYcgZZnm4kXlaJ6/n1ZqYi
2RqmuOgy4Jx97w5omrHdDzppm9IwScjVPtrJWmHpeAd5JN76drPdJTG9uA9C
G8/bNbQuF8Dyeenh4WDGuaSH+oKuRzoppnD4mqHHrpVW2GdPnoxpa+P4KwC7
T5vFpS3ZWWvEWrkaEXd6+eQJtI+ayCs76dGMvK9/hk5idM6IyHLEkOkQkqRu
uowYiHC2YErpj5gnwqKznoNWXVLTmrv7GkoTnfTu4V4TRTVAllCwEeZlgWTe
OAVqQ0NSuA8MtQQZk1GWiGSxBipfOolzumuXUrCxTg/OD3YHh9BBTTonc4jR
MzhYrhzd1gfzXcf6iMg9D11TO2AlRUHBGE450/t0713217/+8Hy3F/71yy8Z
bET2TViCNWslDROVhGiqZf695iuWkalKVYB5Gu9D7z+Hr+Y5aze4GuO13kWH
yWFD3UUXS5If/1N74z9+7aZoGr+dCloxXa3ekycc2QgH7La4KmQaseXL7Ozs
9J3aPEHSEhF6UrdPzGR1NvSO6EeyuIv8E6WTUzHHajLVermiyZ0FRShsK3hN
dZe4o38dDWrBxVdN1OhRhqVgJ344yPw+bCPZZBzWccaOepkoOxzroayT7Y0T
ZBEL9CjJZ6NDU7k4XdAIuyt6DhlskgiGoV2KulV4mNoIu18JQZR1C5/3rt70
C4HaiT5qrvHADUFIcESqRWBkbBaWmXly54gCjCwT9j9/OEOhyOjW844IZKrh
hKQqQTKH0tOKgiopzoMx5acRIgUlC00qDj9NMuZahwLIFUN7g0HXRpJQwN4l
iUxLaDAGofN73RA9LjNkjOkPhG4G3ezk9r6Eis2EZKDKyFb257n+eYg/q8CA
R+LT7QzxdDIMibZnRNd8l5FTsBtlE2eOHTOYWkNC+8uY6kwBvRnSgoI1grJz
NxvHmQwfHRWL0eoOd1IN85wAYq+DVUEkSOY+4d5I6a1DDxdoHwXCkHObQBUt
PbJeKfOmEB62cJzKOo2yoSP+kg5nEJDnhGo8qHnucnS3nsv6KMMIvwjNO2gq
m6Z1XAyZ/JMY4RStGiSQyxzCRsCY3fina8BYCgeQQiWhnGFXuRuSja4CbRHG
yyBQlapynFbDAaJd8e1kdhWW8YzRfQ+myIaxnfd+SAlblGDjcLhINQ6KGUNR
UhaaQAW0eSNaPMqnQHG6WkzeKHUHYnLmq/I2HJGbVZ7WEq6m4jgH5cPM0AFI
5vsZrGBIks6GjYNEju51EBJ0t8n7W/qPbgz6kYQhUQMkKAmexSS3oOHlC6lN
D7b85znrXtqObjc/L7FHKJC9flCrRwJxfLkDjQ6XGTmVUfmDtDtJgBK1Idjw
yqbm0k+mtYnqSCV5ubr6mHO+dWQWl+soOZlPngzKcnU3t6JTEVT0y7BwPps4
rOBkds/zNydcHh6Pg/lofXf2nmcuHO7V2Nd3dDKHCQr8zmsTK+4xhN73cleM
88Fvi1glJeXUgtKqbjtzrMxWy+7sunuF+mOB7rJbmRF9kF4pEqwjO4DSFIOa
UeSfOAdAwEhkWeOyMYGEugoNs8Sg2fznwxXn8ZOz1l54JJxtt49/fwpDlmwL
VtaQk69HS+uBcr9vMPV0FU9noddhLhacnx/0L7IHwmnGcTgBPO1At3ya8+ph
uyOooVSb0g5YMMYQUS1ZwhcfM4O9laM0WyRpbbYbY7NORYClZ3lXbnmTNNdS
k9RlSrjAyb5gx4AGe8BXbXZalD9D7tP26zLAFXc4CGTKU/H7+XoI1G68ueU+
TVE7uU0JXqx8zWVQvlhJSoHkRIRd7wBRtDaMWyADTcEZyqDTL7tUDjjJxze5
QOAqBjd0uHdElg1lZMJlCtkA6XdZPKV2SL8qLRURacQTO7WQ/AkE/mrq945P
7MtaD0orBKpkW7l7wS3aNUwJOQGQqW0xy8OifQwSFfEl0UuiMBoyEAdc1LCH
r2biiaoI+MHRHp50n4xHg32bBa3xEMmhgqJh0jX9KJVbLKSz6Ja6m4F5GdZi
hRKt9MAKEFvTyURQwx/2iHmt0qbptGv1INIzJz4OCYE6LBZtSe2iZDRSYW5Z
lyadXeH0rmGEKUzluCuLmuQ+TseKRCKxuqWgyvaYxLvpHq2fsCak9KoeUsE6
Hi6iYhy6XNyILeVcLwT6KrpaYXxBcERZ2iUzfxA21dl92KyL8P2/CEQI/VYO
eJJoDk0OlYWkgUHLH63gEVBwm7twKFYLuf6cbUyBu2FVP81aRS9HfS3/iJNV
KImVeUBFKf4U9kmXHxyO/xyWg+80Dos1cQRVyXPYncmuHZr++UpyXoMFwXel
+4TcgT3K8YRF0KU9i8MW4z6QO2QirZiCR0IkCTcmBUgcO++lsWgpSgHBbxqc
NjxQYf3gdlgCs866VNoySYGY0VkbMoGE1MEdVOU1pWqcPBMl4RzMmcKAYAh9
2A2GfoNzRJUQfJPncRdLEZzsHoHm42MXO88F0Ga+1+L/3XSg3OfZaoFweFoV
SrvnkYNlN7CJxh7idS+/efYyOzo/sT7ORFcck+OKvw+dWoxg5rRlvLS7sM3G
IokJz8XdVJCsTaNIzxN9KOjf2qWERU1pA4aRC80PC560oCFo4rmQj6tuJ0Gw
kuDR4KWfU6X8RFF6gxz5C4mQ8pbqPqaMRBTmAIsHpUikB38tCLkhaD8+hxEW
y7gKEpolfj6+SOI5ZnB326JpTNTUPpgmWm08n5XLbrD9xNgM+lIwskVECVIa
Q7Zlpqpy/rkAOxpeWWsNxuvYwa3ivkIks60FNXyPySNlg97OzgVk1d/3whmZ
UcIvcoCsfgvZBYjDmMGPqKlrRGh2MXdh1W5IiSzuAGy8zI0X3Il3UWZ4Io4F
VPjUQIU3Nk6aMuRH7KIJsx1MgK6YC0hoQ6VBh+s/+KblJhMLxatsdyg1IMzj
YBJhQ1wR5X1yCWg2AZ2hMDFkz0bGCHFrKg4/1eEIeL+6foJwYe2HyBDem3aW
3Je+hsKlCerAOFC1NptIKyycruBtKtGUHOecJdV4tdZPS6qOWrGL1w6B5gP7
rJ0CD/eE1Yx+GZTSL7buTLiO3qXjbDIMGuZtp4JpLF4bZyG6MS8NmCyhgqDL
lQviP5MvVYDdnfInTqvcziOVgpACplI+gjkokphZL0Gjx9YmNapgSgY5XFxO
H21FdxFXTIO92Zl6n7kmhgyX5E5x7g45VZqrAPiF8GbY6Nx7xvg75HOVVJlw
9YzDXuioSaF5BWPJetcyHqPPJu12UXiUZg4TIfSXOtIEGD9iDdpyXxlgHK/B
UOMEQdcBNAQcT36eWOCbtOEB/g7gJ4emt5ZE7eSInQxzn4CAExtLazqnM+9i
UAUSH7udkcYr2U8wQYHIysgBriNPsrM7Ahc9/z6Rf6wkIvLgCFy6KATyPDOv
zYsMsgz21YiZJ5qfLA3cESxVffEh9eC4jsHOJQSU3cYXnmgGzXKNmuaEoNdN
p9NpXtwxvhdpBmbjQvDkn8C54niHaN8M+NY3gKrkAWaCkm3Mnmxx736+HQYF
F74TFdvk1S7JzoIciHjPks/RZjiTuznFicVdOHQfV+HsBG0wrZBPCsWGRTZ5
HgSMpBapkblQzztHpvertPKMbNY6I4Kt+RAqwmS4uCutfIBU3WARTrXoAE7P
OCkc0h6kvgoamhX9qkdGJ4a1Gl4L9o/l049FWC2BPlEK4kkBo9TzyXDsm0W0
Wdl1KzMtED45ODIhoAqlu7856nTl8tv4iDMrjWmquh7szU4uhagsciklh3T0
uvkYliZZ2CWB7AQRfc3OT8eDNweJi910gHNfzsIXmMSIKjRxH4/qBZos2pmb
mTwhWoupSKBCK7QS4CyL07INJ+slGaaoUtTMSMmVFZ6++F7r5OCg7TYdKCGn
4zriguBDzbnjXakfgFIm6rveXcNwkkBoa3Ff4i5BtvH0/s6MXQAwHhwwPZ/8
lo6qp3rXzLFiWvUQk2kZFPXIZRAl/Dx+iq6HmCVMBBxDchhQ8jLO3+2wvE2f
adNlasB0QZZNGN4kKHR3cKRr5SWnO7OR6xsQZMnKcFM88kr2aSM0U4zSPNCF
+S35wTh52ydBj+Gfiet+z2g9cdmFGrs51f2LXKkpVAf95lT8K+53lGDYmP9+
KRA+yUILebdc7cO4iKTqOmwYD3yLNBJytuhlDufNcCIb3/xgMYpIdc7zIdSl
u3A7wjnB5ur5beVXMVuRcVf0xTCpcPXy1Nl1Sh5/2vgSpxWl2TtNzWj0uuSM
kV0WLFoNZEtQn6jBYBDmyt20P4X+DdQtdtP43V1MVbMCW7ph4cC2VUHiX3BW
fh6JIHL+CFQEvrvdH8VL5IxqOb5wFBScoOC/Eak+yfhX07znosIuN+ZdseDc
xR/wXQIxKPARTVQAAqD6mYY3N4v8RlMHunr5In4INxmZm9I7cmKS5lKmgPte
ZJ3mS8bGlXRJllDxt9Cvv3x2OYqecOAQEN7n4m51Rxn50hrfmww2G2U7dNVW
VDJuC9p94b6MiPLkDQhHnW8AE39ypMZyo6/9niw5CRiqLgjz8s2zsM/uqRon
5jhV35Kc7Q73z2qmGOWZsLqGZAdM2HFL25MAhBd8NsMC3ttSEVAVw6/B5RgM
+6ANr4aT6viSE85pvCs6UG3dODe1a6NBfTRQM85CiX3QvSB6xnK2xPEtwlM8
r3Pkq+CIpRcCmRlxeZSN0rotZReKCiVR8wWKPJkDtUeY5K4JfdNraZIH41VG
DMCnd5FgugW6mCS7FpRNQmpkLlfQwAX/ZD05PVUUGuclUgfq7z8cnw8ujva/
HZwffL9/8XZwODja3b8YnJwcHuzvQc6/P7sYnB+/P9i9OD7ZPx0QIcbFu8HB
If85/Ors4Ox8n94i9ODv90//oH82BW1BQJlkdUyc1KseAvYuS1eL6Ueqc5Cz
rglJDtYv/DEYmTQn0X09tHLK2n5O+Ym3s/uwHHpm2iwS9k0Ksj3BMlyWZMNL
Y7aNoWcifWB6r/gvXbk6Jsj4cJEHypyLJEyxnJfUIYxbpTXvRtwDrnZU7gD5
qHhmzE/r3S51nfr4zPOFalMxB6bsZCnH5dbv8ntEQLJPi9A09AxyeZVBL4n+
LjmYg+Sqa5SPDmWDqt3ZM1O9IjmMfkNSye5urxHQdUSKUdeoIJK7u3RppuK6
ZQ3BOVygIoB1Kjlb5leQ2A3hUBE57Ani62F3yoDEPxEUHIpmEA3GYFLcTNmr
xrkUeJOV3+rLawSWegdGE9qQI2kB4UcpZZV29E+O7BgJCtTcyDatS+ej9MHb
AilpE4hA2lMdqIEjEkAG969OgyuAh3zSbbN7fHIy6GTf7p2cckORPlnB1PG3
QRBAROSy8zJr4VaNfisys/dycnLW4vShG38OJ70cK64RTEK2zNFsZefgQMyT
lsc5Z5RMx/wT7kGNN7IqXfa9aWABxyZVioq8I9Tu8Cp0p93hz/p7Jyne1USr
jgooH9hsOY3Oy/BwV/DDrAogdrgsSk1kuy4sWS2xAIeTe/D5XuX3s8q+gBfN
OYTaklIl/lnfJycXBRMMA+Xl3N09GWRb2Yez7AxOO7VYD4fMNOfXz0ldvJY6
TEMTgpojTYR9VeEMxrxoK5amcHNLlaY+cQhz5A4xxl1uESvguBhOSzb4UYcL
9+RiKWlxua72ElDjFjz/Sst9o6RtQBtkMlCIEE62pAOkjcr3DEn8xUtWqDCL
e2sH1igcNVaTBrfsCzA83PhjDsBdDhMwa9WmhOJN/bCh2zohsSSbDZaynI2K
4TJqEskEMYDjHfGwT3OSuWNXB5y1kAfrbtOw21pXbVsDP/NDILlNu9A7upyW
FvshRQmjtqQqCecvukizQBQSkhkhUk5qB7i/1Svehz0I84j9cwOAorGMjpkP
9SvKCp/Wvk9+k0HbFaKDgD6eCEuxoyxS7q/ITXelD4kyc6jWZ2hQiAvYvu/7
cYf546nQsXfqQ6760sMvkAzcvULeMzfA6f0obo6qQXHtxL4IDHitYpaDRkX4
bkZTlCUdlqgc5dNh6ACmPDsYHA1qXq2wEh9Ojxi2aZIdkTMDOdnePdDPVotp
//N8PtK05ErJv5wBfCAFHObcRGn9Q9CyyFQ8zTmojc9lrfD9tvvygUObPTrY
o1KYTfr25pMnTZciMsy3X2wbqMIry3rGJTvmyr4UvuP5i2evwoeb+lO6ruxF
LIX3tiZtwf5KBkrxF7q9hXJAk8m53hjnMYGHtz4YEkTvuSSCJ/wcB9EvJFnH
cZr2eHpIWGFp6M/CBkG/21YhhwKuWGrLXzEAZP3cdKmLZZ9QK5se0HjuzXDq
DLu9cO2Ns33KYwra2vE87Doqt42m4+pKyt6ZwJB1DAg0qNajpSh7axpb9xKc
bfTOmN7p5Xf3/3FDv+qNZnckPpZ5P01nsh6Br2iaL7t7i+H1krMVxrO5QjKE
Gd8/f5eR45/Ge7OYreYdMbxtnj6JQcMhPPFkX0+0Shvt0dtJK73sHYPlIK+F
kgM5tQEoGVNb1SKVT1e5OJzHUZHCN+mhBZetU4VybiD9B/tn3/b8GttBPLvH
5BUjqihmbF/eyHFPnSl0p9Qct47OzgBREo5o6RDj+DxmYfuRm7ZSVT94e/SO
Cz9e7jx/0Y5IwlLJGNrM3qgAvc82+5vMKPEn/FMRvX/asCfeZJusBG0GpWcz
jBj/rX/GDxqC5r9w+Br/ZvgS/PMacLz4J0WZNjfw1TfZZHwbrMHFhn75Tbb9
pJUNDk++IyVr7+Dbg3N6p4c3L/D/u5tZe0PeC89Xnw4iq6EBeqn+KBdrYhnC
vADsucwj0iMjsVjGRlPR+JUEFhYCNycZZFKlqhdnbs6W+CZ9kb34jONMyZwL
y88gFwjWncNFZF/iLVderrQloZ0h/YQyK9HsUaQrAHG56NAY2zWpLvUCNAOG
LPWs3XtIDXMYWzU2ufvooJNDSC8BPquX4bq6ZOQa9vbRRuXMkPB9qlmV2X3N
x48CdFYBhznSqpazs15bxfIk/0inf0AVDxPKM9wTsE7NEKSmUvmStcb0X90Z
CbPu5244Ne2klqfi5Jf8SYbB9aA+UZlhCrtYX1+q/oal0lpbva8vo2gRoeBu
1w9xdqtawYcEy8Qxe6uUqd30YtD2sn1SPC7/qsfzl/5fqQu/XNImvpKinyqi
i6jn2CvWX0aTMyqs/l/lgHJTgsUw5HvWkruNg0IuMwYNdDEK0vnyz4VUotOO
Ir0N1nJ9hk4cjWN1io6ZV5EvR6mrcPPuvpkalUGp56pz9oM5YJrhlJGanbFr
5QaWk2d+NWlQ3bqumpkPj2I1eiwXVoNJBakyKlKS5eRTsI2sShN4JA7UF3Mj
AQFAU8YBDjAk1t3dr4f269KvcNPmxOlkj0msqVh+ogy5q66MqFDaL0WTaNqF
kr2gKAwMwd5BTV1HSEPkVnHTHBTLlvWqz/dE/wk5Te2XgM1Of6U7PPy6TdCL
T56cJWqx4FuNnzzpUTH+UTCcfF/NftWTPeQ6cEQ9UwU73PujRXGFqgY99p0k
s4TTa31q9JYWAhhRpQA3OAT69XMQhGEc1j50jTAeMv5kNL4VSB5xk0X7TIra
x15IEnbcz+z/Um6J8CV/VtRXGET8WELyzx0nH7LhmUVpbd9ZV6gsFusB1RVk
RcEtoNR+ltlA6oFs6RL+DE1yDt3wrikJJLMOWW2LVaLE/dJ+8FSdWpVzo9Vl
IJca1UrKotVawX3hThytVU8wWLBudPAUeEtC8H5Icm4fhdTLReJDxlinJBW1
aJD/Qh05DJKX4or7OgVkZJyHY17pIXo14YfDbewcVmQOawCxUJcRrne65oMe
4lQlaoRwYgi8ipH1In5Mocx2pog4vYg2Zi97GySugmtRy4/QvAhz68tatzkt
pzOnEaUousAgibBcCNsZuesaXEgQYi5yr5IRjgvBJyo2ydIS5eA/h3FpljT5
AdDdz0FRryxIBcRToAGSzIkwWFXDlCgyVt2b+byx4X5blBo+ZtUiHCmuVRi5
vsknYVZg5pR7zlD33QUgdwxuBjcGuxS5YwAa29jg8lT5nXCQlKAnqgoTpMgh
Ea07F2z+1mi2EOcjfJuX/8GIO4w7d1njBrmkvkk1f7vpGyNmDeny/SPf6W/3
nn35W02EI+u/R8I97JUeabx57252RRGm4fVwUfSLWXmZcK68jsEr43UgkS1y
ukxbtiuRUu8l9+Ky+Ql4NiddJH+veYTczzMysfIhsT2nT6nF178rRosZkm0q
zYhwB9dL+ie54Tn8dKmnQbRA1PQl7sgBHaKCwdw+nB6oYRFv7snwKicTPZjF
wSr+NCzFUZob91OxKMpe+GuG4onFKCL4U3aAIhpFdch00k4TxuaqVA6nIPic
d6w1noVLN+/O2y7ZeTVlkwlEBqI5qbJr6BK7BsVxkH1LAR74J9gu1WcuFX+D
RMIh5DlfC1V2IEEM1cj17XI5L/tbW9TLnqCH9maLmy1+cEta7WKhekTsMxmH
CxlsdFwCFO0O40dg84gCWTWnUVsEX6MfSrRiGgCiT46uUq0vILSoku6ykry2
eQ9Iz3sC4gqSejg2yOI6EIhkCVHLYpxYxn6VTJozwTBQ6uB8GISyziJPz6Vf
2eLubrU0cok6QrZU0/AdOi9AZHC1Im+SYVVXutoiW3oNQ0U7TXLQtB9J0m6A
ZnkQ0aVXnS9ZWEHhNU24w962qFbG+/rsu0F35+UrJAqydwEe9Tp5qvvoxqP8
fTd2AtSMHLnzQTaZueqNIKjJ55eJrY5vcHXtMKm9kKuHLt7E7St4tQlELifr
J5edOd5DL7A7wQ5e197WWl0pL5/AYnOjYYKoW7r9qrLz7p7/ATa6gUf9nQkc
qGJ7V0DKg4rQ4QmBa8SjwybWD7eLMi2xfwxsJ7o+GIJMsoWTSiMxejaYeog0
IJ9iqU4UvlO5hhEV5hvhHAdLgEomKGIyGGnxNC/BX/ucz5mP32wCoHHzF5aR
Io5oaXNE7IK+m+djcGeaZU6yfzWlk4WAweiW9zHjouIUdwSohcurEV72xlK8
ghsqtGLQCMEeRM6KqxXp4c39tie4pKNybrT763pAdewUK4WW/SmfhMHBZUPB
9U9hGSXHasHGScMlFpYWpAOUFzUq5sCnm8bjUpr5pJ4lLAjmufwqG2iibfPY
GgMTQdVYEhVxPzs+2s+O9n/I9v/rZP/0gFKiwi/Ph4sbypsgOL29t+EXpzMy
bYbhX/sUXGiONvwfjGcRz+3nAgA=

-->

</rfc>

