smesh_lol_web_common_mls.mjs raw

   1  // Package smesh.lol/web/common/mls
   2  // Generated by MoxieJS — Moxie JavaScript backend
   3  
   4  import * as $rt from './$runtime/index.mjs';
   5  
   6  import * as errors from './errors.mjs';
   7  import * as smesh$lol$web$common$crypto$chacha20poly1305 from './smesh_lol_web_common_crypto_chacha20poly1305.mjs';
   8  import * as smesh$lol$web$common$crypto$hkdf from './smesh_lol_web_common_crypto_hkdf.mjs';
   9  import * as smesh$lol$web$common$crypto$hmac from './smesh_lol_web_common_crypto_hmac.mjs';
  10  import * as smesh$lol$web$common$jsbridge$ed25519 from './smesh_lol_web_common_jsbridge_ed25519.mjs';
  11  import * as smesh$lol$web$common$jsbridge$schnorr from './smesh_lol_web_common_jsbridge_schnorr.mjs';
  12  import * as smesh$lol$web$common$jsbridge$subtle from './smesh_lol_web_common_jsbridge_subtle.mjs';
  13  import * as smesh$lol$web$common$jsbridge$x25519 from './smesh_lol_web_common_jsbridge_x25519.mjs';
  14  
  15  // Package-level variables
  16  export let errInvalidKeySize = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  17  export let errAEADOpenFailed = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  18  export let errHPKEDecryptFailed = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  19  export let kemSuiteID = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  20  export let hpkeSuiteID = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  21  export let errUnexpectedEOF = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  22  export let errVarintOverflow = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  23  export let errExcessBytes = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  24  export let errInvalidContentType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  25  export let errInvalidSenderType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  26  export let errInvalidWireFormat = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  27  export let errInvalidVersion = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  28  export let errNonZeroPadding = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  29  export let errGroupSecretsNotFound = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  30  export let errKeyPackageVersionMismatch = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  31  export let errKeyPackageSuiteMismatch = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  32  export let errKeyPackageBadSource = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  33  export let errKeyPackageBadSignature = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  34  export let errKeyPackageKeysMatch = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  35  export let errInvalidPSKType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  36  export let errInvalidPSKUsage = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  37  export let errInvalidProposalOrRefType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  38  export let secretLabelInit = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  39  export let secretLabelSenderData = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  40  export let secretLabelEncryption = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  41  export let secretLabelExporter = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  42  export let secretLabelExternal = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  43  export let secretLabelConfirm = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  44  export let secretLabelMembership = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  45  export let secretLabelResumption = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  46  export let secretLabelAuthentication = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  47  export let errInvalidProposalType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  48  export let errDupAddKey = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  49  export let errUpdateByCommitter = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  50  export let errDupUpdateOrRemove = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  51  export let errRemoveCommitter = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  52  export let errDupPSK = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  53  export let errDupGroupContextExts = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  54  export let errReinitWithOther = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  55  export let errExternalInitNotAllowed = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  56  export let ratchetLabelHandshake = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  57  export let ratchetLabelApplication = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  58  export let ksEpochs = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  59  export let stEntries = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  60  export let hexchars = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  61  export let treeMathVectors = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  62  export let errInvalidLeafNodeSource = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  63  export let errInvalidNodeType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  64  export let errNodeKeyMismatch = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  65  export let errInvalidCredentialType = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  66  
  67  $rt.types.registerType('smesh.lol/web/common/mls.hpkeSealer', {
  68    id: 'smesh.lol/web/common/mls.hpkeSealer',
  69    kind: 'struct',
  70    methods: new Map(),
  71    fields: [
  72      { name: 'key', type: '[]byte', tag: '', embedded: false },
  73      { name: 'nonce', type: '[]byte', tag: '', embedded: false },
  74    ],
  75    zero: () => ({ key: null, nonce: null }),
  76  });
  77  $rt.types.registerType('smesh.lol/web/common/mls.hpkeOpener', {
  78    id: 'smesh.lol/web/common/mls.hpkeOpener',
  79    kind: 'struct',
  80    methods: new Map(),
  81    fields: [
  82      { name: 'key', type: '[]byte', tag: '', embedded: false },
  83      { name: 'nonce', type: '[]byte', tag: '', embedded: false },
  84    ],
  85    zero: () => ({ key: null, nonce: null }),
  86  });
  87  $rt.types.registerType('smesh.lol/web/common/mls.Reader', {
  88    id: 'smesh.lol/web/common/mls.Reader',
  89    kind: 'struct',
  90    methods: new Map(),
  91    fields: [
  92      { name: 'data', type: '[]byte', tag: '', embedded: false },
  93      { name: 'pos', type: 'int', tag: '', embedded: false },
  94    ],
  95    zero: () => ({ data: null, pos: 0 }),
  96  });
  97  $rt.types.registerType('smesh.lol/web/common/mls.Writer', {
  98    id: 'smesh.lol/web/common/mls.Writer',
  99    kind: 'struct',
 100    methods: new Map(),
 101    fields: [
 102      { name: 'buf', type: '[]byte', tag: '', embedded: false },
 103      { name: 'err', type: 'error', tag: '', embedded: false },
 104    ],
 105    zero: () => ({ buf: null, err: null }),
 106  });
 107  $rt.types.registerType('smesh.lol/web/common/mls.unmarshaler', {
 108    id: 'smesh.lol/web/common/mls.unmarshaler',
 109    kind: 'interface',
 110    methods: new Map([
 111      ['unmarshal', null],
 112    ]),
 113  });
 114  $rt.types.registerType('smesh.lol/web/common/mls.marshaler', {
 115    id: 'smesh.lol/web/common/mls.marshaler',
 116    kind: 'interface',
 117    methods: new Map([
 118      ['marshal', null],
 119    ]),
 120  });
 121  $rt.types.registerType('smesh.lol/web/common/mls.sender', {
 122    id: 'smesh.lol/web/common/mls.sender',
 123    kind: 'struct',
 124    methods: new Map(),
 125    fields: [
 126      { name: 'senderType', type: 'smesh.lol/web/common/mls.senderType', tag: '', embedded: false },
 127      { name: 'leafIndex', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 128      { name: 'senderIndex', type: 'uint32', tag: '', embedded: false },
 129    ],
 130    zero: () => ({ senderType: 0, leafIndex: 0, senderIndex: 0 }),
 131  });
 132  $rt.types.registerType('smesh.lol/web/common/mls.framedContent', {
 133    id: 'smesh.lol/web/common/mls.framedContent',
 134    kind: 'struct',
 135    methods: new Map(),
 136    fields: [
 137      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 138      { name: 'epoch', type: 'uint64', tag: '', embedded: false },
 139      { name: 'sender', type: 'smesh.lol/web/common/mls.sender', tag: '', embedded: false },
 140      { name: 'authenticatedData', type: '[]byte', tag: '', embedded: false },
 141      { name: 'contentType', type: 'smesh.lol/web/common/mls.contentType', tag: '', embedded: false },
 142      { name: 'applicationData', type: '[]byte', tag: '', embedded: false },
 143      { name: 'proposal', type: '*smesh.lol/web/common/mls.proposal', tag: '', embedded: false },
 144      { name: 'commit', type: '*smesh.lol/web/common/mls.commit', tag: '', embedded: false },
 145    ],
 146    zero: () => ({ groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }),
 147  });
 148  $rt.types.registerType('smesh.lol/web/common/mls.mlsMessage', {
 149    id: 'smesh.lol/web/common/mls.mlsMessage',
 150    kind: 'struct',
 151    methods: new Map(),
 152    fields: [
 153      { name: 'version', type: 'smesh.lol/web/common/mls.protocolVersion', tag: '', embedded: false },
 154      { name: 'wireFormat', type: 'smesh.lol/web/common/mls.wireFormat', tag: '', embedded: false },
 155      { name: 'publicMessage', type: '*smesh.lol/web/common/mls.publicMessage', tag: '', embedded: false },
 156      { name: 'privateMessage', type: '*smesh.lol/web/common/mls.privateMessage', tag: '', embedded: false },
 157      { name: 'welcome', type: '*smesh.lol/web/common/mls.Welcome', tag: '', embedded: false },
 158      { name: 'groupInfo', type: '*smesh.lol/web/common/mls.groupInfo', tag: '', embedded: false },
 159      { name: 'keyPackage', type: '*smesh.lol/web/common/mls.KeyPackage', tag: '', embedded: false },
 160    ],
 161    zero: () => ({ version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }),
 162  });
 163  $rt.types.registerType('smesh.lol/web/common/mls.framedContentAuthData', {
 164    id: 'smesh.lol/web/common/mls.framedContentAuthData',
 165    kind: 'struct',
 166    methods: new Map(),
 167    fields: [
 168      { name: 'signature', type: '[]byte', tag: '', embedded: false },
 169      { name: 'confirmationTag', type: '[]byte', tag: '', embedded: false },
 170    ],
 171    zero: () => ({ signature: null, confirmationTag: null }),
 172  });
 173  $rt.types.registerType('smesh.lol/web/common/mls.authenticatedContent', {
 174    id: 'smesh.lol/web/common/mls.authenticatedContent',
 175    kind: 'struct',
 176    methods: new Map(),
 177    fields: [
 178      { name: 'wireFormat', type: 'smesh.lol/web/common/mls.wireFormat', tag: '', embedded: false },
 179      { name: 'content', type: 'smesh.lol/web/common/mls.framedContent', tag: '', embedded: false },
 180      { name: 'auth', type: 'smesh.lol/web/common/mls.framedContentAuthData', tag: '', embedded: false },
 181    ],
 182    zero: () => ({ wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null } }),
 183  });
 184  $rt.types.registerType('smesh.lol/web/common/mls.framedContentTBS', {
 185    id: 'smesh.lol/web/common/mls.framedContentTBS',
 186    kind: 'struct',
 187    methods: new Map(),
 188    fields: [
 189      { name: 'version', type: 'smesh.lol/web/common/mls.protocolVersion', tag: '', embedded: false },
 190      { name: 'wireFormat', type: 'smesh.lol/web/common/mls.wireFormat', tag: '', embedded: false },
 191      { name: 'content', type: 'smesh.lol/web/common/mls.framedContent', tag: '', embedded: false },
 192      { name: 'context', type: '*smesh.lol/web/common/mls.groupContext', tag: '', embedded: false },
 193    ],
 194    zero: () => ({ version: 0, wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, context: null }),
 195  });
 196  $rt.types.registerType('smesh.lol/web/common/mls.publicMessage', {
 197    id: 'smesh.lol/web/common/mls.publicMessage',
 198    kind: 'struct',
 199    methods: new Map(),
 200    fields: [
 201      { name: 'content', type: 'smesh.lol/web/common/mls.framedContent', tag: '', embedded: false },
 202      { name: 'auth', type: 'smesh.lol/web/common/mls.framedContentAuthData', tag: '', embedded: false },
 203      { name: 'membershipTag', type: '[]byte', tag: '', embedded: false },
 204    ],
 205    zero: () => ({ content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null }, membershipTag: null }),
 206  });
 207  $rt.types.registerType('smesh.lol/web/common/mls.authenticatedContentTBM', {
 208    id: 'smesh.lol/web/common/mls.authenticatedContentTBM',
 209    kind: 'struct',
 210    methods: new Map(),
 211    fields: [
 212      { name: 'contentTBS', type: 'smesh.lol/web/common/mls.framedContentTBS', tag: '', embedded: false },
 213      { name: 'auth', type: 'smesh.lol/web/common/mls.framedContentAuthData', tag: '', embedded: false },
 214    ],
 215    zero: () => ({ contentTBS: { version: 0, wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, context: null }, auth: { signature: null, confirmationTag: null } }),
 216  });
 217  $rt.types.registerType('smesh.lol/web/common/mls.privateMessage', {
 218    id: 'smesh.lol/web/common/mls.privateMessage',
 219    kind: 'struct',
 220    methods: new Map(),
 221    fields: [
 222      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 223      { name: 'epoch', type: 'uint64', tag: '', embedded: false },
 224      { name: 'contentType', type: 'smesh.lol/web/common/mls.contentType', tag: '', embedded: false },
 225      { name: 'authenticatedData', type: '[]byte', tag: '', embedded: false },
 226      { name: 'encryptedSenderData', type: '[]byte', tag: '', embedded: false },
 227      { name: 'ciphertext', type: '[]byte', tag: '', embedded: false },
 228    ],
 229    zero: () => ({ groupID: null, epoch: 0n, contentType: 0, authenticatedData: null, encryptedSenderData: null, ciphertext: null }),
 230  });
 231  $rt.types.registerType('smesh.lol/web/common/mls.senderDataAAD', {
 232    id: 'smesh.lol/web/common/mls.senderDataAAD',
 233    kind: 'struct',
 234    methods: new Map(),
 235    fields: [
 236      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 237      { name: 'epoch', type: 'uint64', tag: '', embedded: false },
 238      { name: 'contentType', type: 'smesh.lol/web/common/mls.contentType', tag: '', embedded: false },
 239    ],
 240    zero: () => ({ groupID: null, epoch: 0n, contentType: 0 }),
 241  });
 242  $rt.types.registerType('smesh.lol/web/common/mls.privateContentAAD', {
 243    id: 'smesh.lol/web/common/mls.privateContentAAD',
 244    kind: 'struct',
 245    methods: new Map(),
 246    fields: [
 247      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 248      { name: 'epoch', type: 'uint64', tag: '', embedded: false },
 249      { name: 'contentType', type: 'smesh.lol/web/common/mls.contentType', tag: '', embedded: false },
 250      { name: 'authenticatedData', type: '[]byte', tag: '', embedded: false },
 251    ],
 252    zero: () => ({ groupID: null, epoch: 0n, contentType: 0, authenticatedData: null }),
 253  });
 254  $rt.types.registerType('smesh.lol/web/common/mls.privateMessageContent', {
 255    id: 'smesh.lol/web/common/mls.privateMessageContent',
 256    kind: 'struct',
 257    methods: new Map(),
 258    fields: [
 259      { name: 'applicationData', type: '[]byte', tag: '', embedded: false },
 260      { name: 'proposal', type: '*smesh.lol/web/common/mls.proposal', tag: '', embedded: false },
 261      { name: 'commit', type: '*smesh.lol/web/common/mls.commit', tag: '', embedded: false },
 262      { name: 'auth', type: 'smesh.lol/web/common/mls.framedContentAuthData', tag: '', embedded: false },
 263    ],
 264    zero: () => ({ applicationData: null, proposal: null, commit: null, auth: { signature: null, confirmationTag: null } }),
 265  });
 266  $rt.types.registerType('smesh.lol/web/common/mls.senderData', {
 267    id: 'smesh.lol/web/common/mls.senderData',
 268    kind: 'struct',
 269    methods: new Map(),
 270    fields: [
 271      { name: 'leafIndex', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 272      { name: 'generation', type: 'uint32', tag: '', embedded: false },
 273      { name: 'reuseGuard', type: '[4]byte', tag: '', embedded: false },
 274    ],
 275    zero: () => ({ leafIndex: 0, generation: 0, reuseGuard: $rt.builtin.makeSlice(4, 4, 0) }),
 276  });
 277  $rt.types.registerType('smesh.lol/web/common/mls.pendingProposal', {
 278    id: 'smesh.lol/web/common/mls.pendingProposal',
 279    kind: 'struct',
 280    methods: new Map(),
 281    fields: [
 282      { name: 'ref', type: 'smesh.lol/web/common/mls.proposalRef', tag: '', embedded: false },
 283      { name: 'proposal', type: '*smesh.lol/web/common/mls.proposal', tag: '', embedded: false },
 284      { name: 'sender', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 285    ],
 286    zero: () => ({ ref: null, proposal: null, sender: 0 }),
 287  });
 288  $rt.types.registerType('smesh.lol/web/common/mls.Group', {
 289    id: 'smesh.lol/web/common/mls.Group',
 290    kind: 'struct',
 291    methods: new Map(),
 292    fields: [
 293      { name: 'tree', type: 'smesh.lol/web/common/mls.ratchetTree', tag: '', embedded: false },
 294      { name: 'groupContext', type: 'smesh.lol/web/common/mls.groupContext', tag: '', embedded: false },
 295      { name: 'interimTranscriptHash', type: '[]byte', tag: '', embedded: false },
 296      { name: 'pskSecret', type: '[]byte', tag: '', embedded: false },
 297      { name: 'epochSecret', type: '[]byte', tag: '', embedded: false },
 298      { name: 'initSecret', type: '[]byte', tag: '', embedded: false },
 299      { name: 'myLeafIndex', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 300      { name: 'privTree', type: '[]smesh.lol/web/common/mls.hpkePrivateKey', tag: '', embedded: false },
 301      { name: 'signaturePriv', type: 'smesh.lol/web/common/mls.signaturePrivateKey', tag: '', embedded: false },
 302      { name: 'pendingProposals', type: '[]smesh.lol/web/common/mls.pendingProposal', tag: '', embedded: false },
 303    ],
 304    zero: () => ({ tree: null, groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, interimTranscriptHash: null, pskSecret: null, epochSecret: null, initSecret: null, myLeafIndex: 0, privTree: null, signaturePriv: null, pendingProposals: null }),
 305  });
 306  $rt.types.registerType('smesh.lol/web/common/mls.GroupOptions', {
 307    id: 'smesh.lol/web/common/mls.GroupOptions',
 308    kind: 'struct',
 309    methods: new Map(),
 310    fields: [
 311      { name: 'Extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 312    ],
 313    zero: () => ({ Extensions: null }),
 314  });
 315  $rt.types.registerType('smesh.lol/web/common/mls.commit', {
 316    id: 'smesh.lol/web/common/mls.commit',
 317    kind: 'struct',
 318    methods: new Map(),
 319    fields: [
 320      { name: 'proposals', type: '[]smesh.lol/web/common/mls.proposalOrRef', tag: '', embedded: false },
 321      { name: 'path', type: '*smesh.lol/web/common/mls.updatePath', tag: '', embedded: false },
 322    ],
 323    zero: () => ({ proposals: null, path: null }),
 324  });
 325  $rt.types.registerType('smesh.lol/web/common/mls.groupInfo', {
 326    id: 'smesh.lol/web/common/mls.groupInfo',
 327    kind: 'struct',
 328    methods: new Map(),
 329    fields: [
 330      { name: 'groupContext', type: 'smesh.lol/web/common/mls.groupContext', tag: '', embedded: false },
 331      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 332      { name: 'confirmationTag', type: '[]byte', tag: '', embedded: false },
 333      { name: 'signer', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 334      { name: 'signature', type: '[]byte', tag: '', embedded: false },
 335    ],
 336    zero: () => ({ groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, extensions: null, confirmationTag: null, signer: 0, signature: null }),
 337  });
 338  $rt.types.registerType('smesh.lol/web/common/mls.groupSecrets', {
 339    id: 'smesh.lol/web/common/mls.groupSecrets',
 340    kind: 'struct',
 341    methods: new Map(),
 342    fields: [
 343      { name: 'joinerSecret', type: '[]byte', tag: '', embedded: false },
 344      { name: 'pathSecret', type: '[]byte', tag: '', embedded: false },
 345      { name: 'psks', type: '[]smesh.lol/web/common/mls.preSharedKeyID', tag: '', embedded: false },
 346    ],
 347    zero: () => ({ joinerSecret: null, pathSecret: null, psks: null }),
 348  });
 349  $rt.types.registerType('smesh.lol/web/common/mls.encryptedGroupSecrets', {
 350    id: 'smesh.lol/web/common/mls.encryptedGroupSecrets',
 351    kind: 'struct',
 352    methods: new Map(),
 353    fields: [
 354      { name: 'newMember', type: 'smesh.lol/web/common/mls.KeyPackageRef', tag: '', embedded: false },
 355      { name: 'encryptedGroupSecrets', type: 'smesh.lol/web/common/mls.hpkeCiphertext', tag: '', embedded: false },
 356    ],
 357    zero: () => ({ newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }),
 358  });
 359  $rt.types.registerType('smesh.lol/web/common/mls.Welcome', {
 360    id: 'smesh.lol/web/common/mls.Welcome',
 361    kind: 'struct',
 362    methods: new Map(),
 363    fields: [
 364      { name: 'cipherSuite', type: 'smesh.lol/web/common/mls.CipherSuite', tag: '', embedded: false },
 365      { name: 'secrets', type: '[]smesh.lol/web/common/mls.encryptedGroupSecrets', tag: '', embedded: false },
 366      { name: 'encryptedGroupInfo', type: '[]byte', tag: '', embedded: false },
 367    ],
 368    zero: () => ({ cipherSuite: 0, secrets: null, encryptedGroupInfo: null }),
 369  });
 370  $rt.types.registerType('smesh.lol/web/common/mls.KeyPackage', {
 371    id: 'smesh.lol/web/common/mls.KeyPackage',
 372    kind: 'struct',
 373    methods: new Map(),
 374    fields: [
 375      { name: 'version', type: 'smesh.lol/web/common/mls.protocolVersion', tag: '', embedded: false },
 376      { name: 'cipherSuite', type: 'smesh.lol/web/common/mls.CipherSuite', tag: '', embedded: false },
 377      { name: 'initKey', type: 'smesh.lol/web/common/mls.hpkePublicKey', tag: '', embedded: false },
 378      { name: 'leafNode', type: 'smesh.lol/web/common/mls.leafNode', tag: '', embedded: false },
 379      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 380      { name: 'signature', type: '[]byte', tag: '', embedded: false },
 381    ],
 382    zero: () => ({ version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }),
 383  });
 384  $rt.types.registerType('smesh.lol/web/common/mls.PrivateKeyPackage', {
 385    id: 'smesh.lol/web/common/mls.PrivateKeyPackage',
 386    kind: 'struct',
 387    methods: new Map(),
 388    fields: [
 389      { name: 'InitKey', type: '[]byte', tag: '', embedded: false },
 390      { name: 'EncryptionKey', type: '[]byte', tag: '', embedded: false },
 391      { name: 'SignatureKey', type: '[]byte', tag: '', embedded: false },
 392    ],
 393    zero: () => ({ InitKey: null, EncryptionKey: null, SignatureKey: null }),
 394  });
 395  $rt.types.registerType('smesh.lol/web/common/mls.KeyPairPackage', {
 396    id: 'smesh.lol/web/common/mls.KeyPairPackage',
 397    kind: 'struct',
 398    methods: new Map(),
 399    fields: [
 400      { name: 'Public', type: 'smesh.lol/web/common/mls.KeyPackage', tag: '', embedded: false },
 401      { name: 'Private', type: 'smesh.lol/web/common/mls.PrivateKeyPackage', tag: '', embedded: false },
 402    ],
 403    zero: () => ({ Public: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }, Private: { InitKey: null, EncryptionKey: null, SignatureKey: null } }),
 404  });
 405  $rt.types.registerType('smesh.lol/web/common/mls.KeyPackageOptions', {
 406    id: 'smesh.lol/web/common/mls.KeyPackageOptions',
 407    kind: 'struct',
 408    methods: new Map(),
 409    fields: [
 410      { name: 'CapabilityExtensions', type: '[]smesh.lol/web/common/mls.extensionType', tag: '', embedded: false },
 411      { name: 'LeafExtensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 412      { name: 'KeyPackageExtensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 413    ],
 414    zero: () => ({ CapabilityExtensions: null, LeafExtensions: null, KeyPackageExtensions: null }),
 415  });
 416  $rt.types.registerType('smesh.lol/web/common/mls.groupContext', {
 417    id: 'smesh.lol/web/common/mls.groupContext',
 418    kind: 'struct',
 419    methods: new Map(),
 420    fields: [
 421      { name: 'version', type: 'smesh.lol/web/common/mls.protocolVersion', tag: '', embedded: false },
 422      { name: 'cipherSuite', type: 'smesh.lol/web/common/mls.CipherSuite', tag: '', embedded: false },
 423      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 424      { name: 'epoch', type: 'uint64', tag: '', embedded: false },
 425      { name: 'treeHash', type: '[]byte', tag: '', embedded: false },
 426      { name: 'confirmedTranscriptHash', type: '[]byte', tag: '', embedded: false },
 427      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 428    ],
 429    zero: () => ({ version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }),
 430  });
 431  $rt.types.registerType('smesh.lol/web/common/mls.confirmedTranscriptHashInput', {
 432    id: 'smesh.lol/web/common/mls.confirmedTranscriptHashInput',
 433    kind: 'struct',
 434    methods: new Map(),
 435    fields: [
 436      { name: 'wireFormat', type: 'smesh.lol/web/common/mls.wireFormat', tag: '', embedded: false },
 437      { name: 'content', type: 'smesh.lol/web/common/mls.framedContent', tag: '', embedded: false },
 438      { name: 'signature', type: '[]byte', tag: '', embedded: false },
 439    ],
 440    zero: () => ({ wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, signature: null }),
 441  });
 442  $rt.types.registerType('smesh.lol/web/common/mls.preSharedKeyID', {
 443    id: 'smesh.lol/web/common/mls.preSharedKeyID',
 444    kind: 'struct',
 445    methods: new Map(),
 446    fields: [
 447      { name: 'pskType', type: 'smesh.lol/web/common/mls.pskType', tag: '', embedded: false },
 448      { name: 'pskID', type: '[]byte', tag: '', embedded: false },
 449      { name: 'usage', type: 'smesh.lol/web/common/mls.resumptionPSKUsage', tag: '', embedded: false },
 450      { name: 'pskGroupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 451      { name: 'pskEpoch', type: 'uint64', tag: '', embedded: false },
 452      { name: 'pskNonce', type: '[]byte', tag: '', embedded: false },
 453    ],
 454    zero: () => ({ pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }),
 455  });
 456  $rt.types.registerType('smesh.lol/web/common/mls.pskLabel', {
 457    id: 'smesh.lol/web/common/mls.pskLabel',
 458    kind: 'struct',
 459    methods: new Map(),
 460    fields: [
 461      { name: 'id', type: 'smesh.lol/web/common/mls.preSharedKeyID', tag: '', embedded: false },
 462      { name: 'index', type: 'uint16', tag: '', embedded: false },
 463      { name: 'count', type: 'uint16', tag: '', embedded: false },
 464    ],
 465    zero: () => ({ id: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }, index: 0, count: 0 }),
 466  });
 467  $rt.types.registerType('smesh.lol/web/common/mls.proposal', {
 468    id: 'smesh.lol/web/common/mls.proposal',
 469    kind: 'struct',
 470    methods: new Map(),
 471    fields: [
 472      { name: 'proposalType', type: 'smesh.lol/web/common/mls.proposalType', tag: '', embedded: false },
 473      { name: 'add', type: '*smesh.lol/web/common/mls.add', tag: '', embedded: false },
 474      { name: 'update', type: '*smesh.lol/web/common/mls.update', tag: '', embedded: false },
 475      { name: 'remove', type: '*smesh.lol/web/common/mls.remove', tag: '', embedded: false },
 476      { name: 'preSharedKey', type: '*smesh.lol/web/common/mls.preSharedKey', tag: '', embedded: false },
 477      { name: 'reInit', type: '*smesh.lol/web/common/mls.reInit', tag: '', embedded: false },
 478      { name: 'externalInit', type: '*smesh.lol/web/common/mls.externalInit', tag: '', embedded: false },
 479      { name: 'groupContextExtensions', type: '*smesh.lol/web/common/mls.groupContextExtensions', tag: '', embedded: false },
 480    ],
 481    zero: () => ({ proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }),
 482  });
 483  $rt.types.registerType('smesh.lol/web/common/mls.add', {
 484    id: 'smesh.lol/web/common/mls.add',
 485    kind: 'struct',
 486    methods: new Map(),
 487    fields: [
 488      { name: 'keyPackage', type: 'smesh.lol/web/common/mls.KeyPackage', tag: '', embedded: false },
 489    ],
 490    zero: () => ({ keyPackage: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null } }),
 491  });
 492  $rt.types.registerType('smesh.lol/web/common/mls.update', {
 493    id: 'smesh.lol/web/common/mls.update',
 494    kind: 'struct',
 495    methods: new Map(),
 496    fields: [
 497      { name: 'leafNode', type: 'smesh.lol/web/common/mls.leafNode', tag: '', embedded: false },
 498    ],
 499    zero: () => ({ leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null } }),
 500  });
 501  $rt.types.registerType('smesh.lol/web/common/mls.remove', {
 502    id: 'smesh.lol/web/common/mls.remove',
 503    kind: 'struct',
 504    methods: new Map(),
 505    fields: [
 506      { name: 'removed', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 507    ],
 508    zero: () => ({ removed: 0 }),
 509  });
 510  $rt.types.registerType('smesh.lol/web/common/mls.preSharedKey', {
 511    id: 'smesh.lol/web/common/mls.preSharedKey',
 512    kind: 'struct',
 513    methods: new Map(),
 514    fields: [
 515      { name: 'psk', type: 'smesh.lol/web/common/mls.preSharedKeyID', tag: '', embedded: false },
 516    ],
 517    zero: () => ({ psk: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null } }),
 518  });
 519  $rt.types.registerType('smesh.lol/web/common/mls.reInit', {
 520    id: 'smesh.lol/web/common/mls.reInit',
 521    kind: 'struct',
 522    methods: new Map(),
 523    fields: [
 524      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 525      { name: 'version', type: 'smesh.lol/web/common/mls.protocolVersion', tag: '', embedded: false },
 526      { name: 'cipherSuite', type: 'smesh.lol/web/common/mls.CipherSuite', tag: '', embedded: false },
 527      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 528    ],
 529    zero: () => ({ groupID: null, version: 0, cipherSuite: 0, extensions: null }),
 530  });
 531  $rt.types.registerType('smesh.lol/web/common/mls.externalInit', {
 532    id: 'smesh.lol/web/common/mls.externalInit',
 533    kind: 'struct',
 534    methods: new Map(),
 535    fields: [
 536      { name: 'kemOutput', type: '[]byte', tag: '', embedded: false },
 537    ],
 538    zero: () => ({ kemOutput: null }),
 539  });
 540  $rt.types.registerType('smesh.lol/web/common/mls.groupContextExtensions', {
 541    id: 'smesh.lol/web/common/mls.groupContextExtensions',
 542    kind: 'struct',
 543    methods: new Map(),
 544    fields: [
 545      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 546    ],
 547    zero: () => ({ extensions: null }),
 548  });
 549  $rt.types.registerType('smesh.lol/web/common/mls.proposalOrRef', {
 550    id: 'smesh.lol/web/common/mls.proposalOrRef',
 551    kind: 'struct',
 552    methods: new Map(),
 553    fields: [
 554      { name: 'typ', type: 'smesh.lol/web/common/mls.proposalOrRefType', tag: '', embedded: false },
 555      { name: 'proposal', type: '*smesh.lol/web/common/mls.proposal', tag: '', embedded: false },
 556      { name: 'reference', type: 'smesh.lol/web/common/mls.proposalRef', tag: '', embedded: false },
 557    ],
 558    zero: () => ({ typ: 0, proposal: null, reference: null }),
 559  });
 560  $rt.types.registerType('smesh.lol/web/common/mls.ratchetSecret', {
 561    id: 'smesh.lol/web/common/mls.ratchetSecret',
 562    kind: 'struct',
 563    methods: new Map(),
 564    fields: [
 565      { name: 'secret', type: '[]byte', tag: '', embedded: false },
 566      { name: 'generation', type: 'uint32', tag: '', embedded: false },
 567    ],
 568    zero: () => ({ secret: null, generation: 0 }),
 569  });
 570  $rt.types.registerType('smesh.lol/web/common/mls.ksEpoch', {
 571    id: 'smesh.lol/web/common/mls.ksEpoch',
 572    kind: 'struct',
 573    methods: new Map(),
 574    fields: [
 575      { name: 'commitSecret', type: '[]byte', tag: '', embedded: false },
 576      { name: 'treeHash', type: '[]byte', tag: '', embedded: false },
 577      { name: 'confirmedTranscriptHash', type: '[]byte', tag: '', embedded: false },
 578      { name: 'pskSecret', type: '[]byte', tag: '', embedded: false },
 579      { name: 'groupContext', type: '[]byte', tag: '', embedded: false },
 580      { name: 'joinerSecret', type: '[]byte', tag: '', embedded: false },
 581      { name: 'welcomeSecret', type: '[]byte', tag: '', embedded: false },
 582      { name: 'initSecret', type: '[]byte', tag: '', embedded: false },
 583      { name: 'senderDataSecret', type: '[]byte', tag: '', embedded: false },
 584      { name: 'encryptionSecret', type: '[]byte', tag: '', embedded: false },
 585      { name: 'exporterSecret', type: '[]byte', tag: '', embedded: false },
 586      { name: 'externalSecret', type: '[]byte', tag: '', embedded: false },
 587      { name: 'confirmationKey', type: '[]byte', tag: '', embedded: false },
 588      { name: 'membershipKey', type: '[]byte', tag: '', embedded: false },
 589      { name: 'resumptionPSK', type: '[]byte', tag: '', embedded: false },
 590      { name: 'epochAuthenticator', type: '[]byte', tag: '', embedded: false },
 591      { name: 'externalPub', type: '[]byte', tag: '', embedded: false },
 592      { name: 'exporterLabel', type: '[]byte', tag: '', embedded: false },
 593      { name: 'exporterContext', type: '[]byte', tag: '', embedded: false },
 594      { name: 'exporterLength', type: 'int', tag: '', embedded: false },
 595      { name: 'exporterValue', type: '[]byte', tag: '', embedded: false },
 596    ],
 597    zero: () => ({ commitSecret: null, treeHash: null, confirmedTranscriptHash: null, pskSecret: null, groupContext: null, joinerSecret: null, welcomeSecret: null, initSecret: null, senderDataSecret: null, encryptionSecret: null, exporterSecret: null, externalSecret: null, confirmationKey: null, membershipKey: null, resumptionPSK: null, epochAuthenticator: null, externalPub: null, exporterLabel: null, exporterContext: null, exporterLength: 0, exporterValue: null }),
 598  });
 599  $rt.types.registerType('smesh.lol/web/common/mls.stGen', {
 600    id: 'smesh.lol/web/common/mls.stGen',
 601    kind: 'struct',
 602    methods: new Map(),
 603    fields: [
 604      { name: 'generation', type: 'uint32', tag: '', embedded: false },
 605      { name: 'appKey', type: '[]byte', tag: '', embedded: false },
 606      { name: 'appNonce', type: '[]byte', tag: '', embedded: false },
 607      { name: 'hsKey', type: '[]byte', tag: '', embedded: false },
 608      { name: 'hsNonce', type: '[]byte', tag: '', embedded: false },
 609    ],
 610    zero: () => ({ generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }),
 611  });
 612  $rt.types.registerType('smesh.lol/web/common/mls.stLeaf', {
 613    id: 'smesh.lol/web/common/mls.stLeaf',
 614    kind: 'struct',
 615    methods: new Map(),
 616    fields: [
 617      { name: 'gens', type: '[]smesh.lol/web/common/mls.stGen', tag: '', embedded: false },
 618    ],
 619    zero: () => ({ gens: null }),
 620  });
 621  $rt.types.registerType('smesh.lol/web/common/mls.stEntry', {
 622    id: 'smesh.lol/web/common/mls.stEntry',
 623    kind: 'struct',
 624    methods: new Map(),
 625    fields: [
 626      { name: 'numLeaves', type: 'uint', tag: '', embedded: false },
 627      { name: 'encryptionSecret', type: '[]byte', tag: '', embedded: false },
 628      { name: 'sdSecret', type: '[]byte', tag: '', embedded: false },
 629      { name: 'sdCiphertext', type: '[]byte', tag: '', embedded: false },
 630      { name: 'sdKey', type: '[]byte', tag: '', embedded: false },
 631      { name: 'sdNonce', type: '[]byte', tag: '', embedded: false },
 632      { name: 'leaves', type: '[]smesh.lol/web/common/mls.stLeaf', tag: '', embedded: false },
 633    ],
 634    zero: () => ({ numLeaves: 0, encryptionSecret: null, sdSecret: null, sdCiphertext: null, sdKey: null, sdNonce: null, leaves: null }),
 635  });
 636  $rt.types.registerType('smesh.lol/web/common/mls.treeMathVector', {
 637    id: 'smesh.lol/web/common/mls.treeMathVector',
 638    kind: 'struct',
 639    methods: new Map(),
 640    fields: [
 641      { name: 'nLeaves', type: 'uint', tag: '', embedded: false },
 642      { name: 'nNodes', type: 'uint', tag: '', embedded: false },
 643      { name: 'root', type: 'uint', tag: '', embedded: false },
 644      { name: 'left', type: '[]int', tag: '', embedded: false },
 645      { name: 'right', type: '[]int', tag: '', embedded: false },
 646      { name: 'parent', type: '[]int', tag: '', embedded: false },
 647      { name: 'sibling', type: '[]int', tag: '', embedded: false },
 648    ],
 649    zero: () => ({ nLeaves: 0, nNodes: 0, root: 0, left: null, right: null, parent: null, sibling: null }),
 650  });
 651  $rt.types.registerType('smesh.lol/web/common/mls.parentNode', {
 652    id: 'smesh.lol/web/common/mls.parentNode',
 653    kind: 'struct',
 654    methods: new Map(),
 655    fields: [
 656      { name: 'encryptionKey', type: 'smesh.lol/web/common/mls.hpkePublicKey', tag: '', embedded: false },
 657      { name: 'parentHash', type: '[]byte', tag: '', embedded: false },
 658      { name: 'unmergedLeaves', type: '[]smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 659    ],
 660    zero: () => ({ encryptionKey: null, parentHash: null, unmergedLeaves: null }),
 661  });
 662  $rt.types.registerType('smesh.lol/web/common/mls.capabilities', {
 663    id: 'smesh.lol/web/common/mls.capabilities',
 664    kind: 'struct',
 665    methods: new Map(),
 666    fields: [
 667      { name: 'versions', type: '[]smesh.lol/web/common/mls.protocolVersion', tag: '', embedded: false },
 668      { name: 'cipherSuites', type: '[]smesh.lol/web/common/mls.CipherSuite', tag: '', embedded: false },
 669      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extensionType', tag: '', embedded: false },
 670      { name: 'proposals', type: '[]smesh.lol/web/common/mls.proposalType', tag: '', embedded: false },
 671      { name: 'credentials', type: '[]smesh.lol/web/common/mls.credentialType', tag: '', embedded: false },
 672    ],
 673    zero: () => ({ versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }),
 674  });
 675  $rt.types.registerType('smesh.lol/web/common/mls.lifetime', {
 676    id: 'smesh.lol/web/common/mls.lifetime',
 677    kind: 'struct',
 678    methods: new Map(),
 679    fields: [
 680      { name: 'notBefore', type: 'uint64', tag: '', embedded: false },
 681      { name: 'notAfter', type: 'uint64', tag: '', embedded: false },
 682    ],
 683    zero: () => ({ notBefore: 0n, notAfter: 0n }),
 684  });
 685  $rt.types.registerType('smesh.lol/web/common/mls.extension', {
 686    id: 'smesh.lol/web/common/mls.extension',
 687    kind: 'struct',
 688    methods: new Map(),
 689    fields: [
 690      { name: 'extensionType', type: 'smesh.lol/web/common/mls.extensionType', tag: '', embedded: false },
 691      { name: 'extensionData', type: '[]byte', tag: '', embedded: false },
 692    ],
 693    zero: () => ({ extensionType: 0, extensionData: null }),
 694  });
 695  $rt.types.registerType('smesh.lol/web/common/mls.leafNode', {
 696    id: 'smesh.lol/web/common/mls.leafNode',
 697    kind: 'struct',
 698    methods: new Map(),
 699    fields: [
 700      { name: 'encryptionKey', type: 'smesh.lol/web/common/mls.hpkePublicKey', tag: '', embedded: false },
 701      { name: 'signatureKey', type: 'smesh.lol/web/common/mls.signaturePublicKey', tag: '', embedded: false },
 702      { name: 'credential', type: 'smesh.lol/web/common/mls.Credential', tag: '', embedded: false },
 703      { name: 'capabilities', type: 'smesh.lol/web/common/mls.capabilities', tag: '', embedded: false },
 704      { name: 'leafNodeSource', type: 'smesh.lol/web/common/mls.leafNodeSource', tag: '', embedded: false },
 705      { name: 'lifetime', type: '*smesh.lol/web/common/mls.lifetime', tag: '', embedded: false },
 706      { name: 'parentHash', type: '[]byte', tag: '', embedded: false },
 707      { name: 'extensions', type: '[]smesh.lol/web/common/mls.extension', tag: '', embedded: false },
 708      { name: 'signature', type: '[]byte', tag: '', embedded: false },
 709    ],
 710    zero: () => ({ encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }),
 711  });
 712  $rt.types.registerType('smesh.lol/web/common/mls.leafNodeTBS', {
 713    id: 'smesh.lol/web/common/mls.leafNodeTBS',
 714    kind: 'struct',
 715    methods: new Map(),
 716    fields: [
 717      { name: 'node', type: '*smesh.lol/web/common/mls.leafNode', tag: '', embedded: false },
 718      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 719      { name: 'leafIndex', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 720    ],
 721    zero: () => ({ node: null, groupID: null, leafIndex: 0 }),
 722  });
 723  $rt.types.registerType('smesh.lol/web/common/mls.updatePathNode', {
 724    id: 'smesh.lol/web/common/mls.updatePathNode',
 725    kind: 'struct',
 726    methods: new Map(),
 727    fields: [
 728      { name: 'encryptionKey', type: 'smesh.lol/web/common/mls.hpkePublicKey', tag: '', embedded: false },
 729      { name: 'encryptedPathSecret', type: '[]smesh.lol/web/common/mls.hpkeCiphertext', tag: '', embedded: false },
 730    ],
 731    zero: () => ({ encryptionKey: null, encryptedPathSecret: null }),
 732  });
 733  $rt.types.registerType('smesh.lol/web/common/mls.updatePath', {
 734    id: 'smesh.lol/web/common/mls.updatePath',
 735    kind: 'struct',
 736    methods: new Map(),
 737    fields: [
 738      { name: 'leafNode', type: 'smesh.lol/web/common/mls.leafNode', tag: '', embedded: false },
 739      { name: 'nodes', type: '[]smesh.lol/web/common/mls.updatePathNode', tag: '', embedded: false },
 740    ],
 741    zero: () => ({ leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, nodes: null }),
 742  });
 743  $rt.types.registerType('smesh.lol/web/common/mls.node', {
 744    id: 'smesh.lol/web/common/mls.node',
 745    kind: 'struct',
 746    methods: new Map(),
 747    fields: [
 748      { name: 'nodeType', type: 'smesh.lol/web/common/mls.nodeType', tag: '', embedded: false },
 749      { name: 'leafNode', type: '*smesh.lol/web/common/mls.leafNode', tag: '', embedded: false },
 750      { name: 'parentNode', type: '*smesh.lol/web/common/mls.parentNode', tag: '', embedded: false },
 751    ],
 752    zero: () => ({ nodeType: 0, leafNode: null, parentNode: null }),
 753  });
 754  $rt.types.registerType('smesh.lol/web/common/mls.leafNodeVerifyOptions', {
 755    id: 'smesh.lol/web/common/mls.leafNodeVerifyOptions',
 756    kind: 'struct',
 757    methods: new Map(),
 758    fields: [
 759      { name: 'cipherSuite', type: 'smesh.lol/web/common/mls.CipherSuite', tag: '', embedded: false },
 760      { name: 'groupID', type: 'smesh.lol/web/common/mls.GroupID', tag: '', embedded: false },
 761      { name: 'leafIndex', type: 'smesh.lol/web/common/mls.leafIndex', tag: '', embedded: false },
 762      { name: 'supportedCreds', type: 'map[smesh.lol/web/common/mls.credentialType]bool', tag: '', embedded: false },
 763      { name: 'signatureKeys', type: 'map[string]bool', tag: '', embedded: false },
 764      { name: 'encryptionKeys', type: 'map[string]bool', tag: '', embedded: false },
 765      { name: 'nowUnix', type: 'int64', tag: '', embedded: false },
 766    ],
 767    zero: () => ({ cipherSuite: 0, groupID: null, leafIndex: 0, supportedCreds: null, signatureKeys: null, encryptionKeys: null, nowUnix: 0n }),
 768  });
 769  $rt.types.registerType('smesh.lol/web/common/mls.Credential', {
 770    id: 'smesh.lol/web/common/mls.Credential',
 771    kind: 'struct',
 772    methods: new Map(),
 773    fields: [
 774      { name: 'credentialType', type: 'smesh.lol/web/common/mls.credentialType', tag: '', embedded: false },
 775      { name: 'identity', type: '[]byte', tag: '', embedded: false },
 776      { name: 'certificates', type: '[][]byte', tag: '', embedded: false },
 777    ],
 778    zero: () => ({ credentialType: 0, identity: null, certificates: null }),
 779  });
 780  $rt.types.registerType('smesh.lol/web/common/mls.hpkeCiphertext', {
 781    id: 'smesh.lol/web/common/mls.hpkeCiphertext',
 782    kind: 'struct',
 783    methods: new Map(),
 784    fields: [
 785      { name: 'kemOutput', type: '[]byte', tag: '', embedded: false },
 786      { name: 'ciphertext', type: '[]byte', tag: '', embedded: false },
 787    ],
 788    zero: () => ({ kemOutput: null, ciphertext: null }),
 789  });
 790  export function init() {
 791    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139, $t139_140, $t140_141, $t141_142, $t142_143, $t143_144, $t144_145, $t145_146, $t146_147, $t147_148, $t148_149, $t149_150, $t150_151, $t151_152, $t152_153, $t153_154, $t154_155, $t155_156, $t156_157, $t157_158, $t158_159, $t159_160, $t160_161, $t161_162, $t162_163, $t163_164, $t164_165, $t165_166, $t166_167, $t167_168, $t168_169, $t169_170, $t170_171, $t171_172, $t172_173, $t173_174, $t174_175, $t175_176, $t176_177, $t177_178, $t178_179, $t179_180, $t180_181, $t181_182, $t182_183, $t183_184, $t184_185, $t185_186, $t186_187, $t187_188, $t188_189, $t189_190, $t190_191, $t191_192, $t192_193, $t193_194, $t194_195, $t195_196, $t196_197, $t197_198, $t198_199, $t199_200, $t200_201, $t201_202, $t202_203, $t203_204, $t204_205, $t205_206, $t206_207, $t207_208, $t208_209, $t209_210, $t210_211, $t211_212, $t212_213, $t213_214, $t214_215, $t215_216, $t216_217, $t217_218, $t218_219, $t219_220, $t220_221, $t221_222, $t222_223, $t223_224, $t224_225, $t225_226, $t226_227, $t227_228, $t228_229, $t229_230, $t230_231, $t231_232, $t232_233, $t233_234, $t234_235, $t235_236, $t236_237, $t237_238, $t238_239, $t239_240, $t240_241, $t241_242, $t242_243, $t243_244, $t244_245, $t245_246, $t246_247, $t247_248, $t248_249, $t249_250, $t250_251, $t251_252, $t252_253, $t253_254, $t254_255, $t255_256, $t256_257, $t257_258, $t258_259, $t259_260, $t260_261, $t261_262, $t262_263, $t263_264, $t264_265, $t265_266, $t266_267, $t267_268, $t268_269, $t269_270, $t270_271, $t271_272, $t272_273, $t273_274, $t274_275, $t275_276, $t276_277, $t277_278, $t278_279, $t279_280, $t280_281, $t281_282, $t282_283, $t283_284, $t284_285, $t285_286, $t286_287, $t287_288, $t288_289, $t289_290, $t290_291, $t291_292, $t292_293, $t293_294, $t294_295, $t295_296, $t296_297, $t297_298, $t298_299, $t299_300, $t300_301, $t301_302, $t302_303, $t303_304, $t304_305, $t305_306, $t306_307, $t307_308, $t308_309, $t309_310, $t310_311, $t311_312, $t312_313, $t313_314, $t314_315, $t315_316, $t316_317, $t317_318, $t318_319, $t319_320, $t320_321, $t321_322, $t322_323, $t323_324, $t324_325, $t325_326, $t326_327, $t327_328, $t328_329, $t329_330, $t330_331, $t331_332, $t332_333, $t333_334, $t334_335, $t335_336, $t336_337, $t337_338, $t338_339, $t339_340, $t340_341, $t341_342, $t342_343, $t343_344, $t344_345, $t345_346, $t346_347, $t347_348, $t348_349, $t349_350, $t350_351, $t351_352, $t352_353, $t353_354, $t354_355, $t355_356, $t356_357, $t357_358, $t358_359, $t359_360, $t360_361, $t361_362, $t362_363, $t363_364, $t364_365, $t365_366, $t366_367, $t367_368, $t368_369, $t369_370, $t370_371, $t371_372, $t372_373, $t373_374, $t374_375, $t375_376, $t376_377, $t377_378, $t378_379, $t379_380, $t380_381, $t381_382, $t382_383, $t383_384, $t384_385, $t385_386, $t386_387, $t387_388, $t388_389, $t389_390, $t390_391, $t391_392, $t392_393, $t393_394, $t394_395, $t395_396, $t396_397, $t397_398, $t398_399, $t399_400, $t400_401, $t401_402, $t402_403, $t403_404, $t404_405, $t405_406, $t406_407, $t407_408, $t408_409, $t409_410, $t410_411, $t411_412, $t412_413, $t413_414, $t414_415, $t415_416, $t416_417, $t417_418, $t418_419, $t419_420, $t420_421, $t421_422, $t422_423, $t423_424, $t424_425, $t425_426, $t426_427, $t427_428, $t428_429, $t429_430, $t430_431, $t431_432, $t432_433, $t433_434, $t434_435, $t435_436, $t436_437, $t437_438, $t438_439, $t439_440, $t440_441, $t441_442, $t442_443, $t443_444, $t444_445, $t445_446, $t446_447, $t447_448, $t448_449, $t449_450, $t450_451, $t451_452, $t452_453, $t453_454, $t454_455, $t455_456, $t456_457, $t457_458, $t458_459, $t459_460, $t460_461, $t461_462, $t462_463, $t463_464, $t464_465, $t465_466, $t466_467, $t467_468, $t468_469, $t469_470, $t470_471, $t471_472, $t472_473, $t473_474, $t474_475, $t475_476, $t476_477, $t477_478, $t478_479, $t479_480, $t480_481, $t481_482, $t482_483, $t483_484, $t484_485, $t485_486, $t486_487, $t487_488, $t488_489, $t489_490, $t490_491, $t491_492, $t492_493, $t493_494, $t494_495, $t495_496, $t496_497, $t497_498, $t498_499, $t499_500, $t500_501, $t501_502, $t502_503, $t503_504, $t504_505, $t505_506, $t506_507, $t507_508, $t508_509, $t509_510, $t510_511, $t511_512, $t512_513, $t513_514, $t514_515, $t515_516, $t516_517, $t517_518, $t518_519, $t519_520, $t520_521, $t521_522, $t522_523, $t523_524, $t524_525, $t525_526, $t526_527, $t527_528, $t528_529, $t529_530, $t530_531, $t531_532, $t532_533, $t533_534, $t534_535, $t535_536, $t536_537, $t537_538, $t538_539, $t539_540, $t540_541, $t541_542, $t542_543, $t543_544, $t544_545, $t545_546, $t546_547, $t547_548, $t548_549, $t549_550, $t550_551, $t551_552, $t552_553, $t553_554, $t554_555, $t555_556, $t556_557, $t557_558, $t558_559, $t559_560, $t560_561, $t561_562, $t562_563, $t563_564, $t564_565, $t565_566, $t566_567, $t567_568, $t568_569, $t569_570, $t570_571, $t571_572, $t572_573, $t573_574, $t574_575, $t575_576, $t576_577, $t577_578, $t578_579, $t579_580, $t580_581, $t581_582, $t582_583, $t583_584, $t584_585, $t585_586, $t586_587, $t587_588, $t588_589, $t589_590, $t590_591, $t591_592, $t592_593, $t593_594, $t594_595, $t595_596, $t596_597, $t597_598, $t598_599, $t599_600, $t600_601, $t601_602, $t602_603, $t603_604, $t604_605, $t605_606, $t606_607, $t607_608, $t608_609, $t609_610, $t610_611, $t611_612, $t612_613, $t613_614, $t614_615, $t615_616, $t616_617, $t617_618, $t618_619, $t619_620, $t620_621, $t621_622, $t622_623, $t623_624, $t624_625, $t625_626, $t626_627, $t627_628, $t628_629, $t629_630, $t630_631, $t631_632, $t632_633, $t633_634, $t634_635, $t635_636, $t636_637, $t637_638, $t638_639, $t639_640, $t640_641, $t641_642, $t642_643, $t643_644, $t644_645, $t645_646, $t646_647, $t647_648, $t648_649, $t649_650, $t650_651, $t651_652, $t652_653, $t653_654, $t654_655, $t655_656, $t656_657, $t657_658, $t658_659, $t659_660, $t660_661, $t661_662, $t662_663, $t663_664, $t664_665, $t665_666, $t666_667, $t667_668, $t668_669, $t669_670, $t670_671, $t671_672, $t672_673, $t673_674, $t674_675, $t675_676, $t676_677, $t677_678, $t678_679, $t679_680, $t680_681, $t681_682, $t682_683, $t683_684, $t684_685, $t685_686, $t686_687, $t687_688, $t688_689, $t689_690, $t690_691, $t691_692, $t692_693, $t693_694, $t694_695, $t695_696, $t696_697, $t697_698, $t698_699, $t699_700, $t700_701, $t701_702, $t702_703, $t703_704, $t704_705, $t705_706, $t706_707, $t707_708, $t708_709, $t709_710, $t710_711, $t711_712, $t712_713, $t713_714, $t714_715, $t715_716, $t716_717, $t717_718, $t718_719, $t719_720, $t720_721, $t721_722, $t722_723, $t723_724, $t724_725, $t725_726, $t726_727, $t727_728, $t728_729, $t729_730, $t730_731, $t731_732, $t732_733, $t733_734, $t734_735, $t735_736, $t736_737, $t737_738, $t738_739, $t739_740, $t740_741, $t741_742, $t742_743, $t743_744, $t744_745, $t745_746, $t746_747, $t747_748, $t748_749, $t749_750, $t750_751, $t751_752, $t752_753, $t753_754, $t754_755, $t755_756, $t756_757, $t757_758, $t758_759, $t759_760, $t760_761, $t761_762, $t762_763, $t763_764, $t764_765, $t765_766, $t766_767, $t767_768, $t768_769, $t769_770, $t770_771, $t771_772, $t772_773, $t773_774, $t774_775, $t775_776, $t776_777, $t777_778, $t778_779, $t779_780, $t780_781, $t781_782, $t782_783, $t783_784, $t784_785, $t785_786, $t786_787, $t787_788, $t788_789, $t789_790, $t790_791, $t791_792, $t792_793, $t793_794, $t794_795, $t795_796, $t796_797, $t797_798, $t798_799, $t799_800, $t800_801, $t801_802, $t802_803, $t803_804, $t804_805, $t805_806, $t806_807, $t807_808, $t808_809, $t809_810, $t810_811, $t811_812, $t812_813, $t813_814, $t814_815, $t815_816, $t816_817, $t817_818, $t818_819, $t819_820, $t820_821, $t821_822, $t822_823, $t823_824, $t824_825, $t825_826, $t826_827, $t827_828, $t828_829, $t829_830, $t830_831, $t831_832, $t832_833, $t833_834, $t834_835, $t835_836, $t836_837, $t837_838, $t838_839, $t839_840, $t840_841, $t841_842, $t842_843, $t843_844, $t844_845, $t845_846, $t846_847, $t847_848, $t848_849, $t849_850, $t850_851, $t851_852, $t852_853, $t853_854, $t854_855, $t855_856, $t856_857, $t857_858, $t858_859, $t859_860, $t860_861, $t861_862, $t862_863, $t863_864, $t864_865, $t865_866, $t866_867, $t867_868, $t868_869, $t869_870, $t870_871, $t871_872, $t872_873, $t873_874, $t874_875, $t875_876, $t876_877, $t877_878, $t878_879, $t879_880, $t880_881, $t881_882, $t882_883, $t883_884, $t884_885, $t885_886, $t886_887, $t887_888, $t888_889, $t889_890, $t890_891, $t891_892, $t892_893, $t893_894, $t894_895, $t895_896, $t896_897, $t897_898, $t898_899, $t899_900, $t900_901, $t901_902, $t902_903, $t903_904, $t904_905, $t905_906, $t906_907, $t907_908, $t908_909, $t909_910, $t910_911, $t911_912, $t912_913, $t913_914, $t914_915, $t915_916, $t916_917, $t917_918, $t918_919, $t919_920, $t920_921, $t921_922, $t922_923, $t923_924, $t924_925, $t925_926, $t926_927, $t927_928, $t928_929, $t929_930, $t930_931, $t931_932, $t932_933, $t933_934, $t934_935, $t935_936, $t936_937, $t937_938, $t938_939, $t939_940, $t940_941, $t941_942, $t942_943, $t943_944, $t944_945, $t945_946, $t946_947, $t947_948, $t948_949, $t949_950, $t950_951, $t951_952, $t952_953, $t953_954, $t954_955, $t955_956, $t956_957, $t957_958, $t958_959, $t959_960, $t960_961, $t961_962, $t962_963, $t963_964, $t964_965, $t965_966, $t966_967, $t967_968, $t968_969, $t969_970, $t970_971, $t971_972, $t972_973, $t973_974, $t974_975, $t975_976, $t976_977, $t977_978, $t978_979, $t979_980, $t980_981, $t981_982, $t982_983, $t983_984, $t984_985, $t985_986, $t986_987, $t987_988, $t988_989, $t989_990, $t990_991, $t991_992, $t992_993, $t993_994, $t994_995, $t995_996, $t996_997, $t997_998, $t998_999, $t999_1000, $t1000_1001, $t1001_1002, $t1002_1003, $t1003_1004, $t1004_1005, $t1005_1006, $t1006_1007, $t1007_1008, $t1008_1009, $t1009_1010, $t1010_1011, $t1011_1012, $t1012_1013, $t1013_1014, $t1014_1015, $t1015_1016, $t1016_1017, $t1017_1018, $t1018_1019, $t1019_1020, $t1020_1021, $t1021_1022, $t1022_1023, $t1023_1024, $t1024_1025, $t1025_1026, $t1026_1027, $t1027_1028, $t1028_1029, $t1029_1030, $t1030_1031, $t1031_1032, $t1032_1033, $t1033_1034, $t1034_1035, $t1035_1036, $t1036_1037, $t1037_1038, $t1038_1039, $t1039_1040, $t1040_1041, $t1041_1042, $t1042_1043, $t1043_1044, $t1044_1045, $t1045_1046, $t1046_1047, $t1047_1048, $t1048_1049, $t1049_1050, $t1050_1051, $t1051_1052, $t1052_1053, $t1053_1054, $t1054_1055, $t1055_1056, $t1056_1057, $t1057_1058, $t1058_1059, $t1059_1060, $t1060_1061, $t1061_1062, $t1062_1063, $t1063_1064, $t1064_1065, $t1065_1066, $t1066_1067, $t1067_1068, $t1068_1069, $t1069_1070, $t1070_1071, $t1071_1072, $t1072_1073, $t1073_1074, $t1074_1075, $t1075_1076, $t1076_1077, $t1077_1078, $t1078_1079, $t1079_1080, $t1080_1081, $t1081_1082, $t1082_1083, $t1083_1084, $t1084_1085, $t1085_1086, $t1086_1087, $t1087_1088, $t1088_1089, $t1089_1090, $t1090_1091, $t1091_1092, $t1092_1093, $t1093_1094, $t1094_1095, $t1095_1096, $t1096_1097, $t1097_1098, $t1098_1099, $t1099_1100, $t1100_1101, $t1101_1102, $t1102_1103, $t1103_1104, $t1104_1105, $t1105_1106, $t1106_1107, $t1107_1108, $t1108_1109, $t1109_1110, $t1110_1111, $t1111_1112, $t1112_1113, $t1113_1114, $t1114_1115, $t1115_1116, $t1116_1117, $t1117_1118, $t1118_1119, $t1119_1120, $t1120_1121, $t1121_1122, $t1122_1123, $t1123_1124, $t1124_1125, $t1125_1126, $t1126_1127, $t1127_1128, $t1128_1129, $t1129_1130, $t1130_1131, $t1131_1132, $t1132_1133, $t1133_1134, $t1134_1135, $t1135_1136, $t1136_1137, $t1137_1138, $t1138_1139, $t1139_1140, $t1140_1141, $t1141_1142, $t1142_1143, $t1143_1144, $t1144_1145, $t1145_1146, $t1146_1147, $t1147_1148, $t1148_1149, $t1149_1150, $t1150_1151, $t1151_1152, $t1152_1153, $t1153_1154, $t1154_1155, $t1155_1156, $t1156_1157, $t1157_1158, $t1158_1159, $t1159_1160, $t1160_1161, $t1161_1162, $t1162_1163, $t1163_1164, $t1164_1165, $t1165_1166, $t1166_1167, $t1167_1168, $t1168_1169, $t1169_1170, $t1170_1171, $t1171_1172, $t1172_1173, $t1173_1174, $t1174_1175, $t1175_1176, $t1176_1177, $t1177_1178, $t1178_1179, $t1179_1180, $t1180_1181, $t1181_1182, $t1182_1183, $t1183_1184, $t1184_1185, $t1185_1186, $t1186_1187, $t1187_1188, $t1188_1189, $t1189_1190, $t1190_1191, $t1191_1192, $t1192_1193, $t1193_1194, $t1194_1195, $t1195_1196, $t1196_1197, $t1197_1198, $t1198_1199, $t1199_1200, $t1200_1201, $t1201_1202, $t1202_1203, $t1203_1204, $t1204_1205, $t1205_1206, $t1206_1207, $t1207_1208, $t1208_1209, $t1209_1210, $t1210_1211, $t1211_1212, $t1212_1213, $t1213_1214, $t1214_1215, $t1215_1216, $t1216_1217, $t1217_1218, $t1218_1219, $t1219_1220, $t1220_1221, $t1221_1222, $t1222_1223, $t1223_1224, $t1224_1225, $t1225_1226, $t1226_1227, $t1227_1228, $t1228_1229, $t1229_1230, $t1230_1231, $t1231_1232, $t1232_1233, $t1233_1234, $t1234_1235, $t1235_1236, $t1236_1237, $t1237_1238, $t1238_1239, $t1239_1240, $t1240_1241, $t1241_1242, $t1242_1243, $t1243_1244, $t1244_1245, $t1245_1246, $t1246_1247, $t1247_1248, $t1248_1249, $t1249_1250, $t1250_1251, $t1251_1252, $t1252_1253, $t1253_1254, $t1254_1255, $t1255_1256, $t1256_1257, $t1257_1258, $t1258_1259, $t1259_1260, $t1260_1261, $t1261_1262, $t1262_1263, $t1263_1264, $t1264_1265, $t1265_1266, $t1266_1267, $t1267_1268, $t1268_1269, $t1269_1270, $t1270_1271, $t1271_1272, $t1272_1273, $t1273_1274, $t1274_1275, $t1275_1276, $t1276_1277, $t1277_1278, $t1278_1279, $t1279_1280, $t1280_1281, $t1281_1282, $t1282_1283, $t1283_1284, $t1284_1285, $t1285_1286, $t1286_1287, $t1287_1288, $t1288_1289, $t1289_1290, $t1290_1291, $t1291_1292, $t1292_1293, $t1293_1294, $t1294_1295, $t1295_1296, $t1296_1297, $t1297_1298, $t1298_1299, $t1299_1300, $t1300_1301, $t1301_1302, $t1302_1303, $t1303_1304, $t1304_1305, $t1305_1306, $t1306_1307, $t1307_1308, $t1308_1309, $t1309_1310, $t1310_1311, $t1311_1312, $t1312_1313, $t1313_1314, $t1314_1315, $t1315_1316, $t1316_1317, $t1317_1318, $t1318_1319, $t1319_1320, $t1320_1321, $t1321_1322, $t1322_1323, $t1323_1324, $t1324_1325, $t1325_1326, $t1326_1327, $t1327_1328, $t1328_1329, $t1329_1330, $t1330_1331, $t1331_1332, $t1332_1333, $t1333_1334, $t1334_1335, $t1335_1336, $t1336_1337, $t1337_1338, $t1338_1339, $t1339_1340, $t1340_1341, $t1341_1342, $t1342_1343, $t1343_1344, $t1344_1345, $t1345_1346, $t1346_1347, $t1347_1348, $t1348_1349, $t1349_1350, $t1350_1351, $t1351_1352, $t1352_1353, $t1353_1354, $t1354_1355, $t1355_1356, $t1356_1357, $t1357_1358, $t1358_1359, $t1359_1360, $t1360_1361, $t1361_1362, $t1362_1363, $t1363_1364, $t1364_1365, $t1365_1366, $t1366_1367, $t1367_1368, $t1368_1369, $t1369_1370, $t1370_1371, $t1371_1372, $t1372_1373, $t1373_1374, $t1374_1375, $t1375_1376, $t1376_1377, $t1377_1378, $t1378_1379, $t1379_1380, $t1380_1381, $t1381_1382, $t1382_1383, $t1383_1384, $t1384_1385, $t1385_1386, $t1386_1387, $t1387_1388, $t1388_1389, $t1389_1390, $t1390_1391, $t1391_1392, $t1392_1393, $t1393_1394, $t1394_1395, $t1395_1396, $t1396_1397, $t1397_1398, $t1398_1399, $t1399_1400, $t1400_1401, $t1401_1402, $t1402_1403, $t1403_1404, $t1404_1405, $t1405_1406, $t1406_1407, $t1407_1408, $t1408_1409, $t1409_1410, $t1410_1411, $t1411_1412, $t1412_1413, $t1413_1414, $t1414_1415, $t1415_1416, $t1416_1417, $t1417_1418, $t1418_1419, $t1419_1420, $t1420_1421, $t1421_1422, $t1422_1423, $t1423_1424, $t1424_1425, $t1425_1426, $t1426_1427, $t1427_1428, $t1428_1429, $t1429_1430, $t1430_1431, $t1431_1432, $t1432_1433, $t1433_1434, $t1434_1435, $t1435_1436, $t1436_1437, $t1437_1438, $t1438_1439, $t1439_1440, $t1440_1441, $t1441_1442, $t1442_1443, $t1443_1444, $t1444_1445, $t1445_1446;
 792    $t0_1 = errors.New('mls: invalid key size');
 793    errInvalidKeySize.$set($t0_1);
 794    $t1_2 = errors.New('mls: AEAD open failed');
 795    errAEADOpenFailed.$set($t1_2);
 796    $t2_3 = errors.New('mls: HPKE decryption failed');
 797    errHPKEDecryptFailed.$set($t2_3);
 798    kemSuiteID.$set('KEM\0 ');
 799    hpkeSuiteID.$set('HPKE\0 \0\x01\0\x03');
 800    $t3_4 = errors.New('mls: unexpected EOF');
 801    errUnexpectedEOF.$set($t3_4);
 802    $t4_5 = errors.New('mls: varint exceeds 30 bits');
 803    errVarintOverflow.$set($t4_5);
 804    $t5_6 = errors.New('mls: excess bytes after unmarshal');
 805    errExcessBytes.$set($t5_6);
 806    $t6_7 = errors.New('mls: invalid content type');
 807    errInvalidContentType.$set($t6_7);
 808    $t7_8 = errors.New('mls: invalid sender type');
 809    errInvalidSenderType.$set($t7_8);
 810    $t8_9 = errors.New('mls: invalid wire format');
 811    errInvalidWireFormat.$set($t8_9);
 812    $t9_10 = errors.New('mls: invalid protocol version');
 813    errInvalidVersion.$set($t9_10);
 814    $t10_11 = errors.New('mls: padding contains non-zero bytes');
 815    errNonZeroPadding.$set($t10_11);
 816    $t11_12 = errors.New('mls: group secrets not found for key package ref');
 817    errGroupSecretsNotFound.$set($t11_12);
 818    $t12_13 = errors.New('mls: key package version mismatch');
 819    errKeyPackageVersionMismatch.$set($t12_13);
 820    $t13_14 = errors.New('mls: key package cipher suite mismatch');
 821    errKeyPackageSuiteMismatch.$set($t13_14);
 822    $t14_15 = errors.New('mls: key package leaf node invalid source');
 823    errKeyPackageBadSource.$set($t14_15);
 824    $t15_16 = errors.New('mls: invalid key package signature');
 825    errKeyPackageBadSignature.$set($t15_16);
 826    $t16_17 = errors.New('mls: key package init key equals encryption key');
 827    errKeyPackageKeysMatch.$set($t16_17);
 828    $t17_18 = errors.New('mls: invalid PSK type');
 829    errInvalidPSKType.$set($t17_18);
 830    $t18_19 = errors.New('mls: invalid resumption PSK usage');
 831    errInvalidPSKUsage.$set($t18_19);
 832    $t19_20 = errors.New('mls: invalid proposal or ref type');
 833    errInvalidProposalOrRefType.$set($t19_20);
 834    secretLabelInit.$set('init');
 835    secretLabelSenderData.$set('sender data');
 836    secretLabelEncryption.$set('encryption');
 837    secretLabelExporter.$set('exporter');
 838    secretLabelExternal.$set('external');
 839    secretLabelConfirm.$set('confirm');
 840    secretLabelMembership.$set('membership');
 841    secretLabelResumption.$set('resumption');
 842    secretLabelAuthentication.$set('authentication');
 843    $t20_21 = errors.New('mls: invalid proposal type');
 844    errInvalidProposalType.$set($t20_21);
 845    $t21_22 = errors.New('mls: duplicate add proposal signature key');
 846    errDupAddKey.$set($t21_22);
 847    $t22_23 = errors.New('mls: update proposal from committer');
 848    errUpdateByCommitter.$set($t22_23);
 849    $t23_24 = errors.New('mls: duplicate update/remove on same leaf');
 850    errDupUpdateOrRemove.$set($t23_24);
 851    $t24_25 = errors.New('mls: remove proposal targets committer');
 852    errRemoveCommitter.$set($t24_25);
 853    $t25_26 = errors.New('mls: duplicate PSK proposal');
 854    errDupPSK.$set($t25_26);
 855    $t26_27 = errors.New('mls: duplicate group context extensions proposal');
 856    errDupGroupContextExts.$set($t26_27);
 857    $t27_28 = errors.New('mls: reinit with other proposals');
 858    errReinitWithOther.$set($t27_28);
 859    $t28_29 = errors.New('mls: external init not allowed');
 860    errExternalInitNotAllowed.$set($t28_29);
 861    ratchetLabelHandshake.$set('handshake');
 862    ratchetLabelApplication.$set('application');
 863    $t29_30 = { $value: $rt.builtin.makeSlice(5, 5, { commitSecret: null, treeHash: null, confirmedTranscriptHash: null, pskSecret: null, groupContext: null, joinerSecret: null, welcomeSecret: null, initSecret: null, senderDataSecret: null, encryptionSecret: null, exporterSecret: null, externalSecret: null, confirmationKey: null, membershipKey: null, resumptionPSK: null, epochAuthenticator: null, externalPub: null, exporterLabel: null, exporterContext: null, exporterLength: 0, exporterValue: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 864    $t30_31 = $t29_30.$get().addr(0);
 865    $t31_32 = { $get() { return $t30_31.$get().commitSecret; }, $set(v) { const obj = $t30_31.$get(); obj.commitSecret = v; $t30_31.$set(obj); } };
 866    $t32_33 = hexb('a22606222e350fd7f0937168fe7548fb06626ab143cba7611d641693b1447509');
 867    $t33_34 = { $get() { return $t30_31.$get().treeHash; }, $set(v) { const obj = $t30_31.$get(); obj.treeHash = v; $t30_31.$set(obj); } };
 868    $t34_35 = hexb('9769e302a99c457350a8e636009b12a2fee068664004606d6318eb3a1977d818');
 869    $t35_36 = { $get() { return $t30_31.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t30_31.$get(); obj.confirmedTranscriptHash = v; $t30_31.$set(obj); } };
 870    $t36_37 = hexb('5e57c9364dc71f0f71b19ffe561ab77257c490708a47e29f8f73f2b318201d2f');
 871    $t37_38 = { $get() { return $t30_31.$get().pskSecret; }, $set(v) { const obj = $t30_31.$get(); obj.pskSecret = v; $t30_31.$set(obj); } };
 872    $t38_39 = hexb('e871b247379522395689182736cb3d1e7b108d6ae934b802223975de8dc3f80b');
 873    $t39_40 = { $get() { return $t30_31.$get().groupContext; }, $set(v) { const obj = $t30_31.$get(); obj.groupContext = v; $t30_31.$set(obj); } };
 874    $t40_41 = hexb('0001000320a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e0000000000000000209769e302a99c457350a8e636009b12a2fee068664004606d6318eb3a1977d818205e57c9364dc71f0f71b19ffe561ab77257c490708a47e29f8f73f2b318201d2f00');
 875    $t41_42 = { $get() { return $t30_31.$get().joinerSecret; }, $set(v) { const obj = $t30_31.$get(); obj.joinerSecret = v; $t30_31.$set(obj); } };
 876    $t42_43 = hexb('3e28da76edc09fb9ad59fae258839c7dc46e3c092a125499959c7413a60250b2');
 877    $t43_44 = { $get() { return $t30_31.$get().welcomeSecret; }, $set(v) { const obj = $t30_31.$get(); obj.welcomeSecret = v; $t30_31.$set(obj); } };
 878    $t44_45 = hexb('b0defbdd2232224b0c0427e8efa80f011f7813291dca783433f2da1431620bbc');
 879    $t45_46 = { $get() { return $t30_31.$get().initSecret; }, $set(v) { const obj = $t30_31.$get(); obj.initSecret = v; $t30_31.$set(obj); } };
 880    $t46_47 = hexb('418b197eafd925ebbf4bfd94d650aa83b1a11d6d02f33c2cc81631c6734f69d9');
 881    $t47_48 = { $get() { return $t30_31.$get().senderDataSecret; }, $set(v) { const obj = $t30_31.$get(); obj.senderDataSecret = v; $t30_31.$set(obj); } };
 882    $t48_49 = hexb('de1df3a74bbcfc7fcc631213a20c1b1842860eab8e6f0c864dcfb541cd42cf24');
 883    $t49_50 = { $get() { return $t30_31.$get().encryptionSecret; }, $set(v) { const obj = $t30_31.$get(); obj.encryptionSecret = v; $t30_31.$set(obj); } };
 884    $t50_51 = hexb('ffcc3d4a757224eaf62c124f8e7def12c0db74740cf494c9f56fa7dd07214947');
 885    $t51_52 = { $get() { return $t30_31.$get().exporterSecret; }, $set(v) { const obj = $t30_31.$get(); obj.exporterSecret = v; $t30_31.$set(obj); } };
 886    $t52_53 = hexb('27518b380b39834affecb08780ee9709627859d5f6f37994e8783791004485cb');
 887    $t53_54 = { $get() { return $t30_31.$get().externalSecret; }, $set(v) { const obj = $t30_31.$get(); obj.externalSecret = v; $t30_31.$set(obj); } };
 888    $t54_55 = hexb('46f51f54ce4c3457ee5681925b9d1a282de166f04e28a4a316404bd14dda3138');
 889    $t55_56 = { $get() { return $t30_31.$get().confirmationKey; }, $set(v) { const obj = $t30_31.$get(); obj.confirmationKey = v; $t30_31.$set(obj); } };
 890    $t56_57 = hexb('e8bdff522e2675c7e0582321fbeb7e61763b1f88e7ded3c57ea78c691e1d0b93');
 891    $t57_58 = { $get() { return $t30_31.$get().membershipKey; }, $set(v) { const obj = $t30_31.$get(); obj.membershipKey = v; $t30_31.$set(obj); } };
 892    $t58_59 = hexb('6839abba79aaeb82385397612fb90cbea3bf8d427806cb3f0bfe5793c1a42fc9');
 893    $t59_60 = { $get() { return $t30_31.$get().resumptionPSK; }, $set(v) { const obj = $t30_31.$get(); obj.resumptionPSK = v; $t30_31.$set(obj); } };
 894    $t60_61 = hexb('244b05004ced1a7d1dc3da6a7541e9b180b6ffe41cc6e24d63c5c9c0742b4870');
 895    $t61_62 = { $get() { return $t30_31.$get().epochAuthenticator; }, $set(v) { const obj = $t30_31.$get(); obj.epochAuthenticator = v; $t30_31.$set(obj); } };
 896    $t62_63 = hexb('f68f6735aeeb97331d674ef4f580e11352beff543b3b6688a01a1bab97d42f26');
 897    $t63_64 = { $get() { return $t30_31.$get().externalPub; }, $set(v) { const obj = $t30_31.$get(); obj.externalPub = v; $t30_31.$set(obj); } };
 898    $t64_65 = hexb('8206ea1eb4d8d5730a2737f7470718b9d00c2276d24a98ac4e6d7ef52cba0631');
 899    $t65_66 = { $get() { return $t30_31.$get().exporterLabel; }, $set(v) { const obj = $t30_31.$get(); obj.exporterLabel = v; $t30_31.$set(obj); } };
 900    $t66_67 = hexb('9ba13d54ecdec7cbefcb47b4268d7b1990fabc6d6e67681e167959389d84e4e4');
 901    $t67_68 = { $get() { return $t30_31.$get().exporterContext; }, $set(v) { const obj = $t30_31.$get(); obj.exporterContext = v; $t30_31.$set(obj); } };
 902    $t68_69 = hexb('884f1af892ab002f5be4c5d5081ade9e0e6418c6ea7a9a92e90534f19dcef785');
 903    $t69_70 = { $get() { return $t30_31.$get().exporterLength; }, $set(v) { const obj = $t30_31.$get(); obj.exporterLength = v; $t30_31.$set(obj); } };
 904    $t70_71 = { $get() { return $t30_31.$get().exporterValue; }, $set(v) { const obj = $t30_31.$get(); obj.exporterValue = v; $t30_31.$set(obj); } };
 905    $t71_72 = hexb('623c858acd2728c5b860a77ae0cde77fa8aef14e9ac124464cab06bbc3cf3635');
 906    $t31_32.$set($t32_33);
 907    $t33_34.$set($t34_35);
 908    $t35_36.$set($t36_37);
 909    $t37_38.$set($t38_39);
 910    $t39_40.$set($t40_41);
 911    $t41_42.$set($t42_43);
 912    $t43_44.$set($t44_45);
 913    $t45_46.$set($t46_47);
 914    $t47_48.$set($t48_49);
 915    $t49_50.$set($t50_51);
 916    $t51_52.$set($t52_53);
 917    $t53_54.$set($t54_55);
 918    $t55_56.$set($t56_57);
 919    $t57_58.$set($t58_59);
 920    $t59_60.$set($t60_61);
 921    $t61_62.$set($t62_63);
 922    $t63_64.$set($t64_65);
 923    $t65_66.$set($t66_67);
 924    $t67_68.$set($t68_69);
 925    $t69_70.$set(32);
 926    $t70_71.$set($t71_72);
 927    $t72_73 = $t29_30.$get().addr(1);
 928    $t73_74 = { $get() { return $t72_73.$get().commitSecret; }, $set(v) { const obj = $t72_73.$get(); obj.commitSecret = v; $t72_73.$set(obj); } };
 929    $t74_75 = hexb('7b3027aa5d2224aab7e2a18660bbf57930e2e21d95e02b849c704d970e3e28c5');
 930    $t75_76 = { $get() { return $t72_73.$get().treeHash; }, $set(v) { const obj = $t72_73.$get(); obj.treeHash = v; $t72_73.$set(obj); } };
 931    $t76_77 = hexb('826a4d3b0956277ce5e272e4d18fdca023ffb63ea4cea636e34cc837ae7c5c5d');
 932    $t77_78 = { $get() { return $t72_73.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t72_73.$get(); obj.confirmedTranscriptHash = v; $t72_73.$set(obj); } };
 933    $t78_79 = hexb('14a2985ea47db0685924a74d47ac8a08ec241f843b536dd1348e3ffb2d78184e');
 934    $t79_80 = { $get() { return $t72_73.$get().pskSecret; }, $set(v) { const obj = $t72_73.$get(); obj.pskSecret = v; $t72_73.$set(obj); } };
 935    $t80_81 = hexb('ca7a68f2a8a52147d70f1eb7195de968d2e182b93596bc5a61393861e91180e4');
 936    $t81_82 = { $get() { return $t72_73.$get().groupContext; }, $set(v) { const obj = $t72_73.$get(); obj.groupContext = v; $t72_73.$set(obj); } };
 937    $t82_83 = hexb('0001000320a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e000000000000000120826a4d3b0956277ce5e272e4d18fdca023ffb63ea4cea636e34cc837ae7c5c5d2014a2985ea47db0685924a74d47ac8a08ec241f843b536dd1348e3ffb2d78184e00');
 938    $t83_84 = { $get() { return $t72_73.$get().joinerSecret; }, $set(v) { const obj = $t72_73.$get(); obj.joinerSecret = v; $t72_73.$set(obj); } };
 939    $t84_85 = hexb('f589c7bc9de6fac35e546bbf4ac89632980158e40336cdf89165b526a482f228');
 940    $t85_86 = { $get() { return $t72_73.$get().welcomeSecret; }, $set(v) { const obj = $t72_73.$get(); obj.welcomeSecret = v; $t72_73.$set(obj); } };
 941    $t86_87 = hexb('f577c28c938b9f57224e5f208ee8a64f65a4fb734bf8f74f44f0020f55e22a20');
 942    $t87_88 = { $get() { return $t72_73.$get().initSecret; }, $set(v) { const obj = $t72_73.$get(); obj.initSecret = v; $t72_73.$set(obj); } };
 943    $t88_89 = hexb('6947180097f92f021d5d0739568d9e41647ebe26d754f679f0a883013165b6c9');
 944    $t89_90 = { $get() { return $t72_73.$get().senderDataSecret; }, $set(v) { const obj = $t72_73.$get(); obj.senderDataSecret = v; $t72_73.$set(obj); } };
 945    $t90_91 = hexb('c6b20eeb67246447456fe4d4dd9ee8e6e88e710cf766f862440e9a7b4789be81');
 946    $t91_92 = { $get() { return $t72_73.$get().encryptionSecret; }, $set(v) { const obj = $t72_73.$get(); obj.encryptionSecret = v; $t72_73.$set(obj); } };
 947    $t92_93 = hexb('bd364a14dbe3e9d14f6573d2df1ee014cb0bfcadd948f257d35091fba8735d3a');
 948    $t93_94 = { $get() { return $t72_73.$get().exporterSecret; }, $set(v) { const obj = $t72_73.$get(); obj.exporterSecret = v; $t72_73.$set(obj); } };
 949    $t94_95 = hexb('eac27705796cb8ff5867d5883f111f8a9990de3e69befc5d69bf2d02f539b863');
 950    $t95_96 = { $get() { return $t72_73.$get().externalSecret; }, $set(v) { const obj = $t72_73.$get(); obj.externalSecret = v; $t72_73.$set(obj); } };
 951    $t96_97 = hexb('e7b78eda3dc2d13c3aee74426a6aa6e8a90fb95992be66b5eeb8cdc0b08c6f1a');
 952    $t97_98 = { $get() { return $t72_73.$get().confirmationKey; }, $set(v) { const obj = $t72_73.$get(); obj.confirmationKey = v; $t72_73.$set(obj); } };
 953    $t98_99 = hexb('839d6621c61a40a14d30a5042aa9a530e267f825734d485ac9e415f19e35d9dd');
 954    $t99_100 = { $get() { return $t72_73.$get().membershipKey; }, $set(v) { const obj = $t72_73.$get(); obj.membershipKey = v; $t72_73.$set(obj); } };
 955    $t100_101 = hexb('d835002d8367b0c81e7d0159527b12a24870dbb8efc8fb299ad16b72b2199a6c');
 956    $t101_102 = { $get() { return $t72_73.$get().resumptionPSK; }, $set(v) { const obj = $t72_73.$get(); obj.resumptionPSK = v; $t72_73.$set(obj); } };
 957    $t102_103 = hexb('e2cc0c5444b77af2d15a8d5adf2ce9fd051429758ab80bd247d80f6c44982a64');
 958    $t103_104 = { $get() { return $t72_73.$get().epochAuthenticator; }, $set(v) { const obj = $t72_73.$get(); obj.epochAuthenticator = v; $t72_73.$set(obj); } };
 959    $t104_105 = hexb('acd66baee8206cca6b60a71c9db4f1ae97718db857e267c352d495f29ff0776b');
 960    $t105_106 = { $get() { return $t72_73.$get().externalPub; }, $set(v) { const obj = $t72_73.$get(); obj.externalPub = v; $t72_73.$set(obj); } };
 961    $t106_107 = hexb('e2daac515f8378d164bf51746f4143b54d7a8d574f4ae1081b5d1d0ba88fe615');
 962    $t107_108 = { $get() { return $t72_73.$get().exporterLabel; }, $set(v) { const obj = $t72_73.$get(); obj.exporterLabel = v; $t72_73.$set(obj); } };
 963    $t108_109 = hexb('ed66d7f1da52171ac9448f0f902edcfefa4ebbda843a43bd3d173cb7c5b4331e');
 964    $t109_110 = { $get() { return $t72_73.$get().exporterContext; }, $set(v) { const obj = $t72_73.$get(); obj.exporterContext = v; $t72_73.$set(obj); } };
 965    $t110_111 = hexb('02dc18fc5bc4d9093cf41fa0053521653775b123784d40ac7d46cc5a72ef4d46');
 966    $t111_112 = { $get() { return $t72_73.$get().exporterLength; }, $set(v) { const obj = $t72_73.$get(); obj.exporterLength = v; $t72_73.$set(obj); } };
 967    $t112_113 = { $get() { return $t72_73.$get().exporterValue; }, $set(v) { const obj = $t72_73.$get(); obj.exporterValue = v; $t72_73.$set(obj); } };
 968    $t113_114 = hexb('f6ae0abce67ed43e7cda3c04774278930c96bb1abfa77707cb7ac3351a9ded5f');
 969    $t73_74.$set($t74_75);
 970    $t75_76.$set($t76_77);
 971    $t77_78.$set($t78_79);
 972    $t79_80.$set($t80_81);
 973    $t81_82.$set($t82_83);
 974    $t83_84.$set($t84_85);
 975    $t85_86.$set($t86_87);
 976    $t87_88.$set($t88_89);
 977    $t89_90.$set($t90_91);
 978    $t91_92.$set($t92_93);
 979    $t93_94.$set($t94_95);
 980    $t95_96.$set($t96_97);
 981    $t97_98.$set($t98_99);
 982    $t99_100.$set($t100_101);
 983    $t101_102.$set($t102_103);
 984    $t103_104.$set($t104_105);
 985    $t105_106.$set($t106_107);
 986    $t107_108.$set($t108_109);
 987    $t109_110.$set($t110_111);
 988    $t111_112.$set(32);
 989    $t112_113.$set($t113_114);
 990    $t114_115 = $t29_30.$get().addr(2);
 991    $t115_116 = { $get() { return $t114_115.$get().commitSecret; }, $set(v) { const obj = $t114_115.$get(); obj.commitSecret = v; $t114_115.$set(obj); } };
 992    $t116_117 = hexb('d2825785628f1ea7404d6761f27272af5f99416ea28cc9d335df47ed2b0097d4');
 993    $t117_118 = { $get() { return $t114_115.$get().treeHash; }, $set(v) { const obj = $t114_115.$get(); obj.treeHash = v; $t114_115.$set(obj); } };
 994    $t118_119 = hexb('661ce3bd9ebec8608fa97bf5413a4588f50a8f9face225ec67a6d29c862b2516');
 995    $t119_120 = { $get() { return $t114_115.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t114_115.$get(); obj.confirmedTranscriptHash = v; $t114_115.$set(obj); } };
 996    $t120_121 = hexb('b5d7ec8c9d8b6a28c9467fe4918844be6acc08e98c1e10c71122e95f9a5e78c5');
 997    $t121_122 = { $get() { return $t114_115.$get().pskSecret; }, $set(v) { const obj = $t114_115.$get(); obj.pskSecret = v; $t114_115.$set(obj); } };
 998    $t122_123 = hexb('599aa672406270914c60d30b7a31d2f2e217c3b5298b279b79e34c65a60e5f24');
 999    $t123_124 = { $get() { return $t114_115.$get().groupContext; }, $set(v) { const obj = $t114_115.$get(); obj.groupContext = v; $t114_115.$set(obj); } };
1000    $t124_125 = hexb('0001000320a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e000000000000000220661ce3bd9ebec8608fa97bf5413a4588f50a8f9face225ec67a6d29c862b251620b5d7ec8c9d8b6a28c9467fe4918844be6acc08e98c1e10c71122e95f9a5e78c500');
1001    $t125_126 = { $get() { return $t114_115.$get().joinerSecret; }, $set(v) { const obj = $t114_115.$get(); obj.joinerSecret = v; $t114_115.$set(obj); } };
1002    $t126_127 = hexb('2895d244e83e8f29025bc990bedff61ce114281e4ff22362c4ddd1646e0fd052');
1003    $t127_128 = { $get() { return $t114_115.$get().welcomeSecret; }, $set(v) { const obj = $t114_115.$get(); obj.welcomeSecret = v; $t114_115.$set(obj); } };
1004    $t128_129 = hexb('58a7d5da2ab6a8cbebb89c34741c52ce3f4aab1b0ca3fe53f47c25f77de9576c');
1005    $t129_130 = { $get() { return $t114_115.$get().initSecret; }, $set(v) { const obj = $t114_115.$get(); obj.initSecret = v; $t114_115.$set(obj); } };
1006    $t130_131 = hexb('300b71ecfff9459934b4ede696bc0ee9858aa70a89c0e934fadad97383347e4c');
1007    $t131_132 = { $get() { return $t114_115.$get().senderDataSecret; }, $set(v) { const obj = $t114_115.$get(); obj.senderDataSecret = v; $t114_115.$set(obj); } };
1008    $t132_133 = hexb('498d6f93ac48b8a8d3ba1321b4baf760fe59d486be53208ad0c2f57a34ce6263');
1009    $t133_134 = { $get() { return $t114_115.$get().encryptionSecret; }, $set(v) { const obj = $t114_115.$get(); obj.encryptionSecret = v; $t114_115.$set(obj); } };
1010    $t134_135 = hexb('a61b4a90c66febc563f95e7af4417e1be5e33181605b2b9f8725ea30b184928e');
1011    $t135_136 = { $get() { return $t114_115.$get().exporterSecret; }, $set(v) { const obj = $t114_115.$get(); obj.exporterSecret = v; $t114_115.$set(obj); } };
1012    $t136_137 = hexb('fdac6dcb3929509f612106168550370afd92beeaf838bc09bad0a4db09c03b4e');
1013    $t137_138 = { $get() { return $t114_115.$get().externalSecret; }, $set(v) { const obj = $t114_115.$get(); obj.externalSecret = v; $t114_115.$set(obj); } };
1014    $t138_139 = hexb('072b9f6d87abb70c908e0808fb4f60e0680426d12c64d4aa8389bf6c423b6cc3');
1015    $t139_140 = { $get() { return $t114_115.$get().confirmationKey; }, $set(v) { const obj = $t114_115.$get(); obj.confirmationKey = v; $t114_115.$set(obj); } };
1016    $t140_141 = hexb('3cdd1841fe689fad3c4afca9d78e20506cbc377c34e67245721448d944e63ace');
1017    $t141_142 = { $get() { return $t114_115.$get().membershipKey; }, $set(v) { const obj = $t114_115.$get(); obj.membershipKey = v; $t114_115.$set(obj); } };
1018    $t142_143 = hexb('08caa1215ef79aab5fb229c286b82c2a5702932aeb68190496b18cf537c86e5c');
1019    $t143_144 = { $get() { return $t114_115.$get().resumptionPSK; }, $set(v) { const obj = $t114_115.$get(); obj.resumptionPSK = v; $t114_115.$set(obj); } };
1020    $t144_145 = hexb('887ca27b1d9f00bb88d60a6ecb86df34bf500bf0f755e7d02b6fd14457fff9d9');
1021    $t145_146 = { $get() { return $t114_115.$get().epochAuthenticator; }, $set(v) { const obj = $t114_115.$get(); obj.epochAuthenticator = v; $t114_115.$set(obj); } };
1022    $t146_147 = hexb('1b9bbd13d92e2b4d600af772e340c8130b5704ad81cf17766ff5649603d058b3');
1023    $t147_148 = { $get() { return $t114_115.$get().externalPub; }, $set(v) { const obj = $t114_115.$get(); obj.externalPub = v; $t114_115.$set(obj); } };
1024    $t148_149 = hexb('c32e86b676cdcf9daf07823faad7bf0d650ea5b1593bf816573236a0bc744571');
1025    $t149_150 = { $get() { return $t114_115.$get().exporterLabel; }, $set(v) { const obj = $t114_115.$get(); obj.exporterLabel = v; $t114_115.$set(obj); } };
1026    $t150_151 = hexb('06f549e9bf966d7b7135b6ef6d4e3032a1c720adf0281c3ef1c0beac0da88621');
1027    $t151_152 = { $get() { return $t114_115.$get().exporterContext; }, $set(v) { const obj = $t114_115.$get(); obj.exporterContext = v; $t114_115.$set(obj); } };
1028    $t152_153 = hexb('b0fa7e3f0f2199278a55267d551d43946bbfc6d847632867dd86abd1217982a5');
1029    $t153_154 = { $get() { return $t114_115.$get().exporterLength; }, $set(v) { const obj = $t114_115.$get(); obj.exporterLength = v; $t114_115.$set(obj); } };
1030    $t154_155 = { $get() { return $t114_115.$get().exporterValue; }, $set(v) { const obj = $t114_115.$get(); obj.exporterValue = v; $t114_115.$set(obj); } };
1031    $t155_156 = hexb('58560324e8b45296b31c44f250df77194b977cd4f9b1c0fd55b15cd260a3d582');
1032    $t115_116.$set($t116_117);
1033    $t117_118.$set($t118_119);
1034    $t119_120.$set($t120_121);
1035    $t121_122.$set($t122_123);
1036    $t123_124.$set($t124_125);
1037    $t125_126.$set($t126_127);
1038    $t127_128.$set($t128_129);
1039    $t129_130.$set($t130_131);
1040    $t131_132.$set($t132_133);
1041    $t133_134.$set($t134_135);
1042    $t135_136.$set($t136_137);
1043    $t137_138.$set($t138_139);
1044    $t139_140.$set($t140_141);
1045    $t141_142.$set($t142_143);
1046    $t143_144.$set($t144_145);
1047    $t145_146.$set($t146_147);
1048    $t147_148.$set($t148_149);
1049    $t149_150.$set($t150_151);
1050    $t151_152.$set($t152_153);
1051    $t153_154.$set(32);
1052    $t154_155.$set($t155_156);
1053    $t156_157 = $t29_30.$get().addr(3);
1054    $t157_158 = { $get() { return $t156_157.$get().commitSecret; }, $set(v) { const obj = $t156_157.$get(); obj.commitSecret = v; $t156_157.$set(obj); } };
1055    $t158_159 = hexb('f652baa9151c9719ecb2716240a2a5ed9aeede1df19de0de862ded166a724783');
1056    $t159_160 = { $get() { return $t156_157.$get().treeHash; }, $set(v) { const obj = $t156_157.$get(); obj.treeHash = v; $t156_157.$set(obj); } };
1057    $t160_161 = hexb('08225ed7f3b0b8aa9f03b24395ed8ee7002d38209fddd7d941dd8ac629ac8a62');
1058    $t161_162 = { $get() { return $t156_157.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t156_157.$get(); obj.confirmedTranscriptHash = v; $t156_157.$set(obj); } };
1059    $t162_163 = hexb('dab8c2f8ec97a0e5a137c55a5b9ac1ccdf5ae8329810e98e0bc3930aae0b4be1');
1060    $t163_164 = { $get() { return $t156_157.$get().pskSecret; }, $set(v) { const obj = $t156_157.$get(); obj.pskSecret = v; $t156_157.$set(obj); } };
1061    $t164_165 = hexb('4106e07ffe8f0bfdbfd317d92e37a1fc6c4d1fba53ee054b7acf8587013d533b');
1062    $t165_166 = { $get() { return $t156_157.$get().groupContext; }, $set(v) { const obj = $t156_157.$get(); obj.groupContext = v; $t156_157.$set(obj); } };
1063    $t166_167 = hexb('0001000320a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e00000000000000032008225ed7f3b0b8aa9f03b24395ed8ee7002d38209fddd7d941dd8ac629ac8a6220dab8c2f8ec97a0e5a137c55a5b9ac1ccdf5ae8329810e98e0bc3930aae0b4be100');
1064    $t167_168 = { $get() { return $t156_157.$get().joinerSecret; }, $set(v) { const obj = $t156_157.$get(); obj.joinerSecret = v; $t156_157.$set(obj); } };
1065    $t168_169 = hexb('02a17a6d0995432062b8825fa071fabefb0aecadbe9864d229e82ea73abaf71d');
1066    $t169_170 = { $get() { return $t156_157.$get().welcomeSecret; }, $set(v) { const obj = $t156_157.$get(); obj.welcomeSecret = v; $t156_157.$set(obj); } };
1067    $t170_171 = hexb('c935f0face4e94e6f7e886a9df715bfcdcdc3d3a546601fc4ffa7f46b10904f6');
1068    $t171_172 = { $get() { return $t156_157.$get().initSecret; }, $set(v) { const obj = $t156_157.$get(); obj.initSecret = v; $t156_157.$set(obj); } };
1069    $t172_173 = hexb('561d5fe3f86642d8b9782d6227bb4b0dae805e6930432ed1b45334e14ff5225a');
1070    $t173_174 = { $get() { return $t156_157.$get().senderDataSecret; }, $set(v) { const obj = $t156_157.$get(); obj.senderDataSecret = v; $t156_157.$set(obj); } };
1071    $t174_175 = hexb('785fd9a3bbe87178b2b26aa494851d0528a1f39430c1b787c4d48ccacb1012ce');
1072    $t175_176 = { $get() { return $t156_157.$get().encryptionSecret; }, $set(v) { const obj = $t156_157.$get(); obj.encryptionSecret = v; $t156_157.$set(obj); } };
1073    $t176_177 = hexb('72842779a3f83949693f20efb2a64c60a43a8e5b12981d92b43660508869d9d9');
1074    $t177_178 = { $get() { return $t156_157.$get().exporterSecret; }, $set(v) { const obj = $t156_157.$get(); obj.exporterSecret = v; $t156_157.$set(obj); } };
1075    $t178_179 = hexb('db2749738091f49e479a570001f2daa7dc4aeeca2e1cfbb60f7d983b3dfd427c');
1076    $t179_180 = { $get() { return $t156_157.$get().externalSecret; }, $set(v) { const obj = $t156_157.$get(); obj.externalSecret = v; $t156_157.$set(obj); } };
1077    $t180_181 = hexb('75edc2d917753b5238d08a8549150672d8730731fddcd1aac9ac4dcdffab1fe6');
1078    $t181_182 = { $get() { return $t156_157.$get().confirmationKey; }, $set(v) { const obj = $t156_157.$get(); obj.confirmationKey = v; $t156_157.$set(obj); } };
1079    $t182_183 = hexb('b531f478b39a21ff975491f292bd971764b1c99ec5bec5ba5e12f2922fa13c9d');
1080    $t183_184 = { $get() { return $t156_157.$get().membershipKey; }, $set(v) { const obj = $t156_157.$get(); obj.membershipKey = v; $t156_157.$set(obj); } };
1081    $t184_185 = hexb('d68c57291ad3a57f20ace9386e52187581a3de9820938bd0424696287df64622');
1082    $t185_186 = { $get() { return $t156_157.$get().resumptionPSK; }, $set(v) { const obj = $t156_157.$get(); obj.resumptionPSK = v; $t156_157.$set(obj); } };
1083    $t186_187 = hexb('89b4a85bf900b6ba890a89eae531bb58c5b3b48f406918846a2d7195088edf04');
1084    $t187_188 = { $get() { return $t156_157.$get().epochAuthenticator; }, $set(v) { const obj = $t156_157.$get(); obj.epochAuthenticator = v; $t156_157.$set(obj); } };
1085    $t188_189 = hexb('5c811e1b167d6ccbbd1ddafe4df66f833e418cadd562e23e6ff7d8c8103f8ca3');
1086    $t189_190 = { $get() { return $t156_157.$get().externalPub; }, $set(v) { const obj = $t156_157.$get(); obj.externalPub = v; $t156_157.$set(obj); } };
1087    $t190_191 = hexb('1e8f03db3e2f5d6fa885455904f726f426354a441c5317a271417360ef7b9d2e');
1088    $t191_192 = { $get() { return $t156_157.$get().exporterLabel; }, $set(v) { const obj = $t156_157.$get(); obj.exporterLabel = v; $t156_157.$set(obj); } };
1089    $t192_193 = hexb('b76193af29eadc6e16c66493e2a4ef8219aad79986b6d4911493741ec1e666cc');
1090    $t193_194 = { $get() { return $t156_157.$get().exporterContext; }, $set(v) { const obj = $t156_157.$get(); obj.exporterContext = v; $t156_157.$set(obj); } };
1091    $t194_195 = hexb('941db06073e76050679d33cf1f0ec33de3e5a2cd00cb738b54c0dd90de251cdd');
1092    $t195_196 = { $get() { return $t156_157.$get().exporterLength; }, $set(v) { const obj = $t156_157.$get(); obj.exporterLength = v; $t156_157.$set(obj); } };
1093    $t196_197 = { $get() { return $t156_157.$get().exporterValue; }, $set(v) { const obj = $t156_157.$get(); obj.exporterValue = v; $t156_157.$set(obj); } };
1094    $t197_198 = hexb('4e2dd79d84c728b7503cee9acbe1e057523d0ff973d81e011905b5b581d2adb3');
1095    $t157_158.$set($t158_159);
1096    $t159_160.$set($t160_161);
1097    $t161_162.$set($t162_163);
1098    $t163_164.$set($t164_165);
1099    $t165_166.$set($t166_167);
1100    $t167_168.$set($t168_169);
1101    $t169_170.$set($t170_171);
1102    $t171_172.$set($t172_173);
1103    $t173_174.$set($t174_175);
1104    $t175_176.$set($t176_177);
1105    $t177_178.$set($t178_179);
1106    $t179_180.$set($t180_181);
1107    $t181_182.$set($t182_183);
1108    $t183_184.$set($t184_185);
1109    $t185_186.$set($t186_187);
1110    $t187_188.$set($t188_189);
1111    $t189_190.$set($t190_191);
1112    $t191_192.$set($t192_193);
1113    $t193_194.$set($t194_195);
1114    $t195_196.$set(32);
1115    $t196_197.$set($t197_198);
1116    $t198_199 = $t29_30.$get().addr(4);
1117    $t199_200 = { $get() { return $t198_199.$get().commitSecret; }, $set(v) { const obj = $t198_199.$get(); obj.commitSecret = v; $t198_199.$set(obj); } };
1118    $t200_201 = hexb('50fb68cdd31ff76b8d86b88b80124534d845cf2a835411b002b40b7b08d28278');
1119    $t201_202 = { $get() { return $t198_199.$get().treeHash; }, $set(v) { const obj = $t198_199.$get(); obj.treeHash = v; $t198_199.$set(obj); } };
1120    $t202_203 = hexb('918e07d9bfd965f880f860830b24427d9200fcac485e973b4943e67d322c1682');
1121    $t203_204 = { $get() { return $t198_199.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t198_199.$get(); obj.confirmedTranscriptHash = v; $t198_199.$set(obj); } };
1122    $t204_205 = hexb('5e88437e7e8e91582bc440a375e93280417c94c5e38db8537963dd3750dd3e16');
1123    $t205_206 = { $get() { return $t198_199.$get().pskSecret; }, $set(v) { const obj = $t198_199.$get(); obj.pskSecret = v; $t198_199.$set(obj); } };
1124    $t206_207 = hexb('c7e0f52b886962b1edde9e75b9ecafa0d8efeffb474732a3da298c470f1d1445');
1125    $t207_208 = { $get() { return $t198_199.$get().groupContext; }, $set(v) { const obj = $t198_199.$get(); obj.groupContext = v; $t198_199.$set(obj); } };
1126    $t208_209 = hexb('0001000320a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e000000000000000420918e07d9bfd965f880f860830b24427d9200fcac485e973b4943e67d322c1682205e88437e7e8e91582bc440a375e93280417c94c5e38db8537963dd3750dd3e1600');
1127    $t209_210 = { $get() { return $t198_199.$get().joinerSecret; }, $set(v) { const obj = $t198_199.$get(); obj.joinerSecret = v; $t198_199.$set(obj); } };
1128    $t210_211 = hexb('e3e8700db2c43917c6e36dae28732b21c285f9af371f66a5a9f5f9a70c65e1b2');
1129    $t211_212 = { $get() { return $t198_199.$get().welcomeSecret; }, $set(v) { const obj = $t198_199.$get(); obj.welcomeSecret = v; $t198_199.$set(obj); } };
1130    $t212_213 = hexb('6f6494718441537ce4cea94ad29fb66d3048c711e61f7f8aefccf4f6d61fcd86');
1131    $t213_214 = { $get() { return $t198_199.$get().initSecret; }, $set(v) { const obj = $t198_199.$get(); obj.initSecret = v; $t198_199.$set(obj); } };
1132    $t214_215 = hexb('20315bc816babd2c11b78bbcac01baa787136a26baf80adc0753d163c9b09d89');
1133    $t215_216 = { $get() { return $t198_199.$get().senderDataSecret; }, $set(v) { const obj = $t198_199.$get(); obj.senderDataSecret = v; $t198_199.$set(obj); } };
1134    $t216_217 = hexb('1535616e267425ab17e48a8607d9edc196601579303592885db62c71efbbdcbf');
1135    $t217_218 = { $get() { return $t198_199.$get().encryptionSecret; }, $set(v) { const obj = $t198_199.$get(); obj.encryptionSecret = v; $t198_199.$set(obj); } };
1136    $t218_219 = hexb('7e893a0ef9b0b4b1708213996b2ae8c8382a50fbce6caa4496e07093c36de351');
1137    $t219_220 = { $get() { return $t198_199.$get().exporterSecret; }, $set(v) { const obj = $t198_199.$get(); obj.exporterSecret = v; $t198_199.$set(obj); } };
1138    $t220_221 = hexb('7cd91ce426cada365fc15f9fb060c360ad81bc350096b404bc3d66a7d64a00cc');
1139    $t221_222 = { $get() { return $t198_199.$get().externalSecret; }, $set(v) { const obj = $t198_199.$get(); obj.externalSecret = v; $t198_199.$set(obj); } };
1140    $t222_223 = hexb('b3f67ce4547ae1e886e2275aa3760146d55cc9a1746bd36b0291c127368c7c38');
1141    $t223_224 = { $get() { return $t198_199.$get().confirmationKey; }, $set(v) { const obj = $t198_199.$get(); obj.confirmationKey = v; $t198_199.$set(obj); } };
1142    $t224_225 = hexb('9a34f258b8c3a3733d734a3c84ebf3683f34fa67760eeabf1e9a9b329a733d56');
1143    $t225_226 = { $get() { return $t198_199.$get().membershipKey; }, $set(v) { const obj = $t198_199.$get(); obj.membershipKey = v; $t198_199.$set(obj); } };
1144    $t226_227 = hexb('3dadf8dbb09c5c1e25c565dc7cffc494055e517b0129e0bc83fcbb7280e9ae7f');
1145    $t227_228 = { $get() { return $t198_199.$get().resumptionPSK; }, $set(v) { const obj = $t198_199.$get(); obj.resumptionPSK = v; $t198_199.$set(obj); } };
1146    $t228_229 = hexb('e914d45c8c1b06670b926ae56a7908c93d2721cc562f82778044e9888dc9e2d1');
1147    $t229_230 = { $get() { return $t198_199.$get().epochAuthenticator; }, $set(v) { const obj = $t198_199.$get(); obj.epochAuthenticator = v; $t198_199.$set(obj); } };
1148    $t230_231 = hexb('d59f86014e0c306be049bd9f2dbae06a3d225486e74042dba30238e4d72ab89e');
1149    $t231_232 = { $get() { return $t198_199.$get().externalPub; }, $set(v) { const obj = $t198_199.$get(); obj.externalPub = v; $t198_199.$set(obj); } };
1150    $t232_233 = hexb('8236c9f14f1d5bc27635be4da2795b5367660879f5afe3951b7f1eb7b69fd769');
1151    $t233_234 = { $get() { return $t198_199.$get().exporterLabel; }, $set(v) { const obj = $t198_199.$get(); obj.exporterLabel = v; $t198_199.$set(obj); } };
1152    $t234_235 = hexb('cc9c4b25b0bd69250b6e4f9908d1b170bf62fe8cc11ad36d33e602324ac0662a');
1153    $t235_236 = { $get() { return $t198_199.$get().exporterContext; }, $set(v) { const obj = $t198_199.$get(); obj.exporterContext = v; $t198_199.$set(obj); } };
1154    $t236_237 = hexb('a0f762fc82d5e421d8fdf8a317b2fd463008c625bf19db7fbfa4ac778b5106a2');
1155    $t237_238 = { $get() { return $t198_199.$get().exporterLength; }, $set(v) { const obj = $t198_199.$get(); obj.exporterLength = v; $t198_199.$set(obj); } };
1156    $t238_239 = { $get() { return $t198_199.$get().exporterValue; }, $set(v) { const obj = $t198_199.$get(); obj.exporterValue = v; $t198_199.$set(obj); } };
1157    $t239_240 = hexb('b07890e33ce8c281d07c7228c186c48f882a70967f30958a1cc0d9d3f547d551');
1158    $t199_200.$set($t200_201);
1159    $t201_202.$set($t202_203);
1160    $t203_204.$set($t204_205);
1161    $t205_206.$set($t206_207);
1162    $t207_208.$set($t208_209);
1163    $t209_210.$set($t210_211);
1164    $t211_212.$set($t212_213);
1165    $t213_214.$set($t214_215);
1166    $t215_216.$set($t216_217);
1167    $t217_218.$set($t218_219);
1168    $t219_220.$set($t220_221);
1169    $t221_222.$set($t222_223);
1170    $t223_224.$set($t224_225);
1171    $t225_226.$set($t226_227);
1172    $t227_228.$set($t228_229);
1173    $t229_230.$set($t230_231);
1174    $t231_232.$set($t232_233);
1175    $t233_234.$set($t234_235);
1176    $t235_236.$set($t236_237);
1177    $t237_238.$set(32);
1178    $t238_239.$set($t239_240);
1179    $t240_241 = $rt.builtin.sliceSlice($t29_30.$get(), undefined, undefined, undefined);
1180    ksEpochs.$set($t240_241);
1181    $t241_242 = { $value: $rt.builtin.makeSlice(3, 3, { numLeaves: 0, encryptionSecret: null, sdSecret: null, sdCiphertext: null, sdKey: null, sdNonce: null, leaves: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1182    $t242_243 = $t241_242.$get().addr(0);
1183    $t243_244 = { $get() { return $t242_243.$get().numLeaves; }, $set(v) { const obj = $t242_243.$get(); obj.numLeaves = v; $t242_243.$set(obj); } };
1184    $t244_245 = { $get() { return $t242_243.$get().encryptionSecret; }, $set(v) { const obj = $t242_243.$get(); obj.encryptionSecret = v; $t242_243.$set(obj); } };
1185    $t245_246 = hexb('59227ed552e4a6db0779d43aea694fd1b2c2540e605a099b95cf852b41e8ea66');
1186    $t246_247 = { $get() { return $t242_243.$get().sdSecret; }, $set(v) { const obj = $t242_243.$get(); obj.sdSecret = v; $t242_243.$set(obj); } };
1187    $t247_248 = hexb('d61204c27f29de53d30ff54a6ebb53e9908d044f55b9e726fa5736d4246b7b36');
1188    $t248_249 = { $get() { return $t242_243.$get().sdCiphertext; }, $set(v) { const obj = $t242_243.$get(); obj.sdCiphertext = v; $t242_243.$set(obj); } };
1189    $t249_250 = hexb('d0f75d5b691dbff35cafe226adad83aa5076c85035fef7d7fac489ad63f10828266b44ea366961509e8c9c24474abb6066c5a350aeb2b05415facb7ac2aa1b1efcf75a0c700bfdc93c705e352c');
1190    $t250_251 = { $get() { return $t242_243.$get().sdKey; }, $set(v) { const obj = $t242_243.$get(); obj.sdKey = v; $t242_243.$set(obj); } };
1191    $t251_252 = hexb('674a0c3e1500d068aae5d50f57a14648a63de2c246f8178382a150df8031f4cf');
1192    $t252_253 = { $get() { return $t242_243.$get().sdNonce; }, $set(v) { const obj = $t242_243.$get(); obj.sdNonce = v; $t242_243.$set(obj); } };
1193    $t253_254 = hexb('56b73cca00eac6cc5080be8d');
1194    $t254_255 = { $get() { return $t242_243.$get().leaves; }, $set(v) { const obj = $t242_243.$get(); obj.leaves = v; $t242_243.$set(obj); } };
1195    $t255_256 = { $value: $rt.builtin.makeSlice(1, 1, { gens: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1196    $t256_257 = $t255_256.$get().addr(0);
1197    $t257_258 = { $get() { return $t256_257.$get().gens; }, $set(v) { const obj = $t256_257.$get(); obj.gens = v; $t256_257.$set(obj); } };
1198    $t258_259 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1199    $t259_260 = $t258_259.$get().addr(0);
1200    $t260_261 = { $get() { return $t259_260.$get().generation; }, $set(v) { const obj = $t259_260.$get(); obj.generation = v; $t259_260.$set(obj); } };
1201    $t261_262 = { $get() { return $t259_260.$get().appKey; }, $set(v) { const obj = $t259_260.$get(); obj.appKey = v; $t259_260.$set(obj); } };
1202    $t262_263 = hexb('3f57aae38cbe6eaf31e4c05bd4a6aeba50c6878fa6fc2443bb8f3e57870fe712');
1203    $t263_264 = { $get() { return $t259_260.$get().appNonce; }, $set(v) { const obj = $t259_260.$get(); obj.appNonce = v; $t259_260.$set(obj); } };
1204    $t264_265 = hexb('4b2599c99b38c18775c85008');
1205    $t265_266 = { $get() { return $t259_260.$get().hsKey; }, $set(v) { const obj = $t259_260.$get(); obj.hsKey = v; $t259_260.$set(obj); } };
1206    $t266_267 = hexb('2ef3c21ad150b59cc78b21bd96e5dc0bd2579e19c7a46b7581fb1969103389d2');
1207    $t267_268 = { $get() { return $t259_260.$get().hsNonce; }, $set(v) { const obj = $t259_260.$get(); obj.hsNonce = v; $t259_260.$set(obj); } };
1208    $t268_269 = hexb('5794013a45e0563de4d35ce0');
1209    $t260_261.$set(0);
1210    $t261_262.$set($t262_263);
1211    $t263_264.$set($t264_265);
1212    $t265_266.$set($t266_267);
1213    $t267_268.$set($t268_269);
1214    $t269_270 = $t258_259.$get().addr(1);
1215    $t270_271 = { $get() { return $t269_270.$get().generation; }, $set(v) { const obj = $t269_270.$get(); obj.generation = v; $t269_270.$set(obj); } };
1216    $t271_272 = { $get() { return $t269_270.$get().appKey; }, $set(v) { const obj = $t269_270.$get(); obj.appKey = v; $t269_270.$set(obj); } };
1217    $t272_273 = hexb('bd44b39e16d4d59750469719cd330e4a52ecf5a1c9060254fac3e8ef73f4cf9b');
1218    $t273_274 = { $get() { return $t269_270.$get().appNonce; }, $set(v) { const obj = $t269_270.$get(); obj.appNonce = v; $t269_270.$set(obj); } };
1219    $t274_275 = hexb('82f8881240b93d1611b34e8c');
1220    $t275_276 = { $get() { return $t269_270.$get().hsKey; }, $set(v) { const obj = $t269_270.$get(); obj.hsKey = v; $t269_270.$set(obj); } };
1221    $t276_277 = hexb('488400e9d1a4a1d48e94da89dbc6c306d6479004e26aaade4101dd2fd86f2c21');
1222    $t277_278 = { $get() { return $t269_270.$get().hsNonce; }, $set(v) { const obj = $t269_270.$get(); obj.hsNonce = v; $t269_270.$set(obj); } };
1223    $t278_279 = hexb('424c2809d87242ecbb1da91f');
1224    $t270_271.$set(15);
1225    $t271_272.$set($t272_273);
1226    $t273_274.$set($t274_275);
1227    $t275_276.$set($t276_277);
1228    $t277_278.$set($t278_279);
1229    $t279_280 = $rt.builtin.sliceSlice($t258_259.$get(), undefined, undefined, undefined);
1230    $t257_258.$set($t279_280);
1231    $t280_281 = $rt.builtin.sliceSlice($t255_256.$get(), undefined, undefined, undefined);
1232    $t243_244.$set(1);
1233    $t244_245.$set($t245_246);
1234    $t246_247.$set($t247_248);
1235    $t248_249.$set($t249_250);
1236    $t250_251.$set($t251_252);
1237    $t252_253.$set($t253_254);
1238    $t254_255.$set($t280_281);
1239    $t281_282 = $t241_242.$get().addr(1);
1240    $t282_283 = { $get() { return $t281_282.$get().numLeaves; }, $set(v) { const obj = $t281_282.$get(); obj.numLeaves = v; $t281_282.$set(obj); } };
1241    $t283_284 = { $get() { return $t281_282.$get().encryptionSecret; }, $set(v) { const obj = $t281_282.$get(); obj.encryptionSecret = v; $t281_282.$set(obj); } };
1242    $t284_285 = hexb('d57a3e97f5db1387fd29e6111fd12cd15f55082164438e983f588e490d4be3c9');
1243    $t285_286 = { $get() { return $t281_282.$get().sdSecret; }, $set(v) { const obj = $t281_282.$get(); obj.sdSecret = v; $t281_282.$set(obj); } };
1244    $t286_287 = hexb('3c61a6ebf1f32a9f20dc375039459ba7afa95600ee0736bd91fbd7cd6f0f324e');
1245    $t287_288 = { $get() { return $t281_282.$get().sdCiphertext; }, $set(v) { const obj = $t281_282.$get(); obj.sdCiphertext = v; $t281_282.$set(obj); } };
1246    $t288_289 = hexb('e80d2f8e7283ce19fc07afe30277b9b5f5684fa8b3b858d51b3bc04e3d0cca2bec15d67d58063206b4df0b88a8a31e8bdfc1e4a1aacdf7d0b2df2cfb43fc85c9d53da8c05a3ced7c056e6f147f');
1247    $t289_290 = { $get() { return $t281_282.$get().sdKey; }, $set(v) { const obj = $t281_282.$get(); obj.sdKey = v; $t281_282.$set(obj); } };
1248    $t290_291 = hexb('989649a440be9cffdc2d4afeef55e15b667d2f0b145c406a5aae11405f4cc6d3');
1249    $t291_292 = { $get() { return $t281_282.$get().sdNonce; }, $set(v) { const obj = $t281_282.$get(); obj.sdNonce = v; $t281_282.$set(obj); } };
1250    $t292_293 = hexb('b111bc5303860211b9d1b95d');
1251    $t293_294 = { $get() { return $t281_282.$get().leaves; }, $set(v) { const obj = $t281_282.$get(); obj.leaves = v; $t281_282.$set(obj); } };
1252    $t294_295 = { $value: $rt.builtin.makeSlice(8, 8, { gens: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1253    $t295_296 = $t294_295.$get().addr(0);
1254    $t296_297 = { $get() { return $t295_296.$get().gens; }, $set(v) { const obj = $t295_296.$get(); obj.gens = v; $t295_296.$set(obj); } };
1255    $t297_298 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1256    $t298_299 = $t297_298.$get().addr(0);
1257    $t299_300 = { $get() { return $t298_299.$get().generation; }, $set(v) { const obj = $t298_299.$get(); obj.generation = v; $t298_299.$set(obj); } };
1258    $t300_301 = { $get() { return $t298_299.$get().appKey; }, $set(v) { const obj = $t298_299.$get(); obj.appKey = v; $t298_299.$set(obj); } };
1259    $t301_302 = hexb('79032092cdead1eb02385b174abec5722b474486c299636cf3c18b0cafa49267');
1260    $t302_303 = { $get() { return $t298_299.$get().appNonce; }, $set(v) { const obj = $t298_299.$get(); obj.appNonce = v; $t298_299.$set(obj); } };
1261    $t303_304 = hexb('ef49061a0037b0f1eb6cfdb1');
1262    $t304_305 = { $get() { return $t298_299.$get().hsKey; }, $set(v) { const obj = $t298_299.$get(); obj.hsKey = v; $t298_299.$set(obj); } };
1263    $t305_306 = hexb('55c0916e2c0d115e3ab35c70b2f16ded3051c79399fcffc2859e699f938e75c9');
1264    $t306_307 = { $get() { return $t298_299.$get().hsNonce; }, $set(v) { const obj = $t298_299.$get(); obj.hsNonce = v; $t298_299.$set(obj); } };
1265    $t307_308 = hexb('1d96560be0297c2a7df1988d');
1266    $t299_300.$set(0);
1267    $t300_301.$set($t301_302);
1268    $t302_303.$set($t303_304);
1269    $t304_305.$set($t305_306);
1270    $t306_307.$set($t307_308);
1271    $t308_309 = $t297_298.$get().addr(1);
1272    $t309_310 = { $get() { return $t308_309.$get().generation; }, $set(v) { const obj = $t308_309.$get(); obj.generation = v; $t308_309.$set(obj); } };
1273    $t310_311 = { $get() { return $t308_309.$get().appKey; }, $set(v) { const obj = $t308_309.$get(); obj.appKey = v; $t308_309.$set(obj); } };
1274    $t311_312 = hexb('d3660e4b2e2014fb6eba6db191cb41912bdbf75f48dc1cbc284a8dd26d05715b');
1275    $t312_313 = { $get() { return $t308_309.$get().appNonce; }, $set(v) { const obj = $t308_309.$get(); obj.appNonce = v; $t308_309.$set(obj); } };
1276    $t313_314 = hexb('eb69d4f656abaffa736363cc');
1277    $t314_315 = { $get() { return $t308_309.$get().hsKey; }, $set(v) { const obj = $t308_309.$get(); obj.hsKey = v; $t308_309.$set(obj); } };
1278    $t315_316 = hexb('f0037a7de2797df1ff036009dc6750d8cc7901c434d19561c42b8e9adc83acf0');
1279    $t316_317 = { $get() { return $t308_309.$get().hsNonce; }, $set(v) { const obj = $t308_309.$get(); obj.hsNonce = v; $t308_309.$set(obj); } };
1280    $t317_318 = hexb('c3b1dab20c6d1cf996c22471');
1281    $t309_310.$set(15);
1282    $t310_311.$set($t311_312);
1283    $t312_313.$set($t313_314);
1284    $t314_315.$set($t315_316);
1285    $t316_317.$set($t317_318);
1286    $t318_319 = $rt.builtin.sliceSlice($t297_298.$get(), undefined, undefined, undefined);
1287    $t296_297.$set($t318_319);
1288    $t319_320 = $t294_295.$get().addr(1);
1289    $t320_321 = { $get() { return $t319_320.$get().gens; }, $set(v) { const obj = $t319_320.$get(); obj.gens = v; $t319_320.$set(obj); } };
1290    $t321_322 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1291    $t322_323 = $t321_322.$get().addr(0);
1292    $t323_324 = { $get() { return $t322_323.$get().generation; }, $set(v) { const obj = $t322_323.$get(); obj.generation = v; $t322_323.$set(obj); } };
1293    $t324_325 = { $get() { return $t322_323.$get().appKey; }, $set(v) { const obj = $t322_323.$get(); obj.appKey = v; $t322_323.$set(obj); } };
1294    $t325_326 = hexb('f3a3e0bc8954deb8888974325a604347c8a37cac40a0ff973ba6c269d8c300ee');
1295    $t326_327 = { $get() { return $t322_323.$get().appNonce; }, $set(v) { const obj = $t322_323.$get(); obj.appNonce = v; $t322_323.$set(obj); } };
1296    $t327_328 = hexb('dfdf7c21ece020b34591c7e6');
1297    $t328_329 = { $get() { return $t322_323.$get().hsKey; }, $set(v) { const obj = $t322_323.$get(); obj.hsKey = v; $t322_323.$set(obj); } };
1298    $t329_330 = hexb('2da73ee4f45f6993330be8bd345d55e2e20e0676fddc1cfe4905ffc96e12e850');
1299    $t330_331 = { $get() { return $t322_323.$get().hsNonce; }, $set(v) { const obj = $t322_323.$get(); obj.hsNonce = v; $t322_323.$set(obj); } };
1300    $t331_332 = hexb('da15885d28be5a9992acbdda');
1301    $t323_324.$set(0);
1302    $t324_325.$set($t325_326);
1303    $t326_327.$set($t327_328);
1304    $t328_329.$set($t329_330);
1305    $t330_331.$set($t331_332);
1306    $t332_333 = $t321_322.$get().addr(1);
1307    $t333_334 = { $get() { return $t332_333.$get().generation; }, $set(v) { const obj = $t332_333.$get(); obj.generation = v; $t332_333.$set(obj); } };
1308    $t334_335 = { $get() { return $t332_333.$get().appKey; }, $set(v) { const obj = $t332_333.$get(); obj.appKey = v; $t332_333.$set(obj); } };
1309    $t335_336 = hexb('5f0ee220bbd25c3333c1d03fced661972e00249503d47a43e6023f6f77c69f6d');
1310    $t336_337 = { $get() { return $t332_333.$get().appNonce; }, $set(v) { const obj = $t332_333.$get(); obj.appNonce = v; $t332_333.$set(obj); } };
1311    $t337_338 = hexb('ec3b8f23a06e5949e2561ae4');
1312    $t338_339 = { $get() { return $t332_333.$get().hsKey; }, $set(v) { const obj = $t332_333.$get(); obj.hsKey = v; $t332_333.$set(obj); } };
1313    $t339_340 = hexb('1b3b385763a2192c4f5166376719c78e7b32cc218d5ed83194d90e97f90865de');
1314    $t340_341 = { $get() { return $t332_333.$get().hsNonce; }, $set(v) { const obj = $t332_333.$get(); obj.hsNonce = v; $t332_333.$set(obj); } };
1315    $t341_342 = hexb('2af2483f73b8da6a5d59dfd3');
1316    $t333_334.$set(15);
1317    $t334_335.$set($t335_336);
1318    $t336_337.$set($t337_338);
1319    $t338_339.$set($t339_340);
1320    $t340_341.$set($t341_342);
1321    $t342_343 = $rt.builtin.sliceSlice($t321_322.$get(), undefined, undefined, undefined);
1322    $t320_321.$set($t342_343);
1323    $t343_344 = $t294_295.$get().addr(2);
1324    $t344_345 = { $get() { return $t343_344.$get().gens; }, $set(v) { const obj = $t343_344.$get(); obj.gens = v; $t343_344.$set(obj); } };
1325    $t345_346 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1326    $t346_347 = $t345_346.$get().addr(0);
1327    $t347_348 = { $get() { return $t346_347.$get().generation; }, $set(v) { const obj = $t346_347.$get(); obj.generation = v; $t346_347.$set(obj); } };
1328    $t348_349 = { $get() { return $t346_347.$get().appKey; }, $set(v) { const obj = $t346_347.$get(); obj.appKey = v; $t346_347.$set(obj); } };
1329    $t349_350 = hexb('50702c3e200b9292b7c26b5f906ce9abf57044767523f06bb40eea5ab56403a3');
1330    $t350_351 = { $get() { return $t346_347.$get().appNonce; }, $set(v) { const obj = $t346_347.$get(); obj.appNonce = v; $t346_347.$set(obj); } };
1331    $t351_352 = hexb('2027bed41530e08aa53f6fb3');
1332    $t352_353 = { $get() { return $t346_347.$get().hsKey; }, $set(v) { const obj = $t346_347.$get(); obj.hsKey = v; $t346_347.$set(obj); } };
1333    $t353_354 = hexb('32fd4ccd71b9495e7faae476bc6030de01ab18d7468c360d3fc3b63dc90012a8');
1334    $t354_355 = { $get() { return $t346_347.$get().hsNonce; }, $set(v) { const obj = $t346_347.$get(); obj.hsNonce = v; $t346_347.$set(obj); } };
1335    $t355_356 = hexb('ebcd40f83950051a4a46270c');
1336    $t347_348.$set(0);
1337    $t348_349.$set($t349_350);
1338    $t350_351.$set($t351_352);
1339    $t352_353.$set($t353_354);
1340    $t354_355.$set($t355_356);
1341    $t356_357 = $t345_346.$get().addr(1);
1342    $t357_358 = { $get() { return $t356_357.$get().generation; }, $set(v) { const obj = $t356_357.$get(); obj.generation = v; $t356_357.$set(obj); } };
1343    $t358_359 = { $get() { return $t356_357.$get().appKey; }, $set(v) { const obj = $t356_357.$get(); obj.appKey = v; $t356_357.$set(obj); } };
1344    $t359_360 = hexb('e68fb3a6802a0723db3438f477c48a902458b1c0490838f2eda0fbd8b7b195fa');
1345    $t360_361 = { $get() { return $t356_357.$get().appNonce; }, $set(v) { const obj = $t356_357.$get(); obj.appNonce = v; $t356_357.$set(obj); } };
1346    $t361_362 = hexb('ee63416b0de9f578a8097a42');
1347    $t362_363 = { $get() { return $t356_357.$get().hsKey; }, $set(v) { const obj = $t356_357.$get(); obj.hsKey = v; $t356_357.$set(obj); } };
1348    $t363_364 = hexb('0b5e1e68ae79e61b53f629ba9515e564f829cc06c544283940344bcb86aec193');
1349    $t364_365 = { $get() { return $t356_357.$get().hsNonce; }, $set(v) { const obj = $t356_357.$get(); obj.hsNonce = v; $t356_357.$set(obj); } };
1350    $t365_366 = hexb('b8c72c1921a44dfdc85710bb');
1351    $t357_358.$set(15);
1352    $t358_359.$set($t359_360);
1353    $t360_361.$set($t361_362);
1354    $t362_363.$set($t363_364);
1355    $t364_365.$set($t365_366);
1356    $t366_367 = $rt.builtin.sliceSlice($t345_346.$get(), undefined, undefined, undefined);
1357    $t344_345.$set($t366_367);
1358    $t367_368 = $t294_295.$get().addr(3);
1359    $t368_369 = { $get() { return $t367_368.$get().gens; }, $set(v) { const obj = $t367_368.$get(); obj.gens = v; $t367_368.$set(obj); } };
1360    $t369_370 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1361    $t370_371 = $t369_370.$get().addr(0);
1362    $t371_372 = { $get() { return $t370_371.$get().generation; }, $set(v) { const obj = $t370_371.$get(); obj.generation = v; $t370_371.$set(obj); } };
1363    $t372_373 = { $get() { return $t370_371.$get().appKey; }, $set(v) { const obj = $t370_371.$get(); obj.appKey = v; $t370_371.$set(obj); } };
1364    $t373_374 = hexb('a598c5fed9cb918b29d000403e7c5bfae6119cacf0ec5ea17084b4ef4607f380');
1365    $t374_375 = { $get() { return $t370_371.$get().appNonce; }, $set(v) { const obj = $t370_371.$get(); obj.appNonce = v; $t370_371.$set(obj); } };
1366    $t375_376 = hexb('25e1db42bbf3f6faa70ce0a6');
1367    $t376_377 = { $get() { return $t370_371.$get().hsKey; }, $set(v) { const obj = $t370_371.$get(); obj.hsKey = v; $t370_371.$set(obj); } };
1368    $t377_378 = hexb('71918cd048f1e1a69429bed587c9828223634a4e35f019a9a640265841803593');
1369    $t378_379 = { $get() { return $t370_371.$get().hsNonce; }, $set(v) { const obj = $t370_371.$get(); obj.hsNonce = v; $t370_371.$set(obj); } };
1370    $t379_380 = hexb('a082534ae9126a732050acf7');
1371    $t371_372.$set(0);
1372    $t372_373.$set($t373_374);
1373    $t374_375.$set($t375_376);
1374    $t376_377.$set($t377_378);
1375    $t378_379.$set($t379_380);
1376    $t380_381 = $t369_370.$get().addr(1);
1377    $t381_382 = { $get() { return $t380_381.$get().generation; }, $set(v) { const obj = $t380_381.$get(); obj.generation = v; $t380_381.$set(obj); } };
1378    $t382_383 = { $get() { return $t380_381.$get().appKey; }, $set(v) { const obj = $t380_381.$get(); obj.appKey = v; $t380_381.$set(obj); } };
1379    $t383_384 = hexb('2d68bf10fcb74f21e98cb537bb51e49bfad9633c8f158e8295c80a20bba5f564');
1380    $t384_385 = { $get() { return $t380_381.$get().appNonce; }, $set(v) { const obj = $t380_381.$get(); obj.appNonce = v; $t380_381.$set(obj); } };
1381    $t385_386 = hexb('4000c00939f8e48a8626c94f');
1382    $t386_387 = { $get() { return $t380_381.$get().hsKey; }, $set(v) { const obj = $t380_381.$get(); obj.hsKey = v; $t380_381.$set(obj); } };
1383    $t387_388 = hexb('3b65ca68be982ced788ead218df556acd5fb7be76589f2cdc06bd5ca76f84e24');
1384    $t388_389 = { $get() { return $t380_381.$get().hsNonce; }, $set(v) { const obj = $t380_381.$get(); obj.hsNonce = v; $t380_381.$set(obj); } };
1385    $t389_390 = hexb('d06444a6079a25b6363e1e2e');
1386    $t381_382.$set(15);
1387    $t382_383.$set($t383_384);
1388    $t384_385.$set($t385_386);
1389    $t386_387.$set($t387_388);
1390    $t388_389.$set($t389_390);
1391    $t390_391 = $rt.builtin.sliceSlice($t369_370.$get(), undefined, undefined, undefined);
1392    $t368_369.$set($t390_391);
1393    $t391_392 = $t294_295.$get().addr(4);
1394    $t392_393 = { $get() { return $t391_392.$get().gens; }, $set(v) { const obj = $t391_392.$get(); obj.gens = v; $t391_392.$set(obj); } };
1395    $t393_394 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1396    $t394_395 = $t393_394.$get().addr(0);
1397    $t395_396 = { $get() { return $t394_395.$get().generation; }, $set(v) { const obj = $t394_395.$get(); obj.generation = v; $t394_395.$set(obj); } };
1398    $t396_397 = { $get() { return $t394_395.$get().appKey; }, $set(v) { const obj = $t394_395.$get(); obj.appKey = v; $t394_395.$set(obj); } };
1399    $t397_398 = hexb('dcef1450bf62d0b2204b8e517824d03c21e7e13049854cdc3600becf356de422');
1400    $t398_399 = { $get() { return $t394_395.$get().appNonce; }, $set(v) { const obj = $t394_395.$get(); obj.appNonce = v; $t394_395.$set(obj); } };
1401    $t399_400 = hexb('cb474c0a5c28821f0c567b0d');
1402    $t400_401 = { $get() { return $t394_395.$get().hsKey; }, $set(v) { const obj = $t394_395.$get(); obj.hsKey = v; $t394_395.$set(obj); } };
1403    $t401_402 = hexb('dc32974d57f431297470cc8af57533d113e9db7b52fd850f6af2f61940ff2473');
1404    $t402_403 = { $get() { return $t394_395.$get().hsNonce; }, $set(v) { const obj = $t394_395.$get(); obj.hsNonce = v; $t394_395.$set(obj); } };
1405    $t403_404 = hexb('a4c9cc6b474e902de86ba656');
1406    $t395_396.$set(0);
1407    $t396_397.$set($t397_398);
1408    $t398_399.$set($t399_400);
1409    $t400_401.$set($t401_402);
1410    $t402_403.$set($t403_404);
1411    $t404_405 = $t393_394.$get().addr(1);
1412    $t405_406 = { $get() { return $t404_405.$get().generation; }, $set(v) { const obj = $t404_405.$get(); obj.generation = v; $t404_405.$set(obj); } };
1413    $t406_407 = { $get() { return $t404_405.$get().appKey; }, $set(v) { const obj = $t404_405.$get(); obj.appKey = v; $t404_405.$set(obj); } };
1414    $t407_408 = hexb('389c94af36aa817a380fd4fdda932385579ba9f2d3a72349fe704efd2901396e');
1415    $t408_409 = { $get() { return $t404_405.$get().appNonce; }, $set(v) { const obj = $t404_405.$get(); obj.appNonce = v; $t404_405.$set(obj); } };
1416    $t409_410 = hexb('a047a51fd99c36e1aaa86695');
1417    $t410_411 = { $get() { return $t404_405.$get().hsKey; }, $set(v) { const obj = $t404_405.$get(); obj.hsKey = v; $t404_405.$set(obj); } };
1418    $t411_412 = hexb('3212a4167a024bdb4d72dbfe1c02984698e70a0dcb215165c8a576fa88ef3c0b');
1419    $t412_413 = { $get() { return $t404_405.$get().hsNonce; }, $set(v) { const obj = $t404_405.$get(); obj.hsNonce = v; $t404_405.$set(obj); } };
1420    $t413_414 = hexb('8bc3825e05162cc3220bf787');
1421    $t405_406.$set(15);
1422    $t406_407.$set($t407_408);
1423    $t408_409.$set($t409_410);
1424    $t410_411.$set($t411_412);
1425    $t412_413.$set($t413_414);
1426    $t414_415 = $rt.builtin.sliceSlice($t393_394.$get(), undefined, undefined, undefined);
1427    $t392_393.$set($t414_415);
1428    $t415_416 = $t294_295.$get().addr(5);
1429    $t416_417 = { $get() { return $t415_416.$get().gens; }, $set(v) { const obj = $t415_416.$get(); obj.gens = v; $t415_416.$set(obj); } };
1430    $t417_418 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1431    $t418_419 = $t417_418.$get().addr(0);
1432    $t419_420 = { $get() { return $t418_419.$get().generation; }, $set(v) { const obj = $t418_419.$get(); obj.generation = v; $t418_419.$set(obj); } };
1433    $t420_421 = { $get() { return $t418_419.$get().appKey; }, $set(v) { const obj = $t418_419.$get(); obj.appKey = v; $t418_419.$set(obj); } };
1434    $t421_422 = hexb('5cbc6e9b705e19032afe6e22f44eaaa0b488c57cd441e37c7bb1224be1026f38');
1435    $t422_423 = { $get() { return $t418_419.$get().appNonce; }, $set(v) { const obj = $t418_419.$get(); obj.appNonce = v; $t418_419.$set(obj); } };
1436    $t423_424 = hexb('ee50d01dd78de80239309c5d');
1437    $t424_425 = { $get() { return $t418_419.$get().hsKey; }, $set(v) { const obj = $t418_419.$get(); obj.hsKey = v; $t418_419.$set(obj); } };
1438    $t425_426 = hexb('0a6538d0472fbdd15c912bf67b84de562c9d27afd44a69cb5d28026bb6e93851');
1439    $t426_427 = { $get() { return $t418_419.$get().hsNonce; }, $set(v) { const obj = $t418_419.$get(); obj.hsNonce = v; $t418_419.$set(obj); } };
1440    $t427_428 = hexb('59376149e274000b31ffff72');
1441    $t419_420.$set(0);
1442    $t420_421.$set($t421_422);
1443    $t422_423.$set($t423_424);
1444    $t424_425.$set($t425_426);
1445    $t426_427.$set($t427_428);
1446    $t428_429 = $t417_418.$get().addr(1);
1447    $t429_430 = { $get() { return $t428_429.$get().generation; }, $set(v) { const obj = $t428_429.$get(); obj.generation = v; $t428_429.$set(obj); } };
1448    $t430_431 = { $get() { return $t428_429.$get().appKey; }, $set(v) { const obj = $t428_429.$get(); obj.appKey = v; $t428_429.$set(obj); } };
1449    $t431_432 = hexb('5fef1992203713ffb91bc67965402b6345f691bcc4c656e4cffd0853a4ac6474');
1450    $t432_433 = { $get() { return $t428_429.$get().appNonce; }, $set(v) { const obj = $t428_429.$get(); obj.appNonce = v; $t428_429.$set(obj); } };
1451    $t433_434 = hexb('c9862f345543c351e0b81412');
1452    $t434_435 = { $get() { return $t428_429.$get().hsKey; }, $set(v) { const obj = $t428_429.$get(); obj.hsKey = v; $t428_429.$set(obj); } };
1453    $t435_436 = hexb('0ae63f1aefef7deec797082de74d07020b4fc491012da9a297a7f85f8f3313d7');
1454    $t436_437 = { $get() { return $t428_429.$get().hsNonce; }, $set(v) { const obj = $t428_429.$get(); obj.hsNonce = v; $t428_429.$set(obj); } };
1455    $t437_438 = hexb('138293ae1dd09af823dc600b');
1456    $t429_430.$set(15);
1457    $t430_431.$set($t431_432);
1458    $t432_433.$set($t433_434);
1459    $t434_435.$set($t435_436);
1460    $t436_437.$set($t437_438);
1461    $t438_439 = $rt.builtin.sliceSlice($t417_418.$get(), undefined, undefined, undefined);
1462    $t416_417.$set($t438_439);
1463    $t439_440 = $t294_295.$get().addr(6);
1464    $t440_441 = { $get() { return $t439_440.$get().gens; }, $set(v) { const obj = $t439_440.$get(); obj.gens = v; $t439_440.$set(obj); } };
1465    $t441_442 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1466    $t442_443 = $t441_442.$get().addr(0);
1467    $t443_444 = { $get() { return $t442_443.$get().generation; }, $set(v) { const obj = $t442_443.$get(); obj.generation = v; $t442_443.$set(obj); } };
1468    $t444_445 = { $get() { return $t442_443.$get().appKey; }, $set(v) { const obj = $t442_443.$get(); obj.appKey = v; $t442_443.$set(obj); } };
1469    $t445_446 = hexb('8a88a31e26cbdf93485abb16c14f552d40d15021c4a37c56e3b35b8c1cfe6c0b');
1470    $t446_447 = { $get() { return $t442_443.$get().appNonce; }, $set(v) { const obj = $t442_443.$get(); obj.appNonce = v; $t442_443.$set(obj); } };
1471    $t447_448 = hexb('8fac76e85c7195e73d06858a');
1472    $t448_449 = { $get() { return $t442_443.$get().hsKey; }, $set(v) { const obj = $t442_443.$get(); obj.hsKey = v; $t442_443.$set(obj); } };
1473    $t449_450 = hexb('52b795f243c6812f0e8921473463c76d581e15aef8602df2747bd06f6de1d592');
1474    $t450_451 = { $get() { return $t442_443.$get().hsNonce; }, $set(v) { const obj = $t442_443.$get(); obj.hsNonce = v; $t442_443.$set(obj); } };
1475    $t451_452 = hexb('fb677efc646c93883452211b');
1476    $t443_444.$set(0);
1477    $t444_445.$set($t445_446);
1478    $t446_447.$set($t447_448);
1479    $t448_449.$set($t449_450);
1480    $t450_451.$set($t451_452);
1481    $t452_453 = $t441_442.$get().addr(1);
1482    $t453_454 = { $get() { return $t452_453.$get().generation; }, $set(v) { const obj = $t452_453.$get(); obj.generation = v; $t452_453.$set(obj); } };
1483    $t454_455 = { $get() { return $t452_453.$get().appKey; }, $set(v) { const obj = $t452_453.$get(); obj.appKey = v; $t452_453.$set(obj); } };
1484    $t455_456 = hexb('75092d7b88678ae5f14073fea16d6328465b009f6d45b72068e55976d1e65d48');
1485    $t456_457 = { $get() { return $t452_453.$get().appNonce; }, $set(v) { const obj = $t452_453.$get(); obj.appNonce = v; $t452_453.$set(obj); } };
1486    $t457_458 = hexb('29c9fbcbff4baeeca874a5ff');
1487    $t458_459 = { $get() { return $t452_453.$get().hsKey; }, $set(v) { const obj = $t452_453.$get(); obj.hsKey = v; $t452_453.$set(obj); } };
1488    $t459_460 = hexb('95d7c164d4f9f93aa52c830f5b578cee3fdaf1d90aaf173ccb59c56a598ed4ae');
1489    $t460_461 = { $get() { return $t452_453.$get().hsNonce; }, $set(v) { const obj = $t452_453.$get(); obj.hsNonce = v; $t452_453.$set(obj); } };
1490    $t461_462 = hexb('1d59d4a38b0ad2321b2949f0');
1491    $t453_454.$set(15);
1492    $t454_455.$set($t455_456);
1493    $t456_457.$set($t457_458);
1494    $t458_459.$set($t459_460);
1495    $t460_461.$set($t461_462);
1496    $t462_463 = $rt.builtin.sliceSlice($t441_442.$get(), undefined, undefined, undefined);
1497    $t440_441.$set($t462_463);
1498    $t463_464 = $t294_295.$get().addr(7);
1499    $t464_465 = { $get() { return $t463_464.$get().gens; }, $set(v) { const obj = $t463_464.$get(); obj.gens = v; $t463_464.$set(obj); } };
1500    $t465_466 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1501    $t466_467 = $t465_466.$get().addr(0);
1502    $t467_468 = { $get() { return $t466_467.$get().generation; }, $set(v) { const obj = $t466_467.$get(); obj.generation = v; $t466_467.$set(obj); } };
1503    $t468_469 = { $get() { return $t466_467.$get().appKey; }, $set(v) { const obj = $t466_467.$get(); obj.appKey = v; $t466_467.$set(obj); } };
1504    $t469_470 = hexb('39d155f1b517eb74ea4dd217faf3c8a0d5ee225c3a09a9e0260766405c1a30d1');
1505    $t470_471 = { $get() { return $t466_467.$get().appNonce; }, $set(v) { const obj = $t466_467.$get(); obj.appNonce = v; $t466_467.$set(obj); } };
1506    $t471_472 = hexb('e7d1e967163d2eee48bbcd2f');
1507    $t472_473 = { $get() { return $t466_467.$get().hsKey; }, $set(v) { const obj = $t466_467.$get(); obj.hsKey = v; $t466_467.$set(obj); } };
1508    $t473_474 = hexb('28c09a2d5275cba5e14787f61f8ba210b77e0f790bb1eea19ee6208055d5311c');
1509    $t474_475 = { $get() { return $t466_467.$get().hsNonce; }, $set(v) { const obj = $t466_467.$get(); obj.hsNonce = v; $t466_467.$set(obj); } };
1510    $t475_476 = hexb('c5312900774af942a8499e4f');
1511    $t467_468.$set(0);
1512    $t468_469.$set($t469_470);
1513    $t470_471.$set($t471_472);
1514    $t472_473.$set($t473_474);
1515    $t474_475.$set($t475_476);
1516    $t476_477 = $t465_466.$get().addr(1);
1517    $t477_478 = { $get() { return $t476_477.$get().generation; }, $set(v) { const obj = $t476_477.$get(); obj.generation = v; $t476_477.$set(obj); } };
1518    $t478_479 = { $get() { return $t476_477.$get().appKey; }, $set(v) { const obj = $t476_477.$get(); obj.appKey = v; $t476_477.$set(obj); } };
1519    $t479_480 = hexb('acf22181714e05aa45f0c9e179d0319cd4693b94c0aacfd60d33da3eee44cc64');
1520    $t480_481 = { $get() { return $t476_477.$get().appNonce; }, $set(v) { const obj = $t476_477.$get(); obj.appNonce = v; $t476_477.$set(obj); } };
1521    $t481_482 = hexb('343807a851dc834515f0eff0');
1522    $t482_483 = { $get() { return $t476_477.$get().hsKey; }, $set(v) { const obj = $t476_477.$get(); obj.hsKey = v; $t476_477.$set(obj); } };
1523    $t483_484 = hexb('ebb1df28bf07a18cd4a1aa216ff96d8fc61afa7b2d98cb4b37a6a3a791813e37');
1524    $t484_485 = { $get() { return $t476_477.$get().hsNonce; }, $set(v) { const obj = $t476_477.$get(); obj.hsNonce = v; $t476_477.$set(obj); } };
1525    $t485_486 = hexb('73b9a10947dd9dfadb6d7995');
1526    $t477_478.$set(15);
1527    $t478_479.$set($t479_480);
1528    $t480_481.$set($t481_482);
1529    $t482_483.$set($t483_484);
1530    $t484_485.$set($t485_486);
1531    $t486_487 = $rt.builtin.sliceSlice($t465_466.$get(), undefined, undefined, undefined);
1532    $t464_465.$set($t486_487);
1533    $t487_488 = $rt.builtin.sliceSlice($t294_295.$get(), undefined, undefined, undefined);
1534    $t282_283.$set(8);
1535    $t283_284.$set($t284_285);
1536    $t285_286.$set($t286_287);
1537    $t287_288.$set($t288_289);
1538    $t289_290.$set($t290_291);
1539    $t291_292.$set($t292_293);
1540    $t293_294.$set($t487_488);
1541    $t488_489 = $t241_242.$get().addr(2);
1542    $t489_490 = { $get() { return $t488_489.$get().numLeaves; }, $set(v) { const obj = $t488_489.$get(); obj.numLeaves = v; $t488_489.$set(obj); } };
1543    $t490_491 = { $get() { return $t488_489.$get().encryptionSecret; }, $set(v) { const obj = $t488_489.$get(); obj.encryptionSecret = v; $t488_489.$set(obj); } };
1544    $t491_492 = hexb('49859949b3e26371713cfb1f753ae543ce1b7632710242628571b798953187c6');
1545    $t492_493 = { $get() { return $t488_489.$get().sdSecret; }, $set(v) { const obj = $t488_489.$get(); obj.sdSecret = v; $t488_489.$set(obj); } };
1546    $t493_494 = hexb('09c466b58b772325fc28959b4adc2c8af8ec2e094e0d1a3d5f40dd8a6e0d59cc');
1547    $t494_495 = { $get() { return $t488_489.$get().sdCiphertext; }, $set(v) { const obj = $t488_489.$get(); obj.sdCiphertext = v; $t488_489.$set(obj); } };
1548    $t495_496 = hexb('aaff203bc0df0c63f4b0db2ebcec25379cac0d185753d2dc19de67dff0b5d11559789edc102488d4fd7b602871079095b78ea8799ac2d22055076424ffc9925a837cbbe859c05bc407af0946ca');
1549    $t496_497 = { $get() { return $t488_489.$get().sdKey; }, $set(v) { const obj = $t488_489.$get(); obj.sdKey = v; $t488_489.$set(obj); } };
1550    $t497_498 = hexb('49f35b2ce57617cc7e57cc1e0d10891a6d8de533c1a732d12896a895335fcb01');
1551    $t498_499 = { $get() { return $t488_489.$get().sdNonce; }, $set(v) { const obj = $t488_489.$get(); obj.sdNonce = v; $t488_489.$set(obj); } };
1552    $t499_500 = hexb('ece5b65f163e2e2df0e94f9f');
1553    $t500_501 = { $get() { return $t488_489.$get().leaves; }, $set(v) { const obj = $t488_489.$get(); obj.leaves = v; $t488_489.$set(obj); } };
1554    $t501_502 = { $value: $rt.builtin.makeSlice(32, 32, { gens: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1555    $t502_503 = $t501_502.$get().addr(0);
1556    $t503_504 = { $get() { return $t502_503.$get().gens; }, $set(v) { const obj = $t502_503.$get(); obj.gens = v; $t502_503.$set(obj); } };
1557    $t504_505 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1558    $t505_506 = $t504_505.$get().addr(0);
1559    $t506_507 = { $get() { return $t505_506.$get().generation; }, $set(v) { const obj = $t505_506.$get(); obj.generation = v; $t505_506.$set(obj); } };
1560    $t507_508 = { $get() { return $t505_506.$get().appKey; }, $set(v) { const obj = $t505_506.$get(); obj.appKey = v; $t505_506.$set(obj); } };
1561    $t508_509 = hexb('0a24d577a06af2fa3ab9b6d5144046267b63ce0b19dfa454bc35a4d0f52b2e69');
1562    $t509_510 = { $get() { return $t505_506.$get().appNonce; }, $set(v) { const obj = $t505_506.$get(); obj.appNonce = v; $t505_506.$set(obj); } };
1563    $t510_511 = hexb('58f972b0bb12404226e643e5');
1564    $t511_512 = { $get() { return $t505_506.$get().hsKey; }, $set(v) { const obj = $t505_506.$get(); obj.hsKey = v; $t505_506.$set(obj); } };
1565    $t512_513 = hexb('5102b1705ef5a1f9390bd52a1e648a480e8bc806e9380899f8ce55ae8bd713bf');
1566    $t513_514 = { $get() { return $t505_506.$get().hsNonce; }, $set(v) { const obj = $t505_506.$get(); obj.hsNonce = v; $t505_506.$set(obj); } };
1567    $t514_515 = hexb('7aa4342c298b754aa3c4523c');
1568    $t506_507.$set(0);
1569    $t507_508.$set($t508_509);
1570    $t509_510.$set($t510_511);
1571    $t511_512.$set($t512_513);
1572    $t513_514.$set($t514_515);
1573    $t515_516 = $t504_505.$get().addr(1);
1574    $t516_517 = { $get() { return $t515_516.$get().generation; }, $set(v) { const obj = $t515_516.$get(); obj.generation = v; $t515_516.$set(obj); } };
1575    $t517_518 = { $get() { return $t515_516.$get().appKey; }, $set(v) { const obj = $t515_516.$get(); obj.appKey = v; $t515_516.$set(obj); } };
1576    $t518_519 = hexb('87c441cacbc46d63ef710d8f5d9dc6d7219c75af004f0672beec69ac757b94ed');
1577    $t519_520 = { $get() { return $t515_516.$get().appNonce; }, $set(v) { const obj = $t515_516.$get(); obj.appNonce = v; $t515_516.$set(obj); } };
1578    $t520_521 = hexb('49afcd1b5644251d1559714b');
1579    $t521_522 = { $get() { return $t515_516.$get().hsKey; }, $set(v) { const obj = $t515_516.$get(); obj.hsKey = v; $t515_516.$set(obj); } };
1580    $t522_523 = hexb('513d91cb32642de7eac35e6ec7102483bfc37a9470b34931c0f90c1a354032a4');
1581    $t523_524 = { $get() { return $t515_516.$get().hsNonce; }, $set(v) { const obj = $t515_516.$get(); obj.hsNonce = v; $t515_516.$set(obj); } };
1582    $t524_525 = hexb('c1c2b869ca47b5705b242673');
1583    $t516_517.$set(15);
1584    $t517_518.$set($t518_519);
1585    $t519_520.$set($t520_521);
1586    $t521_522.$set($t522_523);
1587    $t523_524.$set($t524_525);
1588    $t525_526 = $rt.builtin.sliceSlice($t504_505.$get(), undefined, undefined, undefined);
1589    $t503_504.$set($t525_526);
1590    $t526_527 = $t501_502.$get().addr(1);
1591    $t527_528 = { $get() { return $t526_527.$get().gens; }, $set(v) { const obj = $t526_527.$get(); obj.gens = v; $t526_527.$set(obj); } };
1592    $t528_529 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1593    $t529_530 = $t528_529.$get().addr(0);
1594    $t530_531 = { $get() { return $t529_530.$get().generation; }, $set(v) { const obj = $t529_530.$get(); obj.generation = v; $t529_530.$set(obj); } };
1595    $t531_532 = { $get() { return $t529_530.$get().appKey; }, $set(v) { const obj = $t529_530.$get(); obj.appKey = v; $t529_530.$set(obj); } };
1596    $t532_533 = hexb('836c1e8982cd314c836ae8ad791428f653087760ba1c8ed78d7ccc5c5ce07673');
1597    $t533_534 = { $get() { return $t529_530.$get().appNonce; }, $set(v) { const obj = $t529_530.$get(); obj.appNonce = v; $t529_530.$set(obj); } };
1598    $t534_535 = hexb('89cb851cd3eb80da3af04775');
1599    $t535_536 = { $get() { return $t529_530.$get().hsKey; }, $set(v) { const obj = $t529_530.$get(); obj.hsKey = v; $t529_530.$set(obj); } };
1600    $t536_537 = hexb('2d04368cd82e130ce4a1fe5c5fdb7c793e87c6c038e0731fb2c2b1d9e81fcf5d');
1601    $t537_538 = { $get() { return $t529_530.$get().hsNonce; }, $set(v) { const obj = $t529_530.$get(); obj.hsNonce = v; $t529_530.$set(obj); } };
1602    $t538_539 = hexb('a9bc5a0ad7f41f04e4f87698');
1603    $t530_531.$set(0);
1604    $t531_532.$set($t532_533);
1605    $t533_534.$set($t534_535);
1606    $t535_536.$set($t536_537);
1607    $t537_538.$set($t538_539);
1608    $t539_540 = $t528_529.$get().addr(1);
1609    $t540_541 = { $get() { return $t539_540.$get().generation; }, $set(v) { const obj = $t539_540.$get(); obj.generation = v; $t539_540.$set(obj); } };
1610    $t541_542 = { $get() { return $t539_540.$get().appKey; }, $set(v) { const obj = $t539_540.$get(); obj.appKey = v; $t539_540.$set(obj); } };
1611    $t542_543 = hexb('43a0dc853e4d7e3893c6bde5e34aa2001e1a4601380514f944c2c1615cfa8794');
1612    $t543_544 = { $get() { return $t539_540.$get().appNonce; }, $set(v) { const obj = $t539_540.$get(); obj.appNonce = v; $t539_540.$set(obj); } };
1613    $t544_545 = hexb('8fca3ba94f338b88dbdc21db');
1614    $t545_546 = { $get() { return $t539_540.$get().hsKey; }, $set(v) { const obj = $t539_540.$get(); obj.hsKey = v; $t539_540.$set(obj); } };
1615    $t546_547 = hexb('81c5b2a8e535ea5b9f47c168fe7b04ad9b61a576a3bf8742c89f1f7303d245d2');
1616    $t547_548 = { $get() { return $t539_540.$get().hsNonce; }, $set(v) { const obj = $t539_540.$get(); obj.hsNonce = v; $t539_540.$set(obj); } };
1617    $t548_549 = hexb('a3f00fc9758f339947659296');
1618    $t540_541.$set(15);
1619    $t541_542.$set($t542_543);
1620    $t543_544.$set($t544_545);
1621    $t545_546.$set($t546_547);
1622    $t547_548.$set($t548_549);
1623    $t549_550 = $rt.builtin.sliceSlice($t528_529.$get(), undefined, undefined, undefined);
1624    $t527_528.$set($t549_550);
1625    $t550_551 = $t501_502.$get().addr(2);
1626    $t551_552 = { $get() { return $t550_551.$get().gens; }, $set(v) { const obj = $t550_551.$get(); obj.gens = v; $t550_551.$set(obj); } };
1627    $t552_553 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1628    $t553_554 = $t552_553.$get().addr(0);
1629    $t554_555 = { $get() { return $t553_554.$get().generation; }, $set(v) { const obj = $t553_554.$get(); obj.generation = v; $t553_554.$set(obj); } };
1630    $t555_556 = { $get() { return $t553_554.$get().appKey; }, $set(v) { const obj = $t553_554.$get(); obj.appKey = v; $t553_554.$set(obj); } };
1631    $t556_557 = hexb('b6dfcc1b4833389bfe986779337003c15c7e392c31c6f58023647760de5acfd4');
1632    $t557_558 = { $get() { return $t553_554.$get().appNonce; }, $set(v) { const obj = $t553_554.$get(); obj.appNonce = v; $t553_554.$set(obj); } };
1633    $t558_559 = hexb('80bffc48f52d0859b0c45e0b');
1634    $t559_560 = { $get() { return $t553_554.$get().hsKey; }, $set(v) { const obj = $t553_554.$get(); obj.hsKey = v; $t553_554.$set(obj); } };
1635    $t560_561 = hexb('cb16363a4ece4ecc568d8eefda4baa0d13f10e72cf61e940d34cddf877c7990c');
1636    $t561_562 = { $get() { return $t553_554.$get().hsNonce; }, $set(v) { const obj = $t553_554.$get(); obj.hsNonce = v; $t553_554.$set(obj); } };
1637    $t562_563 = hexb('3d37209aeab33188767fa07f');
1638    $t554_555.$set(0);
1639    $t555_556.$set($t556_557);
1640    $t557_558.$set($t558_559);
1641    $t559_560.$set($t560_561);
1642    $t561_562.$set($t562_563);
1643    $t563_564 = $t552_553.$get().addr(1);
1644    $t564_565 = { $get() { return $t563_564.$get().generation; }, $set(v) { const obj = $t563_564.$get(); obj.generation = v; $t563_564.$set(obj); } };
1645    $t565_566 = { $get() { return $t563_564.$get().appKey; }, $set(v) { const obj = $t563_564.$get(); obj.appKey = v; $t563_564.$set(obj); } };
1646    $t566_567 = hexb('9d2031b0e6ea40222c6e4772334a0cb16b7a70e04590ee0318490d370eed6a21');
1647    $t567_568 = { $get() { return $t563_564.$get().appNonce; }, $set(v) { const obj = $t563_564.$get(); obj.appNonce = v; $t563_564.$set(obj); } };
1648    $t568_569 = hexb('e0f61964a025620ec2a3cc22');
1649    $t569_570 = { $get() { return $t563_564.$get().hsKey; }, $set(v) { const obj = $t563_564.$get(); obj.hsKey = v; $t563_564.$set(obj); } };
1650    $t570_571 = hexb('060a338a48885f3699474ed88c24c60748eb2654db313b703b3dc508561ea13a');
1651    $t571_572 = { $get() { return $t563_564.$get().hsNonce; }, $set(v) { const obj = $t563_564.$get(); obj.hsNonce = v; $t563_564.$set(obj); } };
1652    $t572_573 = hexb('be3600be0c4b6dc2d64df06d');
1653    $t564_565.$set(15);
1654    $t565_566.$set($t566_567);
1655    $t567_568.$set($t568_569);
1656    $t569_570.$set($t570_571);
1657    $t571_572.$set($t572_573);
1658    $t573_574 = $rt.builtin.sliceSlice($t552_553.$get(), undefined, undefined, undefined);
1659    $t551_552.$set($t573_574);
1660    $t574_575 = $t501_502.$get().addr(3);
1661    $t575_576 = { $get() { return $t574_575.$get().gens; }, $set(v) { const obj = $t574_575.$get(); obj.gens = v; $t574_575.$set(obj); } };
1662    $t576_577 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1663    $t577_578 = $t576_577.$get().addr(0);
1664    $t578_579 = { $get() { return $t577_578.$get().generation; }, $set(v) { const obj = $t577_578.$get(); obj.generation = v; $t577_578.$set(obj); } };
1665    $t579_580 = { $get() { return $t577_578.$get().appKey; }, $set(v) { const obj = $t577_578.$get(); obj.appKey = v; $t577_578.$set(obj); } };
1666    $t580_581 = hexb('37dac5153a4902b794641e7897b66908ec192d90d18919e2c793a76a165491e8');
1667    $t581_582 = { $get() { return $t577_578.$get().appNonce; }, $set(v) { const obj = $t577_578.$get(); obj.appNonce = v; $t577_578.$set(obj); } };
1668    $t582_583 = hexb('360e27a3a4a64005750c501f');
1669    $t583_584 = { $get() { return $t577_578.$get().hsKey; }, $set(v) { const obj = $t577_578.$get(); obj.hsKey = v; $t577_578.$set(obj); } };
1670    $t584_585 = hexb('cefdbc6e3b85e3a53783e4967a3ba5a9a1a6b8c486145936bce6b2afce014b0e');
1671    $t585_586 = { $get() { return $t577_578.$get().hsNonce; }, $set(v) { const obj = $t577_578.$get(); obj.hsNonce = v; $t577_578.$set(obj); } };
1672    $t586_587 = hexb('68a9de9fdee52f149b01657d');
1673    $t578_579.$set(0);
1674    $t579_580.$set($t580_581);
1675    $t581_582.$set($t582_583);
1676    $t583_584.$set($t584_585);
1677    $t585_586.$set($t586_587);
1678    $t587_588 = $t576_577.$get().addr(1);
1679    $t588_589 = { $get() { return $t587_588.$get().generation; }, $set(v) { const obj = $t587_588.$get(); obj.generation = v; $t587_588.$set(obj); } };
1680    $t589_590 = { $get() { return $t587_588.$get().appKey; }, $set(v) { const obj = $t587_588.$get(); obj.appKey = v; $t587_588.$set(obj); } };
1681    $t590_591 = hexb('36de04038c0e394ab0913f7a7dc37b3a6551ebeb7ce82b095854b9dd1eab7fca');
1682    $t591_592 = { $get() { return $t587_588.$get().appNonce; }, $set(v) { const obj = $t587_588.$get(); obj.appNonce = v; $t587_588.$set(obj); } };
1683    $t592_593 = hexb('adc247314fcae51d97992a4b');
1684    $t593_594 = { $get() { return $t587_588.$get().hsKey; }, $set(v) { const obj = $t587_588.$get(); obj.hsKey = v; $t587_588.$set(obj); } };
1685    $t594_595 = hexb('5d7615bba20dc520562a302d7588ec7ff070a5e8a4f8d0e2f1bed78984c12b98');
1686    $t595_596 = { $get() { return $t587_588.$get().hsNonce; }, $set(v) { const obj = $t587_588.$get(); obj.hsNonce = v; $t587_588.$set(obj); } };
1687    $t596_597 = hexb('b3cc4d3cb96e14ccadb941dd');
1688    $t588_589.$set(15);
1689    $t589_590.$set($t590_591);
1690    $t591_592.$set($t592_593);
1691    $t593_594.$set($t594_595);
1692    $t595_596.$set($t596_597);
1693    $t597_598 = $rt.builtin.sliceSlice($t576_577.$get(), undefined, undefined, undefined);
1694    $t575_576.$set($t597_598);
1695    $t598_599 = $t501_502.$get().addr(4);
1696    $t599_600 = { $get() { return $t598_599.$get().gens; }, $set(v) { const obj = $t598_599.$get(); obj.gens = v; $t598_599.$set(obj); } };
1697    $t600_601 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1698    $t601_602 = $t600_601.$get().addr(0);
1699    $t602_603 = { $get() { return $t601_602.$get().generation; }, $set(v) { const obj = $t601_602.$get(); obj.generation = v; $t601_602.$set(obj); } };
1700    $t603_604 = { $get() { return $t601_602.$get().appKey; }, $set(v) { const obj = $t601_602.$get(); obj.appKey = v; $t601_602.$set(obj); } };
1701    $t604_605 = hexb('21e99db9b0556a32143eb02acbf93e5d3532a4a385e397b40781ce19fb27f045');
1702    $t605_606 = { $get() { return $t601_602.$get().appNonce; }, $set(v) { const obj = $t601_602.$get(); obj.appNonce = v; $t601_602.$set(obj); } };
1703    $t606_607 = hexb('4ddc53e79de147f1c0b62d56');
1704    $t607_608 = { $get() { return $t601_602.$get().hsKey; }, $set(v) { const obj = $t601_602.$get(); obj.hsKey = v; $t601_602.$set(obj); } };
1705    $t608_609 = hexb('a5c7a6fce1c71b466f29b0e503e96bb92203f850286b3ff3f1bf92f821cd9e1e');
1706    $t609_610 = { $get() { return $t601_602.$get().hsNonce; }, $set(v) { const obj = $t601_602.$get(); obj.hsNonce = v; $t601_602.$set(obj); } };
1707    $t610_611 = hexb('2fbd7adab80304636dbee443');
1708    $t602_603.$set(0);
1709    $t603_604.$set($t604_605);
1710    $t605_606.$set($t606_607);
1711    $t607_608.$set($t608_609);
1712    $t609_610.$set($t610_611);
1713    $t611_612 = $t600_601.$get().addr(1);
1714    $t612_613 = { $get() { return $t611_612.$get().generation; }, $set(v) { const obj = $t611_612.$get(); obj.generation = v; $t611_612.$set(obj); } };
1715    $t613_614 = { $get() { return $t611_612.$get().appKey; }, $set(v) { const obj = $t611_612.$get(); obj.appKey = v; $t611_612.$set(obj); } };
1716    $t614_615 = hexb('48d959f383a77af5722a0d464f1777c205b0af41c5433459b4b0c53476f3481b');
1717    $t615_616 = { $get() { return $t611_612.$get().appNonce; }, $set(v) { const obj = $t611_612.$get(); obj.appNonce = v; $t611_612.$set(obj); } };
1718    $t616_617 = hexb('6d849dfd50e660589f4b913b');
1719    $t617_618 = { $get() { return $t611_612.$get().hsKey; }, $set(v) { const obj = $t611_612.$get(); obj.hsKey = v; $t611_612.$set(obj); } };
1720    $t618_619 = hexb('4f294af9f7f65aa7c552043b9db99f444a5a4cb7782589237126e975bf417993');
1721    $t619_620 = { $get() { return $t611_612.$get().hsNonce; }, $set(v) { const obj = $t611_612.$get(); obj.hsNonce = v; $t611_612.$set(obj); } };
1722    $t620_621 = hexb('52f4aa7cc59d39d579824722');
1723    $t612_613.$set(15);
1724    $t613_614.$set($t614_615);
1725    $t615_616.$set($t616_617);
1726    $t617_618.$set($t618_619);
1727    $t619_620.$set($t620_621);
1728    $t621_622 = $rt.builtin.sliceSlice($t600_601.$get(), undefined, undefined, undefined);
1729    $t599_600.$set($t621_622);
1730    $t622_623 = $t501_502.$get().addr(5);
1731    $t623_624 = { $get() { return $t622_623.$get().gens; }, $set(v) { const obj = $t622_623.$get(); obj.gens = v; $t622_623.$set(obj); } };
1732    $t624_625 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1733    $t625_626 = $t624_625.$get().addr(0);
1734    $t626_627 = { $get() { return $t625_626.$get().generation; }, $set(v) { const obj = $t625_626.$get(); obj.generation = v; $t625_626.$set(obj); } };
1735    $t627_628 = { $get() { return $t625_626.$get().appKey; }, $set(v) { const obj = $t625_626.$get(); obj.appKey = v; $t625_626.$set(obj); } };
1736    $t628_629 = hexb('d6aa79436fb4f0cc3e968289865d23ace504fbe69d55a7a204e58a7fc9cbf470');
1737    $t629_630 = { $get() { return $t625_626.$get().appNonce; }, $set(v) { const obj = $t625_626.$get(); obj.appNonce = v; $t625_626.$set(obj); } };
1738    $t630_631 = hexb('2378e12cab1aa0f0758d4c49');
1739    $t631_632 = { $get() { return $t625_626.$get().hsKey; }, $set(v) { const obj = $t625_626.$get(); obj.hsKey = v; $t625_626.$set(obj); } };
1740    $t632_633 = hexb('e1d6282b67e64d6d4c7ba17215396b5c44ccec55911f303e091dcd28636a70c8');
1741    $t633_634 = { $get() { return $t625_626.$get().hsNonce; }, $set(v) { const obj = $t625_626.$get(); obj.hsNonce = v; $t625_626.$set(obj); } };
1742    $t634_635 = hexb('effa5afe7ebe9ab8eca40c98');
1743    $t626_627.$set(0);
1744    $t627_628.$set($t628_629);
1745    $t629_630.$set($t630_631);
1746    $t631_632.$set($t632_633);
1747    $t633_634.$set($t634_635);
1748    $t635_636 = $t624_625.$get().addr(1);
1749    $t636_637 = { $get() { return $t635_636.$get().generation; }, $set(v) { const obj = $t635_636.$get(); obj.generation = v; $t635_636.$set(obj); } };
1750    $t637_638 = { $get() { return $t635_636.$get().appKey; }, $set(v) { const obj = $t635_636.$get(); obj.appKey = v; $t635_636.$set(obj); } };
1751    $t638_639 = hexb('536b48f86ebc7dc6ea1bbf26a99e56c805b91e9a215f6be366929e65ffb3beed');
1752    $t639_640 = { $get() { return $t635_636.$get().appNonce; }, $set(v) { const obj = $t635_636.$get(); obj.appNonce = v; $t635_636.$set(obj); } };
1753    $t640_641 = hexb('30914fe30e299c1a2aa0cb19');
1754    $t641_642 = { $get() { return $t635_636.$get().hsKey; }, $set(v) { const obj = $t635_636.$get(); obj.hsKey = v; $t635_636.$set(obj); } };
1755    $t642_643 = hexb('4452bf9ac965e4b3058285d258251884a49d461f2c21f6b3525f81cfdee4fd7d');
1756    $t643_644 = { $get() { return $t635_636.$get().hsNonce; }, $set(v) { const obj = $t635_636.$get(); obj.hsNonce = v; $t635_636.$set(obj); } };
1757    $t644_645 = hexb('615096dcc80673c6c6344ee3');
1758    $t636_637.$set(15);
1759    $t637_638.$set($t638_639);
1760    $t639_640.$set($t640_641);
1761    $t641_642.$set($t642_643);
1762    $t643_644.$set($t644_645);
1763    $t645_646 = $rt.builtin.sliceSlice($t624_625.$get(), undefined, undefined, undefined);
1764    $t623_624.$set($t645_646);
1765    $t646_647 = $t501_502.$get().addr(6);
1766    $t647_648 = { $get() { return $t646_647.$get().gens; }, $set(v) { const obj = $t646_647.$get(); obj.gens = v; $t646_647.$set(obj); } };
1767    $t648_649 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1768    $t649_650 = $t648_649.$get().addr(0);
1769    $t650_651 = { $get() { return $t649_650.$get().generation; }, $set(v) { const obj = $t649_650.$get(); obj.generation = v; $t649_650.$set(obj); } };
1770    $t651_652 = { $get() { return $t649_650.$get().appKey; }, $set(v) { const obj = $t649_650.$get(); obj.appKey = v; $t649_650.$set(obj); } };
1771    $t652_653 = hexb('3bda8030d665dd7ae2a509e9c8e7eb868b23a641b0cd00abb5281bdc5fbca1d0');
1772    $t653_654 = { $get() { return $t649_650.$get().appNonce; }, $set(v) { const obj = $t649_650.$get(); obj.appNonce = v; $t649_650.$set(obj); } };
1773    $t654_655 = hexb('77d821c894eb259ff5504630');
1774    $t655_656 = { $get() { return $t649_650.$get().hsKey; }, $set(v) { const obj = $t649_650.$get(); obj.hsKey = v; $t649_650.$set(obj); } };
1775    $t656_657 = hexb('578e75d1ba2a9e05b887b068404c0baf4b5d2fcf4e15560c7b383c7a5833b3a2');
1776    $t657_658 = { $get() { return $t649_650.$get().hsNonce; }, $set(v) { const obj = $t649_650.$get(); obj.hsNonce = v; $t649_650.$set(obj); } };
1777    $t658_659 = hexb('3373345bc67ed124c5974235');
1778    $t650_651.$set(0);
1779    $t651_652.$set($t652_653);
1780    $t653_654.$set($t654_655);
1781    $t655_656.$set($t656_657);
1782    $t657_658.$set($t658_659);
1783    $t659_660 = $t648_649.$get().addr(1);
1784    $t660_661 = { $get() { return $t659_660.$get().generation; }, $set(v) { const obj = $t659_660.$get(); obj.generation = v; $t659_660.$set(obj); } };
1785    $t661_662 = { $get() { return $t659_660.$get().appKey; }, $set(v) { const obj = $t659_660.$get(); obj.appKey = v; $t659_660.$set(obj); } };
1786    $t662_663 = hexb('b83b50610f9aae7ba7115d04b014808f51e08ef3350a565679190489f5f76864');
1787    $t663_664 = { $get() { return $t659_660.$get().appNonce; }, $set(v) { const obj = $t659_660.$get(); obj.appNonce = v; $t659_660.$set(obj); } };
1788    $t664_665 = hexb('26c768228f22a3c189e84774');
1789    $t665_666 = { $get() { return $t659_660.$get().hsKey; }, $set(v) { const obj = $t659_660.$get(); obj.hsKey = v; $t659_660.$set(obj); } };
1790    $t666_667 = hexb('1110a03ea8909d3ebf25bd2d49ee9d1ff86b61f30531ce557982e664777a9e64');
1791    $t667_668 = { $get() { return $t659_660.$get().hsNonce; }, $set(v) { const obj = $t659_660.$get(); obj.hsNonce = v; $t659_660.$set(obj); } };
1792    $t668_669 = hexb('73f11cdfd2675be09cefbf6a');
1793    $t660_661.$set(15);
1794    $t661_662.$set($t662_663);
1795    $t663_664.$set($t664_665);
1796    $t665_666.$set($t666_667);
1797    $t667_668.$set($t668_669);
1798    $t669_670 = $rt.builtin.sliceSlice($t648_649.$get(), undefined, undefined, undefined);
1799    $t647_648.$set($t669_670);
1800    $t670_671 = $t501_502.$get().addr(7);
1801    $t671_672 = { $get() { return $t670_671.$get().gens; }, $set(v) { const obj = $t670_671.$get(); obj.gens = v; $t670_671.$set(obj); } };
1802    $t672_673 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1803    $t673_674 = $t672_673.$get().addr(0);
1804    $t674_675 = { $get() { return $t673_674.$get().generation; }, $set(v) { const obj = $t673_674.$get(); obj.generation = v; $t673_674.$set(obj); } };
1805    $t675_676 = { $get() { return $t673_674.$get().appKey; }, $set(v) { const obj = $t673_674.$get(); obj.appKey = v; $t673_674.$set(obj); } };
1806    $t676_677 = hexb('2aa73eaa7fa9b4b0a2321ac80841e59f5763daee345673e55094cd391c397656');
1807    $t677_678 = { $get() { return $t673_674.$get().appNonce; }, $set(v) { const obj = $t673_674.$get(); obj.appNonce = v; $t673_674.$set(obj); } };
1808    $t678_679 = hexb('49a648a61488633518a1e63e');
1809    $t679_680 = { $get() { return $t673_674.$get().hsKey; }, $set(v) { const obj = $t673_674.$get(); obj.hsKey = v; $t673_674.$set(obj); } };
1810    $t680_681 = hexb('9ef95b2adfc9d7fae9094e85a83f0d38c6748176428e1260c183ef632a7de5f5');
1811    $t681_682 = { $get() { return $t673_674.$get().hsNonce; }, $set(v) { const obj = $t673_674.$get(); obj.hsNonce = v; $t673_674.$set(obj); } };
1812    $t682_683 = hexb('c5e95e061432035490718fcc');
1813    $t674_675.$set(0);
1814    $t675_676.$set($t676_677);
1815    $t677_678.$set($t678_679);
1816    $t679_680.$set($t680_681);
1817    $t681_682.$set($t682_683);
1818    $t683_684 = $t672_673.$get().addr(1);
1819    $t684_685 = { $get() { return $t683_684.$get().generation; }, $set(v) { const obj = $t683_684.$get(); obj.generation = v; $t683_684.$set(obj); } };
1820    $t685_686 = { $get() { return $t683_684.$get().appKey; }, $set(v) { const obj = $t683_684.$get(); obj.appKey = v; $t683_684.$set(obj); } };
1821    $t686_687 = hexb('bab2d149eeabf591918edc284b4b40f8e69bcfb2655e279dcc14604b497706dd');
1822    $t687_688 = { $get() { return $t683_684.$get().appNonce; }, $set(v) { const obj = $t683_684.$get(); obj.appNonce = v; $t683_684.$set(obj); } };
1823    $t688_689 = hexb('e0a5161e008e874cc080748e');
1824    $t689_690 = { $get() { return $t683_684.$get().hsKey; }, $set(v) { const obj = $t683_684.$get(); obj.hsKey = v; $t683_684.$set(obj); } };
1825    $t690_691 = hexb('e3ba556729a0eff06b05b2cee1de9e2e72234fe0cabb9f99ee30e988ac29c2fd');
1826    $t691_692 = { $get() { return $t683_684.$get().hsNonce; }, $set(v) { const obj = $t683_684.$get(); obj.hsNonce = v; $t683_684.$set(obj); } };
1827    $t692_693 = hexb('1af51b8fb2b3c8c332fc2857');
1828    $t684_685.$set(15);
1829    $t685_686.$set($t686_687);
1830    $t687_688.$set($t688_689);
1831    $t689_690.$set($t690_691);
1832    $t691_692.$set($t692_693);
1833    $t693_694 = $rt.builtin.sliceSlice($t672_673.$get(), undefined, undefined, undefined);
1834    $t671_672.$set($t693_694);
1835    $t694_695 = $t501_502.$get().addr(8);
1836    $t695_696 = { $get() { return $t694_695.$get().gens; }, $set(v) { const obj = $t694_695.$get(); obj.gens = v; $t694_695.$set(obj); } };
1837    $t696_697 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1838    $t697_698 = $t696_697.$get().addr(0);
1839    $t698_699 = { $get() { return $t697_698.$get().generation; }, $set(v) { const obj = $t697_698.$get(); obj.generation = v; $t697_698.$set(obj); } };
1840    $t699_700 = { $get() { return $t697_698.$get().appKey; }, $set(v) { const obj = $t697_698.$get(); obj.appKey = v; $t697_698.$set(obj); } };
1841    $t700_701 = hexb('7d98494f3a1b0b0332b6a829eb6ce68fa8309ebad0807683235af6abcb028006');
1842    $t701_702 = { $get() { return $t697_698.$get().appNonce; }, $set(v) { const obj = $t697_698.$get(); obj.appNonce = v; $t697_698.$set(obj); } };
1843    $t702_703 = hexb('d6cb542191f84d060a30af3a');
1844    $t703_704 = { $get() { return $t697_698.$get().hsKey; }, $set(v) { const obj = $t697_698.$get(); obj.hsKey = v; $t697_698.$set(obj); } };
1845    $t704_705 = hexb('7c1be24e6240b358ad2f4b3c6ac7394c5d9d3778f95669bdc615a27406a21f9f');
1846    $t705_706 = { $get() { return $t697_698.$get().hsNonce; }, $set(v) { const obj = $t697_698.$get(); obj.hsNonce = v; $t697_698.$set(obj); } };
1847    $t706_707 = hexb('0ab1fed43992665b209fb29a');
1848    $t698_699.$set(0);
1849    $t699_700.$set($t700_701);
1850    $t701_702.$set($t702_703);
1851    $t703_704.$set($t704_705);
1852    $t705_706.$set($t706_707);
1853    $t707_708 = $t696_697.$get().addr(1);
1854    $t708_709 = { $get() { return $t707_708.$get().generation; }, $set(v) { const obj = $t707_708.$get(); obj.generation = v; $t707_708.$set(obj); } };
1855    $t709_710 = { $get() { return $t707_708.$get().appKey; }, $set(v) { const obj = $t707_708.$get(); obj.appKey = v; $t707_708.$set(obj); } };
1856    $t710_711 = hexb('a42a21f9acbf8312d329d1df121473d21f47b481017d252b81f18f79ba799152');
1857    $t711_712 = { $get() { return $t707_708.$get().appNonce; }, $set(v) { const obj = $t707_708.$get(); obj.appNonce = v; $t707_708.$set(obj); } };
1858    $t712_713 = hexb('ecd82ba6f4b2e2e9de7bb646');
1859    $t713_714 = { $get() { return $t707_708.$get().hsKey; }, $set(v) { const obj = $t707_708.$get(); obj.hsKey = v; $t707_708.$set(obj); } };
1860    $t714_715 = hexb('ff79265cc9cd1bdc84dbdb45b376ac69c94aec066b61cee086b0e7d69ea0aa56');
1861    $t715_716 = { $get() { return $t707_708.$get().hsNonce; }, $set(v) { const obj = $t707_708.$get(); obj.hsNonce = v; $t707_708.$set(obj); } };
1862    $t716_717 = hexb('8f78668bade3f8f7e2ad2ffa');
1863    $t708_709.$set(15);
1864    $t709_710.$set($t710_711);
1865    $t711_712.$set($t712_713);
1866    $t713_714.$set($t714_715);
1867    $t715_716.$set($t716_717);
1868    $t717_718 = $rt.builtin.sliceSlice($t696_697.$get(), undefined, undefined, undefined);
1869    $t695_696.$set($t717_718);
1870    $t718_719 = $t501_502.$get().addr(9);
1871    $t719_720 = { $get() { return $t718_719.$get().gens; }, $set(v) { const obj = $t718_719.$get(); obj.gens = v; $t718_719.$set(obj); } };
1872    $t720_721 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1873    $t721_722 = $t720_721.$get().addr(0);
1874    $t722_723 = { $get() { return $t721_722.$get().generation; }, $set(v) { const obj = $t721_722.$get(); obj.generation = v; $t721_722.$set(obj); } };
1875    $t723_724 = { $get() { return $t721_722.$get().appKey; }, $set(v) { const obj = $t721_722.$get(); obj.appKey = v; $t721_722.$set(obj); } };
1876    $t724_725 = hexb('f9866e6c9d9541a94fd3d5c61a872cb036819760b33693909fc4c3067afb883b');
1877    $t725_726 = { $get() { return $t721_722.$get().appNonce; }, $set(v) { const obj = $t721_722.$get(); obj.appNonce = v; $t721_722.$set(obj); } };
1878    $t726_727 = hexb('b64a5df86df749e32f623623');
1879    $t727_728 = { $get() { return $t721_722.$get().hsKey; }, $set(v) { const obj = $t721_722.$get(); obj.hsKey = v; $t721_722.$set(obj); } };
1880    $t728_729 = hexb('1ee4f9fdbf5339898bf5a333d24610abe701d0da886e9a65932d0cd9ee0f7248');
1881    $t729_730 = { $get() { return $t721_722.$get().hsNonce; }, $set(v) { const obj = $t721_722.$get(); obj.hsNonce = v; $t721_722.$set(obj); } };
1882    $t730_731 = hexb('5812b568f82270a5c60b3f5d');
1883    $t722_723.$set(0);
1884    $t723_724.$set($t724_725);
1885    $t725_726.$set($t726_727);
1886    $t727_728.$set($t728_729);
1887    $t729_730.$set($t730_731);
1888    $t731_732 = $t720_721.$get().addr(1);
1889    $t732_733 = { $get() { return $t731_732.$get().generation; }, $set(v) { const obj = $t731_732.$get(); obj.generation = v; $t731_732.$set(obj); } };
1890    $t733_734 = { $get() { return $t731_732.$get().appKey; }, $set(v) { const obj = $t731_732.$get(); obj.appKey = v; $t731_732.$set(obj); } };
1891    $t734_735 = hexb('77b45129def7153bc547ad435f8311fd509cdbec3cce2a5ca3d6855311c8b56a');
1892    $t735_736 = { $get() { return $t731_732.$get().appNonce; }, $set(v) { const obj = $t731_732.$get(); obj.appNonce = v; $t731_732.$set(obj); } };
1893    $t736_737 = hexb('6b0af3b1fabd8e9339b1d975');
1894    $t737_738 = { $get() { return $t731_732.$get().hsKey; }, $set(v) { const obj = $t731_732.$get(); obj.hsKey = v; $t731_732.$set(obj); } };
1895    $t738_739 = hexb('a8e268e0f3da0d4f64f91c1107c8a5b5c8fb0ccb7dfdb88ff50d4e5eca5ac62e');
1896    $t739_740 = { $get() { return $t731_732.$get().hsNonce; }, $set(v) { const obj = $t731_732.$get(); obj.hsNonce = v; $t731_732.$set(obj); } };
1897    $t740_741 = hexb('e02d504d5c77524b3bf33395');
1898    $t732_733.$set(15);
1899    $t733_734.$set($t734_735);
1900    $t735_736.$set($t736_737);
1901    $t737_738.$set($t738_739);
1902    $t739_740.$set($t740_741);
1903    $t741_742 = $rt.builtin.sliceSlice($t720_721.$get(), undefined, undefined, undefined);
1904    $t719_720.$set($t741_742);
1905    $t742_743 = $t501_502.$get().addr(10);
1906    $t743_744 = { $get() { return $t742_743.$get().gens; }, $set(v) { const obj = $t742_743.$get(); obj.gens = v; $t742_743.$set(obj); } };
1907    $t744_745 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1908    $t745_746 = $t744_745.$get().addr(0);
1909    $t746_747 = { $get() { return $t745_746.$get().generation; }, $set(v) { const obj = $t745_746.$get(); obj.generation = v; $t745_746.$set(obj); } };
1910    $t747_748 = { $get() { return $t745_746.$get().appKey; }, $set(v) { const obj = $t745_746.$get(); obj.appKey = v; $t745_746.$set(obj); } };
1911    $t748_749 = hexb('2ad3059620a000ee5f2503765f94785c84c5cc25c742f39224ee0e2d4b395ac0');
1912    $t749_750 = { $get() { return $t745_746.$get().appNonce; }, $set(v) { const obj = $t745_746.$get(); obj.appNonce = v; $t745_746.$set(obj); } };
1913    $t750_751 = hexb('27654be31f596fa3ec5be8bd');
1914    $t751_752 = { $get() { return $t745_746.$get().hsKey; }, $set(v) { const obj = $t745_746.$get(); obj.hsKey = v; $t745_746.$set(obj); } };
1915    $t752_753 = hexb('bbebc7ddecc105f337ab2ef600e80ddd7b21874a74c1866a63c2844b76217cf6');
1916    $t753_754 = { $get() { return $t745_746.$get().hsNonce; }, $set(v) { const obj = $t745_746.$get(); obj.hsNonce = v; $t745_746.$set(obj); } };
1917    $t754_755 = hexb('ba43d3cfba9f4d270e8ac184');
1918    $t746_747.$set(0);
1919    $t747_748.$set($t748_749);
1920    $t749_750.$set($t750_751);
1921    $t751_752.$set($t752_753);
1922    $t753_754.$set($t754_755);
1923    $t755_756 = $t744_745.$get().addr(1);
1924    $t756_757 = { $get() { return $t755_756.$get().generation; }, $set(v) { const obj = $t755_756.$get(); obj.generation = v; $t755_756.$set(obj); } };
1925    $t757_758 = { $get() { return $t755_756.$get().appKey; }, $set(v) { const obj = $t755_756.$get(); obj.appKey = v; $t755_756.$set(obj); } };
1926    $t758_759 = hexb('a6384de54114b6e5da9df6ed5e183f4cc4073f9d1599ed1987c4079a68e889a8');
1927    $t759_760 = { $get() { return $t755_756.$get().appNonce; }, $set(v) { const obj = $t755_756.$get(); obj.appNonce = v; $t755_756.$set(obj); } };
1928    $t760_761 = hexb('2f52e1c1f9adda1be687ee59');
1929    $t761_762 = { $get() { return $t755_756.$get().hsKey; }, $set(v) { const obj = $t755_756.$get(); obj.hsKey = v; $t755_756.$set(obj); } };
1930    $t762_763 = hexb('b7c3dd23db7b1eb7a160efbfa39ed9aceb783dc6998998f3cb8e7f8875134e46');
1931    $t763_764 = { $get() { return $t755_756.$get().hsNonce; }, $set(v) { const obj = $t755_756.$get(); obj.hsNonce = v; $t755_756.$set(obj); } };
1932    $t764_765 = hexb('68fc5a37e990d6da66440f10');
1933    $t756_757.$set(15);
1934    $t757_758.$set($t758_759);
1935    $t759_760.$set($t760_761);
1936    $t761_762.$set($t762_763);
1937    $t763_764.$set($t764_765);
1938    $t765_766 = $rt.builtin.sliceSlice($t744_745.$get(), undefined, undefined, undefined);
1939    $t743_744.$set($t765_766);
1940    $t766_767 = $t501_502.$get().addr(11);
1941    $t767_768 = { $get() { return $t766_767.$get().gens; }, $set(v) { const obj = $t766_767.$get(); obj.gens = v; $t766_767.$set(obj); } };
1942    $t768_769 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1943    $t769_770 = $t768_769.$get().addr(0);
1944    $t770_771 = { $get() { return $t769_770.$get().generation; }, $set(v) { const obj = $t769_770.$get(); obj.generation = v; $t769_770.$set(obj); } };
1945    $t771_772 = { $get() { return $t769_770.$get().appKey; }, $set(v) { const obj = $t769_770.$get(); obj.appKey = v; $t769_770.$set(obj); } };
1946    $t772_773 = hexb('6bce419b8b2d4ea687b7f51511a61301b5de925547827b3155cf09a7659e9cee');
1947    $t773_774 = { $get() { return $t769_770.$get().appNonce; }, $set(v) { const obj = $t769_770.$get(); obj.appNonce = v; $t769_770.$set(obj); } };
1948    $t774_775 = hexb('8584190731a81e3b9a9a7fce');
1949    $t775_776 = { $get() { return $t769_770.$get().hsKey; }, $set(v) { const obj = $t769_770.$get(); obj.hsKey = v; $t769_770.$set(obj); } };
1950    $t776_777 = hexb('1f5a75c691636a498f19e691e4b845b347a439546a08c33d7b35e3debffccb47');
1951    $t777_778 = { $get() { return $t769_770.$get().hsNonce; }, $set(v) { const obj = $t769_770.$get(); obj.hsNonce = v; $t769_770.$set(obj); } };
1952    $t778_779 = hexb('5ea407637ecf27faa5f9e3a6');
1953    $t770_771.$set(0);
1954    $t771_772.$set($t772_773);
1955    $t773_774.$set($t774_775);
1956    $t775_776.$set($t776_777);
1957    $t777_778.$set($t778_779);
1958    $t779_780 = $t768_769.$get().addr(1);
1959    $t780_781 = { $get() { return $t779_780.$get().generation; }, $set(v) { const obj = $t779_780.$get(); obj.generation = v; $t779_780.$set(obj); } };
1960    $t781_782 = { $get() { return $t779_780.$get().appKey; }, $set(v) { const obj = $t779_780.$get(); obj.appKey = v; $t779_780.$set(obj); } };
1961    $t782_783 = hexb('9fd5ea50dceb64aadd20a1b32a962f73ebce9db54b6e92a84569538bc09b5806');
1962    $t783_784 = { $get() { return $t779_780.$get().appNonce; }, $set(v) { const obj = $t779_780.$get(); obj.appNonce = v; $t779_780.$set(obj); } };
1963    $t784_785 = hexb('72249adce1cdf3ef8a476799');
1964    $t785_786 = { $get() { return $t779_780.$get().hsKey; }, $set(v) { const obj = $t779_780.$get(); obj.hsKey = v; $t779_780.$set(obj); } };
1965    $t786_787 = hexb('c4b9544ebcb58d2d5a242d2329b5d8e7c2ec1ae7032fe3929c07621f26890330');
1966    $t787_788 = { $get() { return $t779_780.$get().hsNonce; }, $set(v) { const obj = $t779_780.$get(); obj.hsNonce = v; $t779_780.$set(obj); } };
1967    $t788_789 = hexb('11659686215a9f10704aa473');
1968    $t780_781.$set(15);
1969    $t781_782.$set($t782_783);
1970    $t783_784.$set($t784_785);
1971    $t785_786.$set($t786_787);
1972    $t787_788.$set($t788_789);
1973    $t789_790 = $rt.builtin.sliceSlice($t768_769.$get(), undefined, undefined, undefined);
1974    $t767_768.$set($t789_790);
1975    $t790_791 = $t501_502.$get().addr(12);
1976    $t791_792 = { $get() { return $t790_791.$get().gens; }, $set(v) { const obj = $t790_791.$get(); obj.gens = v; $t790_791.$set(obj); } };
1977    $t792_793 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1978    $t793_794 = $t792_793.$get().addr(0);
1979    $t794_795 = { $get() { return $t793_794.$get().generation; }, $set(v) { const obj = $t793_794.$get(); obj.generation = v; $t793_794.$set(obj); } };
1980    $t795_796 = { $get() { return $t793_794.$get().appKey; }, $set(v) { const obj = $t793_794.$get(); obj.appKey = v; $t793_794.$set(obj); } };
1981    $t796_797 = hexb('a7b54230d99f73ef078ef9b50e31d63e6a209dbb687e2dc995fff5a08012f0b6');
1982    $t797_798 = { $get() { return $t793_794.$get().appNonce; }, $set(v) { const obj = $t793_794.$get(); obj.appNonce = v; $t793_794.$set(obj); } };
1983    $t798_799 = hexb('4cd735cbd9e3ca2a63d07b0a');
1984    $t799_800 = { $get() { return $t793_794.$get().hsKey; }, $set(v) { const obj = $t793_794.$get(); obj.hsKey = v; $t793_794.$set(obj); } };
1985    $t800_801 = hexb('68471caf1594b04a6937ccd9c8f9a844609c122556d893beec5d0e5abb1b9abb');
1986    $t801_802 = { $get() { return $t793_794.$get().hsNonce; }, $set(v) { const obj = $t793_794.$get(); obj.hsNonce = v; $t793_794.$set(obj); } };
1987    $t802_803 = hexb('385566a667bd877048adc1f8');
1988    $t794_795.$set(0);
1989    $t795_796.$set($t796_797);
1990    $t797_798.$set($t798_799);
1991    $t799_800.$set($t800_801);
1992    $t801_802.$set($t802_803);
1993    $t803_804 = $t792_793.$get().addr(1);
1994    $t804_805 = { $get() { return $t803_804.$get().generation; }, $set(v) { const obj = $t803_804.$get(); obj.generation = v; $t803_804.$set(obj); } };
1995    $t805_806 = { $get() { return $t803_804.$get().appKey; }, $set(v) { const obj = $t803_804.$get(); obj.appKey = v; $t803_804.$set(obj); } };
1996    $t806_807 = hexb('08c12fe31dc56d47cd474e0bec58dd2f2e5d94afa9f09e08d5b1899fbc319b4c');
1997    $t807_808 = { $get() { return $t803_804.$get().appNonce; }, $set(v) { const obj = $t803_804.$get(); obj.appNonce = v; $t803_804.$set(obj); } };
1998    $t808_809 = hexb('9e4f30439151f2267b983d24');
1999    $t809_810 = { $get() { return $t803_804.$get().hsKey; }, $set(v) { const obj = $t803_804.$get(); obj.hsKey = v; $t803_804.$set(obj); } };
2000    $t810_811 = hexb('f9402caf45f66ee9e43692ea66251092756863890f3a81bba26950e95d6f62c0');
2001    $t811_812 = { $get() { return $t803_804.$get().hsNonce; }, $set(v) { const obj = $t803_804.$get(); obj.hsNonce = v; $t803_804.$set(obj); } };
2002    $t812_813 = hexb('4533bf845b1c527c7e15593f');
2003    $t804_805.$set(15);
2004    $t805_806.$set($t806_807);
2005    $t807_808.$set($t808_809);
2006    $t809_810.$set($t810_811);
2007    $t811_812.$set($t812_813);
2008    $t813_814 = $rt.builtin.sliceSlice($t792_793.$get(), undefined, undefined, undefined);
2009    $t791_792.$set($t813_814);
2010    $t814_815 = $t501_502.$get().addr(13);
2011    $t815_816 = { $get() { return $t814_815.$get().gens; }, $set(v) { const obj = $t814_815.$get(); obj.gens = v; $t814_815.$set(obj); } };
2012    $t816_817 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2013    $t817_818 = $t816_817.$get().addr(0);
2014    $t818_819 = { $get() { return $t817_818.$get().generation; }, $set(v) { const obj = $t817_818.$get(); obj.generation = v; $t817_818.$set(obj); } };
2015    $t819_820 = { $get() { return $t817_818.$get().appKey; }, $set(v) { const obj = $t817_818.$get(); obj.appKey = v; $t817_818.$set(obj); } };
2016    $t820_821 = hexb('bc4787428fdee2fa793cb81b0088720e4bd48434476e741f4fa49498b9c40b87');
2017    $t821_822 = { $get() { return $t817_818.$get().appNonce; }, $set(v) { const obj = $t817_818.$get(); obj.appNonce = v; $t817_818.$set(obj); } };
2018    $t822_823 = hexb('e45d3c38e4b2f1a346ee6bb0');
2019    $t823_824 = { $get() { return $t817_818.$get().hsKey; }, $set(v) { const obj = $t817_818.$get(); obj.hsKey = v; $t817_818.$set(obj); } };
2020    $t824_825 = hexb('0ead0f9dd582e03f253fd4231500f6243898b188dc5c14270651e4bd907f544a');
2021    $t825_826 = { $get() { return $t817_818.$get().hsNonce; }, $set(v) { const obj = $t817_818.$get(); obj.hsNonce = v; $t817_818.$set(obj); } };
2022    $t826_827 = hexb('7777ffe6f1b631e945455d86');
2023    $t818_819.$set(0);
2024    $t819_820.$set($t820_821);
2025    $t821_822.$set($t822_823);
2026    $t823_824.$set($t824_825);
2027    $t825_826.$set($t826_827);
2028    $t827_828 = $t816_817.$get().addr(1);
2029    $t828_829 = { $get() { return $t827_828.$get().generation; }, $set(v) { const obj = $t827_828.$get(); obj.generation = v; $t827_828.$set(obj); } };
2030    $t829_830 = { $get() { return $t827_828.$get().appKey; }, $set(v) { const obj = $t827_828.$get(); obj.appKey = v; $t827_828.$set(obj); } };
2031    $t830_831 = hexb('ed63da82b94971fc087138fdc24d300fc04184b7fd1faa9476509247dc4360b5');
2032    $t831_832 = { $get() { return $t827_828.$get().appNonce; }, $set(v) { const obj = $t827_828.$get(); obj.appNonce = v; $t827_828.$set(obj); } };
2033    $t832_833 = hexb('670c5d609ecdcd179024be88');
2034    $t833_834 = { $get() { return $t827_828.$get().hsKey; }, $set(v) { const obj = $t827_828.$get(); obj.hsKey = v; $t827_828.$set(obj); } };
2035    $t834_835 = hexb('5b9df9f343f947e1c2d19917e5e4eb38b3230fb13037753fc70ba185699d887b');
2036    $t835_836 = { $get() { return $t827_828.$get().hsNonce; }, $set(v) { const obj = $t827_828.$get(); obj.hsNonce = v; $t827_828.$set(obj); } };
2037    $t836_837 = hexb('1b66a9653db0e7e1263159e2');
2038    $t828_829.$set(15);
2039    $t829_830.$set($t830_831);
2040    $t831_832.$set($t832_833);
2041    $t833_834.$set($t834_835);
2042    $t835_836.$set($t836_837);
2043    $t837_838 = $rt.builtin.sliceSlice($t816_817.$get(), undefined, undefined, undefined);
2044    $t815_816.$set($t837_838);
2045    $t838_839 = $t501_502.$get().addr(14);
2046    $t839_840 = { $get() { return $t838_839.$get().gens; }, $set(v) { const obj = $t838_839.$get(); obj.gens = v; $t838_839.$set(obj); } };
2047    $t840_841 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2048    $t841_842 = $t840_841.$get().addr(0);
2049    $t842_843 = { $get() { return $t841_842.$get().generation; }, $set(v) { const obj = $t841_842.$get(); obj.generation = v; $t841_842.$set(obj); } };
2050    $t843_844 = { $get() { return $t841_842.$get().appKey; }, $set(v) { const obj = $t841_842.$get(); obj.appKey = v; $t841_842.$set(obj); } };
2051    $t844_845 = hexb('1dd991c61ea8b2a15ddb997cd73d147f130282975add3edab265c80113994c4c');
2052    $t845_846 = { $get() { return $t841_842.$get().appNonce; }, $set(v) { const obj = $t841_842.$get(); obj.appNonce = v; $t841_842.$set(obj); } };
2053    $t846_847 = hexb('252cf987be000faa9395e374');
2054    $t847_848 = { $get() { return $t841_842.$get().hsKey; }, $set(v) { const obj = $t841_842.$get(); obj.hsKey = v; $t841_842.$set(obj); } };
2055    $t848_849 = hexb('a6af30003d6a0ebc1165f6a409d26bbc9e130826ec3de2d5b9efd98b90863290');
2056    $t849_850 = { $get() { return $t841_842.$get().hsNonce; }, $set(v) { const obj = $t841_842.$get(); obj.hsNonce = v; $t841_842.$set(obj); } };
2057    $t850_851 = hexb('45c5bca88132b3b019497191');
2058    $t842_843.$set(0);
2059    $t843_844.$set($t844_845);
2060    $t845_846.$set($t846_847);
2061    $t847_848.$set($t848_849);
2062    $t849_850.$set($t850_851);
2063    $t851_852 = $t840_841.$get().addr(1);
2064    $t852_853 = { $get() { return $t851_852.$get().generation; }, $set(v) { const obj = $t851_852.$get(); obj.generation = v; $t851_852.$set(obj); } };
2065    $t853_854 = { $get() { return $t851_852.$get().appKey; }, $set(v) { const obj = $t851_852.$get(); obj.appKey = v; $t851_852.$set(obj); } };
2066    $t854_855 = hexb('a883c2ba5bc15b6f62303d2a077195f5a41b54dcfa56cc208b730a651faf9b8e');
2067    $t855_856 = { $get() { return $t851_852.$get().appNonce; }, $set(v) { const obj = $t851_852.$get(); obj.appNonce = v; $t851_852.$set(obj); } };
2068    $t856_857 = hexb('e1f00aec3118ef894e8ef857');
2069    $t857_858 = { $get() { return $t851_852.$get().hsKey; }, $set(v) { const obj = $t851_852.$get(); obj.hsKey = v; $t851_852.$set(obj); } };
2070    $t858_859 = hexb('7b5c6ce8984d99f66580da728668b45e3de0123b204e1570588305ea2b23b16a');
2071    $t859_860 = { $get() { return $t851_852.$get().hsNonce; }, $set(v) { const obj = $t851_852.$get(); obj.hsNonce = v; $t851_852.$set(obj); } };
2072    $t860_861 = hexb('80ff5aaeda7f3c393cf47948');
2073    $t852_853.$set(15);
2074    $t853_854.$set($t854_855);
2075    $t855_856.$set($t856_857);
2076    $t857_858.$set($t858_859);
2077    $t859_860.$set($t860_861);
2078    $t861_862 = $rt.builtin.sliceSlice($t840_841.$get(), undefined, undefined, undefined);
2079    $t839_840.$set($t861_862);
2080    $t862_863 = $t501_502.$get().addr(15);
2081    $t863_864 = { $get() { return $t862_863.$get().gens; }, $set(v) { const obj = $t862_863.$get(); obj.gens = v; $t862_863.$set(obj); } };
2082    $t864_865 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2083    $t865_866 = $t864_865.$get().addr(0);
2084    $t866_867 = { $get() { return $t865_866.$get().generation; }, $set(v) { const obj = $t865_866.$get(); obj.generation = v; $t865_866.$set(obj); } };
2085    $t867_868 = { $get() { return $t865_866.$get().appKey; }, $set(v) { const obj = $t865_866.$get(); obj.appKey = v; $t865_866.$set(obj); } };
2086    $t868_869 = hexb('b664d4492582843ba0f571ac4e97e4203a49c1ce7643401eb97a8674e557e4b6');
2087    $t869_870 = { $get() { return $t865_866.$get().appNonce; }, $set(v) { const obj = $t865_866.$get(); obj.appNonce = v; $t865_866.$set(obj); } };
2088    $t870_871 = hexb('3670a16a75f8c3ccf3534214');
2089    $t871_872 = { $get() { return $t865_866.$get().hsKey; }, $set(v) { const obj = $t865_866.$get(); obj.hsKey = v; $t865_866.$set(obj); } };
2090    $t872_873 = hexb('74528d0685d43dcdb5f6570da71b8c0885e5d7ed1a24045e2a7a975689170990');
2091    $t873_874 = { $get() { return $t865_866.$get().hsNonce; }, $set(v) { const obj = $t865_866.$get(); obj.hsNonce = v; $t865_866.$set(obj); } };
2092    $t874_875 = hexb('3761799305f9061f065404bd');
2093    $t866_867.$set(0);
2094    $t867_868.$set($t868_869);
2095    $t869_870.$set($t870_871);
2096    $t871_872.$set($t872_873);
2097    $t873_874.$set($t874_875);
2098    $t875_876 = $t864_865.$get().addr(1);
2099    $t876_877 = { $get() { return $t875_876.$get().generation; }, $set(v) { const obj = $t875_876.$get(); obj.generation = v; $t875_876.$set(obj); } };
2100    $t877_878 = { $get() { return $t875_876.$get().appKey; }, $set(v) { const obj = $t875_876.$get(); obj.appKey = v; $t875_876.$set(obj); } };
2101    $t878_879 = hexb('577bac50ea300acac89c821a7a72e66d6222ab61b99859533fecaf13316e968b');
2102    $t879_880 = { $get() { return $t875_876.$get().appNonce; }, $set(v) { const obj = $t875_876.$get(); obj.appNonce = v; $t875_876.$set(obj); } };
2103    $t880_881 = hexb('59deb0f69cc9208213e01c17');
2104    $t881_882 = { $get() { return $t875_876.$get().hsKey; }, $set(v) { const obj = $t875_876.$get(); obj.hsKey = v; $t875_876.$set(obj); } };
2105    $t882_883 = hexb('93fd884a5ef67ffea4fa9e423cb806efb132f60a888a0e398c621ac6643b9e05');
2106    $t883_884 = { $get() { return $t875_876.$get().hsNonce; }, $set(v) { const obj = $t875_876.$get(); obj.hsNonce = v; $t875_876.$set(obj); } };
2107    $t884_885 = hexb('4de1d7c4144280931b77e463');
2108    $t876_877.$set(15);
2109    $t877_878.$set($t878_879);
2110    $t879_880.$set($t880_881);
2111    $t881_882.$set($t882_883);
2112    $t883_884.$set($t884_885);
2113    $t885_886 = $rt.builtin.sliceSlice($t864_865.$get(), undefined, undefined, undefined);
2114    $t863_864.$set($t885_886);
2115    $t886_887 = $t501_502.$get().addr(16);
2116    $t887_888 = { $get() { return $t886_887.$get().gens; }, $set(v) { const obj = $t886_887.$get(); obj.gens = v; $t886_887.$set(obj); } };
2117    $t888_889 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2118    $t889_890 = $t888_889.$get().addr(0);
2119    $t890_891 = { $get() { return $t889_890.$get().generation; }, $set(v) { const obj = $t889_890.$get(); obj.generation = v; $t889_890.$set(obj); } };
2120    $t891_892 = { $get() { return $t889_890.$get().appKey; }, $set(v) { const obj = $t889_890.$get(); obj.appKey = v; $t889_890.$set(obj); } };
2121    $t892_893 = hexb('b2e26e5a1c4c6da6868f9cd065e1b0ecb44a28ebb9c2b3cb424034dfc3995317');
2122    $t893_894 = { $get() { return $t889_890.$get().appNonce; }, $set(v) { const obj = $t889_890.$get(); obj.appNonce = v; $t889_890.$set(obj); } };
2123    $t894_895 = hexb('9eebf0915efb97b858f7b768');
2124    $t895_896 = { $get() { return $t889_890.$get().hsKey; }, $set(v) { const obj = $t889_890.$get(); obj.hsKey = v; $t889_890.$set(obj); } };
2125    $t896_897 = hexb('a637c514b7c829cab2a9629a8ff25271243615bf4859564a612fa1c4558a4712');
2126    $t897_898 = { $get() { return $t889_890.$get().hsNonce; }, $set(v) { const obj = $t889_890.$get(); obj.hsNonce = v; $t889_890.$set(obj); } };
2127    $t898_899 = hexb('4af4d19d36f35331b94b2266');
2128    $t890_891.$set(0);
2129    $t891_892.$set($t892_893);
2130    $t893_894.$set($t894_895);
2131    $t895_896.$set($t896_897);
2132    $t897_898.$set($t898_899);
2133    $t899_900 = $t888_889.$get().addr(1);
2134    $t900_901 = { $get() { return $t899_900.$get().generation; }, $set(v) { const obj = $t899_900.$get(); obj.generation = v; $t899_900.$set(obj); } };
2135    $t901_902 = { $get() { return $t899_900.$get().appKey; }, $set(v) { const obj = $t899_900.$get(); obj.appKey = v; $t899_900.$set(obj); } };
2136    $t902_903 = hexb('ce8f0371058f53aa3acf4247d3e5ad4406fbc34133da172ee02f07390a24c7ef');
2137    $t903_904 = { $get() { return $t899_900.$get().appNonce; }, $set(v) { const obj = $t899_900.$get(); obj.appNonce = v; $t899_900.$set(obj); } };
2138    $t904_905 = hexb('6f8daf39512d316ed125f780');
2139    $t905_906 = { $get() { return $t899_900.$get().hsKey; }, $set(v) { const obj = $t899_900.$get(); obj.hsKey = v; $t899_900.$set(obj); } };
2140    $t906_907 = hexb('14370e699dd51f7b5d20e7de7902d08063b59f919617d174d62afe7087e93986');
2141    $t907_908 = { $get() { return $t899_900.$get().hsNonce; }, $set(v) { const obj = $t899_900.$get(); obj.hsNonce = v; $t899_900.$set(obj); } };
2142    $t908_909 = hexb('bad0c7cc1627aa98fa92ead0');
2143    $t900_901.$set(15);
2144    $t901_902.$set($t902_903);
2145    $t903_904.$set($t904_905);
2146    $t905_906.$set($t906_907);
2147    $t907_908.$set($t908_909);
2148    $t909_910 = $rt.builtin.sliceSlice($t888_889.$get(), undefined, undefined, undefined);
2149    $t887_888.$set($t909_910);
2150    $t910_911 = $t501_502.$get().addr(17);
2151    $t911_912 = { $get() { return $t910_911.$get().gens; }, $set(v) { const obj = $t910_911.$get(); obj.gens = v; $t910_911.$set(obj); } };
2152    $t912_913 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2153    $t913_914 = $t912_913.$get().addr(0);
2154    $t914_915 = { $get() { return $t913_914.$get().generation; }, $set(v) { const obj = $t913_914.$get(); obj.generation = v; $t913_914.$set(obj); } };
2155    $t915_916 = { $get() { return $t913_914.$get().appKey; }, $set(v) { const obj = $t913_914.$get(); obj.appKey = v; $t913_914.$set(obj); } };
2156    $t916_917 = hexb('6d0dea98855b5c994e218ba2f0976bbf62967be1158cd59c331fbeb11a2d561c');
2157    $t917_918 = { $get() { return $t913_914.$get().appNonce; }, $set(v) { const obj = $t913_914.$get(); obj.appNonce = v; $t913_914.$set(obj); } };
2158    $t918_919 = hexb('35f162ec922c7ea06807f8f9');
2159    $t919_920 = { $get() { return $t913_914.$get().hsKey; }, $set(v) { const obj = $t913_914.$get(); obj.hsKey = v; $t913_914.$set(obj); } };
2160    $t920_921 = hexb('4c01b96ba7b96dac8fa88fdeda453f6784e5223a03447191dc1588cc95ca9673');
2161    $t921_922 = { $get() { return $t913_914.$get().hsNonce; }, $set(v) { const obj = $t913_914.$get(); obj.hsNonce = v; $t913_914.$set(obj); } };
2162    $t922_923 = hexb('1da27b4eda1116016cbdb387');
2163    $t914_915.$set(0);
2164    $t915_916.$set($t916_917);
2165    $t917_918.$set($t918_919);
2166    $t919_920.$set($t920_921);
2167    $t921_922.$set($t922_923);
2168    $t923_924 = $t912_913.$get().addr(1);
2169    $t924_925 = { $get() { return $t923_924.$get().generation; }, $set(v) { const obj = $t923_924.$get(); obj.generation = v; $t923_924.$set(obj); } };
2170    $t925_926 = { $get() { return $t923_924.$get().appKey; }, $set(v) { const obj = $t923_924.$get(); obj.appKey = v; $t923_924.$set(obj); } };
2171    $t926_927 = hexb('5ea43052a92e9c24d54023c98fc9b986ca0348dfba60bef879174e2fc694f9ae');
2172    $t927_928 = { $get() { return $t923_924.$get().appNonce; }, $set(v) { const obj = $t923_924.$get(); obj.appNonce = v; $t923_924.$set(obj); } };
2173    $t928_929 = hexb('7eb562ee1b95d4ea6ff23ada');
2174    $t929_930 = { $get() { return $t923_924.$get().hsKey; }, $set(v) { const obj = $t923_924.$get(); obj.hsKey = v; $t923_924.$set(obj); } };
2175    $t930_931 = hexb('641fa6c1261e6e30609adf7806fd98a0d8311cc1997da2c2996cee7a4c367dfb');
2176    $t931_932 = { $get() { return $t923_924.$get().hsNonce; }, $set(v) { const obj = $t923_924.$get(); obj.hsNonce = v; $t923_924.$set(obj); } };
2177    $t932_933 = hexb('ef7478c8589fa2839b8159d7');
2178    $t924_925.$set(15);
2179    $t925_926.$set($t926_927);
2180    $t927_928.$set($t928_929);
2181    $t929_930.$set($t930_931);
2182    $t931_932.$set($t932_933);
2183    $t933_934 = $rt.builtin.sliceSlice($t912_913.$get(), undefined, undefined, undefined);
2184    $t911_912.$set($t933_934);
2185    $t934_935 = $t501_502.$get().addr(18);
2186    $t935_936 = { $get() { return $t934_935.$get().gens; }, $set(v) { const obj = $t934_935.$get(); obj.gens = v; $t934_935.$set(obj); } };
2187    $t936_937 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2188    $t937_938 = $t936_937.$get().addr(0);
2189    $t938_939 = { $get() { return $t937_938.$get().generation; }, $set(v) { const obj = $t937_938.$get(); obj.generation = v; $t937_938.$set(obj); } };
2190    $t939_940 = { $get() { return $t937_938.$get().appKey; }, $set(v) { const obj = $t937_938.$get(); obj.appKey = v; $t937_938.$set(obj); } };
2191    $t940_941 = hexb('60f42b93db6b678ca6aa1404de43e25dd91903b66fa27806b94f7b9875408848');
2192    $t941_942 = { $get() { return $t937_938.$get().appNonce; }, $set(v) { const obj = $t937_938.$get(); obj.appNonce = v; $t937_938.$set(obj); } };
2193    $t942_943 = hexb('2c9d0dbbc1a2c81e3c443e19');
2194    $t943_944 = { $get() { return $t937_938.$get().hsKey; }, $set(v) { const obj = $t937_938.$get(); obj.hsKey = v; $t937_938.$set(obj); } };
2195    $t944_945 = hexb('1f6de251bbf2b13cb520e67df4b33e24637cf31c3702782d29a6f8f839afd208');
2196    $t945_946 = { $get() { return $t937_938.$get().hsNonce; }, $set(v) { const obj = $t937_938.$get(); obj.hsNonce = v; $t937_938.$set(obj); } };
2197    $t946_947 = hexb('7beec37adaa7410d847a2144');
2198    $t938_939.$set(0);
2199    $t939_940.$set($t940_941);
2200    $t941_942.$set($t942_943);
2201    $t943_944.$set($t944_945);
2202    $t945_946.$set($t946_947);
2203    $t947_948 = $t936_937.$get().addr(1);
2204    $t948_949 = { $get() { return $t947_948.$get().generation; }, $set(v) { const obj = $t947_948.$get(); obj.generation = v; $t947_948.$set(obj); } };
2205    $t949_950 = { $get() { return $t947_948.$get().appKey; }, $set(v) { const obj = $t947_948.$get(); obj.appKey = v; $t947_948.$set(obj); } };
2206    $t950_951 = hexb('80b4c8c0e00c3ad0508b9e96edcfb3a892872ccdec48095b546997c55d26ce4f');
2207    $t951_952 = { $get() { return $t947_948.$get().appNonce; }, $set(v) { const obj = $t947_948.$get(); obj.appNonce = v; $t947_948.$set(obj); } };
2208    $t952_953 = hexb('f3e486464fafed0ca31cd440');
2209    $t953_954 = { $get() { return $t947_948.$get().hsKey; }, $set(v) { const obj = $t947_948.$get(); obj.hsKey = v; $t947_948.$set(obj); } };
2210    $t954_955 = hexb('63751909275974233fefcf4176e3aabdb634a9b4a362fa06e840f27754349ef1');
2211    $t955_956 = { $get() { return $t947_948.$get().hsNonce; }, $set(v) { const obj = $t947_948.$get(); obj.hsNonce = v; $t947_948.$set(obj); } };
2212    $t956_957 = hexb('6bc125402f08559ce072eb7d');
2213    $t948_949.$set(15);
2214    $t949_950.$set($t950_951);
2215    $t951_952.$set($t952_953);
2216    $t953_954.$set($t954_955);
2217    $t955_956.$set($t956_957);
2218    $t957_958 = $rt.builtin.sliceSlice($t936_937.$get(), undefined, undefined, undefined);
2219    $t935_936.$set($t957_958);
2220    $t958_959 = $t501_502.$get().addr(19);
2221    $t959_960 = { $get() { return $t958_959.$get().gens; }, $set(v) { const obj = $t958_959.$get(); obj.gens = v; $t958_959.$set(obj); } };
2222    $t960_961 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2223    $t961_962 = $t960_961.$get().addr(0);
2224    $t962_963 = { $get() { return $t961_962.$get().generation; }, $set(v) { const obj = $t961_962.$get(); obj.generation = v; $t961_962.$set(obj); } };
2225    $t963_964 = { $get() { return $t961_962.$get().appKey; }, $set(v) { const obj = $t961_962.$get(); obj.appKey = v; $t961_962.$set(obj); } };
2226    $t964_965 = hexb('552aabba30e419de851fb2c6c4e3eb7c43a5bfe12d846b9ac7f53fa1d4f01090');
2227    $t965_966 = { $get() { return $t961_962.$get().appNonce; }, $set(v) { const obj = $t961_962.$get(); obj.appNonce = v; $t961_962.$set(obj); } };
2228    $t966_967 = hexb('99842f50b3484f21124680da');
2229    $t967_968 = { $get() { return $t961_962.$get().hsKey; }, $set(v) { const obj = $t961_962.$get(); obj.hsKey = v; $t961_962.$set(obj); } };
2230    $t968_969 = hexb('1daf5540dab095fd914501033872bf7c86274db51fa0acbef6a9ac4ffb550244');
2231    $t969_970 = { $get() { return $t961_962.$get().hsNonce; }, $set(v) { const obj = $t961_962.$get(); obj.hsNonce = v; $t961_962.$set(obj); } };
2232    $t970_971 = hexb('9d98bfe879c91a3055ef0e83');
2233    $t962_963.$set(0);
2234    $t963_964.$set($t964_965);
2235    $t965_966.$set($t966_967);
2236    $t967_968.$set($t968_969);
2237    $t969_970.$set($t970_971);
2238    $t971_972 = $t960_961.$get().addr(1);
2239    $t972_973 = { $get() { return $t971_972.$get().generation; }, $set(v) { const obj = $t971_972.$get(); obj.generation = v; $t971_972.$set(obj); } };
2240    $t973_974 = { $get() { return $t971_972.$get().appKey; }, $set(v) { const obj = $t971_972.$get(); obj.appKey = v; $t971_972.$set(obj); } };
2241    $t974_975 = hexb('58ad351fd3f97c9cd1f6d2db7e90bc22db89a4e1a5bdea4ca595b1b51b3b4af9');
2242    $t975_976 = { $get() { return $t971_972.$get().appNonce; }, $set(v) { const obj = $t971_972.$get(); obj.appNonce = v; $t971_972.$set(obj); } };
2243    $t976_977 = hexb('0d066d818b4bfd670c37fa2f');
2244    $t977_978 = { $get() { return $t971_972.$get().hsKey; }, $set(v) { const obj = $t971_972.$get(); obj.hsKey = v; $t971_972.$set(obj); } };
2245    $t978_979 = hexb('f51a272bee65bf5e5021f8d244c294bcfe22ebd9fcef68d6503ac28d2067a515');
2246    $t979_980 = { $get() { return $t971_972.$get().hsNonce; }, $set(v) { const obj = $t971_972.$get(); obj.hsNonce = v; $t971_972.$set(obj); } };
2247    $t980_981 = hexb('33b2c5f398482892898dda32');
2248    $t972_973.$set(15);
2249    $t973_974.$set($t974_975);
2250    $t975_976.$set($t976_977);
2251    $t977_978.$set($t978_979);
2252    $t979_980.$set($t980_981);
2253    $t981_982 = $rt.builtin.sliceSlice($t960_961.$get(), undefined, undefined, undefined);
2254    $t959_960.$set($t981_982);
2255    $t982_983 = $t501_502.$get().addr(20);
2256    $t983_984 = { $get() { return $t982_983.$get().gens; }, $set(v) { const obj = $t982_983.$get(); obj.gens = v; $t982_983.$set(obj); } };
2257    $t984_985 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2258    $t985_986 = $t984_985.$get().addr(0);
2259    $t986_987 = { $get() { return $t985_986.$get().generation; }, $set(v) { const obj = $t985_986.$get(); obj.generation = v; $t985_986.$set(obj); } };
2260    $t987_988 = { $get() { return $t985_986.$get().appKey; }, $set(v) { const obj = $t985_986.$get(); obj.appKey = v; $t985_986.$set(obj); } };
2261    $t988_989 = hexb('b9f48c4910c280fb5a5caa59d6ccae2d13fb699a70eeaf5dfdedaa591d7ae60b');
2262    $t989_990 = { $get() { return $t985_986.$get().appNonce; }, $set(v) { const obj = $t985_986.$get(); obj.appNonce = v; $t985_986.$set(obj); } };
2263    $t990_991 = hexb('fc1c013946ce4e2f718a8194');
2264    $t991_992 = { $get() { return $t985_986.$get().hsKey; }, $set(v) { const obj = $t985_986.$get(); obj.hsKey = v; $t985_986.$set(obj); } };
2265    $t992_993 = hexb('235ca988cd3fa54a987e8c6696150b8e10f32cd54bf0920961d3fcfea0bb1750');
2266    $t993_994 = { $get() { return $t985_986.$get().hsNonce; }, $set(v) { const obj = $t985_986.$get(); obj.hsNonce = v; $t985_986.$set(obj); } };
2267    $t994_995 = hexb('56b0c544d20aba38b39fb3ab');
2268    $t986_987.$set(0);
2269    $t987_988.$set($t988_989);
2270    $t989_990.$set($t990_991);
2271    $t991_992.$set($t992_993);
2272    $t993_994.$set($t994_995);
2273    $t995_996 = $t984_985.$get().addr(1);
2274    $t996_997 = { $get() { return $t995_996.$get().generation; }, $set(v) { const obj = $t995_996.$get(); obj.generation = v; $t995_996.$set(obj); } };
2275    $t997_998 = { $get() { return $t995_996.$get().appKey; }, $set(v) { const obj = $t995_996.$get(); obj.appKey = v; $t995_996.$set(obj); } };
2276    $t998_999 = hexb('9513d72e097d59945ef55fdeebcf78e2fa764a7005c2142f3ff60202732f72f7');
2277    $t999_1000 = { $get() { return $t995_996.$get().appNonce; }, $set(v) { const obj = $t995_996.$get(); obj.appNonce = v; $t995_996.$set(obj); } };
2278    $t1000_1001 = hexb('8830961dd3996ecea1fc04e4');
2279    $t1001_1002 = { $get() { return $t995_996.$get().hsKey; }, $set(v) { const obj = $t995_996.$get(); obj.hsKey = v; $t995_996.$set(obj); } };
2280    $t1002_1003 = hexb('cc308ee4cefa2403a172210a7f452f08c5811bf62743c857e997766d4856d781');
2281    $t1003_1004 = { $get() { return $t995_996.$get().hsNonce; }, $set(v) { const obj = $t995_996.$get(); obj.hsNonce = v; $t995_996.$set(obj); } };
2282    $t1004_1005 = hexb('7a654742529da576490049b0');
2283    $t996_997.$set(15);
2284    $t997_998.$set($t998_999);
2285    $t999_1000.$set($t1000_1001);
2286    $t1001_1002.$set($t1002_1003);
2287    $t1003_1004.$set($t1004_1005);
2288    $t1005_1006 = $rt.builtin.sliceSlice($t984_985.$get(), undefined, undefined, undefined);
2289    $t983_984.$set($t1005_1006);
2290    $t1006_1007 = $t501_502.$get().addr(21);
2291    $t1007_1008 = { $get() { return $t1006_1007.$get().gens; }, $set(v) { const obj = $t1006_1007.$get(); obj.gens = v; $t1006_1007.$set(obj); } };
2292    $t1008_1009 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2293    $t1009_1010 = $t1008_1009.$get().addr(0);
2294    $t1010_1011 = { $get() { return $t1009_1010.$get().generation; }, $set(v) { const obj = $t1009_1010.$get(); obj.generation = v; $t1009_1010.$set(obj); } };
2295    $t1011_1012 = { $get() { return $t1009_1010.$get().appKey; }, $set(v) { const obj = $t1009_1010.$get(); obj.appKey = v; $t1009_1010.$set(obj); } };
2296    $t1012_1013 = hexb('00ee6bff7a38d1af3f02fc33427dce21df57be6431e3d3debf9403f4061b1677');
2297    $t1013_1014 = { $get() { return $t1009_1010.$get().appNonce; }, $set(v) { const obj = $t1009_1010.$get(); obj.appNonce = v; $t1009_1010.$set(obj); } };
2298    $t1014_1015 = hexb('18931c5c8ed5968ac7e34b16');
2299    $t1015_1016 = { $get() { return $t1009_1010.$get().hsKey; }, $set(v) { const obj = $t1009_1010.$get(); obj.hsKey = v; $t1009_1010.$set(obj); } };
2300    $t1016_1017 = hexb('6eef12f40735cf41e3ed956616ffed807bc17eb0d1a3a4ddb4d8a2c191ad7227');
2301    $t1017_1018 = { $get() { return $t1009_1010.$get().hsNonce; }, $set(v) { const obj = $t1009_1010.$get(); obj.hsNonce = v; $t1009_1010.$set(obj); } };
2302    $t1018_1019 = hexb('c335f7d3b01689f54dd0de73');
2303    $t1010_1011.$set(0);
2304    $t1011_1012.$set($t1012_1013);
2305    $t1013_1014.$set($t1014_1015);
2306    $t1015_1016.$set($t1016_1017);
2307    $t1017_1018.$set($t1018_1019);
2308    $t1019_1020 = $t1008_1009.$get().addr(1);
2309    $t1020_1021 = { $get() { return $t1019_1020.$get().generation; }, $set(v) { const obj = $t1019_1020.$get(); obj.generation = v; $t1019_1020.$set(obj); } };
2310    $t1021_1022 = { $get() { return $t1019_1020.$get().appKey; }, $set(v) { const obj = $t1019_1020.$get(); obj.appKey = v; $t1019_1020.$set(obj); } };
2311    $t1022_1023 = hexb('e5c864190765a8c4bf618fabdcbaf17082903bf16f1ba1f43202c581056b0680');
2312    $t1023_1024 = { $get() { return $t1019_1020.$get().appNonce; }, $set(v) { const obj = $t1019_1020.$get(); obj.appNonce = v; $t1019_1020.$set(obj); } };
2313    $t1024_1025 = hexb('58cf28bbc5913c5425ecc6f3');
2314    $t1025_1026 = { $get() { return $t1019_1020.$get().hsKey; }, $set(v) { const obj = $t1019_1020.$get(); obj.hsKey = v; $t1019_1020.$set(obj); } };
2315    $t1026_1027 = hexb('c5cd9f2c0fc5556eb1b72cd5347e3bd2b3f32e1573e52d99327b593d026bb935');
2316    $t1027_1028 = { $get() { return $t1019_1020.$get().hsNonce; }, $set(v) { const obj = $t1019_1020.$get(); obj.hsNonce = v; $t1019_1020.$set(obj); } };
2317    $t1028_1029 = hexb('83822100c66ab081058c4e98');
2318    $t1020_1021.$set(15);
2319    $t1021_1022.$set($t1022_1023);
2320    $t1023_1024.$set($t1024_1025);
2321    $t1025_1026.$set($t1026_1027);
2322    $t1027_1028.$set($t1028_1029);
2323    $t1029_1030 = $rt.builtin.sliceSlice($t1008_1009.$get(), undefined, undefined, undefined);
2324    $t1007_1008.$set($t1029_1030);
2325    $t1030_1031 = $t501_502.$get().addr(22);
2326    $t1031_1032 = { $get() { return $t1030_1031.$get().gens; }, $set(v) { const obj = $t1030_1031.$get(); obj.gens = v; $t1030_1031.$set(obj); } };
2327    $t1032_1033 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2328    $t1033_1034 = $t1032_1033.$get().addr(0);
2329    $t1034_1035 = { $get() { return $t1033_1034.$get().generation; }, $set(v) { const obj = $t1033_1034.$get(); obj.generation = v; $t1033_1034.$set(obj); } };
2330    $t1035_1036 = { $get() { return $t1033_1034.$get().appKey; }, $set(v) { const obj = $t1033_1034.$get(); obj.appKey = v; $t1033_1034.$set(obj); } };
2331    $t1036_1037 = hexb('bd1b0e751ad168d77167373c9f35d03ebcb2d6ac61c8bf8080967955d5f130c6');
2332    $t1037_1038 = { $get() { return $t1033_1034.$get().appNonce; }, $set(v) { const obj = $t1033_1034.$get(); obj.appNonce = v; $t1033_1034.$set(obj); } };
2333    $t1038_1039 = hexb('69402b8abf6d591b94b2b789');
2334    $t1039_1040 = { $get() { return $t1033_1034.$get().hsKey; }, $set(v) { const obj = $t1033_1034.$get(); obj.hsKey = v; $t1033_1034.$set(obj); } };
2335    $t1040_1041 = hexb('c0e2b786481eb9216d26cb84c8ae65fa631512b30a28320350eb80fc3190a3a6');
2336    $t1041_1042 = { $get() { return $t1033_1034.$get().hsNonce; }, $set(v) { const obj = $t1033_1034.$get(); obj.hsNonce = v; $t1033_1034.$set(obj); } };
2337    $t1042_1043 = hexb('7b5b181ed1c2bb1d486ab0c7');
2338    $t1034_1035.$set(0);
2339    $t1035_1036.$set($t1036_1037);
2340    $t1037_1038.$set($t1038_1039);
2341    $t1039_1040.$set($t1040_1041);
2342    $t1041_1042.$set($t1042_1043);
2343    $t1043_1044 = $t1032_1033.$get().addr(1);
2344    $t1044_1045 = { $get() { return $t1043_1044.$get().generation; }, $set(v) { const obj = $t1043_1044.$get(); obj.generation = v; $t1043_1044.$set(obj); } };
2345    $t1045_1046 = { $get() { return $t1043_1044.$get().appKey; }, $set(v) { const obj = $t1043_1044.$get(); obj.appKey = v; $t1043_1044.$set(obj); } };
2346    $t1046_1047 = hexb('778ae0a3a44e33ab4e70587a372df8f21895727f2a9f07fc869b12839bf64898');
2347    $t1047_1048 = { $get() { return $t1043_1044.$get().appNonce; }, $set(v) { const obj = $t1043_1044.$get(); obj.appNonce = v; $t1043_1044.$set(obj); } };
2348    $t1048_1049 = hexb('251bc1775d3c2d0dee7b8cc5');
2349    $t1049_1050 = { $get() { return $t1043_1044.$get().hsKey; }, $set(v) { const obj = $t1043_1044.$get(); obj.hsKey = v; $t1043_1044.$set(obj); } };
2350    $t1050_1051 = hexb('01bd4236b9a221a77ccb2c0acab295db45bbe22e465c6cce5092f0677468d8db');
2351    $t1051_1052 = { $get() { return $t1043_1044.$get().hsNonce; }, $set(v) { const obj = $t1043_1044.$get(); obj.hsNonce = v; $t1043_1044.$set(obj); } };
2352    $t1052_1053 = hexb('b7a6d94f134416410be01722');
2353    $t1044_1045.$set(15);
2354    $t1045_1046.$set($t1046_1047);
2355    $t1047_1048.$set($t1048_1049);
2356    $t1049_1050.$set($t1050_1051);
2357    $t1051_1052.$set($t1052_1053);
2358    $t1053_1054 = $rt.builtin.sliceSlice($t1032_1033.$get(), undefined, undefined, undefined);
2359    $t1031_1032.$set($t1053_1054);
2360    $t1054_1055 = $t501_502.$get().addr(23);
2361    $t1055_1056 = { $get() { return $t1054_1055.$get().gens; }, $set(v) { const obj = $t1054_1055.$get(); obj.gens = v; $t1054_1055.$set(obj); } };
2362    $t1056_1057 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2363    $t1057_1058 = $t1056_1057.$get().addr(0);
2364    $t1058_1059 = { $get() { return $t1057_1058.$get().generation; }, $set(v) { const obj = $t1057_1058.$get(); obj.generation = v; $t1057_1058.$set(obj); } };
2365    $t1059_1060 = { $get() { return $t1057_1058.$get().appKey; }, $set(v) { const obj = $t1057_1058.$get(); obj.appKey = v; $t1057_1058.$set(obj); } };
2366    $t1060_1061 = hexb('45f51d01477d3a1b56095dba92686d045a199f2475aa85e00f80b5714ab9294c');
2367    $t1061_1062 = { $get() { return $t1057_1058.$get().appNonce; }, $set(v) { const obj = $t1057_1058.$get(); obj.appNonce = v; $t1057_1058.$set(obj); } };
2368    $t1062_1063 = hexb('1917c353ae0ef9f04a92b4da');
2369    $t1063_1064 = { $get() { return $t1057_1058.$get().hsKey; }, $set(v) { const obj = $t1057_1058.$get(); obj.hsKey = v; $t1057_1058.$set(obj); } };
2370    $t1064_1065 = hexb('857980041516d9860405ff2b4660a99200e1645d1b14d62aa5236423d77ccadb');
2371    $t1065_1066 = { $get() { return $t1057_1058.$get().hsNonce; }, $set(v) { const obj = $t1057_1058.$get(); obj.hsNonce = v; $t1057_1058.$set(obj); } };
2372    $t1066_1067 = hexb('6815d9632523b349b3b56d65');
2373    $t1058_1059.$set(0);
2374    $t1059_1060.$set($t1060_1061);
2375    $t1061_1062.$set($t1062_1063);
2376    $t1063_1064.$set($t1064_1065);
2377    $t1065_1066.$set($t1066_1067);
2378    $t1067_1068 = $t1056_1057.$get().addr(1);
2379    $t1068_1069 = { $get() { return $t1067_1068.$get().generation; }, $set(v) { const obj = $t1067_1068.$get(); obj.generation = v; $t1067_1068.$set(obj); } };
2380    $t1069_1070 = { $get() { return $t1067_1068.$get().appKey; }, $set(v) { const obj = $t1067_1068.$get(); obj.appKey = v; $t1067_1068.$set(obj); } };
2381    $t1070_1071 = hexb('52f5f473c85cf7d6489eabd5e12a9938f8f2ded347ec4feb8f26b3340cca78cc');
2382    $t1071_1072 = { $get() { return $t1067_1068.$get().appNonce; }, $set(v) { const obj = $t1067_1068.$get(); obj.appNonce = v; $t1067_1068.$set(obj); } };
2383    $t1072_1073 = hexb('c02f4e2ac8d69a8a49cd2ce9');
2384    $t1073_1074 = { $get() { return $t1067_1068.$get().hsKey; }, $set(v) { const obj = $t1067_1068.$get(); obj.hsKey = v; $t1067_1068.$set(obj); } };
2385    $t1074_1075 = hexb('ef2aa858c74f20f3b6072e7d324d778db0c4ee7afe95014b18e746416444be90');
2386    $t1075_1076 = { $get() { return $t1067_1068.$get().hsNonce; }, $set(v) { const obj = $t1067_1068.$get(); obj.hsNonce = v; $t1067_1068.$set(obj); } };
2387    $t1076_1077 = hexb('d044c981303e0a9e95cf4e12');
2388    $t1068_1069.$set(15);
2389    $t1069_1070.$set($t1070_1071);
2390    $t1071_1072.$set($t1072_1073);
2391    $t1073_1074.$set($t1074_1075);
2392    $t1075_1076.$set($t1076_1077);
2393    $t1077_1078 = $rt.builtin.sliceSlice($t1056_1057.$get(), undefined, undefined, undefined);
2394    $t1055_1056.$set($t1077_1078);
2395    $t1078_1079 = $t501_502.$get().addr(24);
2396    $t1079_1080 = { $get() { return $t1078_1079.$get().gens; }, $set(v) { const obj = $t1078_1079.$get(); obj.gens = v; $t1078_1079.$set(obj); } };
2397    $t1080_1081 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2398    $t1081_1082 = $t1080_1081.$get().addr(0);
2399    $t1082_1083 = { $get() { return $t1081_1082.$get().generation; }, $set(v) { const obj = $t1081_1082.$get(); obj.generation = v; $t1081_1082.$set(obj); } };
2400    $t1083_1084 = { $get() { return $t1081_1082.$get().appKey; }, $set(v) { const obj = $t1081_1082.$get(); obj.appKey = v; $t1081_1082.$set(obj); } };
2401    $t1084_1085 = hexb('f4b713b3f8c3302406b0324fbe7fd976e4bbe4e020f36cefe16584b81203ac9d');
2402    $t1085_1086 = { $get() { return $t1081_1082.$get().appNonce; }, $set(v) { const obj = $t1081_1082.$get(); obj.appNonce = v; $t1081_1082.$set(obj); } };
2403    $t1086_1087 = hexb('a16129d408260754c517ab74');
2404    $t1087_1088 = { $get() { return $t1081_1082.$get().hsKey; }, $set(v) { const obj = $t1081_1082.$get(); obj.hsKey = v; $t1081_1082.$set(obj); } };
2405    $t1088_1089 = hexb('9964ffdde50cb0341ca28f526e049e9b27b61018b6ac2899e7c1c962a0a36fb0');
2406    $t1089_1090 = { $get() { return $t1081_1082.$get().hsNonce; }, $set(v) { const obj = $t1081_1082.$get(); obj.hsNonce = v; $t1081_1082.$set(obj); } };
2407    $t1090_1091 = hexb('193c9a8ded86d031599ca201');
2408    $t1082_1083.$set(0);
2409    $t1083_1084.$set($t1084_1085);
2410    $t1085_1086.$set($t1086_1087);
2411    $t1087_1088.$set($t1088_1089);
2412    $t1089_1090.$set($t1090_1091);
2413    $t1091_1092 = $t1080_1081.$get().addr(1);
2414    $t1092_1093 = { $get() { return $t1091_1092.$get().generation; }, $set(v) { const obj = $t1091_1092.$get(); obj.generation = v; $t1091_1092.$set(obj); } };
2415    $t1093_1094 = { $get() { return $t1091_1092.$get().appKey; }, $set(v) { const obj = $t1091_1092.$get(); obj.appKey = v; $t1091_1092.$set(obj); } };
2416    $t1094_1095 = hexb('9684a7dbae4a961c9cd3a1e6909552d8d67328f8315d3cd7480b9951d7326a56');
2417    $t1095_1096 = { $get() { return $t1091_1092.$get().appNonce; }, $set(v) { const obj = $t1091_1092.$get(); obj.appNonce = v; $t1091_1092.$set(obj); } };
2418    $t1096_1097 = hexb('b3ab89f9344ea903bae44991');
2419    $t1097_1098 = { $get() { return $t1091_1092.$get().hsKey; }, $set(v) { const obj = $t1091_1092.$get(); obj.hsKey = v; $t1091_1092.$set(obj); } };
2420    $t1098_1099 = hexb('88f10067fa213a57da7b15a9fe216e17edef6d4c6919427bb3269e9b02769e6f');
2421    $t1099_1100 = { $get() { return $t1091_1092.$get().hsNonce; }, $set(v) { const obj = $t1091_1092.$get(); obj.hsNonce = v; $t1091_1092.$set(obj); } };
2422    $t1100_1101 = hexb('bb4c1ed548d344cab95fbf76');
2423    $t1092_1093.$set(15);
2424    $t1093_1094.$set($t1094_1095);
2425    $t1095_1096.$set($t1096_1097);
2426    $t1097_1098.$set($t1098_1099);
2427    $t1099_1100.$set($t1100_1101);
2428    $t1101_1102 = $rt.builtin.sliceSlice($t1080_1081.$get(), undefined, undefined, undefined);
2429    $t1079_1080.$set($t1101_1102);
2430    $t1102_1103 = $t501_502.$get().addr(25);
2431    $t1103_1104 = { $get() { return $t1102_1103.$get().gens; }, $set(v) { const obj = $t1102_1103.$get(); obj.gens = v; $t1102_1103.$set(obj); } };
2432    $t1104_1105 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2433    $t1105_1106 = $t1104_1105.$get().addr(0);
2434    $t1106_1107 = { $get() { return $t1105_1106.$get().generation; }, $set(v) { const obj = $t1105_1106.$get(); obj.generation = v; $t1105_1106.$set(obj); } };
2435    $t1107_1108 = { $get() { return $t1105_1106.$get().appKey; }, $set(v) { const obj = $t1105_1106.$get(); obj.appKey = v; $t1105_1106.$set(obj); } };
2436    $t1108_1109 = hexb('9666d72fd981bfa6866c984fd2bc290c16f8f69c129fbab05006610f748bf82b');
2437    $t1109_1110 = { $get() { return $t1105_1106.$get().appNonce; }, $set(v) { const obj = $t1105_1106.$get(); obj.appNonce = v; $t1105_1106.$set(obj); } };
2438    $t1110_1111 = hexb('a90d5e735298f60449e1fba4');
2439    $t1111_1112 = { $get() { return $t1105_1106.$get().hsKey; }, $set(v) { const obj = $t1105_1106.$get(); obj.hsKey = v; $t1105_1106.$set(obj); } };
2440    $t1112_1113 = hexb('73d8d6e350d6f711db01363a4dfccce55bfb819adc4a8eb0f1cb142b920bd95a');
2441    $t1113_1114 = { $get() { return $t1105_1106.$get().hsNonce; }, $set(v) { const obj = $t1105_1106.$get(); obj.hsNonce = v; $t1105_1106.$set(obj); } };
2442    $t1114_1115 = hexb('d86c67f005581d813fe6211a');
2443    $t1106_1107.$set(0);
2444    $t1107_1108.$set($t1108_1109);
2445    $t1109_1110.$set($t1110_1111);
2446    $t1111_1112.$set($t1112_1113);
2447    $t1113_1114.$set($t1114_1115);
2448    $t1115_1116 = $t1104_1105.$get().addr(1);
2449    $t1116_1117 = { $get() { return $t1115_1116.$get().generation; }, $set(v) { const obj = $t1115_1116.$get(); obj.generation = v; $t1115_1116.$set(obj); } };
2450    $t1117_1118 = { $get() { return $t1115_1116.$get().appKey; }, $set(v) { const obj = $t1115_1116.$get(); obj.appKey = v; $t1115_1116.$set(obj); } };
2451    $t1118_1119 = hexb('8a11a2332a979b6a0a6913b067855af1a2bf02481985212990c1ac02b3d425ae');
2452    $t1119_1120 = { $get() { return $t1115_1116.$get().appNonce; }, $set(v) { const obj = $t1115_1116.$get(); obj.appNonce = v; $t1115_1116.$set(obj); } };
2453    $t1120_1121 = hexb('3eb2629a7b3a84e38731446f');
2454    $t1121_1122 = { $get() { return $t1115_1116.$get().hsKey; }, $set(v) { const obj = $t1115_1116.$get(); obj.hsKey = v; $t1115_1116.$set(obj); } };
2455    $t1122_1123 = hexb('9be0769ec171eb5f6a34a5e9b7f6c57662847d3127273c862305d4ed2eb6d476');
2456    $t1123_1124 = { $get() { return $t1115_1116.$get().hsNonce; }, $set(v) { const obj = $t1115_1116.$get(); obj.hsNonce = v; $t1115_1116.$set(obj); } };
2457    $t1124_1125 = hexb('c53146c3f42d45b9e7d6118b');
2458    $t1116_1117.$set(15);
2459    $t1117_1118.$set($t1118_1119);
2460    $t1119_1120.$set($t1120_1121);
2461    $t1121_1122.$set($t1122_1123);
2462    $t1123_1124.$set($t1124_1125);
2463    $t1125_1126 = $rt.builtin.sliceSlice($t1104_1105.$get(), undefined, undefined, undefined);
2464    $t1103_1104.$set($t1125_1126);
2465    $t1126_1127 = $t501_502.$get().addr(26);
2466    $t1127_1128 = { $get() { return $t1126_1127.$get().gens; }, $set(v) { const obj = $t1126_1127.$get(); obj.gens = v; $t1126_1127.$set(obj); } };
2467    $t1128_1129 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2468    $t1129_1130 = $t1128_1129.$get().addr(0);
2469    $t1130_1131 = { $get() { return $t1129_1130.$get().generation; }, $set(v) { const obj = $t1129_1130.$get(); obj.generation = v; $t1129_1130.$set(obj); } };
2470    $t1131_1132 = { $get() { return $t1129_1130.$get().appKey; }, $set(v) { const obj = $t1129_1130.$get(); obj.appKey = v; $t1129_1130.$set(obj); } };
2471    $t1132_1133 = hexb('de9f89f8af5e21978766bae0cb3815bad4e507ea84eb54c91caad51ea238dde7');
2472    $t1133_1134 = { $get() { return $t1129_1130.$get().appNonce; }, $set(v) { const obj = $t1129_1130.$get(); obj.appNonce = v; $t1129_1130.$set(obj); } };
2473    $t1134_1135 = hexb('52694b3920c04ef6f46e9a79');
2474    $t1135_1136 = { $get() { return $t1129_1130.$get().hsKey; }, $set(v) { const obj = $t1129_1130.$get(); obj.hsKey = v; $t1129_1130.$set(obj); } };
2475    $t1136_1137 = hexb('8612f11958ccfdec9e21b4becedc9c831a0eadee0bd19611bccfa4c095a34f10');
2476    $t1137_1138 = { $get() { return $t1129_1130.$get().hsNonce; }, $set(v) { const obj = $t1129_1130.$get(); obj.hsNonce = v; $t1129_1130.$set(obj); } };
2477    $t1138_1139 = hexb('a232d33b2ee057c174eee366');
2478    $t1130_1131.$set(0);
2479    $t1131_1132.$set($t1132_1133);
2480    $t1133_1134.$set($t1134_1135);
2481    $t1135_1136.$set($t1136_1137);
2482    $t1137_1138.$set($t1138_1139);
2483    $t1139_1140 = $t1128_1129.$get().addr(1);
2484    $t1140_1141 = { $get() { return $t1139_1140.$get().generation; }, $set(v) { const obj = $t1139_1140.$get(); obj.generation = v; $t1139_1140.$set(obj); } };
2485    $t1141_1142 = { $get() { return $t1139_1140.$get().appKey; }, $set(v) { const obj = $t1139_1140.$get(); obj.appKey = v; $t1139_1140.$set(obj); } };
2486    $t1142_1143 = hexb('74eb21d8f60f0a64b09632e97a5b4839b176d78fea13e2ba96cc7545e5f62885');
2487    $t1143_1144 = { $get() { return $t1139_1140.$get().appNonce; }, $set(v) { const obj = $t1139_1140.$get(); obj.appNonce = v; $t1139_1140.$set(obj); } };
2488    $t1144_1145 = hexb('bb4f7abf1d0860c1ac553908');
2489    $t1145_1146 = { $get() { return $t1139_1140.$get().hsKey; }, $set(v) { const obj = $t1139_1140.$get(); obj.hsKey = v; $t1139_1140.$set(obj); } };
2490    $t1146_1147 = hexb('dfefa089b41cd4562453b709d43f7968d7c27abb1394554d5fa0a604527f2780');
2491    $t1147_1148 = { $get() { return $t1139_1140.$get().hsNonce; }, $set(v) { const obj = $t1139_1140.$get(); obj.hsNonce = v; $t1139_1140.$set(obj); } };
2492    $t1148_1149 = hexb('5c17aa7253a308d84ab43ba2');
2493    $t1140_1141.$set(15);
2494    $t1141_1142.$set($t1142_1143);
2495    $t1143_1144.$set($t1144_1145);
2496    $t1145_1146.$set($t1146_1147);
2497    $t1147_1148.$set($t1148_1149);
2498    $t1149_1150 = $rt.builtin.sliceSlice($t1128_1129.$get(), undefined, undefined, undefined);
2499    $t1127_1128.$set($t1149_1150);
2500    $t1150_1151 = $t501_502.$get().addr(27);
2501    $t1151_1152 = { $get() { return $t1150_1151.$get().gens; }, $set(v) { const obj = $t1150_1151.$get(); obj.gens = v; $t1150_1151.$set(obj); } };
2502    $t1152_1153 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2503    $t1153_1154 = $t1152_1153.$get().addr(0);
2504    $t1154_1155 = { $get() { return $t1153_1154.$get().generation; }, $set(v) { const obj = $t1153_1154.$get(); obj.generation = v; $t1153_1154.$set(obj); } };
2505    $t1155_1156 = { $get() { return $t1153_1154.$get().appKey; }, $set(v) { const obj = $t1153_1154.$get(); obj.appKey = v; $t1153_1154.$set(obj); } };
2506    $t1156_1157 = hexb('39d564c496b0ee7ee90cb6853d4938eff97a6a7e7396f566fde2aecce1d4a7d3');
2507    $t1157_1158 = { $get() { return $t1153_1154.$get().appNonce; }, $set(v) { const obj = $t1153_1154.$get(); obj.appNonce = v; $t1153_1154.$set(obj); } };
2508    $t1158_1159 = hexb('d8cccccc1c53976c76f18466');
2509    $t1159_1160 = { $get() { return $t1153_1154.$get().hsKey; }, $set(v) { const obj = $t1153_1154.$get(); obj.hsKey = v; $t1153_1154.$set(obj); } };
2510    $t1160_1161 = hexb('cb869bde1eb5b70ff35739f9cb06c8272bad1b4c3bb234de7ffa135b2ed136e4');
2511    $t1161_1162 = { $get() { return $t1153_1154.$get().hsNonce; }, $set(v) { const obj = $t1153_1154.$get(); obj.hsNonce = v; $t1153_1154.$set(obj); } };
2512    $t1162_1163 = hexb('f45e26ebfca815b4b821ee2d');
2513    $t1154_1155.$set(0);
2514    $t1155_1156.$set($t1156_1157);
2515    $t1157_1158.$set($t1158_1159);
2516    $t1159_1160.$set($t1160_1161);
2517    $t1161_1162.$set($t1162_1163);
2518    $t1163_1164 = $t1152_1153.$get().addr(1);
2519    $t1164_1165 = { $get() { return $t1163_1164.$get().generation; }, $set(v) { const obj = $t1163_1164.$get(); obj.generation = v; $t1163_1164.$set(obj); } };
2520    $t1165_1166 = { $get() { return $t1163_1164.$get().appKey; }, $set(v) { const obj = $t1163_1164.$get(); obj.appKey = v; $t1163_1164.$set(obj); } };
2521    $t1166_1167 = hexb('351164206bf6b171d9367e232cf82daf5e7f1ca2397238633c4799d8a476a9b9');
2522    $t1167_1168 = { $get() { return $t1163_1164.$get().appNonce; }, $set(v) { const obj = $t1163_1164.$get(); obj.appNonce = v; $t1163_1164.$set(obj); } };
2523    $t1168_1169 = hexb('bbedbbab0d79fad3854452ab');
2524    $t1169_1170 = { $get() { return $t1163_1164.$get().hsKey; }, $set(v) { const obj = $t1163_1164.$get(); obj.hsKey = v; $t1163_1164.$set(obj); } };
2525    $t1170_1171 = hexb('5062fd8386cba1d40c9277d48ed146eabb8206fd370ea682c4af0b0767db19dc');
2526    $t1171_1172 = { $get() { return $t1163_1164.$get().hsNonce; }, $set(v) { const obj = $t1163_1164.$get(); obj.hsNonce = v; $t1163_1164.$set(obj); } };
2527    $t1172_1173 = hexb('f1807a88fe30c9424630038c');
2528    $t1164_1165.$set(15);
2529    $t1165_1166.$set($t1166_1167);
2530    $t1167_1168.$set($t1168_1169);
2531    $t1169_1170.$set($t1170_1171);
2532    $t1171_1172.$set($t1172_1173);
2533    $t1173_1174 = $rt.builtin.sliceSlice($t1152_1153.$get(), undefined, undefined, undefined);
2534    $t1151_1152.$set($t1173_1174);
2535    $t1174_1175 = $t501_502.$get().addr(28);
2536    $t1175_1176 = { $get() { return $t1174_1175.$get().gens; }, $set(v) { const obj = $t1174_1175.$get(); obj.gens = v; $t1174_1175.$set(obj); } };
2537    $t1176_1177 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2538    $t1177_1178 = $t1176_1177.$get().addr(0);
2539    $t1178_1179 = { $get() { return $t1177_1178.$get().generation; }, $set(v) { const obj = $t1177_1178.$get(); obj.generation = v; $t1177_1178.$set(obj); } };
2540    $t1179_1180 = { $get() { return $t1177_1178.$get().appKey; }, $set(v) { const obj = $t1177_1178.$get(); obj.appKey = v; $t1177_1178.$set(obj); } };
2541    $t1180_1181 = hexb('8c5874902fcf0e6d82a347c766262576dbcb3a9ba1fba79a00becd6acba868c9');
2542    $t1181_1182 = { $get() { return $t1177_1178.$get().appNonce; }, $set(v) { const obj = $t1177_1178.$get(); obj.appNonce = v; $t1177_1178.$set(obj); } };
2543    $t1182_1183 = hexb('5f89bc378212799802de6be4');
2544    $t1183_1184 = { $get() { return $t1177_1178.$get().hsKey; }, $set(v) { const obj = $t1177_1178.$get(); obj.hsKey = v; $t1177_1178.$set(obj); } };
2545    $t1184_1185 = hexb('7c4c2e51e314430775554cb1ff8940bbb4c94a6210b449769be796c98b2424e3');
2546    $t1185_1186 = { $get() { return $t1177_1178.$get().hsNonce; }, $set(v) { const obj = $t1177_1178.$get(); obj.hsNonce = v; $t1177_1178.$set(obj); } };
2547    $t1186_1187 = hexb('360535c001817287e0982106');
2548    $t1178_1179.$set(0);
2549    $t1179_1180.$set($t1180_1181);
2550    $t1181_1182.$set($t1182_1183);
2551    $t1183_1184.$set($t1184_1185);
2552    $t1185_1186.$set($t1186_1187);
2553    $t1187_1188 = $t1176_1177.$get().addr(1);
2554    $t1188_1189 = { $get() { return $t1187_1188.$get().generation; }, $set(v) { const obj = $t1187_1188.$get(); obj.generation = v; $t1187_1188.$set(obj); } };
2555    $t1189_1190 = { $get() { return $t1187_1188.$get().appKey; }, $set(v) { const obj = $t1187_1188.$get(); obj.appKey = v; $t1187_1188.$set(obj); } };
2556    $t1190_1191 = hexb('a4dcdd02a47ababc9d29f2b718801e23c6b91002789aa227c63edd596e8dcce5');
2557    $t1191_1192 = { $get() { return $t1187_1188.$get().appNonce; }, $set(v) { const obj = $t1187_1188.$get(); obj.appNonce = v; $t1187_1188.$set(obj); } };
2558    $t1192_1193 = hexb('90179202d31c7deb9f073297');
2559    $t1193_1194 = { $get() { return $t1187_1188.$get().hsKey; }, $set(v) { const obj = $t1187_1188.$get(); obj.hsKey = v; $t1187_1188.$set(obj); } };
2560    $t1194_1195 = hexb('59b396e69961833f648e05e8c0a065dcd271e81afc35b785645d1fba64aa5bca');
2561    $t1195_1196 = { $get() { return $t1187_1188.$get().hsNonce; }, $set(v) { const obj = $t1187_1188.$get(); obj.hsNonce = v; $t1187_1188.$set(obj); } };
2562    $t1196_1197 = hexb('a4c6cb7e4fa8a290dea9a0f7');
2563    $t1188_1189.$set(15);
2564    $t1189_1190.$set($t1190_1191);
2565    $t1191_1192.$set($t1192_1193);
2566    $t1193_1194.$set($t1194_1195);
2567    $t1195_1196.$set($t1196_1197);
2568    $t1197_1198 = $rt.builtin.sliceSlice($t1176_1177.$get(), undefined, undefined, undefined);
2569    $t1175_1176.$set($t1197_1198);
2570    $t1198_1199 = $t501_502.$get().addr(29);
2571    $t1199_1200 = { $get() { return $t1198_1199.$get().gens; }, $set(v) { const obj = $t1198_1199.$get(); obj.gens = v; $t1198_1199.$set(obj); } };
2572    $t1200_1201 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2573    $t1201_1202 = $t1200_1201.$get().addr(0);
2574    $t1202_1203 = { $get() { return $t1201_1202.$get().generation; }, $set(v) { const obj = $t1201_1202.$get(); obj.generation = v; $t1201_1202.$set(obj); } };
2575    $t1203_1204 = { $get() { return $t1201_1202.$get().appKey; }, $set(v) { const obj = $t1201_1202.$get(); obj.appKey = v; $t1201_1202.$set(obj); } };
2576    $t1204_1205 = hexb('eb403c9e50781670a89e7890cec34deca93834185b12386d354cfd7b3eb4a20c');
2577    $t1205_1206 = { $get() { return $t1201_1202.$get().appNonce; }, $set(v) { const obj = $t1201_1202.$get(); obj.appNonce = v; $t1201_1202.$set(obj); } };
2578    $t1206_1207 = hexb('a4b5342f92c21f024b226dca');
2579    $t1207_1208 = { $get() { return $t1201_1202.$get().hsKey; }, $set(v) { const obj = $t1201_1202.$get(); obj.hsKey = v; $t1201_1202.$set(obj); } };
2580    $t1208_1209 = hexb('3972dfe31100f7f7230bf47848d83b8c26e4f86d47216992319cf6626bca20e4');
2581    $t1209_1210 = { $get() { return $t1201_1202.$get().hsNonce; }, $set(v) { const obj = $t1201_1202.$get(); obj.hsNonce = v; $t1201_1202.$set(obj); } };
2582    $t1210_1211 = hexb('ac47c72e2cacf39bccaa3902');
2583    $t1202_1203.$set(0);
2584    $t1203_1204.$set($t1204_1205);
2585    $t1205_1206.$set($t1206_1207);
2586    $t1207_1208.$set($t1208_1209);
2587    $t1209_1210.$set($t1210_1211);
2588    $t1211_1212 = $t1200_1201.$get().addr(1);
2589    $t1212_1213 = { $get() { return $t1211_1212.$get().generation; }, $set(v) { const obj = $t1211_1212.$get(); obj.generation = v; $t1211_1212.$set(obj); } };
2590    $t1213_1214 = { $get() { return $t1211_1212.$get().appKey; }, $set(v) { const obj = $t1211_1212.$get(); obj.appKey = v; $t1211_1212.$set(obj); } };
2591    $t1214_1215 = hexb('afdcb9be5d122e16abc7c3763f12a0f1009707cffa4965d1f2de34e2f8c63f42');
2592    $t1215_1216 = { $get() { return $t1211_1212.$get().appNonce; }, $set(v) { const obj = $t1211_1212.$get(); obj.appNonce = v; $t1211_1212.$set(obj); } };
2593    $t1216_1217 = hexb('eb96cfea64f6ee0181d29583');
2594    $t1217_1218 = { $get() { return $t1211_1212.$get().hsKey; }, $set(v) { const obj = $t1211_1212.$get(); obj.hsKey = v; $t1211_1212.$set(obj); } };
2595    $t1218_1219 = hexb('92f28b1df9f9badac4d2504f97a0f8f06227e2eecc376cbc4e6230cc762f4eb8');
2596    $t1219_1220 = { $get() { return $t1211_1212.$get().hsNonce; }, $set(v) { const obj = $t1211_1212.$get(); obj.hsNonce = v; $t1211_1212.$set(obj); } };
2597    $t1220_1221 = hexb('d7da6ad009d4617721fd8db9');
2598    $t1212_1213.$set(15);
2599    $t1213_1214.$set($t1214_1215);
2600    $t1215_1216.$set($t1216_1217);
2601    $t1217_1218.$set($t1218_1219);
2602    $t1219_1220.$set($t1220_1221);
2603    $t1221_1222 = $rt.builtin.sliceSlice($t1200_1201.$get(), undefined, undefined, undefined);
2604    $t1199_1200.$set($t1221_1222);
2605    $t1222_1223 = $t501_502.$get().addr(30);
2606    $t1223_1224 = { $get() { return $t1222_1223.$get().gens; }, $set(v) { const obj = $t1222_1223.$get(); obj.gens = v; $t1222_1223.$set(obj); } };
2607    $t1224_1225 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2608    $t1225_1226 = $t1224_1225.$get().addr(0);
2609    $t1226_1227 = { $get() { return $t1225_1226.$get().generation; }, $set(v) { const obj = $t1225_1226.$get(); obj.generation = v; $t1225_1226.$set(obj); } };
2610    $t1227_1228 = { $get() { return $t1225_1226.$get().appKey; }, $set(v) { const obj = $t1225_1226.$get(); obj.appKey = v; $t1225_1226.$set(obj); } };
2611    $t1228_1229 = hexb('53759a62b8bfb13cece035ea5c6b93d9423b9490357b315e3953f91ff874305a');
2612    $t1229_1230 = { $get() { return $t1225_1226.$get().appNonce; }, $set(v) { const obj = $t1225_1226.$get(); obj.appNonce = v; $t1225_1226.$set(obj); } };
2613    $t1230_1231 = hexb('ebca2ba3c6f41973ba3ccc67');
2614    $t1231_1232 = { $get() { return $t1225_1226.$get().hsKey; }, $set(v) { const obj = $t1225_1226.$get(); obj.hsKey = v; $t1225_1226.$set(obj); } };
2615    $t1232_1233 = hexb('508acb31ab4786832c997eed47ecb08b4e84ae54ec8a306caea2f3263ed32b4c');
2616    $t1233_1234 = { $get() { return $t1225_1226.$get().hsNonce; }, $set(v) { const obj = $t1225_1226.$get(); obj.hsNonce = v; $t1225_1226.$set(obj); } };
2617    $t1234_1235 = hexb('e08c95f0c5d655c89c5cb9ab');
2618    $t1226_1227.$set(0);
2619    $t1227_1228.$set($t1228_1229);
2620    $t1229_1230.$set($t1230_1231);
2621    $t1231_1232.$set($t1232_1233);
2622    $t1233_1234.$set($t1234_1235);
2623    $t1235_1236 = $t1224_1225.$get().addr(1);
2624    $t1236_1237 = { $get() { return $t1235_1236.$get().generation; }, $set(v) { const obj = $t1235_1236.$get(); obj.generation = v; $t1235_1236.$set(obj); } };
2625    $t1237_1238 = { $get() { return $t1235_1236.$get().appKey; }, $set(v) { const obj = $t1235_1236.$get(); obj.appKey = v; $t1235_1236.$set(obj); } };
2626    $t1238_1239 = hexb('3efd96fa798ad71f27f9704558d61af1fdc59a98fce954859310a58a61e5c758');
2627    $t1239_1240 = { $get() { return $t1235_1236.$get().appNonce; }, $set(v) { const obj = $t1235_1236.$get(); obj.appNonce = v; $t1235_1236.$set(obj); } };
2628    $t1240_1241 = hexb('560ca28b329ba0b13134970f');
2629    $t1241_1242 = { $get() { return $t1235_1236.$get().hsKey; }, $set(v) { const obj = $t1235_1236.$get(); obj.hsKey = v; $t1235_1236.$set(obj); } };
2630    $t1242_1243 = hexb('c1d567cdb00b7cf868e572b9be2ee6f966411d18ee0f9675bb2c362ae0d2bf0c');
2631    $t1243_1244 = { $get() { return $t1235_1236.$get().hsNonce; }, $set(v) { const obj = $t1235_1236.$get(); obj.hsNonce = v; $t1235_1236.$set(obj); } };
2632    $t1244_1245 = hexb('7d97be13602668670d73f64c');
2633    $t1236_1237.$set(15);
2634    $t1237_1238.$set($t1238_1239);
2635    $t1239_1240.$set($t1240_1241);
2636    $t1241_1242.$set($t1242_1243);
2637    $t1243_1244.$set($t1244_1245);
2638    $t1245_1246 = $rt.builtin.sliceSlice($t1224_1225.$get(), undefined, undefined, undefined);
2639    $t1223_1224.$set($t1245_1246);
2640    $t1246_1247 = $t501_502.$get().addr(31);
2641    $t1247_1248 = { $get() { return $t1246_1247.$get().gens; }, $set(v) { const obj = $t1246_1247.$get(); obj.gens = v; $t1246_1247.$set(obj); } };
2642    $t1248_1249 = { $value: $rt.builtin.makeSlice(2, 2, { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2643    $t1249_1250 = $t1248_1249.$get().addr(0);
2644    $t1250_1251 = { $get() { return $t1249_1250.$get().generation; }, $set(v) { const obj = $t1249_1250.$get(); obj.generation = v; $t1249_1250.$set(obj); } };
2645    $t1251_1252 = { $get() { return $t1249_1250.$get().appKey; }, $set(v) { const obj = $t1249_1250.$get(); obj.appKey = v; $t1249_1250.$set(obj); } };
2646    $t1252_1253 = hexb('07230e423965dc46903e9b7f9299bd7d494337e81ae456fde012e1d20da03ab3');
2647    $t1253_1254 = { $get() { return $t1249_1250.$get().appNonce; }, $set(v) { const obj = $t1249_1250.$get(); obj.appNonce = v; $t1249_1250.$set(obj); } };
2648    $t1254_1255 = hexb('71ea257ff165a0c8b13bb427');
2649    $t1255_1256 = { $get() { return $t1249_1250.$get().hsKey; }, $set(v) { const obj = $t1249_1250.$get(); obj.hsKey = v; $t1249_1250.$set(obj); } };
2650    $t1256_1257 = hexb('7995eb14bc7b2d2de2f8327c2713d3fd67072171afcd340047e16cc9c0723206');
2651    $t1257_1258 = { $get() { return $t1249_1250.$get().hsNonce; }, $set(v) { const obj = $t1249_1250.$get(); obj.hsNonce = v; $t1249_1250.$set(obj); } };
2652    $t1258_1259 = hexb('13c16545ca583976b85edc71');
2653    $t1250_1251.$set(0);
2654    $t1251_1252.$set($t1252_1253);
2655    $t1253_1254.$set($t1254_1255);
2656    $t1255_1256.$set($t1256_1257);
2657    $t1257_1258.$set($t1258_1259);
2658    $t1259_1260 = $t1248_1249.$get().addr(1);
2659    $t1260_1261 = { $get() { return $t1259_1260.$get().generation; }, $set(v) { const obj = $t1259_1260.$get(); obj.generation = v; $t1259_1260.$set(obj); } };
2660    $t1261_1262 = { $get() { return $t1259_1260.$get().appKey; }, $set(v) { const obj = $t1259_1260.$get(); obj.appKey = v; $t1259_1260.$set(obj); } };
2661    $t1262_1263 = hexb('4ccf1caa96504c21a17e6d06388b46aa70dfe22aedcc786f2ad3ff0709e9d949');
2662    $t1263_1264 = { $get() { return $t1259_1260.$get().appNonce; }, $set(v) { const obj = $t1259_1260.$get(); obj.appNonce = v; $t1259_1260.$set(obj); } };
2663    $t1264_1265 = hexb('9d979b762eac328e6f29f749');
2664    $t1265_1266 = { $get() { return $t1259_1260.$get().hsKey; }, $set(v) { const obj = $t1259_1260.$get(); obj.hsKey = v; $t1259_1260.$set(obj); } };
2665    $t1266_1267 = hexb('e88bf2205086e437ccc2c2da260d88bcf060b6a73ce5431af21a4f4c569638b9');
2666    $t1267_1268 = { $get() { return $t1259_1260.$get().hsNonce; }, $set(v) { const obj = $t1259_1260.$get(); obj.hsNonce = v; $t1259_1260.$set(obj); } };
2667    $t1268_1269 = hexb('089f74bf51d0e3b3473b8cfd');
2668    $t1260_1261.$set(15);
2669    $t1261_1262.$set($t1262_1263);
2670    $t1263_1264.$set($t1264_1265);
2671    $t1265_1266.$set($t1266_1267);
2672    $t1267_1268.$set($t1268_1269);
2673    $t1269_1270 = $rt.builtin.sliceSlice($t1248_1249.$get(), undefined, undefined, undefined);
2674    $t1247_1248.$set($t1269_1270);
2675    $t1270_1271 = $rt.builtin.sliceSlice($t501_502.$get(), undefined, undefined, undefined);
2676    $t489_490.$set(32);
2677    $t490_491.$set($t491_492);
2678    $t492_493.$set($t493_494);
2679    $t494_495.$set($t495_496);
2680    $t496_497.$set($t497_498);
2681    $t498_499.$set($t499_500);
2682    $t500_501.$set($t1270_1271);
2683    $t1271_1272 = $rt.builtin.sliceSlice($t241_242.$get(), undefined, undefined, undefined);
2684    stEntries.$set($t1271_1272);
2685    hexchars.$set('0123456789abcdef');
2686    $t1272_1273 = { $value: $rt.builtin.makeSlice(4, 4, { nLeaves: 0, nNodes: 0, root: 0, left: null, right: null, parent: null, sibling: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2687    $t1273_1274 = $t1272_1273.$get().addr(0);
2688    $t1274_1275 = { $get() { return $t1273_1274.$get().nLeaves; }, $set(v) { const obj = $t1273_1274.$get(); obj.nLeaves = v; $t1273_1274.$set(obj); } };
2689    $t1275_1276 = { $get() { return $t1273_1274.$get().nNodes; }, $set(v) { const obj = $t1273_1274.$get(); obj.nNodes = v; $t1273_1274.$set(obj); } };
2690    $t1276_1277 = { $get() { return $t1273_1274.$get().root; }, $set(v) { const obj = $t1273_1274.$get(); obj.root = v; $t1273_1274.$set(obj); } };
2691    $t1277_1278 = { $get() { return $t1273_1274.$get().left; }, $set(v) { const obj = $t1273_1274.$get(); obj.left = v; $t1273_1274.$set(obj); } };
2692    $t1278_1279 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2693    $t1279_1280 = $t1278_1279.$get().addr(0);
2694    $t1279_1280.$set(-1);
2695    $t1280_1281 = $rt.builtin.sliceSlice($t1278_1279.$get(), undefined, undefined, undefined);
2696    $t1281_1282 = { $get() { return $t1273_1274.$get().right; }, $set(v) { const obj = $t1273_1274.$get(); obj.right = v; $t1273_1274.$set(obj); } };
2697    $t1282_1283 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2698    $t1283_1284 = $t1282_1283.$get().addr(0);
2699    $t1283_1284.$set(-1);
2700    $t1284_1285 = $rt.builtin.sliceSlice($t1282_1283.$get(), undefined, undefined, undefined);
2701    $t1285_1286 = { $get() { return $t1273_1274.$get().parent; }, $set(v) { const obj = $t1273_1274.$get(); obj.parent = v; $t1273_1274.$set(obj); } };
2702    $t1286_1287 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2703    $t1287_1288 = $t1286_1287.$get().addr(0);
2704    $t1287_1288.$set(-1);
2705    $t1288_1289 = $rt.builtin.sliceSlice($t1286_1287.$get(), undefined, undefined, undefined);
2706    $t1289_1290 = { $get() { return $t1273_1274.$get().sibling; }, $set(v) { const obj = $t1273_1274.$get(); obj.sibling = v; $t1273_1274.$set(obj); } };
2707    $t1290_1291 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2708    $t1291_1292 = $t1290_1291.$get().addr(0);
2709    $t1291_1292.$set(-1);
2710    $t1292_1293 = $rt.builtin.sliceSlice($t1290_1291.$get(), undefined, undefined, undefined);
2711    $t1274_1275.$set(1);
2712    $t1275_1276.$set(1);
2713    $t1276_1277.$set(0);
2714    $t1277_1278.$set($t1280_1281);
2715    $t1281_1282.$set($t1284_1285);
2716    $t1285_1286.$set($t1288_1289);
2717    $t1289_1290.$set($t1292_1293);
2718    $t1293_1294 = $t1272_1273.$get().addr(1);
2719    $t1294_1295 = { $get() { return $t1293_1294.$get().nLeaves; }, $set(v) { const obj = $t1293_1294.$get(); obj.nLeaves = v; $t1293_1294.$set(obj); } };
2720    $t1295_1296 = { $get() { return $t1293_1294.$get().nNodes; }, $set(v) { const obj = $t1293_1294.$get(); obj.nNodes = v; $t1293_1294.$set(obj); } };
2721    $t1296_1297 = { $get() { return $t1293_1294.$get().root; }, $set(v) { const obj = $t1293_1294.$get(); obj.root = v; $t1293_1294.$set(obj); } };
2722    $t1297_1298 = { $get() { return $t1293_1294.$get().left; }, $set(v) { const obj = $t1293_1294.$get(); obj.left = v; $t1293_1294.$set(obj); } };
2723    $t1298_1299 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2724    $t1299_1300 = $t1298_1299.$get().addr(0);
2725    $t1299_1300.$set(-1);
2726    $t1300_1301 = $t1298_1299.$get().addr(1);
2727    $t1300_1301.$set(0);
2728    $t1301_1302 = $t1298_1299.$get().addr(2);
2729    $t1301_1302.$set(-1);
2730    $t1302_1303 = $rt.builtin.sliceSlice($t1298_1299.$get(), undefined, undefined, undefined);
2731    $t1303_1304 = { $get() { return $t1293_1294.$get().right; }, $set(v) { const obj = $t1293_1294.$get(); obj.right = v; $t1293_1294.$set(obj); } };
2732    $t1304_1305 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2733    $t1305_1306 = $t1304_1305.$get().addr(0);
2734    $t1305_1306.$set(-1);
2735    $t1306_1307 = $t1304_1305.$get().addr(1);
2736    $t1306_1307.$set(2);
2737    $t1307_1308 = $t1304_1305.$get().addr(2);
2738    $t1307_1308.$set(-1);
2739    $t1308_1309 = $rt.builtin.sliceSlice($t1304_1305.$get(), undefined, undefined, undefined);
2740    $t1309_1310 = { $get() { return $t1293_1294.$get().parent; }, $set(v) { const obj = $t1293_1294.$get(); obj.parent = v; $t1293_1294.$set(obj); } };
2741    $t1310_1311 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2742    $t1311_1312 = $t1310_1311.$get().addr(0);
2743    $t1311_1312.$set(1);
2744    $t1312_1313 = $t1310_1311.$get().addr(1);
2745    $t1312_1313.$set(-1);
2746    $t1313_1314 = $t1310_1311.$get().addr(2);
2747    $t1313_1314.$set(1);
2748    $t1314_1315 = $rt.builtin.sliceSlice($t1310_1311.$get(), undefined, undefined, undefined);
2749    $t1315_1316 = { $get() { return $t1293_1294.$get().sibling; }, $set(v) { const obj = $t1293_1294.$get(); obj.sibling = v; $t1293_1294.$set(obj); } };
2750    $t1316_1317 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2751    $t1317_1318 = $t1316_1317.$get().addr(0);
2752    $t1317_1318.$set(2);
2753    $t1318_1319 = $t1316_1317.$get().addr(1);
2754    $t1318_1319.$set(-1);
2755    $t1319_1320 = $t1316_1317.$get().addr(2);
2756    $t1319_1320.$set(0);
2757    $t1320_1321 = $rt.builtin.sliceSlice($t1316_1317.$get(), undefined, undefined, undefined);
2758    $t1294_1295.$set(2);
2759    $t1295_1296.$set(3);
2760    $t1296_1297.$set(1);
2761    $t1297_1298.$set($t1302_1303);
2762    $t1303_1304.$set($t1308_1309);
2763    $t1309_1310.$set($t1314_1315);
2764    $t1315_1316.$set($t1320_1321);
2765    $t1321_1322 = $t1272_1273.$get().addr(2);
2766    $t1322_1323 = { $get() { return $t1321_1322.$get().nLeaves; }, $set(v) { const obj = $t1321_1322.$get(); obj.nLeaves = v; $t1321_1322.$set(obj); } };
2767    $t1323_1324 = { $get() { return $t1321_1322.$get().nNodes; }, $set(v) { const obj = $t1321_1322.$get(); obj.nNodes = v; $t1321_1322.$set(obj); } };
2768    $t1324_1325 = { $get() { return $t1321_1322.$get().root; }, $set(v) { const obj = $t1321_1322.$get(); obj.root = v; $t1321_1322.$set(obj); } };
2769    $t1325_1326 = { $get() { return $t1321_1322.$get().left; }, $set(v) { const obj = $t1321_1322.$get(); obj.left = v; $t1321_1322.$set(obj); } };
2770    $t1326_1327 = { $value: $rt.builtin.makeSlice(7, 7, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2771    $t1327_1328 = $t1326_1327.$get().addr(0);
2772    $t1327_1328.$set(-1);
2773    $t1328_1329 = $t1326_1327.$get().addr(1);
2774    $t1328_1329.$set(0);
2775    $t1329_1330 = $t1326_1327.$get().addr(2);
2776    $t1329_1330.$set(-1);
2777    $t1330_1331 = $t1326_1327.$get().addr(3);
2778    $t1330_1331.$set(1);
2779    $t1331_1332 = $t1326_1327.$get().addr(4);
2780    $t1331_1332.$set(-1);
2781    $t1332_1333 = $t1326_1327.$get().addr(5);
2782    $t1332_1333.$set(4);
2783    $t1333_1334 = $t1326_1327.$get().addr(6);
2784    $t1333_1334.$set(-1);
2785    $t1334_1335 = $rt.builtin.sliceSlice($t1326_1327.$get(), undefined, undefined, undefined);
2786    $t1335_1336 = { $get() { return $t1321_1322.$get().right; }, $set(v) { const obj = $t1321_1322.$get(); obj.right = v; $t1321_1322.$set(obj); } };
2787    $t1336_1337 = { $value: $rt.builtin.makeSlice(7, 7, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2788    $t1337_1338 = $t1336_1337.$get().addr(0);
2789    $t1337_1338.$set(-1);
2790    $t1338_1339 = $t1336_1337.$get().addr(1);
2791    $t1338_1339.$set(2);
2792    $t1339_1340 = $t1336_1337.$get().addr(2);
2793    $t1339_1340.$set(-1);
2794    $t1340_1341 = $t1336_1337.$get().addr(3);
2795    $t1340_1341.$set(5);
2796    $t1341_1342 = $t1336_1337.$get().addr(4);
2797    $t1341_1342.$set(-1);
2798    $t1342_1343 = $t1336_1337.$get().addr(5);
2799    $t1342_1343.$set(6);
2800    $t1343_1344 = $t1336_1337.$get().addr(6);
2801    $t1343_1344.$set(-1);
2802    $t1344_1345 = $rt.builtin.sliceSlice($t1336_1337.$get(), undefined, undefined, undefined);
2803    $t1345_1346 = { $get() { return $t1321_1322.$get().parent; }, $set(v) { const obj = $t1321_1322.$get(); obj.parent = v; $t1321_1322.$set(obj); } };
2804    $t1346_1347 = { $value: $rt.builtin.makeSlice(7, 7, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2805    $t1347_1348 = $t1346_1347.$get().addr(0);
2806    $t1347_1348.$set(1);
2807    $t1348_1349 = $t1346_1347.$get().addr(1);
2808    $t1348_1349.$set(3);
2809    $t1349_1350 = $t1346_1347.$get().addr(2);
2810    $t1349_1350.$set(1);
2811    $t1350_1351 = $t1346_1347.$get().addr(3);
2812    $t1350_1351.$set(-1);
2813    $t1351_1352 = $t1346_1347.$get().addr(4);
2814    $t1351_1352.$set(5);
2815    $t1352_1353 = $t1346_1347.$get().addr(5);
2816    $t1352_1353.$set(3);
2817    $t1353_1354 = $t1346_1347.$get().addr(6);
2818    $t1353_1354.$set(5);
2819    $t1354_1355 = $rt.builtin.sliceSlice($t1346_1347.$get(), undefined, undefined, undefined);
2820    $t1355_1356 = { $get() { return $t1321_1322.$get().sibling; }, $set(v) { const obj = $t1321_1322.$get(); obj.sibling = v; $t1321_1322.$set(obj); } };
2821    $t1356_1357 = { $value: $rt.builtin.makeSlice(7, 7, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2822    $t1357_1358 = $t1356_1357.$get().addr(0);
2823    $t1357_1358.$set(2);
2824    $t1358_1359 = $t1356_1357.$get().addr(1);
2825    $t1358_1359.$set(5);
2826    $t1359_1360 = $t1356_1357.$get().addr(2);
2827    $t1359_1360.$set(0);
2828    $t1360_1361 = $t1356_1357.$get().addr(3);
2829    $t1360_1361.$set(-1);
2830    $t1361_1362 = $t1356_1357.$get().addr(4);
2831    $t1361_1362.$set(6);
2832    $t1362_1363 = $t1356_1357.$get().addr(5);
2833    $t1362_1363.$set(1);
2834    $t1363_1364 = $t1356_1357.$get().addr(6);
2835    $t1363_1364.$set(4);
2836    $t1364_1365 = $rt.builtin.sliceSlice($t1356_1357.$get(), undefined, undefined, undefined);
2837    $t1322_1323.$set(4);
2838    $t1323_1324.$set(7);
2839    $t1324_1325.$set(3);
2840    $t1325_1326.$set($t1334_1335);
2841    $t1335_1336.$set($t1344_1345);
2842    $t1345_1346.$set($t1354_1355);
2843    $t1355_1356.$set($t1364_1365);
2844    $t1365_1366 = $t1272_1273.$get().addr(3);
2845    $t1366_1367 = { $get() { return $t1365_1366.$get().nLeaves; }, $set(v) { const obj = $t1365_1366.$get(); obj.nLeaves = v; $t1365_1366.$set(obj); } };
2846    $t1367_1368 = { $get() { return $t1365_1366.$get().nNodes; }, $set(v) { const obj = $t1365_1366.$get(); obj.nNodes = v; $t1365_1366.$set(obj); } };
2847    $t1368_1369 = { $get() { return $t1365_1366.$get().root; }, $set(v) { const obj = $t1365_1366.$get(); obj.root = v; $t1365_1366.$set(obj); } };
2848    $t1369_1370 = { $get() { return $t1365_1366.$get().left; }, $set(v) { const obj = $t1365_1366.$get(); obj.left = v; $t1365_1366.$set(obj); } };
2849    $t1370_1371 = { $value: $rt.builtin.makeSlice(15, 15, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2850    $t1371_1372 = $t1370_1371.$get().addr(0);
2851    $t1371_1372.$set(-1);
2852    $t1372_1373 = $t1370_1371.$get().addr(1);
2853    $t1372_1373.$set(0);
2854    $t1373_1374 = $t1370_1371.$get().addr(2);
2855    $t1373_1374.$set(-1);
2856    $t1374_1375 = $t1370_1371.$get().addr(3);
2857    $t1374_1375.$set(1);
2858    $t1375_1376 = $t1370_1371.$get().addr(4);
2859    $t1375_1376.$set(-1);
2860    $t1376_1377 = $t1370_1371.$get().addr(5);
2861    $t1376_1377.$set(4);
2862    $t1377_1378 = $t1370_1371.$get().addr(6);
2863    $t1377_1378.$set(-1);
2864    $t1378_1379 = $t1370_1371.$get().addr(7);
2865    $t1378_1379.$set(3);
2866    $t1379_1380 = $t1370_1371.$get().addr(8);
2867    $t1379_1380.$set(-1);
2868    $t1380_1381 = $t1370_1371.$get().addr(9);
2869    $t1380_1381.$set(8);
2870    $t1381_1382 = $t1370_1371.$get().addr(10);
2871    $t1381_1382.$set(-1);
2872    $t1382_1383 = $t1370_1371.$get().addr(11);
2873    $t1382_1383.$set(9);
2874    $t1383_1384 = $t1370_1371.$get().addr(12);
2875    $t1383_1384.$set(-1);
2876    $t1384_1385 = $t1370_1371.$get().addr(13);
2877    $t1384_1385.$set(12);
2878    $t1385_1386 = $t1370_1371.$get().addr(14);
2879    $t1385_1386.$set(-1);
2880    $t1386_1387 = $rt.builtin.sliceSlice($t1370_1371.$get(), undefined, undefined, undefined);
2881    $t1387_1388 = { $get() { return $t1365_1366.$get().right; }, $set(v) { const obj = $t1365_1366.$get(); obj.right = v; $t1365_1366.$set(obj); } };
2882    $t1388_1389 = { $value: $rt.builtin.makeSlice(15, 15, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2883    $t1389_1390 = $t1388_1389.$get().addr(0);
2884    $t1389_1390.$set(-1);
2885    $t1390_1391 = $t1388_1389.$get().addr(1);
2886    $t1390_1391.$set(2);
2887    $t1391_1392 = $t1388_1389.$get().addr(2);
2888    $t1391_1392.$set(-1);
2889    $t1392_1393 = $t1388_1389.$get().addr(3);
2890    $t1392_1393.$set(5);
2891    $t1393_1394 = $t1388_1389.$get().addr(4);
2892    $t1393_1394.$set(-1);
2893    $t1394_1395 = $t1388_1389.$get().addr(5);
2894    $t1394_1395.$set(6);
2895    $t1395_1396 = $t1388_1389.$get().addr(6);
2896    $t1395_1396.$set(-1);
2897    $t1396_1397 = $t1388_1389.$get().addr(7);
2898    $t1396_1397.$set(11);
2899    $t1397_1398 = $t1388_1389.$get().addr(8);
2900    $t1397_1398.$set(-1);
2901    $t1398_1399 = $t1388_1389.$get().addr(9);
2902    $t1398_1399.$set(10);
2903    $t1399_1400 = $t1388_1389.$get().addr(10);
2904    $t1399_1400.$set(-1);
2905    $t1400_1401 = $t1388_1389.$get().addr(11);
2906    $t1400_1401.$set(13);
2907    $t1401_1402 = $t1388_1389.$get().addr(12);
2908    $t1401_1402.$set(-1);
2909    $t1402_1403 = $t1388_1389.$get().addr(13);
2910    $t1402_1403.$set(14);
2911    $t1403_1404 = $t1388_1389.$get().addr(14);
2912    $t1403_1404.$set(-1);
2913    $t1404_1405 = $rt.builtin.sliceSlice($t1388_1389.$get(), undefined, undefined, undefined);
2914    $t1405_1406 = { $get() { return $t1365_1366.$get().parent; }, $set(v) { const obj = $t1365_1366.$get(); obj.parent = v; $t1365_1366.$set(obj); } };
2915    $t1406_1407 = { $value: $rt.builtin.makeSlice(15, 15, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2916    $t1407_1408 = $t1406_1407.$get().addr(0);
2917    $t1407_1408.$set(1);
2918    $t1408_1409 = $t1406_1407.$get().addr(1);
2919    $t1408_1409.$set(3);
2920    $t1409_1410 = $t1406_1407.$get().addr(2);
2921    $t1409_1410.$set(1);
2922    $t1410_1411 = $t1406_1407.$get().addr(3);
2923    $t1410_1411.$set(7);
2924    $t1411_1412 = $t1406_1407.$get().addr(4);
2925    $t1411_1412.$set(5);
2926    $t1412_1413 = $t1406_1407.$get().addr(5);
2927    $t1412_1413.$set(3);
2928    $t1413_1414 = $t1406_1407.$get().addr(6);
2929    $t1413_1414.$set(5);
2930    $t1414_1415 = $t1406_1407.$get().addr(7);
2931    $t1414_1415.$set(-1);
2932    $t1415_1416 = $t1406_1407.$get().addr(8);
2933    $t1415_1416.$set(9);
2934    $t1416_1417 = $t1406_1407.$get().addr(9);
2935    $t1416_1417.$set(11);
2936    $t1417_1418 = $t1406_1407.$get().addr(10);
2937    $t1417_1418.$set(9);
2938    $t1418_1419 = $t1406_1407.$get().addr(11);
2939    $t1418_1419.$set(7);
2940    $t1419_1420 = $t1406_1407.$get().addr(12);
2941    $t1419_1420.$set(13);
2942    $t1420_1421 = $t1406_1407.$get().addr(13);
2943    $t1420_1421.$set(11);
2944    $t1421_1422 = $t1406_1407.$get().addr(14);
2945    $t1421_1422.$set(13);
2946    $t1422_1423 = $rt.builtin.sliceSlice($t1406_1407.$get(), undefined, undefined, undefined);
2947    $t1423_1424 = { $get() { return $t1365_1366.$get().sibling; }, $set(v) { const obj = $t1365_1366.$get(); obj.sibling = v; $t1365_1366.$set(obj); } };
2948    $t1424_1425 = { $value: $rt.builtin.makeSlice(15, 15, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2949    $t1425_1426 = $t1424_1425.$get().addr(0);
2950    $t1425_1426.$set(2);
2951    $t1426_1427 = $t1424_1425.$get().addr(1);
2952    $t1426_1427.$set(5);
2953    $t1427_1428 = $t1424_1425.$get().addr(2);
2954    $t1427_1428.$set(0);
2955    $t1428_1429 = $t1424_1425.$get().addr(3);
2956    $t1428_1429.$set(11);
2957    $t1429_1430 = $t1424_1425.$get().addr(4);
2958    $t1429_1430.$set(6);
2959    $t1430_1431 = $t1424_1425.$get().addr(5);
2960    $t1430_1431.$set(1);
2961    $t1431_1432 = $t1424_1425.$get().addr(6);
2962    $t1431_1432.$set(4);
2963    $t1432_1433 = $t1424_1425.$get().addr(7);
2964    $t1432_1433.$set(-1);
2965    $t1433_1434 = $t1424_1425.$get().addr(8);
2966    $t1433_1434.$set(10);
2967    $t1434_1435 = $t1424_1425.$get().addr(9);
2968    $t1434_1435.$set(13);
2969    $t1435_1436 = $t1424_1425.$get().addr(10);
2970    $t1435_1436.$set(8);
2971    $t1436_1437 = $t1424_1425.$get().addr(11);
2972    $t1436_1437.$set(3);
2973    $t1437_1438 = $t1424_1425.$get().addr(12);
2974    $t1437_1438.$set(14);
2975    $t1438_1439 = $t1424_1425.$get().addr(13);
2976    $t1438_1439.$set(9);
2977    $t1439_1440 = $t1424_1425.$get().addr(14);
2978    $t1439_1440.$set(12);
2979    $t1440_1441 = $rt.builtin.sliceSlice($t1424_1425.$get(), undefined, undefined, undefined);
2980    $t1366_1367.$set(8);
2981    $t1367_1368.$set(15);
2982    $t1368_1369.$set(7);
2983    $t1369_1370.$set($t1386_1387);
2984    $t1387_1388.$set($t1404_1405);
2985    $t1405_1406.$set($t1422_1423);
2986    $t1423_1424.$set($t1440_1441);
2987    $t1441_1442 = $rt.builtin.sliceSlice($t1272_1273.$get(), undefined, undefined, undefined);
2988    treeMathVectors.$set($t1441_1442);
2989    $t1442_1443 = errors.New('mls: invalid leaf node source');
2990    errInvalidLeafNodeSource.$set($t1442_1443);
2991    $t1443_1444 = errors.New('mls: invalid node type');
2992    errInvalidNodeType.$set($t1443_1444);
2993    $t1444_1445 = errors.New('mls: node public key mismatch');
2994    errNodeKeyMismatch.$set($t1444_1445);
2995    $t1445_1446 = errors.New('mls: invalid credential type');
2996    errInvalidCredentialType.$set($t1445_1446);
2997    return;
2998  }
2999  
3000  export function hmacEqual(a, b) {
3001    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
3002    let $block = 0;
3003    while (true) {
3004      switch ($block) {
3005        case 0: {
3006          $t0_1 = $rt.builtin.len(a);
3007          $t1_2 = $rt.builtin.len(b);
3008          $t2_3 = ($t0_1 !== $t1_2);
3009          if ($t2_3) {
3010            $block = 1; break;
3011          }
3012          else {
3013            $block = 2; break;
3014          }
3015          break;
3016        }
3017        case 1: {
3018          return false;
3019          break;
3020        }
3021        case 2: {
3022          $t3_4 = $rt.builtin.len(a);
3023          $t4_5 = 0;
3024          $t5_6 = -1;
3025          $block = 3; break;
3026          break;
3027        }
3028        case 3: {
3029          $t6_7 = ($t5_6 + 1);
3030          $t7_8 = ($t6_7 < $t3_4);
3031          if ($t7_8) {
3032            $block = 4; break;
3033          }
3034          else {
3035            $block = 5; break;
3036          }
3037          break;
3038        }
3039        case 4: {
3040          $t8_9 = a.addr($t6_7);
3041          $t9_10 = $t8_9.$get();
3042          $t10_11 = b.addr($t6_7);
3043          $t11_12 = $t10_11.$get();
3044          $t12_13 = ($t9_10 ^ $t11_12);
3045          $t13_14 = ($t4_5 | $t12_13);
3046          $t4_5 = $t13_14;
3047          $t5_6 = $t6_7;
3048          $block = 3; break;
3049          break;
3050        }
3051        case 5: {
3052          $t14_15 = ($t4_5 === 0);
3053          return $t14_15;
3054          break;
3055        }
3056      }
3057    }
3058  }
3059  
3060  export function marshalSignContent(label, content) {
3061    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
3062    $t0_1 = $rt.builtin.appendSlice('MLS 1.0 ', label);
3063    $t1_2 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3064    $t2_3 = Writer$writeOpaqueVec($t1_2, $t0_1);
3065    $t3_4 = Writer$writeOpaqueVec($t1_2, content);
3066    $t4_5 = Writer$bytes($t1_2);
3067    $t5_6 = $t4_5[0];
3068    $t6_7 = $t4_5[1];
3069    return [$t5_6, $t6_7];
3070  }
3071  
3072  export function labeledExtractKEM(salt, label, ikm) {
3073    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
3074    $t0_1 = kemSuiteID.$get();
3075    $t1_2 = $rt.builtin.appendSlice('HPKE-v1', $t0_1);
3076    $t2_3 = $rt.builtin.appendSlice($t1_2, label);
3077    $t3_4 = $rt.builtin.appendSlice($t2_3, ikm);
3078    $t4_5 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3079    $t5_6 = smesh$lol$web$common$crypto$hkdf.Extract(salt, $t3_4);
3080    $t4_5.$set($rt.builtin.cloneValue($t5_6));
3081    $t6_7 = $rt.builtin.sliceSlice($t4_5.$get(), undefined, undefined, undefined);
3082    return $t6_7;
3083  }
3084  
3085  export function labeledExpandKEM(prk, label, info, length) {
3086    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
3087    $t0_1 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3088    $t1_2 = $t0_1.$get().addr(0);
3089    $t2_3 = (length >> 8);
3090    $t3_4 = ($t2_3 & 0xFF);
3091    $t1_2.$set($t3_4);
3092    $t4_5 = $t0_1.$get().addr(1);
3093    $t5_6 = (length & 0xFF);
3094    $t4_5.$set($t5_6);
3095    $t6_7 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
3096    $t7_8 = $rt.builtin.appendString($t6_7, 'HPKE-v1');
3097    $t8_9 = kemSuiteID.$get();
3098    $t9_10 = $rt.builtin.appendSlice($t7_8, $t8_9);
3099    $t10_11 = $rt.builtin.appendSlice($t9_10, label);
3100    $t11_12 = $rt.builtin.appendSlice($t10_11, info);
3101    $t12_13 = smesh$lol$web$common$crypto$hkdf.Expand(prk, $t11_12, length);
3102    return $t12_13;
3103  }
3104  
3105  export function labeledExtractHPKE(salt, label, ikm) {
3106    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
3107    $t0_1 = hpkeSuiteID.$get();
3108    $t1_2 = $rt.builtin.appendSlice('HPKE-v1', $t0_1);
3109    $t2_3 = $rt.builtin.appendSlice($t1_2, label);
3110    $t3_4 = $rt.builtin.appendSlice($t2_3, ikm);
3111    $t4_5 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3112    $t5_6 = smesh$lol$web$common$crypto$hkdf.Extract(salt, $t3_4);
3113    $t4_5.$set($rt.builtin.cloneValue($t5_6));
3114    $t6_7 = $rt.builtin.sliceSlice($t4_5.$get(), undefined, undefined, undefined);
3115    return $t6_7;
3116  }
3117  
3118  export function labeledExpandHPKE(prk, label, info, length) {
3119    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
3120    $t0_1 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3121    $t1_2 = $t0_1.$get().addr(0);
3122    $t2_3 = (length >> 8);
3123    $t3_4 = ($t2_3 & 0xFF);
3124    $t1_2.$set($t3_4);
3125    $t4_5 = $t0_1.$get().addr(1);
3126    $t5_6 = (length & 0xFF);
3127    $t4_5.$set($t5_6);
3128    $t6_7 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
3129    $t7_8 = $rt.builtin.appendString($t6_7, 'HPKE-v1');
3130    $t8_9 = hpkeSuiteID.$get();
3131    $t9_10 = $rt.builtin.appendSlice($t7_8, $t8_9);
3132    $t10_11 = $rt.builtin.appendSlice($t9_10, label);
3133    $t11_12 = $rt.builtin.appendSlice($t10_11, info);
3134    $t12_13 = smesh$lol$web$common$crypto$hkdf.Expand(prk, $t11_12, length);
3135    return $t12_13;
3136  }
3137  
3138  export function extractAndExpand(dh, kemContext) {
3139    let $t0_1, $t1_2;
3140    $t0_1 = labeledExtractKEM(null, 'eae_prk', dh);
3141    $t1_2 = labeledExpandKEM($t0_1, 'shared_secret', kemContext, 32);
3142    return $t1_2;
3143  }
3144  
3145  export function hpkeKeySchedule(sharedSecret, info) {
3146    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
3147    $t0_1 = labeledExtractHPKE(null, 'psk_id_hash', null);
3148    $t1_2 = labeledExtractHPKE(null, 'info_hash', info);
3149    $t2_3 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3150    $t3_4 = $t2_3.$get().addr(0);
3151    $t3_4.$set(0);
3152    $t4_5 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, undefined, undefined);
3153    $t5_6 = $rt.builtin.appendSlice($t4_5, $t0_1);
3154    $t6_7 = $rt.builtin.appendSlice($t5_6, $t1_2);
3155    $t7_8 = labeledExtractHPKE(sharedSecret, 'secret', null);
3156    $t8_9 = labeledExpandHPKE($t7_8, 'key', $t6_7, 32);
3157    $t9_10 = labeledExpandHPKE($t7_8, 'base_nonce', $t6_7, 12);
3158    return [$t8_9, $t9_10];
3159  }
3160  
3161  export function marshalEncryptContext(label, context) {
3162    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
3163    $t0_1 = $rt.builtin.appendSlice('MLS 1.0 ', label);
3164    $t1_2 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3165    $t2_3 = Writer$writeOpaqueVec($t1_2, $t0_1);
3166    $t3_4 = Writer$writeOpaqueVec($t1_2, context);
3167    $t4_5 = Writer$bytes($t1_2);
3168    $t5_6 = $t4_5[0];
3169    $t6_7 = $t4_5[1];
3170    return [$t5_6, $t6_7];
3171  }
3172  
3173  export function newReader(data) {
3174    let $t0_1, $t1_2, $t2_3;
3175    $t0_1 = { $value: { data: null, pos: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3176    $t1_2 = { $get() { return $t0_1.$get().data; }, $set(v) { const obj = $t0_1.$get(); obj.data = v; $t0_1.$set(obj); } };
3177    $t1_2.$set(data);
3178    $t2_3 = $t0_1.$get();
3179    return $t2_3;
3180  }
3181  
3182  export function unmarshalRaw(raw, v) {
3183    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
3184    let $block = 0;
3185    while (true) {
3186      switch ($block) {
3187        case 0: {
3188          $t0_1 = { $value: { data: null, pos: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3189          $t1_2 = newReader(raw);
3190          $t0_1.$set($rt.builtin.cloneValue($t1_2));
3191          $t2_3 = $rt.types.methodCall(v, 'unmarshal', [$t0_1]);
3192          $t3_4 = ($t2_3 !== null);
3193          if ($t3_4) {
3194            $block = 1; break;
3195          }
3196          else {
3197            $block = 2; break;
3198          }
3199          break;
3200        }
3201        case 1: {
3202          return $t2_3;
3203          break;
3204        }
3205        case 2: {
3206          $t4_5 = Reader$empty($t0_1);
3207          if ($t4_5) {
3208            $block = 4; break;
3209          }
3210          else {
3211            $block = 3; break;
3212          }
3213          break;
3214        }
3215        case 3: {
3216          $t5_6 = errExcessBytes.$get();
3217          return $t5_6;
3218          break;
3219        }
3220        case 4: {
3221          return null;
3222          break;
3223        }
3224      }
3225    }
3226  }
3227  
3228  export function marshalRaw(v) {
3229    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
3230    $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3231    $t1_2 = $rt.types.methodCall(v, 'marshal', [$t0_1]);
3232    $t2_3 = Writer$bytes($t0_1);
3233    $t3_4 = $t2_3[0];
3234    $t4_5 = $t2_3[1];
3235    return [$t3_4, $t4_5];
3236  }
3237  
3238  export function signAuthenticatedContent(cs, signKey, wf, content, ctx) {
3239    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
3240    let $block = 0;
3241    while (true) {
3242      switch ($block) {
3243        case 0: {
3244          $t0_1 = { $value: { wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3245          $t1_2 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
3246          $t2_3 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
3247          $t3_4 = content.$get();
3248          $t1_2.$set(wf);
3249          $t2_3.$set($rt.builtin.cloneValue($t3_4));
3250          $t4_5 = authenticatedContent$framedContentTBS($t0_1, ctx);
3251          $t5_6 = signFramedContent(cs, signKey, $t4_5);
3252          $t6_7 = $t5_6[0];
3253          $t7_8 = $t5_6[1];
3254          $t8_9 = ($t7_8 !== null);
3255          if ($t8_9) {
3256            $block = 1; break;
3257          }
3258          else {
3259            $block = 2; break;
3260          }
3261          break;
3262        }
3263        case 1: {
3264          return [null, $t7_8];
3265          break;
3266        }
3267        case 2: {
3268          $t9_10 = { $get() { return $t0_1.$get().auth; }, $set(v) { const obj = $t0_1.$get(); obj.auth = v; $t0_1.$set(obj); } };
3269          $t10_11 = { $get() { return $t9_10.$get().signature; }, $set(v) { const obj = $t9_10.$get(); obj.signature = v; $t9_10.$set(obj); } };
3270          $t10_11.$set($t6_7);
3271          return [$t0_1, null];
3272          break;
3273        }
3274      }
3275    }
3276  }
3277  
3278  export function signFramedContent(cs, signKey, content) {
3279    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
3280    let $block = 0;
3281    while (true) {
3282      switch ($block) {
3283        case 0: {
3284          $t0_1 = $rt.types.makeInterface('*smesh.lol/web/common/mls.framedContentTBS', content);
3285          $t1_2 = marshalRaw($t0_1);
3286          $t2_3 = $t1_2[0];
3287          $t3_4 = $t1_2[1];
3288          $t4_5 = ($t3_4 !== null);
3289          if ($t4_5) {
3290            $block = 1; break;
3291          }
3292          else {
3293            $block = 2; break;
3294          }
3295          break;
3296        }
3297        case 1: {
3298          return [null, $t3_4];
3299          break;
3300        }
3301        case 2: {
3302          $t5_6 = CipherSuite$signWithLabel(cs, signKey, 'FramedContentTBS', $t2_3);
3303          $t6_7 = $t5_6[0];
3304          $t7_8 = $t5_6[1];
3305          return [$t6_7, $t7_8];
3306          break;
3307        }
3308      }
3309    }
3310  }
3311  
3312  export function signPublicMessage(cs, signKey, content, ctx) {
3313    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
3314    let $block = 0;
3315    while (true) {
3316      switch ($block) {
3317        case 0: {
3318          $t0_1 = signAuthenticatedContent(cs, signKey, 1, content, ctx);
3319          $t1_2 = $t0_1[0];
3320          $t2_3 = $t0_1[1];
3321          $t3_4 = ($t2_3 !== null);
3322          if ($t3_4) {
3323            $block = 1; break;
3324          }
3325          else {
3326            $block = 2; break;
3327          }
3328          break;
3329        }
3330        case 1: {
3331          return [null, $t2_3];
3332          break;
3333        }
3334        case 2: {
3335          $t4_5 = { $value: { content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null }, membershipTag: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3336          $t5_6 = { $get() { return $t4_5.$get().content; }, $set(v) { const obj = $t4_5.$get(); obj.content = v; $t4_5.$set(obj); } };
3337          $t6_7 = { $get() { return $t1_2.$get().content; }, $set(v) { const obj = $t1_2.$get(); obj.content = v; $t1_2.$set(obj); } };
3338          $t7_8 = $t6_7.$get();
3339          $t8_9 = { $get() { return $t4_5.$get().auth; }, $set(v) { const obj = $t4_5.$get(); obj.auth = v; $t4_5.$set(obj); } };
3340          $t9_10 = { $get() { return $t1_2.$get().auth; }, $set(v) { const obj = $t1_2.$get(); obj.auth = v; $t1_2.$set(obj); } };
3341          $t10_11 = $t9_10.$get();
3342          $t5_6.$set($rt.builtin.cloneValue($t7_8));
3343          $t8_9.$set($rt.builtin.cloneValue($t10_11));
3344          return [$t4_5, null];
3345          break;
3346        }
3347      }
3348    }
3349  }
3350  
3351  export function newSenderData(li, generation) {
3352    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
3353    $t0_1 = { $value: { leafIndex: 0, generation: 0, reuseGuard: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3354    $t1_2 = { $get() { return $t0_1.$get().leafIndex; }, $set(v) { const obj = $t0_1.$get(); obj.leafIndex = v; $t0_1.$set(obj); } };
3355    $t2_3 = { $get() { return $t0_1.$get().generation; }, $set(v) { const obj = $t0_1.$get(); obj.generation = v; $t0_1.$set(obj); } };
3356    $t1_2.$set(li);
3357    $t2_3.$set(generation);
3358    $t3_4 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3359    $t4_5 = $rt.builtin.sliceSlice($t3_4.$get(), undefined, undefined, undefined);
3360    $t5_6 = smesh$lol$web$common$jsbridge$subtle.RandomBytes($t4_5);
3361    $t6_7 = $t3_4.$get();
3362    $t7_8 = { $get() { return $t0_1.$get().reuseGuard; }, $set(v) { const obj = $t0_1.$get(); obj.reuseGuard = v; $t0_1.$set(obj); } };
3363    $t7_8.$set($rt.builtin.cloneValue($t6_7));
3364    return [$t0_1, null];
3365  }
3366  
3367  export function sampleCiphertext(cs, ciphertext) {
3368    let $t0_1, $t1_2, $t2_3, $t3_4;
3369    let $block = 0;
3370    while (true) {
3371      switch ($block) {
3372        case 0: {
3373          $t0_1 = CipherSuite$ExtractSize(cs);
3374          $t1_2 = $rt.builtin.len(ciphertext);
3375          $t2_3 = ($t1_2 < $t0_1);
3376          if ($t2_3) {
3377            $block = 1; break;
3378          }
3379          else {
3380            $block = 2; break;
3381          }
3382          break;
3383        }
3384        case 1: {
3385          return ciphertext;
3386          break;
3387        }
3388        case 2: {
3389          $t3_4 = $rt.builtin.sliceSlice(ciphertext, undefined, $t0_1, undefined);
3390          return $t3_4;
3391          break;
3392        }
3393      }
3394    }
3395  }
3396  
3397  export function expandSenderDataKey(cs, senderDataSecret, ciphertext) {
3398    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
3399    $t0_1 = sampleCiphertext(cs, ciphertext);
3400    $t1_2 = CipherSuite$AEADKeySize(cs);
3401    $t2_3 = ($t1_2 & 0xFFFF);
3402    $t3_4 = CipherSuite$expandWithLabel(cs, senderDataSecret, 'key', $t0_1, $t2_3);
3403    $t4_5 = $t3_4[0];
3404    $t5_6 = $t3_4[1];
3405    return [$t4_5, $t5_6];
3406  }
3407  
3408  export function expandSenderDataNonce(cs, senderDataSecret, ciphertext) {
3409    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
3410    $t0_1 = sampleCiphertext(cs, ciphertext);
3411    $t1_2 = CipherSuite$AEADNonceSize(cs);
3412    $t2_3 = ($t1_2 & 0xFFFF);
3413    $t3_4 = CipherSuite$expandWithLabel(cs, senderDataSecret, 'nonce', $t0_1, $t2_3);
3414    $t4_5 = $t3_4[0];
3415    $t5_6 = $t3_4[1];
3416    return [$t4_5, $t5_6];
3417  }
3418  
3419  export function derivePrivateMessageKeyAndNonce(cs, secret, reuseGuard) {
3420    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
3421    let $block = 0;
3422    while (true) {
3423      switch ($block) {
3424        case 0: {
3425          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3426          $t0_1.$set($rt.builtin.cloneValue(reuseGuard));
3427          $t1_2 = ratchetSecret$deriveKey(secret, cs);
3428          $t2_3 = $t1_2[0];
3429          $t3_4 = $t1_2[1];
3430          $t4_5 = ($t3_4 !== null);
3431          if ($t4_5) {
3432            $block = 1; break;
3433          }
3434          else {
3435            $block = 2; break;
3436          }
3437          break;
3438        }
3439        case 1: {
3440          return [null, null, $t3_4];
3441          break;
3442        }
3443        case 2: {
3444          $t5_6 = ratchetSecret$deriveNonce(secret, cs);
3445          $t6_7 = $t5_6[0];
3446          $t7_8 = $t5_6[1];
3447          $t8_9 = ($t7_8 !== null);
3448          if ($t8_9) {
3449            $block = 3; break;
3450          }
3451          else {
3452            $block = 4; break;
3453          }
3454          break;
3455        }
3456        case 3: {
3457          return [null, null, $t7_8];
3458          break;
3459        }
3460        case 4: {
3461          $t9_10 = $t0_1.$get();
3462          $t10_11 = -1;
3463          $block = 5; break;
3464          break;
3465        }
3466        case 5: {
3467          $t11_12 = ($t10_11 + 1);
3468          $t12_13 = ($t11_12 < 4);
3469          if ($t12_13) {
3470            $block = 6; break;
3471          }
3472          else {
3473            $block = 7; break;
3474          }
3475          break;
3476        }
3477        case 6: {
3478          $t13_14 = $t6_7.addr($t11_12);
3479          $t14_15 = $t13_14.$get();
3480          $t15_16 = $t0_1.$get().addr($t11_12);
3481          $t16_17 = $t15_16.$get();
3482          $t17_18 = ($t14_15 ^ $t16_17);
3483          $t18_19 = $t6_7.addr($t11_12);
3484          $t18_19.$set($t17_18);
3485          $t10_11 = $t11_12;
3486          $block = 5; break;
3487          break;
3488        }
3489        case 7: {
3490          return [$t2_3, $t6_7, null];
3491          break;
3492        }
3493      }
3494    }
3495  }
3496  
3497  export function signPrivateMessageContent(cs, signKey, content, ctx) {
3498    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
3499    let $block = 0;
3500    while (true) {
3501      switch ($block) {
3502        case 0: {
3503          $t0_1 = signAuthenticatedContent(cs, signKey, 2, content, ctx);
3504          $t1_2 = $t0_1[0];
3505          $t2_3 = $t0_1[1];
3506          $t3_4 = ($t2_3 !== null);
3507          if ($t3_4) {
3508            $block = 1; break;
3509          }
3510          else {
3511            $block = 2; break;
3512          }
3513          break;
3514        }
3515        case 1: {
3516          return [null, $t2_3];
3517          break;
3518        }
3519        case 2: {
3520          $t4_5 = { $value: { applicationData: null, proposal: null, commit: null, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3521          $t5_6 = { $get() { return $t4_5.$get().applicationData; }, $set(v) { const obj = $t4_5.$get(); obj.applicationData = v; $t4_5.$set(obj); } };
3522          $t6_7 = { $get() { return content.$get().applicationData; }, $set(v) { const obj = content.$get(); obj.applicationData = v; content.$set(obj); } };
3523          $t7_8 = $t6_7.$get();
3524          $t8_9 = { $get() { return $t4_5.$get().proposal; }, $set(v) { const obj = $t4_5.$get(); obj.proposal = v; $t4_5.$set(obj); } };
3525          $t9_10 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
3526          $t10_11 = $t9_10.$get();
3527          $t11_12 = { $get() { return $t4_5.$get().commit; }, $set(v) { const obj = $t4_5.$get(); obj.commit = v; $t4_5.$set(obj); } };
3528          $t12_13 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
3529          $t13_14 = $t12_13.$get();
3530          $t14_15 = { $get() { return $t4_5.$get().auth; }, $set(v) { const obj = $t4_5.$get(); obj.auth = v; $t4_5.$set(obj); } };
3531          $t15_16 = { $get() { return $t1_2.$get().auth; }, $set(v) { const obj = $t1_2.$get(); obj.auth = v; $t1_2.$set(obj); } };
3532          $t16_17 = $t15_16.$get();
3533          $t5_6.$set($t7_8);
3534          $t8_9.$set($t10_11);
3535          $t11_12.$set($t13_14);
3536          $t14_15.$set($rt.builtin.cloneValue($t16_17));
3537          return [$t4_5, null];
3538          break;
3539        }
3540      }
3541    }
3542  }
3543  
3544  export function encryptPrivateMessageContent(cs, secret, content, privContent, reuseGuard) {
3545    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
3546    let $block = 0;
3547    while (true) {
3548      switch ($block) {
3549        case 0: {
3550          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3551          $t1_2 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
3552          $t2_3 = $t1_2.$get();
3553          $t3_4 = privateMessageContent$marshal(privContent, $t0_1, $t2_3);
3554          $t4_5 = Writer$bytes($t0_1);
3555          $t5_6 = $t4_5[0];
3556          $t6_7 = $t4_5[1];
3557          $t7_8 = ($t6_7 !== null);
3558          if ($t7_8) {
3559            $block = 1; break;
3560          }
3561          else {
3562            $block = 2; break;
3563          }
3564          break;
3565        }
3566        case 1: {
3567          return [null, $t6_7];
3568          break;
3569        }
3570        case 2: {
3571          $t8_9 = derivePrivateMessageKeyAndNonce(cs, secret, reuseGuard);
3572          $t9_10 = $t8_9[0];
3573          $t10_11 = $t8_9[1];
3574          $t11_12 = $t8_9[2];
3575          $t12_13 = ($t11_12 !== null);
3576          if ($t12_13) {
3577            $block = 3; break;
3578          }
3579          else {
3580            $block = 4; break;
3581          }
3582          break;
3583        }
3584        case 3: {
3585          return [null, $t11_12];
3586          break;
3587        }
3588        case 4: {
3589          $t13_14 = { $value: { groupID: null, epoch: 0n, contentType: 0, authenticatedData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3590          $t14_15 = { $get() { return $t13_14.$get().groupID; }, $set(v) { const obj = $t13_14.$get(); obj.groupID = v; $t13_14.$set(obj); } };
3591          $t15_16 = { $get() { return content.$get().groupID; }, $set(v) { const obj = content.$get(); obj.groupID = v; content.$set(obj); } };
3592          $t16_17 = $t15_16.$get();
3593          $t17_18 = { $get() { return $t13_14.$get().epoch; }, $set(v) { const obj = $t13_14.$get(); obj.epoch = v; $t13_14.$set(obj); } };
3594          $t18_19 = { $get() { return content.$get().epoch; }, $set(v) { const obj = content.$get(); obj.epoch = v; content.$set(obj); } };
3595          $t19_20 = $t18_19.$get();
3596          $t20_21 = { $get() { return $t13_14.$get().contentType; }, $set(v) { const obj = $t13_14.$get(); obj.contentType = v; $t13_14.$set(obj); } };
3597          $t21_22 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
3598          $t22_23 = $t21_22.$get();
3599          $t23_24 = { $get() { return $t13_14.$get().authenticatedData; }, $set(v) { const obj = $t13_14.$get(); obj.authenticatedData = v; $t13_14.$set(obj); } };
3600          $t24_25 = { $get() { return content.$get().authenticatedData; }, $set(v) { const obj = content.$get(); obj.authenticatedData = v; content.$set(obj); } };
3601          $t25_26 = $t24_25.$get();
3602          $t14_15.$set($t16_17);
3603          $t17_18.$set($t19_20);
3604          $t20_21.$set($t22_23);
3605          $t23_24.$set($t25_26);
3606          $t26_27 = $rt.types.makeInterface('*smesh.lol/web/common/mls.privateContentAAD', $t13_14);
3607          $t27_28 = marshalRaw($t26_27);
3608          $t28_29 = $t27_28[0];
3609          $t29_30 = $t27_28[1];
3610          $t30_31 = ($t29_30 !== null);
3611          if ($t30_31) {
3612            $block = 5; break;
3613          }
3614          else {
3615            $block = 6; break;
3616          }
3617          break;
3618        }
3619        case 5: {
3620          return [null, $t29_30];
3621          break;
3622        }
3623        case 6: {
3624          $t31_32 = CipherSuite$aeadSeal(cs, $t9_10, $t10_11, $t5_6, $t28_29);
3625          $t32_33 = $t31_32[0];
3626          $t33_34 = $t31_32[1];
3627          return [$t32_33, $t33_34];
3628          break;
3629        }
3630      }
3631    }
3632  }
3633  
3634  export function encryptSenderData(cs, senderDataSecret, sd, content, ciphertext) {
3635    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31;
3636    let $block = 0;
3637    while (true) {
3638      switch ($block) {
3639        case 0: {
3640          $t0_1 = expandSenderDataKey(cs, senderDataSecret, ciphertext);
3641          $t1_2 = $t0_1[0];
3642          $t2_3 = $t0_1[1];
3643          $t3_4 = ($t2_3 !== null);
3644          if ($t3_4) {
3645            $block = 1; break;
3646          }
3647          else {
3648            $block = 2; break;
3649          }
3650          break;
3651        }
3652        case 1: {
3653          return [null, $t2_3];
3654          break;
3655        }
3656        case 2: {
3657          $t4_5 = expandSenderDataNonce(cs, senderDataSecret, ciphertext);
3658          $t5_6 = $t4_5[0];
3659          $t6_7 = $t4_5[1];
3660          $t7_8 = ($t6_7 !== null);
3661          if ($t7_8) {
3662            $block = 3; break;
3663          }
3664          else {
3665            $block = 4; break;
3666          }
3667          break;
3668        }
3669        case 3: {
3670          return [null, $t6_7];
3671          break;
3672        }
3673        case 4: {
3674          $t8_9 = { $value: { groupID: null, epoch: 0n, contentType: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3675          $t9_10 = { $get() { return $t8_9.$get().groupID; }, $set(v) { const obj = $t8_9.$get(); obj.groupID = v; $t8_9.$set(obj); } };
3676          $t10_11 = { $get() { return content.$get().groupID; }, $set(v) { const obj = content.$get(); obj.groupID = v; content.$set(obj); } };
3677          $t11_12 = $t10_11.$get();
3678          $t12_13 = { $get() { return $t8_9.$get().epoch; }, $set(v) { const obj = $t8_9.$get(); obj.epoch = v; $t8_9.$set(obj); } };
3679          $t13_14 = { $get() { return content.$get().epoch; }, $set(v) { const obj = content.$get(); obj.epoch = v; content.$set(obj); } };
3680          $t14_15 = $t13_14.$get();
3681          $t15_16 = { $get() { return $t8_9.$get().contentType; }, $set(v) { const obj = $t8_9.$get(); obj.contentType = v; $t8_9.$set(obj); } };
3682          $t16_17 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
3683          $t17_18 = $t16_17.$get();
3684          $t9_10.$set($t11_12);
3685          $t12_13.$set($t14_15);
3686          $t15_16.$set($t17_18);
3687          $t18_19 = $rt.types.makeInterface('*smesh.lol/web/common/mls.senderDataAAD', $t8_9);
3688          $t19_20 = marshalRaw($t18_19);
3689          $t20_21 = $t19_20[0];
3690          $t21_22 = $t19_20[1];
3691          $t22_23 = ($t21_22 !== null);
3692          if ($t22_23) {
3693            $block = 5; break;
3694          }
3695          else {
3696            $block = 6; break;
3697          }
3698          break;
3699        }
3700        case 5: {
3701          return [null, $t21_22];
3702          break;
3703        }
3704        case 6: {
3705          $t23_24 = $rt.types.makeInterface('*smesh.lol/web/common/mls.senderData', sd);
3706          $t24_25 = marshalRaw($t23_24);
3707          $t25_26 = $t24_25[0];
3708          $t26_27 = $t24_25[1];
3709          $t27_28 = ($t26_27 !== null);
3710          if ($t27_28) {
3711            $block = 7; break;
3712          }
3713          else {
3714            $block = 8; break;
3715          }
3716          break;
3717        }
3718        case 7: {
3719          return [null, $t26_27];
3720          break;
3721        }
3722        case 8: {
3723          $t28_29 = CipherSuite$aeadSeal(cs, $t1_2, $t5_6, $t25_26, $t20_21);
3724          $t29_30 = $t28_29[0];
3725          $t30_31 = $t28_29[1];
3726          return [$t29_30, $t30_31];
3727          break;
3728        }
3729      }
3730    }
3731  }
3732  
3733  export function encryptPrivateMessage(cs, secret, senderDataSecret, content, privContent, sd) {
3734    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25;
3735    let $block = 0;
3736    while (true) {
3737      switch ($block) {
3738        case 0: {
3739          $t0_1 = { $get() { return sd.$get().reuseGuard; }, $set(v) { const obj = sd.$get(); obj.reuseGuard = v; sd.$set(obj); } };
3740          $t1_2 = $t0_1.$get();
3741          $t2_3 = encryptPrivateMessageContent(cs, secret, content, privContent, $t1_2);
3742          $t3_4 = $t2_3[0];
3743          $t4_5 = $t2_3[1];
3744          $t5_6 = ($t4_5 !== null);
3745          if ($t5_6) {
3746            $block = 1; break;
3747          }
3748          else {
3749            $block = 2; break;
3750          }
3751          break;
3752        }
3753        case 1: {
3754          return [null, $t4_5];
3755          break;
3756        }
3757        case 2: {
3758          $t6_7 = encryptSenderData(cs, senderDataSecret, sd, content, $t3_4);
3759          $t7_8 = $t6_7[0];
3760          $t8_9 = $t6_7[1];
3761          $t9_10 = ($t8_9 !== null);
3762          if ($t9_10) {
3763            $block = 3; break;
3764          }
3765          else {
3766            $block = 4; break;
3767          }
3768          break;
3769        }
3770        case 3: {
3771          return [null, $t8_9];
3772          break;
3773        }
3774        case 4: {
3775          $t10_11 = { $value: { groupID: null, epoch: 0n, contentType: 0, authenticatedData: null, encryptedSenderData: null, ciphertext: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3776          $t11_12 = { $get() { return $t10_11.$get().groupID; }, $set(v) { const obj = $t10_11.$get(); obj.groupID = v; $t10_11.$set(obj); } };
3777          $t12_13 = { $get() { return content.$get().groupID; }, $set(v) { const obj = content.$get(); obj.groupID = v; content.$set(obj); } };
3778          $t13_14 = $t12_13.$get();
3779          $t14_15 = { $get() { return $t10_11.$get().epoch; }, $set(v) { const obj = $t10_11.$get(); obj.epoch = v; $t10_11.$set(obj); } };
3780          $t15_16 = { $get() { return content.$get().epoch; }, $set(v) { const obj = content.$get(); obj.epoch = v; content.$set(obj); } };
3781          $t16_17 = $t15_16.$get();
3782          $t17_18 = { $get() { return $t10_11.$get().contentType; }, $set(v) { const obj = $t10_11.$get(); obj.contentType = v; $t10_11.$set(obj); } };
3783          $t18_19 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
3784          $t19_20 = $t18_19.$get();
3785          $t20_21 = { $get() { return $t10_11.$get().authenticatedData; }, $set(v) { const obj = $t10_11.$get(); obj.authenticatedData = v; $t10_11.$set(obj); } };
3786          $t21_22 = { $get() { return content.$get().authenticatedData; }, $set(v) { const obj = content.$get(); obj.authenticatedData = v; content.$set(obj); } };
3787          $t22_23 = $t21_22.$get();
3788          $t23_24 = { $get() { return $t10_11.$get().encryptedSenderData; }, $set(v) { const obj = $t10_11.$get(); obj.encryptedSenderData = v; $t10_11.$set(obj); } };
3789          $t24_25 = { $get() { return $t10_11.$get().ciphertext; }, $set(v) { const obj = $t10_11.$get(); obj.ciphertext = v; $t10_11.$set(obj); } };
3790          $t11_12.$set($t13_14);
3791          $t14_15.$set($t16_17);
3792          $t17_18.$set($t19_20);
3793          $t20_21.$set($t22_23);
3794          $t23_24.$set($t7_8);
3795          $t24_25.$set($t3_4);
3796          return [$t10_11, null];
3797          break;
3798        }
3799      }
3800    }
3801  }
3802  
3803  export function UnmarshalGroup(raw) {
3804    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54;
3805    let $block = 0;
3806    while (true) {
3807      switch ($block) {
3808        case 0: {
3809          $t0_1 = { $value: { data: null, pos: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3810          $t1_2 = newReader(raw);
3811          $t0_1.$set($rt.builtin.cloneValue($t1_2));
3812          $t2_3 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3813          $t3_4 = { $value: { tree: null, groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, interimTranscriptHash: null, pskSecret: null, epochSecret: null, initSecret: null, myLeafIndex: 0, privTree: null, signaturePriv: null, pendingProposals: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3814          $t2_3.$set($t3_4);
3815          $t4_5 = $t2_3.$get();
3816          $t5_6 = { $get() { return $t4_5.$get().groupContext; }, $set(v) { const obj = $t4_5.$get(); obj.groupContext = v; $t4_5.$set(obj); } };
3817          $t6_7 = groupContext$unmarshal($t5_6, $t0_1);
3818          $t7_8 = ($t6_7 !== null);
3819          if ($t7_8) {
3820            $block = 1; break;
3821          }
3822          else {
3823            $block = 2; break;
3824          }
3825          break;
3826        }
3827        case 1: {
3828          return [null, $t6_7];
3829          break;
3830        }
3831        case 2: {
3832          $t8_9 = $t2_3.$get();
3833          $t9_10 = { $get() { return $t8_9.$get().tree; }, $set(v) { const obj = $t8_9.$get(); obj.tree = v; $t8_9.$set(obj); } };
3834          $t10_11 = ratchetTree$unmarshal($t9_10, $t0_1);
3835          $t11_12 = ($t10_11 !== null);
3836          if ($t11_12) {
3837            $block = 3; break;
3838          }
3839          else {
3840            $block = 4; break;
3841          }
3842          break;
3843        }
3844        case 3: {
3845          return [null, $t10_11];
3846          break;
3847        }
3848        case 4: {
3849          $t12_13 = $t2_3.$get();
3850          $t13_14 = Reader$readOpaqueVec($t0_1);
3851          $t14_15 = $t13_14[0];
3852          $t15_16 = { $get() { return $t12_13.$get().interimTranscriptHash; }, $set(v) { const obj = $t12_13.$get(); obj.interimTranscriptHash = v; $t12_13.$set(obj); } };
3853          $t15_16.$set($t14_15);
3854          $t16_17 = $t13_14[1];
3855          if ($t16_17) {
3856            $block = 6; break;
3857          }
3858          else {
3859            $block = 5; break;
3860          }
3861          break;
3862        }
3863        case 5: {
3864          $t17_18 = errUnexpectedEOF.$get();
3865          return [null, $t17_18];
3866          break;
3867        }
3868        case 6: {
3869          $t18_19 = $t2_3.$get();
3870          $t19_20 = Reader$readOpaqueVec($t0_1);
3871          $t20_21 = $t19_20[0];
3872          $t21_22 = { $get() { return $t18_19.$get().pskSecret; }, $set(v) { const obj = $t18_19.$get(); obj.pskSecret = v; $t18_19.$set(obj); } };
3873          $t21_22.$set($t20_21);
3874          $t22_23 = $t19_20[1];
3875          if ($t22_23) {
3876            $block = 8; break;
3877          }
3878          else {
3879            $block = 7; break;
3880          }
3881          break;
3882        }
3883        case 7: {
3884          $t23_24 = errUnexpectedEOF.$get();
3885          return [null, $t23_24];
3886          break;
3887        }
3888        case 8: {
3889          $t24_25 = $t2_3.$get();
3890          $t25_26 = Reader$readOpaqueVec($t0_1);
3891          $t26_27 = $t25_26[0];
3892          $t27_28 = { $get() { return $t24_25.$get().epochSecret; }, $set(v) { const obj = $t24_25.$get(); obj.epochSecret = v; $t24_25.$set(obj); } };
3893          $t27_28.$set($t26_27);
3894          $t28_29 = $t25_26[1];
3895          if ($t28_29) {
3896            $block = 10; break;
3897          }
3898          else {
3899            $block = 9; break;
3900          }
3901          break;
3902        }
3903        case 9: {
3904          $t29_30 = errUnexpectedEOF.$get();
3905          return [null, $t29_30];
3906          break;
3907        }
3908        case 10: {
3909          $t30_31 = $t2_3.$get();
3910          $t31_32 = Reader$readOpaqueVec($t0_1);
3911          $t32_33 = $t31_32[0];
3912          $t33_34 = { $get() { return $t30_31.$get().initSecret; }, $set(v) { const obj = $t30_31.$get(); obj.initSecret = v; $t30_31.$set(obj); } };
3913          $t33_34.$set($t32_33);
3914          $t34_35 = $t31_32[1];
3915          if ($t34_35) {
3916            $block = 12; break;
3917          }
3918          else {
3919            $block = 11; break;
3920          }
3921          break;
3922        }
3923        case 11: {
3924          $t35_36 = errUnexpectedEOF.$get();
3925          return [null, $t35_36];
3926          break;
3927        }
3928        case 12: {
3929          $t36_37 = Reader$readUint32($t0_1);
3930          $t37_38 = $t36_37[0];
3931          $t38_39 = $t36_37[1];
3932          if ($t38_39) {
3933            $block = 14; break;
3934          }
3935          else {
3936            $block = 13; break;
3937          }
3938          break;
3939        }
3940        case 13: {
3941          $t39_40 = errUnexpectedEOF.$get();
3942          return [null, $t39_40];
3943          break;
3944        }
3945        case 14: {
3946          $t40_41 = $t2_3.$get();
3947          $t41_42 = $t37_38;
3948          $t42_43 = { $get() { return $t40_41.$get().myLeafIndex; }, $set(v) { const obj = $t40_41.$get(); obj.myLeafIndex = v; $t40_41.$set(obj); } };
3949          $t42_43.$set($t41_42);
3950          $t43_44 = Reader$readOpaqueVec($t0_1);
3951          $t44_45 = $t43_44[0];
3952          $t45_46 = $t43_44[1];
3953          if ($t45_46) {
3954            $block = 16; break;
3955          }
3956          else {
3957            $block = 15; break;
3958          }
3959          break;
3960        }
3961        case 15: {
3962          $t46_47 = errUnexpectedEOF.$get();
3963          return [null, $t46_47];
3964          break;
3965        }
3966        case 16: {
3967          $t47_48 = $t2_3.$get();
3968          $t48_49 = $t44_45;
3969          $t49_50 = { $get() { return $t47_48.$get().signaturePriv; }, $set(v) { const obj = $t47_48.$get(); obj.signaturePriv = v; $t47_48.$set(obj); } };
3970          $t49_50.$set($t48_49);
3971          $t50_51 = UnmarshalGroup$1.bind(null, $t2_3);
3972          $t51_52 = Reader$readVector($t0_1, $t50_51);
3973          $t52_53 = ($t51_52 !== null);
3974          if ($t52_53) {
3975            $block = 17; break;
3976          }
3977          else {
3978            $block = 18; break;
3979          }
3980          break;
3981        }
3982        case 17: {
3983          return [null, $t51_52];
3984          break;
3985        }
3986        case 18: {
3987          $t53_54 = $t2_3.$get();
3988          return [$t53_54, null];
3989          break;
3990        }
3991      }
3992    }
3993  }
3994  
3995  function UnmarshalGroup$1(g, r) {
3996    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
3997    let $block = 0;
3998    while (true) {
3999      switch ($block) {
4000        case 0: {
4001          $t0_1 = Reader$readOpaqueVec(r);
4002          $t1_2 = $t0_1[0];
4003          $t2_3 = $t0_1[1];
4004          if ($t2_3) {
4005            $block = 2; break;
4006          }
4007          else {
4008            $block = 1; break;
4009          }
4010          break;
4011        }
4012        case 1: {
4013          $t3_4 = errUnexpectedEOF.$get();
4014          return $t3_4;
4015          break;
4016        }
4017        case 2: {
4018          $t4_5 = g.$get();
4019          $t5_6 = g.$get();
4020          $t6_7 = { $get() { return $t5_6.$get().privTree; }, $set(v) { const obj = $t5_6.$get(); obj.privTree = v; $t5_6.$set(obj); } };
4021          $t7_8 = $t6_7.$get();
4022          $t8_9 = $t1_2;
4023          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4024          $t10_11 = $t9_10.$get().addr(0);
4025          $t10_11.$set($t8_9);
4026          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
4027          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
4028          $t13_14 = { $get() { return $t4_5.$get().privTree; }, $set(v) { const obj = $t4_5.$get(); obj.privTree = v; $t4_5.$set(obj); } };
4029          $t13_14.$set($t12_13);
4030          return null;
4031          break;
4032        }
4033      }
4034    }
4035  }
4036  
4037  export function CreateGroup(groupID, kpp) {
4038    let $t0_1, $t1_2, $t2_3;
4039    $t0_1 = CreateGroupWithOptions(groupID, kpp, null);
4040    $t1_2 = $t0_1[0];
4041    $t2_3 = $t0_1[1];
4042    return [$t1_2, $t2_3];
4043  }
4044  
4045  export function CreateGroupWithOptions(groupID, kpp, opts) {
4046    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74;
4047    let $block = 0;
4048    while (true) {
4049      switch ($block) {
4050        case 0: {
4051          $t0_1 = { $get() { return kpp.$get().Public; }, $set(v) { const obj = kpp.$get(); obj.Public = v; kpp.$set(obj); } };
4052          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
4053          $t2_3 = $t1_2.$get();
4054          $t3_4 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4055          $t4_5 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4056          $t5_6 = $rt.builtin.sliceSlice($t4_5.$get(), undefined, 1, undefined);
4057          $t3_4.$set($t5_6);
4058          $t6_7 = { $get() { return kpp.$get().Public; }, $set(v) { const obj = kpp.$get(); obj.Public = v; kpp.$set(obj); } };
4059          $t7_8 = { $get() { return $t6_7.$get().leafNode; }, $set(v) { const obj = $t6_7.$get(); obj.leafNode = v; $t6_7.$set(obj); } };
4060          $t8_9 = ratchetTree$add($t3_4, $t7_8);
4061          $t9_10 = $t3_4.$get();
4062          $t10_11 = $rt.builtin.len($t9_10);
4063          $t11_12 = $rt.builtin.makeSlice($t10_11, $t10_11, null);
4064          $t12_13 = { $get() { return kpp.$get().Private; }, $set(v) { const obj = kpp.$get(); obj.Private = v; kpp.$set(obj); } };
4065          $t13_14 = { $get() { return $t12_13.$get().EncryptionKey; }, $set(v) { const obj = $t12_13.$get(); obj.EncryptionKey = v; $t12_13.$set(obj); } };
4066          $t14_15 = $t13_14.$get();
4067          $t15_16 = $t11_12.addr(0);
4068          $t16_17 = $t14_15;
4069          $t15_16.$set($t16_17);
4070          $t17_18 = $t3_4.$get();
4071          $t18_19 = ratchetTree$computeRootTreeHash($t17_18, $t2_3);
4072          $t19_20 = $t18_19[0];
4073          $t20_21 = $t18_19[1];
4074          $t21_22 = ($t20_21 !== null);
4075          if ($t21_22) {
4076            $block = 1; break;
4077          }
4078          else {
4079            $block = 2; break;
4080          }
4081          break;
4082        }
4083        case 1: {
4084          return [null, $t20_21];
4085          break;
4086        }
4087        case 2: {
4088          $t22_23 = CipherSuite$HashSize($t2_3);
4089          $t23_24 = $rt.builtin.makeSlice($t22_23, $t22_23, 0);
4090          $t24_25 = CipherSuite$ExtractSize($t2_3);
4091          $t25_26 = CipherSuite$randomBytes($t2_3, $t24_25);
4092          $t26_27 = (opts !== null);
4093          if ($t26_27) {
4094            $block = 3; break;
4095          }
4096          else {
4097            $t29_30 = null;
4098            $block = 4; break;
4099          }
4100          break;
4101        }
4102        case 3: {
4103          $t27_28 = { $get() { return opts.$get().Extensions; }, $set(v) { const obj = opts.$get(); obj.Extensions = v; opts.$set(obj); } };
4104          $t28_29 = $t27_28.$get();
4105          $t29_30 = $t28_29;
4106          $block = 4; break;
4107          break;
4108        }
4109        case 4: {
4110          $t30_31 = { $value: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4111          $t31_32 = { $get() { return $t30_31.$get().version; }, $set(v) { const obj = $t30_31.$get(); obj.version = v; $t30_31.$set(obj); } };
4112          $t32_33 = { $get() { return kpp.$get().Public; }, $set(v) { const obj = kpp.$get(); obj.Public = v; kpp.$set(obj); } };
4113          $t33_34 = { $get() { return $t32_33.$get().version; }, $set(v) { const obj = $t32_33.$get(); obj.version = v; $t32_33.$set(obj); } };
4114          $t34_35 = $t33_34.$get();
4115          $t35_36 = { $get() { return $t30_31.$get().cipherSuite; }, $set(v) { const obj = $t30_31.$get(); obj.cipherSuite = v; $t30_31.$set(obj); } };
4116          $t36_37 = { $get() { return $t30_31.$get().groupID; }, $set(v) { const obj = $t30_31.$get(); obj.groupID = v; $t30_31.$set(obj); } };
4117          $t37_38 = { $get() { return $t30_31.$get().epoch; }, $set(v) { const obj = $t30_31.$get(); obj.epoch = v; $t30_31.$set(obj); } };
4118          $t38_39 = { $get() { return $t30_31.$get().treeHash; }, $set(v) { const obj = $t30_31.$get(); obj.treeHash = v; $t30_31.$set(obj); } };
4119          $t39_40 = { $get() { return $t30_31.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t30_31.$get(); obj.confirmedTranscriptHash = v; $t30_31.$set(obj); } };
4120          $t40_41 = { $get() { return $t30_31.$get().extensions; }, $set(v) { const obj = $t30_31.$get(); obj.extensions = v; $t30_31.$set(obj); } };
4121          $t31_32.$set($t34_35);
4122          $t35_36.$set($t2_3);
4123          $t36_37.$set(groupID);
4124          $t37_38.$set(0n);
4125          $t38_39.$set($t19_20);
4126          $t39_40.$set($t23_24);
4127          $t40_41.$set($t29_30);
4128          $t41_42 = groupContext$signConfirmationTag($t30_31, $t25_26);
4129          $t42_43 = $t41_42[0];
4130          $t43_44 = $t41_42[1];
4131          $t44_45 = ($t43_44 !== null);
4132          if ($t44_45) {
4133            $block = 5; break;
4134          }
4135          else {
4136            $block = 6; break;
4137          }
4138          break;
4139        }
4140        case 5: {
4141          return [null, $t43_44];
4142          break;
4143        }
4144        case 6: {
4145          $t45_46 = nextInterimTranscriptHash($t2_3, $t23_24, $t42_43);
4146          $t46_47 = $t45_46[0];
4147          $t47_48 = $t45_46[1];
4148          $t48_49 = ($t47_48 !== null);
4149          if ($t48_49) {
4150            $block = 7; break;
4151          }
4152          else {
4153            $block = 8; break;
4154          }
4155          break;
4156        }
4157        case 7: {
4158          return [null, $t47_48];
4159          break;
4160        }
4161        case 8: {
4162          $t49_50 = extractPSKSecret($t2_3, null, null);
4163          $t50_51 = $t49_50[0];
4164          $t51_52 = $t49_50[1];
4165          $t52_53 = ($t51_52 !== null);
4166          if ($t52_53) {
4167            $block = 9; break;
4168          }
4169          else {
4170            $block = 10; break;
4171          }
4172          break;
4173        }
4174        case 9: {
4175          return [null, $t51_52];
4176          break;
4177        }
4178        case 10: {
4179          $t53_54 = secretLabelInit.$get();
4180          $t54_55 = CipherSuite$deriveSecret($t2_3, $t25_26, $t53_54);
4181          $t55_56 = $t54_55[0];
4182          $t56_57 = $t54_55[1];
4183          $t57_58 = ($t56_57 !== null);
4184          if ($t57_58) {
4185            $block = 11; break;
4186          }
4187          else {
4188            $block = 12; break;
4189          }
4190          break;
4191        }
4192        case 11: {
4193          return [null, $t56_57];
4194          break;
4195        }
4196        case 12: {
4197          $t58_59 = { $value: { tree: null, groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, interimTranscriptHash: null, pskSecret: null, epochSecret: null, initSecret: null, myLeafIndex: 0, privTree: null, signaturePriv: null, pendingProposals: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4198          $t59_60 = { $get() { return $t58_59.$get().tree; }, $set(v) { const obj = $t58_59.$get(); obj.tree = v; $t58_59.$set(obj); } };
4199          $t60_61 = $t3_4.$get();
4200          $t61_62 = { $get() { return $t58_59.$get().privTree; }, $set(v) { const obj = $t58_59.$get(); obj.privTree = v; $t58_59.$set(obj); } };
4201          $t62_63 = { $get() { return $t58_59.$get().myLeafIndex; }, $set(v) { const obj = $t58_59.$get(); obj.myLeafIndex = v; $t58_59.$set(obj); } };
4202          $t63_64 = { $get() { return $t58_59.$get().signaturePriv; }, $set(v) { const obj = $t58_59.$get(); obj.signaturePriv = v; $t58_59.$set(obj); } };
4203          $t64_65 = { $get() { return kpp.$get().Private; }, $set(v) { const obj = kpp.$get(); obj.Private = v; kpp.$set(obj); } };
4204          $t65_66 = { $get() { return $t64_65.$get().SignatureKey; }, $set(v) { const obj = $t64_65.$get(); obj.SignatureKey = v; $t64_65.$set(obj); } };
4205          $t66_67 = $t65_66.$get();
4206          $t67_68 = { $get() { return $t58_59.$get().groupContext; }, $set(v) { const obj = $t58_59.$get(); obj.groupContext = v; $t58_59.$set(obj); } };
4207          $t68_69 = $t30_31.$get();
4208          $t69_70 = { $get() { return $t58_59.$get().interimTranscriptHash; }, $set(v) { const obj = $t58_59.$get(); obj.interimTranscriptHash = v; $t58_59.$set(obj); } };
4209          $t70_71 = { $get() { return $t58_59.$get().pskSecret; }, $set(v) { const obj = $t58_59.$get(); obj.pskSecret = v; $t58_59.$set(obj); } };
4210          $t71_72 = { $get() { return $t58_59.$get().epochSecret; }, $set(v) { const obj = $t58_59.$get(); obj.epochSecret = v; $t58_59.$set(obj); } };
4211          $t72_73 = { $get() { return $t58_59.$get().initSecret; }, $set(v) { const obj = $t58_59.$get(); obj.initSecret = v; $t58_59.$set(obj); } };
4212          $t59_60.$set($t60_61);
4213          $t61_62.$set($t11_12);
4214          $t62_63.$set(0);
4215          $t73_74 = $t66_67;
4216          $t63_64.$set($t73_74);
4217          $t67_68.$set($rt.builtin.cloneValue($t68_69));
4218          $t69_70.$set($t46_47);
4219          $t70_71.$set($t50_51);
4220          $t71_72.$set($t25_26);
4221          $t72_73.$set($t55_56);
4222          return [$t58_59, null];
4223          break;
4224        }
4225      }
4226    }
4227  }
4228  
4229  export function GroupFromWelcome(welcome, kpp) {
4230    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
4231    let $block = 0;
4232    while (true) {
4233      switch ($block) {
4234        case 0: {
4235          $t0_1 = { $get() { return kpp.$get().Public; }, $set(v) { const obj = kpp.$get(); obj.Public = v; kpp.$set(obj); } };
4236          $t1_2 = KeyPackage$GenerateRef($t0_1);
4237          $t2_3 = $t1_2[0];
4238          $t3_4 = $t1_2[1];
4239          $t4_5 = ($t3_4 !== null);
4240          if ($t4_5) {
4241            $block = 1; break;
4242          }
4243          else {
4244            $block = 2; break;
4245          }
4246          break;
4247        }
4248        case 1: {
4249          return [null, $t3_4];
4250          break;
4251        }
4252        case 2: {
4253          $t5_6 = { $get() { return kpp.$get().Private; }, $set(v) { const obj = kpp.$get(); obj.Private = v; kpp.$set(obj); } };
4254          $t6_7 = { $get() { return $t5_6.$get().InitKey; }, $set(v) { const obj = $t5_6.$get(); obj.InitKey = v; $t5_6.$set(obj); } };
4255          $t7_8 = $t6_7.$get();
4256          $t8_9 = $t7_8;
4257          $t9_10 = Welcome$decryptGroupSecrets(welcome, $t2_3, $t8_9);
4258          $t10_11 = $t9_10[0];
4259          $t11_12 = $t9_10[1];
4260          $t12_13 = ($t11_12 !== null);
4261          if ($t12_13) {
4262            $block = 3; break;
4263          }
4264          else {
4265            $block = 4; break;
4266          }
4267          break;
4268        }
4269        case 3: {
4270          return [null, $t11_12];
4271          break;
4272        }
4273        case 4: {
4274          $t13_14 = groupSecrets$verifySingleReinitOrBranchPSK($t10_11);
4275          if ($t13_14) {
4276            $block = 6; break;
4277          }
4278          else {
4279            $block = 5; break;
4280          }
4281          break;
4282        }
4283        case 5: {
4284          $t14_15 = errors.New('mls: more than one reinit/branch PSK');
4285          return [null, $t14_15];
4286          break;
4287        }
4288        case 6: {
4289          $t15_16 = { $get() { return $t10_11.$get().psks; }, $set(v) { const obj = $t10_11.$get(); obj.psks = v; $t10_11.$set(obj); } };
4290          $t16_17 = $t15_16.$get();
4291          $t17_18 = $rt.builtin.len($t16_17);
4292          $t18_19 = ($t17_18 !== 0);
4293          if ($t18_19) {
4294            $block = 7; break;
4295          }
4296          else {
4297            $block = 8; break;
4298          }
4299          break;
4300        }
4301        case 7: {
4302          $t19_20 = errors.New('mls: group secret PSKs not supported');
4303          return [null, $t19_20];
4304          break;
4305        }
4306        case 8: {
4307          $t20_21 = groupFromSecrets(welcome, kpp, $t10_11, 0n);
4308          $t21_22 = $t20_21[0];
4309          $t22_23 = $t20_21[1];
4310          return [$t21_22, $t22_23];
4311          break;
4312        }
4313      }
4314    }
4315  }
4316  
4317  export function GroupFromWelcomeAt(welcome, kpp, nowUnix) {
4318    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
4319    let $block = 0;
4320    while (true) {
4321      switch ($block) {
4322        case 0: {
4323          $t0_1 = { $get() { return kpp.$get().Public; }, $set(v) { const obj = kpp.$get(); obj.Public = v; kpp.$set(obj); } };
4324          $t1_2 = KeyPackage$GenerateRef($t0_1);
4325          $t2_3 = $t1_2[0];
4326          $t3_4 = $t1_2[1];
4327          $t4_5 = ($t3_4 !== null);
4328          if ($t4_5) {
4329            $block = 1; break;
4330          }
4331          else {
4332            $block = 2; break;
4333          }
4334          break;
4335        }
4336        case 1: {
4337          return [null, $t3_4];
4338          break;
4339        }
4340        case 2: {
4341          $t5_6 = { $get() { return kpp.$get().Private; }, $set(v) { const obj = kpp.$get(); obj.Private = v; kpp.$set(obj); } };
4342          $t6_7 = { $get() { return $t5_6.$get().InitKey; }, $set(v) { const obj = $t5_6.$get(); obj.InitKey = v; $t5_6.$set(obj); } };
4343          $t7_8 = $t6_7.$get();
4344          $t8_9 = $t7_8;
4345          $t9_10 = Welcome$decryptGroupSecrets(welcome, $t2_3, $t8_9);
4346          $t10_11 = $t9_10[0];
4347          $t11_12 = $t9_10[1];
4348          $t12_13 = ($t11_12 !== null);
4349          if ($t12_13) {
4350            $block = 3; break;
4351          }
4352          else {
4353            $block = 4; break;
4354          }
4355          break;
4356        }
4357        case 3: {
4358          return [null, $t11_12];
4359          break;
4360        }
4361        case 4: {
4362          $t13_14 = groupSecrets$verifySingleReinitOrBranchPSK($t10_11);
4363          if ($t13_14) {
4364            $block = 6; break;
4365          }
4366          else {
4367            $block = 5; break;
4368          }
4369          break;
4370        }
4371        case 5: {
4372          $t14_15 = errors.New('mls: more than one reinit/branch PSK');
4373          return [null, $t14_15];
4374          break;
4375        }
4376        case 6: {
4377          $t15_16 = { $get() { return $t10_11.$get().psks; }, $set(v) { const obj = $t10_11.$get(); obj.psks = v; $t10_11.$set(obj); } };
4378          $t16_17 = $t15_16.$get();
4379          $t17_18 = $rt.builtin.len($t16_17);
4380          $t18_19 = ($t17_18 !== 0);
4381          if ($t18_19) {
4382            $block = 7; break;
4383          }
4384          else {
4385            $block = 8; break;
4386          }
4387          break;
4388        }
4389        case 7: {
4390          $t19_20 = errors.New('mls: group secret PSKs not supported');
4391          return [null, $t19_20];
4392          break;
4393        }
4394        case 8: {
4395          $t20_21 = groupFromSecrets(welcome, kpp, $t10_11, nowUnix);
4396          $t21_22 = $t20_21[0];
4397          $t22_23 = $t20_21[1];
4398          return [$t21_22, $t22_23];
4399          break;
4400        }
4401      }
4402    }
4403  }
4404  
4405  export function groupFromSecrets(welcome, kpp, gs, nowUnix) {
4406    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114;
4407    let $block = 0;
4408    while (true) {
4409      switch ($block) {
4410        case 0: {
4411          $t0_1 = { $get() { return welcome.$get().cipherSuite; }, $set(v) { const obj = welcome.$get(); obj.cipherSuite = v; welcome.$set(obj); } };
4412          $t1_2 = $t0_1.$get();
4413          $t2_3 = { $get() { return gs.$get().psks; }, $set(v) { const obj = gs.$get(); obj.psks = v; gs.$set(obj); } };
4414          $t3_4 = $t2_3.$get();
4415          $t4_5 = extractPSKSecret($t1_2, $t3_4, null);
4416          $t5_6 = $t4_5[0];
4417          $t6_7 = $t4_5[1];
4418          $t7_8 = ($t6_7 !== null);
4419          if ($t7_8) {
4420            $block = 1; break;
4421          }
4422          else {
4423            $block = 2; break;
4424          }
4425          break;
4426        }
4427        case 1: {
4428          return [null, $t6_7];
4429          break;
4430        }
4431        case 2: {
4432          $t8_9 = { $get() { return gs.$get().joinerSecret; }, $set(v) { const obj = gs.$get(); obj.joinerSecret = v; gs.$set(obj); } };
4433          $t9_10 = $t8_9.$get();
4434          $t10_11 = Welcome$decryptGroupInfo(welcome, $t9_10, $t5_6);
4435          $t11_12 = $t10_11[0];
4436          $t12_13 = $t10_11[1];
4437          $t13_14 = ($t12_13 !== null);
4438          if ($t13_14) {
4439            $block = 3; break;
4440          }
4441          else {
4442            $block = 4; break;
4443          }
4444          break;
4445        }
4446        case 3: {
4447          return [null, $t12_13];
4448          break;
4449        }
4450        case 4: {
4451          $t14_15 = { $get() { return $t11_12.$get().extensions; }, $set(v) { const obj = $t11_12.$get(); obj.extensions = v; $t11_12.$set(obj); } };
4452          $t15_16 = $t14_15.$get();
4453          $t16_17 = findExtensionData($t15_16, 2);
4454          $t17_18 = $rt.builtin.stringEqual($t16_17, null);
4455          if ($t17_18) {
4456            $block = 5; break;
4457          }
4458          else {
4459            $block = 6; break;
4460          }
4461          break;
4462        }
4463        case 5: {
4464          $t18_19 = errors.New('mls: missing ratchet tree');
4465          return [null, $t18_19];
4466          break;
4467        }
4468        case 6: {
4469          $t19_20 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4470          $t20_21 = $rt.types.makeInterface('*smesh.lol/web/common/mls.ratchetTree', $t19_20);
4471          $t21_22 = unmarshalRaw($t16_17, $t20_21);
4472          $t22_23 = ($t21_22 !== null);
4473          if ($t22_23) {
4474            $block = 7; break;
4475          }
4476          else {
4477            $block = 8; break;
4478          }
4479          break;
4480        }
4481        case 7: {
4482          return [null, $t21_22];
4483          break;
4484        }
4485        case 8: {
4486          $t23_24 = $t19_20.$get();
4487          $t24_25 = { $get() { return $t11_12.$get().signer; }, $set(v) { const obj = $t11_12.$get(); obj.signer = v; $t11_12.$set(obj); } };
4488          $t25_26 = $t24_25.$get();
4489          $t26_27 = ratchetTree$getLeaf($t23_24, $t25_26);
4490          $t27_28 = ($t26_27 === null);
4491          if ($t27_28) {
4492            $block = 9; break;
4493          }
4494          else {
4495            $block = 10; break;
4496          }
4497          break;
4498        }
4499        case 9: {
4500          $t28_29 = errors.New('mls: signer node is blank');
4501          return [null, $t28_29];
4502          break;
4503        }
4504        case 10: {
4505          $t29_30 = { $get() { return $t26_27.$get().signatureKey; }, $set(v) { const obj = $t26_27.$get(); obj.signatureKey = v; $t26_27.$set(obj); } };
4506          $t30_31 = $t29_30.$get();
4507          $t31_32 = groupInfo$verifySignature($t11_12, $t30_31);
4508          if ($t31_32) {
4509            $block = 12; break;
4510          }
4511          else {
4512            $block = 11; break;
4513          }
4514          break;
4515        }
4516        case 11: {
4517          $t32_33 = errors.New('mls: group info signature verification failed');
4518          return [null, $t32_33];
4519          break;
4520        }
4521        case 12: {
4522          $t33_34 = { $get() { return gs.$get().joinerSecret; }, $set(v) { const obj = gs.$get(); obj.joinerSecret = v; gs.$set(obj); } };
4523          $t34_35 = $t33_34.$get();
4524          $t35_36 = groupInfo$verifyConfirmationTag($t11_12, $t34_35, $t5_6);
4525          if ($t35_36) {
4526            $block = 14; break;
4527          }
4528          else {
4529            $block = 13; break;
4530          }
4531          break;
4532        }
4533        case 13: {
4534          $t36_37 = errors.New('mls: confirmation tag verification failed');
4535          return [null, $t36_37];
4536          break;
4537        }
4538        case 14: {
4539          $t37_38 = { $get() { return $t11_12.$get().groupContext; }, $set(v) { const obj = $t11_12.$get(); obj.groupContext = v; $t11_12.$set(obj); } };
4540          $t38_39 = { $get() { return $t37_38.$get().cipherSuite; }, $set(v) { const obj = $t37_38.$get(); obj.cipherSuite = v; $t37_38.$set(obj); } };
4541          $t39_40 = $t38_39.$get();
4542          $t40_41 = ($t39_40 !== $t1_2);
4543          if ($t40_41) {
4544            $block = 15; break;
4545          }
4546          else {
4547            $block = 16; break;
4548          }
4549          break;
4550        }
4551        case 15: {
4552          $t41_42 = errors.New('mls: group info cipher suite mismatch');
4553          return [null, $t41_42];
4554          break;
4555        }
4556        case 16: {
4557          $t42_43 = $t19_20.$get();
4558          $t43_44 = { $get() { return $t11_12.$get().groupContext; }, $set(v) { const obj = $t11_12.$get(); obj.groupContext = v; $t11_12.$set(obj); } };
4559          $t44_45 = ratchetTree$verifyIntegrity($t42_43, $t43_44, nowUnix);
4560          $t45_46 = ($t44_45 !== null);
4561          if ($t45_46) {
4562            $block = 17; break;
4563          }
4564          else {
4565            $block = 18; break;
4566          }
4567          break;
4568        }
4569        case 17: {
4570          return [null, $t44_45];
4571          break;
4572        }
4573        case 18: {
4574          $t46_47 = { $value: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4575          $t47_48 = { $get() { return $t11_12.$get().groupContext; }, $set(v) { const obj = $t11_12.$get(); obj.groupContext = v; $t11_12.$set(obj); } };
4576          $t48_49 = $t47_48.$get();
4577          $t46_47.$set($rt.builtin.cloneValue($t48_49));
4578          $t49_50 = { $get() { return gs.$get().joinerSecret; }, $set(v) { const obj = gs.$get(); obj.joinerSecret = v; gs.$set(obj); } };
4579          $t50_51 = $t49_50.$get();
4580          $t51_52 = groupContext$extractEpochSecret($t46_47, $t50_51, $t5_6);
4581          $t52_53 = $t51_52[0];
4582          $t53_54 = $t51_52[1];
4583          $t54_55 = ($t53_54 !== null);
4584          if ($t54_55) {
4585            $block = 19; break;
4586          }
4587          else {
4588            $block = 20; break;
4589          }
4590          break;
4591        }
4592        case 19: {
4593          return [null, $t53_54];
4594          break;
4595        }
4596        case 20: {
4597          $t55_56 = secretLabelInit.$get();
4598          $t56_57 = CipherSuite$deriveSecret($t1_2, $t52_53, $t55_56);
4599          $t57_58 = $t56_57[0];
4600          $t58_59 = $t56_57[1];
4601          $t59_60 = ($t58_59 !== null);
4602          if ($t59_60) {
4603            $block = 21; break;
4604          }
4605          else {
4606            $block = 22; break;
4607          }
4608          break;
4609        }
4610        case 21: {
4611          return [null, $t58_59];
4612          break;
4613        }
4614        case 22: {
4615          $t60_61 = { $get() { return $t46_47.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t46_47.$get(); obj.confirmedTranscriptHash = v; $t46_47.$set(obj); } };
4616          $t61_62 = $t60_61.$get();
4617          $t62_63 = { $get() { return $t11_12.$get().confirmationTag; }, $set(v) { const obj = $t11_12.$get(); obj.confirmationTag = v; $t11_12.$set(obj); } };
4618          $t63_64 = $t62_63.$get();
4619          $t64_65 = nextInterimTranscriptHash($t1_2, $t61_62, $t63_64);
4620          $t65_66 = $t64_65[0];
4621          $t66_67 = $t64_65[1];
4622          $t67_68 = ($t66_67 !== null);
4623          if ($t67_68) {
4624            $block = 23; break;
4625          }
4626          else {
4627            $block = 24; break;
4628          }
4629          break;
4630        }
4631        case 23: {
4632          return [null, $t66_67];
4633          break;
4634        }
4635        case 24: {
4636          $t68_69 = $t19_20.$get();
4637          $t69_70 = { $get() { return kpp.$get().Public; }, $set(v) { const obj = kpp.$get(); obj.Public = v; kpp.$set(obj); } };
4638          $t70_71 = { $get() { return $t69_70.$get().leafNode; }, $set(v) { const obj = $t69_70.$get(); obj.leafNode = v; $t69_70.$set(obj); } };
4639          $t71_72 = ratchetTree$findLeaf($t68_69, $t70_71);
4640          $t72_73 = $t71_72[0];
4641          $t73_74 = $t71_72[1];
4642          if ($t73_74) {
4643            $block = 26; break;
4644          }
4645          else {
4646            $block = 25; break;
4647          }
4648          break;
4649        }
4650        case 25: {
4651          $t74_75 = errors.New('mls: cannot find my leaf node in tree');
4652          return [null, $t74_75];
4653          break;
4654        }
4655        case 26: {
4656          $t75_76 = $t19_20.$get();
4657          $t76_77 = $rt.builtin.len($t75_76);
4658          $t77_78 = $rt.builtin.makeSlice($t76_77, $t76_77, null);
4659          $t78_79 = leafIndex$nodeIndex($t72_73);
4660          $t79_80 = $t78_79;
4661          $t80_81 = { $get() { return kpp.$get().Private; }, $set(v) { const obj = kpp.$get(); obj.Private = v; kpp.$set(obj); } };
4662          $t81_82 = { $get() { return $t80_81.$get().EncryptionKey; }, $set(v) { const obj = $t80_81.$get(); obj.EncryptionKey = v; $t80_81.$set(obj); } };
4663          $t82_83 = $t81_82.$get();
4664          $t83_84 = $t77_78.addr($t79_80);
4665          $t84_85 = $t82_83;
4666          $t83_84.$set($t84_85);
4667          $t85_86 = { $get() { return gs.$get().pathSecret; }, $set(v) { const obj = gs.$get(); obj.pathSecret = v; gs.$set(obj); } };
4668          $t86_87 = $t85_86.$get();
4669          $t87_88 = !$rt.builtin.stringEqual($t86_87, null);
4670          if ($t87_88) {
4671            $block = 27; break;
4672          }
4673          else {
4674            $block = 28; break;
4675          }
4676          break;
4677        }
4678        case 27: {
4679          $t88_89 = leafIndex$nodeIndex($t72_73);
4680          $t89_90 = { $get() { return $t11_12.$get().signer; }, $set(v) { const obj = $t11_12.$get(); obj.signer = v; $t11_12.$set(obj); } };
4681          $t90_91 = $t89_90.$get();
4682          $t91_92 = leafIndex$nodeIndex($t90_91);
4683          $t92_93 = commonAncestor($t88_89, $t91_92);
4684          $t93_94 = $t19_20.$get();
4685          $t94_95 = { $get() { return gs.$get().pathSecret; }, $set(v) { const obj = gs.$get(); obj.pathSecret = v; gs.$set(obj); } };
4686          $t95_96 = $t94_95.$get();
4687          $t96_97 = processPathSecret($t1_2, $t93_94, $t77_78, $t95_96, $t92_93);
4688          $t97_98 = ($t96_97 !== null);
4689          if ($t97_98) {
4690            $block = 29; break;
4691          }
4692          else {
4693            $block = 28; break;
4694          }
4695          break;
4696        }
4697        case 28: {
4698          $t98_99 = { $value: { tree: null, groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, interimTranscriptHash: null, pskSecret: null, epochSecret: null, initSecret: null, myLeafIndex: 0, privTree: null, signaturePriv: null, pendingProposals: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4699          $t99_100 = { $get() { return $t98_99.$get().tree; }, $set(v) { const obj = $t98_99.$get(); obj.tree = v; $t98_99.$set(obj); } };
4700          $t100_101 = $t19_20.$get();
4701          $t101_102 = { $get() { return $t98_99.$get().groupContext; }, $set(v) { const obj = $t98_99.$get(); obj.groupContext = v; $t98_99.$set(obj); } };
4702          $t102_103 = $t46_47.$get();
4703          $t103_104 = { $get() { return $t98_99.$get().interimTranscriptHash; }, $set(v) { const obj = $t98_99.$get(); obj.interimTranscriptHash = v; $t98_99.$set(obj); } };
4704          $t104_105 = { $get() { return $t98_99.$get().pskSecret; }, $set(v) { const obj = $t98_99.$get(); obj.pskSecret = v; $t98_99.$set(obj); } };
4705          $t105_106 = { $get() { return $t98_99.$get().epochSecret; }, $set(v) { const obj = $t98_99.$get(); obj.epochSecret = v; $t98_99.$set(obj); } };
4706          $t106_107 = { $get() { return $t98_99.$get().initSecret; }, $set(v) { const obj = $t98_99.$get(); obj.initSecret = v; $t98_99.$set(obj); } };
4707          $t107_108 = { $get() { return $t98_99.$get().myLeafIndex; }, $set(v) { const obj = $t98_99.$get(); obj.myLeafIndex = v; $t98_99.$set(obj); } };
4708          $t108_109 = { $get() { return $t98_99.$get().privTree; }, $set(v) { const obj = $t98_99.$get(); obj.privTree = v; $t98_99.$set(obj); } };
4709          $t109_110 = { $get() { return $t98_99.$get().signaturePriv; }, $set(v) { const obj = $t98_99.$get(); obj.signaturePriv = v; $t98_99.$set(obj); } };
4710          $t110_111 = { $get() { return kpp.$get().Private; }, $set(v) { const obj = kpp.$get(); obj.Private = v; kpp.$set(obj); } };
4711          $t111_112 = { $get() { return $t110_111.$get().SignatureKey; }, $set(v) { const obj = $t110_111.$get(); obj.SignatureKey = v; $t110_111.$set(obj); } };
4712          $t112_113 = $t111_112.$get();
4713          $t99_100.$set($t100_101);
4714          $t101_102.$set($rt.builtin.cloneValue($t102_103));
4715          $t103_104.$set($t65_66);
4716          $t104_105.$set($t5_6);
4717          $t105_106.$set($t52_53);
4718          $t106_107.$set($t57_58);
4719          $t107_108.$set($t72_73);
4720          $t108_109.$set($t77_78);
4721          $t113_114 = $t112_113;
4722          $t109_110.$set($t113_114);
4723          return [$t98_99, null];
4724          break;
4725        }
4726        case 29: {
4727          return [null, $t96_97];
4728          break;
4729        }
4730      }
4731    }
4732  }
4733  
4734  export function processPathSecret(cs, tree, privTree, pathSecret, ni) {
4735    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26;
4736    let $block = 0;
4737    while (true) {
4738      switch ($block) {
4739        case 0: {
4740          $t0_1 = ratchetTree$get(tree, ni);
4741          $t1_2 = node$encryptionKey($t0_1);
4742          $t2_3 = nodePrivFromPathSecret(cs, pathSecret, $t1_2);
4743          $t3_4 = $t2_3[0];
4744          $t4_5 = $t2_3[1];
4745          $t5_6 = ($t4_5 !== null);
4746          if ($t5_6) {
4747            $block = 1; break;
4748          }
4749          else {
4750            $block = 2; break;
4751          }
4752          break;
4753        }
4754        case 1: {
4755          return $t4_5;
4756          break;
4757        }
4758        case 2: {
4759          $t6_7 = ni;
4760          $t7_8 = privTree.addr($t6_7);
4761          $t7_8.$set($t3_4);
4762          $t8_9 = pathSecret;
4763          $t9_10 = ni;
4764          $block = 3; break;
4765          break;
4766        }
4767        case 3: {
4768          $t10_11 = ratchetTree$numLeaves(tree);
4769          $t11_12 = numLeaves$parent($t10_11, $t9_10);
4770          $t12_13 = $t11_12[0];
4771          $t13_14 = $t11_12[1];
4772          if ($t13_14) {
4773            $block = 5; break;
4774          }
4775          else {
4776            $block = 4; break;
4777          }
4778          break;
4779        }
4780        case 4: {
4781          return null;
4782          break;
4783        }
4784        case 5: {
4785          $t14_15 = CipherSuite$deriveSecret(cs, $t8_9, 'path');
4786          $t15_16 = $t14_15[0];
4787          $t16_17 = $t14_15[1];
4788          $t17_18 = ($t16_17 !== null);
4789          if ($t17_18) {
4790            $block = 6; break;
4791          }
4792          else {
4793            $block = 7; break;
4794          }
4795          break;
4796        }
4797        case 6: {
4798          return $t16_17;
4799          break;
4800        }
4801        case 7: {
4802          $t18_19 = ratchetTree$get(tree, $t12_13);
4803          $t19_20 = node$encryptionKey($t18_19);
4804          $t20_21 = nodePrivFromPathSecret(cs, $t15_16, $t19_20);
4805          $t21_22 = $t20_21[0];
4806          $t22_23 = $t20_21[1];
4807          $t23_24 = ($t22_23 !== null);
4808          if ($t23_24) {
4809            $block = 8; break;
4810          }
4811          else {
4812            $block = 9; break;
4813          }
4814          break;
4815        }
4816        case 8: {
4817          return $t22_23;
4818          break;
4819        }
4820        case 9: {
4821          $t24_25 = $t12_13;
4822          $t25_26 = privTree.addr($t24_25);
4823          $t25_26.$set($t21_22);
4824          $t8_9 = $t15_16;
4825          $t9_10 = $t12_13;
4826          $block = 3; break;
4827          break;
4828        }
4829      }
4830    }
4831  }
4832  
4833  export function resolveProposals(propOrRefs, senderLI, pending) {
4834    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53;
4835    let $block = 0;
4836    while (true) {
4837      switch ($block) {
4838        case 0: {
4839          $t0_1 = $rt.builtin.len(propOrRefs);
4840          $t1_2 = null;
4841          $t2_3 = null;
4842          $t3_4 = -1;
4843          $block = 1; break;
4844          break;
4845        }
4846        case 1: {
4847          $t4_5 = ($t3_4 + 1);
4848          $t5_6 = ($t4_5 < $t0_1);
4849          if ($t5_6) {
4850            $block = 2; break;
4851          }
4852          else {
4853            $block = 3; break;
4854          }
4855          break;
4856        }
4857        case 2: {
4858          $t6_7 = propOrRefs.addr($t4_5);
4859          $t7_8 = $t6_7.$get();
4860          $t8_9 = { $value: { typ: 0, proposal: null, reference: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4861          $t8_9.$set($rt.builtin.cloneValue($t7_8));
4862          $t9_10 = { $get() { return $t8_9.$get().typ; }, $set(v) { const obj = $t8_9.$get(); obj.typ = v; $t8_9.$set(obj); } };
4863          $t10_11 = $t9_10.$get();
4864          $t11_12 = ($t10_11 === 1);
4865          if ($t11_12) {
4866            $block = 4; break;
4867          }
4868          else {
4869            $block = 6; break;
4870          }
4871          break;
4872        }
4873        case 3: {
4874          return [$t1_2, $t2_3, null];
4875          break;
4876        }
4877        case 4: {
4878          $t12_13 = { $get() { return $t8_9.$get().proposal; }, $set(v) { const obj = $t8_9.$get(); obj.proposal = v; $t8_9.$set(obj); } };
4879          $t13_14 = $t12_13.$get();
4880          $t14_15 = $t13_14.$get();
4881          $t15_16 = { $value: $rt.builtin.makeSlice(1, 1, { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4882          $t16_17 = $t15_16.$get().addr(0);
4883          $t16_17.$set($rt.builtin.cloneValue($t14_15));
4884          $t17_18 = $rt.builtin.sliceSlice($t15_16.$get(), undefined, undefined, undefined);
4885          $t18_19 = $rt.builtin.appendSlice($t1_2, $t17_18);
4886          $t19_20 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4887          $t20_21 = $t19_20.$get().addr(0);
4888          $t20_21.$set(senderLI);
4889          $t21_22 = $rt.builtin.sliceSlice($t19_20.$get(), undefined, undefined, undefined);
4890          $t22_23 = $rt.builtin.appendSlice($t2_3, $t21_22);
4891          $t1_2 = $t18_19;
4892          $t2_3 = $t22_23;
4893          $t3_4 = $t4_5;
4894          $block = 1; break;
4895          break;
4896        }
4897        case 5: {
4898          $t23_24 = $rt.builtin.len(pending);
4899          $t25_26 = -1;
4900          $block = 7; break;
4901          break;
4902        }
4903        case 6: {
4904          $t24_25 = ($t10_11 === 2);
4905          if ($t24_25) {
4906            $block = 5; break;
4907          }
4908          else {
4909            let $phi0 = $t1_2;
4910            let $phi1 = $t2_3;
4911            let $phi2 = $t4_5;
4912            $t1_2 = $phi0;
4913            $t2_3 = $phi1;
4914            $t3_4 = $phi2;
4915            $block = 1; break;
4916          }
4917          break;
4918        }
4919        case 7: {
4920          $t26_27 = ($t25_26 + 1);
4921          $t27_28 = ($t26_27 < $t23_24);
4922          if ($t27_28) {
4923            $block = 8; break;
4924          }
4925          else {
4926            $t36_37 = $t1_2;
4927            $t37_38 = $t2_3;
4928            $t38_39 = false;
4929            $block = 9; break;
4930          }
4931          break;
4932        }
4933        case 8: {
4934          $t28_29 = pending.addr($t26_27);
4935          $t29_30 = $t28_29.$get();
4936          $t30_31 = { $value: { ref: null, proposal: null, sender: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
4937          $t30_31.$set($rt.builtin.cloneValue($t29_30));
4938          $t31_32 = { $get() { return $t30_31.$get().ref; }, $set(v) { const obj = $t30_31.$get(); obj.ref = v; $t30_31.$set(obj); } };
4939          $t32_33 = $t31_32.$get();
4940          $t33_34 = { $get() { return $t8_9.$get().reference; }, $set(v) { const obj = $t8_9.$get(); obj.reference = v; $t8_9.$set(obj); } };
4941          $t34_35 = $t33_34.$get();
4942          $t35_36 = proposalRef$equal($t32_33, $t34_35);
4943          if ($t35_36) {
4944            $block = 10; break;
4945          }
4946          else {
4947            $t25_26 = $t26_27;
4948            $block = 7; break;
4949          }
4950          break;
4951        }
4952        case 9: {
4953          if ($t38_39) {
4954            $t1_2 = $t36_37;
4955            $t2_3 = $t37_38;
4956            $t3_4 = $t4_5;
4957            $block = 1; break;
4958          }
4959          else {
4960            $block = 11; break;
4961          }
4962          break;
4963        }
4964        case 10: {
4965          $t39_40 = { $get() { return $t30_31.$get().proposal; }, $set(v) { const obj = $t30_31.$get(); obj.proposal = v; $t30_31.$set(obj); } };
4966          $t40_41 = $t39_40.$get();
4967          $t41_42 = $t40_41.$get();
4968          $t42_43 = { $value: $rt.builtin.makeSlice(1, 1, { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4969          $t43_44 = $t42_43.$get().addr(0);
4970          $t43_44.$set($rt.builtin.cloneValue($t41_42));
4971          $t44_45 = $rt.builtin.sliceSlice($t42_43.$get(), undefined, undefined, undefined);
4972          $t45_46 = $rt.builtin.appendSlice($t1_2, $t44_45);
4973          $t46_47 = { $get() { return $t30_31.$get().sender; }, $set(v) { const obj = $t30_31.$get(); obj.sender = v; $t30_31.$set(obj); } };
4974          $t47_48 = $t46_47.$get();
4975          $t48_49 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4976          $t49_50 = $t48_49.$get().addr(0);
4977          $t49_50.$set($t47_48);
4978          $t50_51 = $rt.builtin.sliceSlice($t48_49.$get(), undefined, undefined, undefined);
4979          $t51_52 = $rt.builtin.appendSlice($t2_3, $t50_51);
4980          $t36_37 = $t45_46;
4981          $t37_38 = $t51_52;
4982          $t38_39 = true;
4983          $block = 9; break;
4984          break;
4985        }
4986        case 11: {
4987          $t52_53 = errors.New('mls: proposal reference not found');
4988          return [null, null, $t52_53];
4989          break;
4990        }
4991      }
4992    }
4993  }
4994  
4995  export function UnmarshalWelcome(raw) {
4996    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
4997    let $block = 0;
4998    while (true) {
4999      switch ($block) {
5000        case 0: {
5001          $t0_1 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5002          $t1_2 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t0_1);
5003          $t2_3 = unmarshalRaw(raw, $t1_2);
5004          $t3_4 = ($t2_3 !== null);
5005          if ($t3_4) {
5006            $block = 1; break;
5007          }
5008          else {
5009            $block = 2; break;
5010          }
5011          break;
5012        }
5013        case 1: {
5014          return [null, $t2_3];
5015          break;
5016        }
5017        case 2: {
5018          $t4_5 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
5019          $t5_6 = $t4_5.$get();
5020          $t6_7 = ($t5_6 !== 3);
5021          if ($t6_7) {
5022            $block = 3; break;
5023          }
5024          else {
5025            $block = 4; break;
5026          }
5027          break;
5028        }
5029        case 3: {
5030          $t7_8 = errInvalidWireFormat.$get();
5031          return [null, $t7_8];
5032          break;
5033        }
5034        case 4: {
5035          $t8_9 = { $get() { return $t0_1.$get().welcome; }, $set(v) { const obj = $t0_1.$get(); obj.welcome = v; $t0_1.$set(obj); } };
5036          $t9_10 = $t8_9.$get();
5037          return [$t9_10, null];
5038          break;
5039        }
5040      }
5041    }
5042  }
5043  
5044  export function UnmarshalKeyPackage(raw) {
5045    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
5046    let $block = 0;
5047    while (true) {
5048      switch ($block) {
5049        case 0: {
5050          $t0_1 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5051          $t1_2 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t0_1);
5052          $t2_3 = unmarshalRaw(raw, $t1_2);
5053          $t3_4 = ($t2_3 !== null);
5054          if ($t3_4) {
5055            $block = 1; break;
5056          }
5057          else {
5058            $block = 2; break;
5059          }
5060          break;
5061        }
5062        case 1: {
5063          return [null, $t2_3];
5064          break;
5065        }
5066        case 2: {
5067          $t4_5 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
5068          $t5_6 = $t4_5.$get();
5069          $t6_7 = ($t5_6 !== 5);
5070          if ($t6_7) {
5071            $block = 3; break;
5072          }
5073          else {
5074            $block = 4; break;
5075          }
5076          break;
5077        }
5078        case 3: {
5079          $t7_8 = errInvalidWireFormat.$get();
5080          return [null, $t7_8];
5081          break;
5082        }
5083        case 4: {
5084          $t8_9 = { $get() { return $t0_1.$get().keyPackage; }, $set(v) { const obj = $t0_1.$get(); obj.keyPackage = v; $t0_1.$set(obj); } };
5085          $t9_10 = $t8_9.$get();
5086          return [$t9_10, null];
5087          break;
5088        }
5089      }
5090    }
5091  }
5092  
5093  export function UnmarshalRawKeyPackage(raw) {
5094    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
5095    let $block = 0;
5096    while (true) {
5097      switch ($block) {
5098        case 0: {
5099          $t0_1 = { $value: { data: null, pos: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5100          $t1_2 = newReader(raw);
5101          $t0_1.$set($rt.builtin.cloneValue($t1_2));
5102          $t2_3 = { $value: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5103          $t3_4 = KeyPackage$unmarshal($t2_3, $t0_1);
5104          $t4_5 = ($t3_4 !== null);
5105          if ($t4_5) {
5106            $block = 1; break;
5107          }
5108          else {
5109            $block = 2; break;
5110          }
5111          break;
5112        }
5113        case 1: {
5114          return [null, $t3_4];
5115          break;
5116        }
5117        case 2: {
5118          $t5_6 = Reader$empty($t0_1);
5119          if ($t5_6) {
5120            $block = 4; break;
5121          }
5122          else {
5123            $block = 3; break;
5124          }
5125          break;
5126        }
5127        case 3: {
5128          $t6_7 = errExcessBytes.$get();
5129          return [null, $t6_7];
5130          break;
5131        }
5132        case 4: {
5133          return [$t2_3, null];
5134          break;
5135        }
5136      }
5137    }
5138  }
5139  
5140  export function GenerateKeyPairPackage(cs, credential, nowUnix) {
5141    let $t0_1, $t1_2, $t2_3;
5142    $t0_1 = GenerateKeyPairPackageWithOptions(cs, credential, null, nowUnix);
5143    $t1_2 = $t0_1[0];
5144    $t2_3 = $t0_1[1];
5145    return [$t1_2, $t2_3];
5146  }
5147  
5148  export function GenerateKeyPairPackageWithOptions(cs, credential, opts, nowUnix) {
5149    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85;
5150    let $block = 0;
5151    while (true) {
5152      switch ($block) {
5153        case 0: {
5154          $t0_1 = CipherSuite$generateEncryptionKeyPair(cs);
5155          $t1_2 = $t0_1[0];
5156          $t2_3 = $t0_1[1];
5157          $t3_4 = $t0_1[2];
5158          $t4_5 = ($t3_4 !== null);
5159          if ($t4_5) {
5160            $block = 1; break;
5161          }
5162          else {
5163            $block = 2; break;
5164          }
5165          break;
5166        }
5167        case 1: {
5168          return [null, $t3_4];
5169          break;
5170        }
5171        case 2: {
5172          $t5_6 = CipherSuite$generateEncryptionKeyPair(cs);
5173          $t6_7 = $t5_6[0];
5174          $t7_8 = $t5_6[1];
5175          $t8_9 = $t5_6[2];
5176          $t9_10 = ($t8_9 !== null);
5177          if ($t9_10) {
5178            $block = 3; break;
5179          }
5180          else {
5181            $block = 4; break;
5182          }
5183          break;
5184        }
5185        case 3: {
5186          return [null, $t8_9];
5187          break;
5188        }
5189        case 4: {
5190          $t10_11 = CipherSuite$generateSignatureKeyPair(cs);
5191          $t11_12 = $t10_11[0];
5192          $t12_13 = $t10_11[1];
5193          $t13_14 = $t10_11[2];
5194          $t14_15 = ($t13_14 !== null);
5195          if ($t14_15) {
5196            $block = 5; break;
5197          }
5198          else {
5199            $block = 6; break;
5200          }
5201          break;
5202        }
5203        case 5: {
5204          return [null, $t13_14];
5205          break;
5206        }
5207        case 6: {
5208          $t15_16 = (opts !== null);
5209          if ($t15_16) {
5210            $block = 7; break;
5211          }
5212          else {
5213            $t22_23 = null;
5214            $t23_24 = null;
5215            $t24_25 = null;
5216            $block = 8; break;
5217          }
5218          break;
5219        }
5220        case 7: {
5221          $t16_17 = { $get() { return opts.$get().CapabilityExtensions; }, $set(v) { const obj = opts.$get(); obj.CapabilityExtensions = v; opts.$set(obj); } };
5222          $t17_18 = $t16_17.$get();
5223          $t18_19 = { $get() { return opts.$get().LeafExtensions; }, $set(v) { const obj = opts.$get(); obj.LeafExtensions = v; opts.$set(obj); } };
5224          $t19_20 = $t18_19.$get();
5225          $t20_21 = { $get() { return opts.$get().KeyPackageExtensions; }, $set(v) { const obj = opts.$get(); obj.KeyPackageExtensions = v; opts.$set(obj); } };
5226          $t21_22 = $t20_21.$get();
5227          $t22_23 = $t17_18;
5228          $t23_24 = $t19_20;
5229          $t24_25 = $t21_22;
5230          $block = 8; break;
5231          break;
5232        }
5233        case 8: {
5234          $t25_26 = ($t22_23 === null);
5235          if ($t25_26) {
5236            $block = 9; break;
5237          }
5238          else {
5239            $t29_30 = $t22_23;
5240            $block = 10; break;
5241          }
5242          break;
5243        }
5244        case 9: {
5245          $t26_27 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5246          $t27_28 = $t26_27.$get().addr(0);
5247          $t27_28.$set(2);
5248          $t28_29 = $rt.builtin.sliceSlice($t26_27.$get(), undefined, undefined, undefined);
5249          $t29_30 = $t28_29;
5250          $block = 10; break;
5251          break;
5252        }
5253        case 10: {
5254          $t30_31 = BigInt.asIntN(64, nowUnix - 3600n);
5255          $t31_32 = BigInt.asIntN(64, nowUnix + 7257600n);
5256          $t32_33 = { $value: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5257          $t33_34 = { $get() { return $t32_33.$get().version; }, $set(v) { const obj = $t32_33.$get(); obj.version = v; $t32_33.$set(obj); } };
5258          $t34_35 = { $get() { return $t32_33.$get().cipherSuite; }, $set(v) { const obj = $t32_33.$get(); obj.cipherSuite = v; $t32_33.$set(obj); } };
5259          $t35_36 = { $get() { return $t32_33.$get().initKey; }, $set(v) { const obj = $t32_33.$get(); obj.initKey = v; $t32_33.$set(obj); } };
5260          $t36_37 = { $get() { return $t32_33.$get().leafNode; }, $set(v) { const obj = $t32_33.$get(); obj.leafNode = v; $t32_33.$set(obj); } };
5261          $t37_38 = { $get() { return $t36_37.$get().encryptionKey; }, $set(v) { const obj = $t36_37.$get(); obj.encryptionKey = v; $t36_37.$set(obj); } };
5262          $t38_39 = { $get() { return $t36_37.$get().signatureKey; }, $set(v) { const obj = $t36_37.$get(); obj.signatureKey = v; $t36_37.$set(obj); } };
5263          $t39_40 = { $get() { return $t36_37.$get().leafNodeSource; }, $set(v) { const obj = $t36_37.$get(); obj.leafNodeSource = v; $t36_37.$set(obj); } };
5264          $t40_41 = { $get() { return $t36_37.$get().credential; }, $set(v) { const obj = $t36_37.$get(); obj.credential = v; $t36_37.$set(obj); } };
5265          $t41_42 = credential.$get();
5266          $t42_43 = { $get() { return $t36_37.$get().capabilities; }, $set(v) { const obj = $t36_37.$get(); obj.capabilities = v; $t36_37.$set(obj); } };
5267          $t43_44 = { $get() { return $t42_43.$get().versions; }, $set(v) { const obj = $t42_43.$get(); obj.versions = v; $t42_43.$set(obj); } };
5268          $t44_45 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5269          $t45_46 = $t44_45.$get().addr(0);
5270          $t45_46.$set(1);
5271          $t46_47 = $rt.builtin.sliceSlice($t44_45.$get(), undefined, undefined, undefined);
5272          $t47_48 = { $get() { return $t42_43.$get().cipherSuites; }, $set(v) { const obj = $t42_43.$get(); obj.cipherSuites = v; $t42_43.$set(obj); } };
5273          $t48_49 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5274          $t49_50 = $t48_49.$get().addr(0);
5275          $t49_50.$set(cs);
5276          $t50_51 = $rt.builtin.sliceSlice($t48_49.$get(), undefined, undefined, undefined);
5277          $t51_52 = { $get() { return $t42_43.$get().extensions; }, $set(v) { const obj = $t42_43.$get(); obj.extensions = v; $t42_43.$set(obj); } };
5278          $t52_53 = { $get() { return $t42_43.$get().proposals; }, $set(v) { const obj = $t42_43.$get(); obj.proposals = v; $t42_43.$set(obj); } };
5279          $t53_54 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5280          $t54_55 = $t53_54.$get().addr(0);
5281          $t54_55.$set(1);
5282          $t55_56 = $t53_54.$get().addr(1);
5283          $t55_56.$set(2);
5284          $t56_57 = $t53_54.$get().addr(2);
5285          $t56_57.$set(3);
5286          $t57_58 = $rt.builtin.sliceSlice($t53_54.$get(), undefined, undefined, undefined);
5287          $t58_59 = { $get() { return $t42_43.$get().credentials; }, $set(v) { const obj = $t42_43.$get(); obj.credentials = v; $t42_43.$set(obj); } };
5288          $t59_60 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5289          $t60_61 = $t59_60.$get().addr(0);
5290          $t60_61.$set(1);
5291          $t61_62 = $rt.builtin.sliceSlice($t59_60.$get(), undefined, undefined, undefined);
5292          $t62_63 = { $get() { return $t36_37.$get().lifetime; }, $set(v) { const obj = $t36_37.$get(); obj.lifetime = v; $t36_37.$set(obj); } };
5293          $t63_64 = { $value: { notBefore: 0n, notAfter: 0n }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5294          $t64_65 = { $get() { return $t63_64.$get().notBefore; }, $set(v) { const obj = $t63_64.$get(); obj.notBefore = v; $t63_64.$set(obj); } };
5295          $t65_66 = BigInt.asUintN(64, BigInt($t30_31));
5296          $t66_67 = { $get() { return $t63_64.$get().notAfter; }, $set(v) { const obj = $t63_64.$get(); obj.notAfter = v; $t63_64.$set(obj); } };
5297          $t67_68 = BigInt.asUintN(64, BigInt($t31_32));
5298          $t64_65.$set($t65_66);
5299          $t66_67.$set($t67_68);
5300          $t68_69 = { $get() { return $t36_37.$get().extensions; }, $set(v) { const obj = $t36_37.$get(); obj.extensions = v; $t36_37.$set(obj); } };
5301          $t69_70 = { $get() { return $t32_33.$get().extensions; }, $set(v) { const obj = $t32_33.$get(); obj.extensions = v; $t32_33.$set(obj); } };
5302          $t33_34.$set(1);
5303          $t34_35.$set(cs);
5304          $t35_36.$set($t1_2);
5305          $t37_38.$set($t6_7);
5306          $t38_39.$set($t11_12);
5307          $t39_40.$set(1);
5308          $t40_41.$set($rt.builtin.cloneValue($t41_42));
5309          $t43_44.$set($t46_47);
5310          $t47_48.$set($t50_51);
5311          $t51_52.$set($t29_30);
5312          $t52_53.$set($t57_58);
5313          $t58_59.$set($t61_62);
5314          $t62_63.$set($t63_64);
5315          $t68_69.$set($t23_24);
5316          $t69_70.$set($t24_25);
5317          $t70_71 = { $get() { return $t32_33.$get().leafNode; }, $set(v) { const obj = $t32_33.$get(); obj.leafNode = v; $t32_33.$set(obj); } };
5318          $t71_72 = leafNode$sign($t70_71, cs, null, 0, $t12_13);
5319          $t72_73 = ($t71_72 !== null);
5320          if ($t72_73) {
5321            $block = 11; break;
5322          }
5323          else {
5324            $block = 12; break;
5325          }
5326          break;
5327        }
5328        case 11: {
5329          return [null, $t71_72];
5330          break;
5331        }
5332        case 12: {
5333          $t73_74 = KeyPackage$sign($t32_33, $t12_13);
5334          $t74_75 = ($t73_74 !== null);
5335          if ($t74_75) {
5336            $block = 13; break;
5337          }
5338          else {
5339            $block = 14; break;
5340          }
5341          break;
5342        }
5343        case 13: {
5344          return [null, $t73_74];
5345          break;
5346        }
5347        case 14: {
5348          $t75_76 = { $value: { Public: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }, Private: { InitKey: null, EncryptionKey: null, SignatureKey: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5349          $t76_77 = { $get() { return $t75_76.$get().Public; }, $set(v) { const obj = $t75_76.$get(); obj.Public = v; $t75_76.$set(obj); } };
5350          $t77_78 = $t32_33.$get();
5351          $t78_79 = { $get() { return $t75_76.$get().Private; }, $set(v) { const obj = $t75_76.$get(); obj.Private = v; $t75_76.$set(obj); } };
5352          $t79_80 = { $get() { return $t78_79.$get().InitKey; }, $set(v) { const obj = $t78_79.$get(); obj.InitKey = v; $t78_79.$set(obj); } };
5353          $t80_81 = { $get() { return $t78_79.$get().EncryptionKey; }, $set(v) { const obj = $t78_79.$get(); obj.EncryptionKey = v; $t78_79.$set(obj); } };
5354          $t81_82 = { $get() { return $t78_79.$get().SignatureKey; }, $set(v) { const obj = $t78_79.$get(); obj.SignatureKey = v; $t78_79.$set(obj); } };
5355          $t76_77.$set($rt.builtin.cloneValue($t77_78));
5356          $t82_83 = $t2_3;
5357          $t79_80.$set($t82_83);
5358          $t83_84 = $t7_8;
5359          $t80_81.$set($t83_84);
5360          $t84_85 = $t12_13;
5361          $t81_82.$set($t84_85);
5362          return [$t75_76, null];
5363          break;
5364        }
5365      }
5366    }
5367  }
5368  
5369  export function extractWelcomeSecret(cs, joinerSecret, pskSecret) {
5370    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
5371    let $block = 0;
5372    while (true) {
5373      switch ($block) {
5374        case 0: {
5375          $t0_1 = $rt.builtin.stringEqual(pskSecret, null);
5376          if ($t0_1) {
5377            $block = 1; break;
5378          }
5379          else {
5380            $t3_4 = pskSecret;
5381            $block = 2; break;
5382          }
5383          break;
5384        }
5385        case 1: {
5386          $t1_2 = CipherSuite$ExtractSize(cs);
5387          $t2_3 = $rt.builtin.makeSlice($t1_2, $t1_2, 0);
5388          $t3_4 = $t2_3;
5389          $block = 2; break;
5390          break;
5391        }
5392        case 2: {
5393          $t4_5 = CipherSuite$hkdfExtract(cs, joinerSecret, $t3_4);
5394          $t5_6 = CipherSuite$deriveSecret(cs, $t4_5, 'welcome');
5395          $t6_7 = $t5_6[0];
5396          $t7_8 = $t5_6[1];
5397          return [$t6_7, $t7_8];
5398          break;
5399        }
5400      }
5401    }
5402  }
5403  
5404  export function deriveExporter(cs, exporterSecret, label, context, length) {
5405    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
5406    let $block = 0;
5407    while (true) {
5408      switch ($block) {
5409        case 0: {
5410          $t0_1 = CipherSuite$deriveSecret(cs, exporterSecret, label);
5411          $t1_2 = $t0_1[0];
5412          $t2_3 = $t0_1[1];
5413          $t3_4 = ($t2_3 !== null);
5414          if ($t3_4) {
5415            $block = 1; break;
5416          }
5417          else {
5418            $block = 2; break;
5419          }
5420          break;
5421        }
5422        case 1: {
5423          return [null, $t2_3];
5424          break;
5425        }
5426        case 2: {
5427          $t4_5 = CipherSuite$hash(cs, context);
5428          $t5_6 = CipherSuite$expandWithLabel(cs, $t1_2, 'exported', $t4_5, length);
5429          $t6_7 = $t5_6[0];
5430          $t7_8 = $t5_6[1];
5431          return [$t6_7, $t7_8];
5432          break;
5433        }
5434      }
5435    }
5436  }
5437  
5438  export function nextInterimTranscriptHash(cs, confirmedTranscriptHash, confirmationTag) {
5439    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
5440    let $block = 0;
5441    while (true) {
5442      switch ($block) {
5443        case 0: {
5444          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5445          $t1_2 = Writer$writeOpaqueVec($t0_1, confirmationTag);
5446          $t2_3 = Writer$bytes($t0_1);
5447          $t3_4 = $t2_3[0];
5448          $t4_5 = $t2_3[1];
5449          $t5_6 = ($t4_5 !== null);
5450          if ($t5_6) {
5451            $block = 1; break;
5452          }
5453          else {
5454            $block = 2; break;
5455          }
5456          break;
5457        }
5458        case 1: {
5459          return [null, $t4_5];
5460          break;
5461        }
5462        case 2: {
5463          $t6_7 = $rt.builtin.appendSlice(confirmedTranscriptHash, $t3_4);
5464          $t7_8 = CipherSuite$hash(cs, $t6_7);
5465          return [$t7_8, null];
5466          break;
5467        }
5468      }
5469    }
5470  }
5471  
5472  export function extractPSKSecret(cs, pskIDs, psks) {
5473    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35;
5474    let $block = 0;
5475    while (true) {
5476      switch ($block) {
5477        case 0: {
5478          $t0_1 = $rt.builtin.len(pskIDs);
5479          $t1_2 = $rt.builtin.len(psks);
5480          $t2_3 = ($t0_1 !== $t1_2);
5481          if ($t2_3) {
5482            $block = 1; break;
5483          }
5484          else {
5485            $block = 2; break;
5486          }
5487          break;
5488        }
5489        case 1: {
5490          $t3_4 = errors.New('mls: PSK ID count != PSK count');
5491          return [null, $t3_4];
5492          break;
5493        }
5494        case 2: {
5495          $t4_5 = CipherSuite$ExtractSize(cs);
5496          $t5_6 = $rt.builtin.makeSlice($t4_5, $t4_5, 0);
5497          $t6_7 = $rt.builtin.len(pskIDs);
5498          $t7_8 = $t5_6;
5499          $t8_9 = -1;
5500          $block = 3; break;
5501          break;
5502        }
5503        case 3: {
5504          $t9_10 = ($t8_9 + 1);
5505          $t10_11 = ($t9_10 < $t6_7);
5506          if ($t10_11) {
5507            $block = 4; break;
5508          }
5509          else {
5510            $block = 5; break;
5511          }
5512          break;
5513        }
5514        case 4: {
5515          $t11_12 = psks.addr($t9_10);
5516          $t12_13 = $t11_12.$get();
5517          $t13_14 = CipherSuite$hkdfExtract(cs, $t12_13, $t5_6);
5518          $t14_15 = { $value: { id: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }, index: 0, count: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5519          $t15_16 = { $get() { return $t14_15.$get().id; }, $set(v) { const obj = $t14_15.$get(); obj.id = v; $t14_15.$set(obj); } };
5520          $t16_17 = pskIDs.addr($t9_10);
5521          $t17_18 = $t16_17.$get();
5522          $t18_19 = { $get() { return $t14_15.$get().index; }, $set(v) { const obj = $t14_15.$get(); obj.index = v; $t14_15.$set(obj); } };
5523          $t19_20 = ($t9_10 & 0xFFFF);
5524          $t20_21 = { $get() { return $t14_15.$get().count; }, $set(v) { const obj = $t14_15.$get(); obj.count = v; $t14_15.$set(obj); } };
5525          $t21_22 = $rt.builtin.len(pskIDs);
5526          $t22_23 = ($t21_22 & 0xFFFF);
5527          $t15_16.$set($rt.builtin.cloneValue($t17_18));
5528          $t18_19.$set($t19_20);
5529          $t20_21.$set($t22_23);
5530          $t23_24 = $rt.types.makeInterface('*smesh.lol/web/common/mls.pskLabel', $t14_15);
5531          $t24_25 = marshalRaw($t23_24);
5532          $t25_26 = $t24_25[0];
5533          $t26_27 = $t24_25[1];
5534          $t27_28 = ($t26_27 !== null);
5535          if ($t27_28) {
5536            $block = 6; break;
5537          }
5538          else {
5539            $block = 7; break;
5540          }
5541          break;
5542        }
5543        case 5: {
5544          return [$t7_8, null];
5545          break;
5546        }
5547        case 6: {
5548          return [null, $t26_27];
5549          break;
5550        }
5551        case 7: {
5552          $t28_29 = CipherSuite$ExtractSize(cs);
5553          $t29_30 = ($t28_29 & 0xFFFF);
5554          $t30_31 = CipherSuite$expandWithLabel(cs, $t13_14, 'derived psk', $t25_26, $t29_30);
5555          $t31_32 = $t30_31[0];
5556          $t32_33 = $t30_31[1];
5557          $t33_34 = ($t32_33 !== null);
5558          if ($t33_34) {
5559            $block = 8; break;
5560          }
5561          else {
5562            $block = 9; break;
5563          }
5564          break;
5565        }
5566        case 8: {
5567          return [null, $t32_33];
5568          break;
5569        }
5570        case 9: {
5571          $t34_35 = CipherSuite$hkdfExtract(cs, $t7_8, $t31_32);
5572          $t7_8 = $t34_35;
5573          $t8_9 = $t9_10;
5574          $block = 3; break;
5575          break;
5576        }
5577      }
5578    }
5579  }
5580  
5581  export function verifyProposalList(proposals, senders, committer) {
5582    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77;
5583    let $block = 0;
5584    while (true) {
5585      switch ($block) {
5586        case 0: {
5587          $t0_1 = $rt.builtin.len(proposals);
5588          $t1_2 = $rt.builtin.len(senders);
5589          $t2_3 = ($t0_1 !== $t1_2);
5590          if ($t2_3) {
5591            $block = 1; break;
5592          }
5593          else {
5594            $block = 2; break;
5595          }
5596          break;
5597        }
5598        case 1: {
5599          $t3_4 = $rt.types.makeInterface('string', 'unreachable');
5600          $rt.runtime.panic($t3_4);
5601          break;
5602        }
5603        case 2: {
5604          $t4_5 = $rt.builtin.makeMap('string');
5605          $t5_6 = $rt.builtin.makeMap('int');
5606          $t6_7 = $rt.builtin.makeMap('string');
5607          $t7_8 = $rt.builtin.len(proposals);
5608          $t8_9 = false;
5609          $t9_10 = -1;
5610          $block = 3; break;
5611          break;
5612        }
5613        case 3: {
5614          $t10_11 = ($t9_10 + 1);
5615          $t11_12 = ($t10_11 < $t7_8);
5616          if ($t11_12) {
5617            $block = 4; break;
5618          }
5619          else {
5620            $block = 5; break;
5621          }
5622          break;
5623        }
5624        case 4: {
5625          $t12_13 = proposals.addr($t10_11);
5626          $t13_14 = $t12_13.$get();
5627          $t14_15 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5628          $t14_15.$set($rt.builtin.cloneValue($t13_14));
5629          $t15_16 = senders.addr($t10_11);
5630          $t16_17 = $t15_16.$get();
5631          $t17_18 = { $get() { return $t14_15.$get().proposalType; }, $set(v) { const obj = $t14_15.$get(); obj.proposalType = v; $t14_15.$set(obj); } };
5632          $t18_19 = $t17_18.$get();
5633          $t19_20 = ($t18_19 === 1);
5634          if ($t19_20) {
5635            $block = 6; break;
5636          }
5637          else {
5638            $block = 8; break;
5639          }
5640          break;
5641        }
5642        case 5: {
5643          return null;
5644          break;
5645        }
5646        case 6: {
5647          $t20_21 = { $get() { return $t14_15.$get().add; }, $set(v) { const obj = $t14_15.$get(); obj.add = v; $t14_15.$set(obj); } };
5648          $t21_22 = $t20_21.$get();
5649          $t22_23 = { $get() { return $t21_22.$get().keyPackage; }, $set(v) { const obj = $t21_22.$get(); obj.keyPackage = v; $t21_22.$set(obj); } };
5650          $t23_24 = { $get() { return $t22_23.$get().leafNode; }, $set(v) { const obj = $t22_23.$get(); obj.leafNode = v; $t22_23.$set(obj); } };
5651          $t24_25 = { $get() { return $t23_24.$get().signatureKey; }, $set(v) { const obj = $t23_24.$get(); obj.signatureKey = v; $t23_24.$set(obj); } };
5652          $t25_26 = $t24_25.$get();
5653          { const $r = $rt.builtin.mapLookup($t4_5, $t25_26); $t26_27 = [$r.value, $r.ok]; }
5654          $t27_28 = $t26_27[0];
5655          $t28_29 = $t26_27[1];
5656          if ($t28_29) {
5657            $block = 9; break;
5658          }
5659          else {
5660            $block = 10; break;
5661          }
5662          break;
5663        }
5664        case 7: {
5665          $t29_30 = ($t16_17 === committer);
5666          if ($t29_30) {
5667            $block = 13; break;
5668          }
5669          else {
5670            $block = 14; break;
5671          }
5672          break;
5673        }
5674        case 8: {
5675          $t30_31 = ($t18_19 === 2);
5676          if ($t30_31) {
5677            $block = 7; break;
5678          }
5679          else {
5680            $block = 12; break;
5681          }
5682          break;
5683        }
5684        case 9: {
5685          $t31_32 = errDupAddKey.$get();
5686          return $t31_32;
5687          break;
5688        }
5689        case 10: {
5690          $rt.builtin.mapUpdate($t4_5, $t25_26, {});
5691          let $phi0 = $t8_9;
5692          let $phi1 = $t10_11;
5693          $t8_9 = $phi0;
5694          $t9_10 = $phi1;
5695          $block = 3; break;
5696          break;
5697        }
5698        case 11: {
5699          $t32_33 = { $get() { return $t14_15.$get().remove; }, $set(v) { const obj = $t14_15.$get(); obj.remove = v; $t14_15.$set(obj); } };
5700          $t33_34 = $t32_33.$get();
5701          $t34_35 = { $get() { return $t33_34.$get().removed; }, $set(v) { const obj = $t33_34.$get(); obj.removed = v; $t33_34.$set(obj); } };
5702          $t35_36 = $t34_35.$get();
5703          $t36_37 = ($t35_36 === committer);
5704          if ($t36_37) {
5705            $block = 19; break;
5706          }
5707          else {
5708            $block = 20; break;
5709          }
5710          break;
5711        }
5712        case 12: {
5713          $t37_38 = ($t18_19 === 3);
5714          if ($t37_38) {
5715            $block = 11; break;
5716          }
5717          else {
5718            $block = 18; break;
5719          }
5720          break;
5721        }
5722        case 13: {
5723          $t38_39 = errUpdateByCommitter.$get();
5724          return $t38_39;
5725          break;
5726        }
5727        case 14: {
5728          { const $r = $rt.builtin.mapLookup($t5_6, $t16_17); $t39_40 = [$r.value, $r.ok]; }
5729          $t40_41 = $t39_40[0];
5730          $t41_42 = $t39_40[1];
5731          if ($t41_42) {
5732            $block = 15; break;
5733          }
5734          else {
5735            $block = 16; break;
5736          }
5737          break;
5738        }
5739        case 15: {
5740          $t42_43 = errDupUpdateOrRemove.$get();
5741          return $t42_43;
5742          break;
5743        }
5744        case 16: {
5745          $rt.builtin.mapUpdate($t5_6, $t16_17, {});
5746          let $phi0 = $t8_9;
5747          let $phi1 = $t10_11;
5748          $t8_9 = $phi0;
5749          $t9_10 = $phi1;
5750          $block = 3; break;
5751          break;
5752        }
5753        case 17: {
5754          $t43_44 = { $get() { return $t14_15.$get().preSharedKey; }, $set(v) { const obj = $t14_15.$get(); obj.preSharedKey = v; $t14_15.$set(obj); } };
5755          $t44_45 = $t43_44.$get();
5756          $t45_46 = { $get() { return $t44_45.$get().psk; }, $set(v) { const obj = $t44_45.$get(); obj.psk = v; $t44_45.$set(obj); } };
5757          $t46_47 = $rt.types.makeInterface('*smesh.lol/web/common/mls.preSharedKeyID', $t45_46);
5758          $t47_48 = marshalRaw($t46_47);
5759          $t48_49 = $t47_48[0];
5760          $t49_50 = $t47_48[1];
5761          $t50_51 = ($t49_50 !== null);
5762          if ($t50_51) {
5763            $block = 25; break;
5764          }
5765          else {
5766            $block = 26; break;
5767          }
5768          break;
5769        }
5770        case 18: {
5771          $t51_52 = ($t18_19 === 4);
5772          if ($t51_52) {
5773            $block = 17; break;
5774          }
5775          else {
5776            $block = 24; break;
5777          }
5778          break;
5779        }
5780        case 19: {
5781          $t52_53 = errRemoveCommitter.$get();
5782          return $t52_53;
5783          break;
5784        }
5785        case 20: {
5786          $t53_54 = { $get() { return $t14_15.$get().remove; }, $set(v) { const obj = $t14_15.$get(); obj.remove = v; $t14_15.$set(obj); } };
5787          $t54_55 = $t53_54.$get();
5788          $t55_56 = { $get() { return $t54_55.$get().removed; }, $set(v) { const obj = $t54_55.$get(); obj.removed = v; $t54_55.$set(obj); } };
5789          $t56_57 = $t55_56.$get();
5790          { const $r = $rt.builtin.mapLookup($t5_6, $t56_57); $t57_58 = [$r.value, $r.ok]; }
5791          $t58_59 = $t57_58[0];
5792          $t59_60 = $t57_58[1];
5793          if ($t59_60) {
5794            $block = 21; break;
5795          }
5796          else {
5797            $block = 22; break;
5798          }
5799          break;
5800        }
5801        case 21: {
5802          $t60_61 = errDupUpdateOrRemove.$get();
5803          return $t60_61;
5804          break;
5805        }
5806        case 22: {
5807          $t61_62 = { $get() { return $t14_15.$get().remove; }, $set(v) { const obj = $t14_15.$get(); obj.remove = v; $t14_15.$set(obj); } };
5808          $t62_63 = $t61_62.$get();
5809          $t63_64 = { $get() { return $t62_63.$get().removed; }, $set(v) { const obj = $t62_63.$get(); obj.removed = v; $t62_63.$set(obj); } };
5810          $t64_65 = $t63_64.$get();
5811          $rt.builtin.mapUpdate($t5_6, $t64_65, {});
5812          let $phi0 = $t8_9;
5813          let $phi1 = $t10_11;
5814          $t8_9 = $phi0;
5815          $t9_10 = $phi1;
5816          $block = 3; break;
5817          break;
5818        }
5819        case 23: {
5820          if ($t8_9) {
5821            $block = 31; break;
5822          }
5823          else {
5824            $block = 32; break;
5825          }
5826          break;
5827        }
5828        case 24: {
5829          $t65_66 = ($t18_19 === 7);
5830          if ($t65_66) {
5831            $block = 23; break;
5832          }
5833          else {
5834            $block = 30; break;
5835          }
5836          break;
5837        }
5838        case 25: {
5839          return $t49_50;
5840          break;
5841        }
5842        case 26: {
5843          { const $r = $rt.builtin.mapLookup($t6_7, $t48_49); $t66_67 = [$r.value, $r.ok]; }
5844          $t67_68 = $t66_67[0];
5845          $t68_69 = $t66_67[1];
5846          if ($t68_69) {
5847            $block = 27; break;
5848          }
5849          else {
5850            $block = 28; break;
5851          }
5852          break;
5853        }
5854        case 27: {
5855          $t69_70 = errDupPSK.$get();
5856          return $t69_70;
5857          break;
5858        }
5859        case 28: {
5860          $rt.builtin.mapUpdate($t6_7, $t48_49, {});
5861          let $phi0 = $t8_9;
5862          let $phi1 = $t10_11;
5863          $t8_9 = $phi0;
5864          $t9_10 = $phi1;
5865          $block = 3; break;
5866          break;
5867        }
5868        case 29: {
5869          $t70_71 = $rt.builtin.len(proposals);
5870          $t71_72 = ($t70_71 > 1);
5871          if ($t71_72) {
5872            $block = 35; break;
5873          }
5874          else {
5875            let $phi0 = $t8_9;
5876            let $phi1 = $t10_11;
5877            $t8_9 = $phi0;
5878            $t9_10 = $phi1;
5879            $block = 3; break;
5880          }
5881          break;
5882        }
5883        case 30: {
5884          $t72_73 = ($t18_19 === 5);
5885          if ($t72_73) {
5886            $block = 29; break;
5887          }
5888          else {
5889            $block = 34; break;
5890          }
5891          break;
5892        }
5893        case 31: {
5894          $t73_74 = errDupGroupContextExts.$get();
5895          return $t73_74;
5896          break;
5897        }
5898        case 32: {
5899          $t8_9 = true;
5900          $t9_10 = $t10_11;
5901          $block = 3; break;
5902          break;
5903        }
5904        case 33: {
5905          $t74_75 = errExternalInitNotAllowed.$get();
5906          return $t74_75;
5907          break;
5908        }
5909        case 34: {
5910          $t75_76 = ($t18_19 === 6);
5911          if ($t75_76) {
5912            $block = 33; break;
5913          }
5914          else {
5915            let $phi0 = $t8_9;
5916            let $phi1 = $t10_11;
5917            $t8_9 = $phi0;
5918            $t9_10 = $phi1;
5919            $block = 3; break;
5920          }
5921          break;
5922        }
5923        case 35: {
5924          $t76_77 = errReinitWithOther.$get();
5925          return $t76_77;
5926          break;
5927        }
5928      }
5929    }
5930  }
5931  
5932  export function proposalListNeedsPath(proposals) {
5933    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
5934    let $block = 0;
5935    while (true) {
5936      switch ($block) {
5937        case 0: {
5938          $t0_1 = $rt.builtin.len(proposals);
5939          $t1_2 = ($t0_1 === 0);
5940          if ($t1_2) {
5941            $block = 1; break;
5942          }
5943          else {
5944            $block = 2; break;
5945          }
5946          break;
5947        }
5948        case 1: {
5949          return true;
5950          break;
5951        }
5952        case 2: {
5953          $t2_3 = $rt.builtin.len(proposals);
5954          $t3_4 = -1;
5955          $block = 3; break;
5956          break;
5957        }
5958        case 3: {
5959          $t4_5 = ($t3_4 + 1);
5960          $t5_6 = ($t4_5 < $t2_3);
5961          if ($t5_6) {
5962            $block = 4; break;
5963          }
5964          else {
5965            $block = 5; break;
5966          }
5967          break;
5968        }
5969        case 4: {
5970          $t6_7 = proposals.addr($t4_5);
5971          $t7_8 = $t6_7.$get();
5972          $t8_9 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
5973          $t8_9.$set($rt.builtin.cloneValue($t7_8));
5974          $t9_10 = { $get() { return $t8_9.$get().proposalType; }, $set(v) { const obj = $t8_9.$get(); obj.proposalType = v; $t8_9.$set(obj); } };
5975          $t10_11 = $t9_10.$get();
5976          $t11_12 = ($t10_11 === 2);
5977          if ($t11_12) {
5978            $block = 6; break;
5979          }
5980          else {
5981            $block = 7; break;
5982          }
5983          break;
5984        }
5985        case 5: {
5986          return false;
5987          break;
5988        }
5989        case 6: {
5990          return true;
5991          break;
5992        }
5993        case 7: {
5994          $t12_13 = ($t10_11 === 3);
5995          if ($t12_13) {
5996            $block = 6; break;
5997          }
5998          else {
5999            $block = 8; break;
6000          }
6001          break;
6002        }
6003        case 8: {
6004          $t13_14 = ($t10_11 === 6);
6005          if ($t13_14) {
6006            $block = 6; break;
6007          }
6008          else {
6009            $block = 9; break;
6010          }
6011          break;
6012        }
6013        case 9: {
6014          $t14_15 = ($t10_11 === 7);
6015          if ($t14_15) {
6016            $block = 6; break;
6017          }
6018          else {
6019            $t3_4 = $t4_5;
6020            $block = 3; break;
6021          }
6022          break;
6023        }
6024      }
6025    }
6026  }
6027  
6028  export function ratchetLabelFromContentType(ct) {
6029    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
6030    let $block = 0;
6031    while (true) {
6032      switch ($block) {
6033        case 0: {
6034          $t0_1 = (ct === 1);
6035          if ($t0_1) {
6036            $block = 1; break;
6037          }
6038          else {
6039            $block = 3; break;
6040          }
6041          break;
6042        }
6043        case 1: {
6044          $t1_2 = ratchetLabelApplication.$get();
6045          return $t1_2;
6046          break;
6047        }
6048        case 2: {
6049          $t2_3 = ratchetLabelHandshake.$get();
6050          return $t2_3;
6051          break;
6052        }
6053        case 3: {
6054          $t3_4 = (ct === 2);
6055          if ($t3_4) {
6056            $block = 2; break;
6057          }
6058          else {
6059            $block = 4; break;
6060          }
6061          break;
6062        }
6063        case 4: {
6064          $t4_5 = (ct === 3);
6065          if ($t4_5) {
6066            $block = 2; break;
6067          }
6068          else {
6069            $block = 5; break;
6070          }
6071          break;
6072        }
6073        case 5: {
6074          $t5_6 = $rt.types.makeInterface('string', 'unreachable');
6075          $rt.runtime.panic($t5_6);
6076          break;
6077        }
6078      }
6079    }
6080  }
6081  
6082  export function deriveSecretTree(cs, n, encryptionSecret) {
6083    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
6084    $t0_1 = numLeaves$width(n);
6085    $t1_2 = $t0_1;
6086    $t2_3 = $rt.builtin.makeSlice($t1_2, $t1_2, null);
6087    $t3_4 = $t2_3;
6088    $t4_5 = numLeaves$root(n);
6089    $t5_6 = secretTree$set($t3_4, $t4_5, encryptionSecret);
6090    $t6_7 = numLeaves$root(n);
6091    $t7_8 = secretTree$deriveChildren($t3_4, cs, $t6_7);
6092    return [$t3_4, $t7_8];
6093  }
6094  
6095  export function deriveTreeSecret(cs, secret, label, generation, length) {
6096    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
6097    $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
6098    $t1_2 = $t0_1.$get().addr(0);
6099    $t2_3 = (generation >>> 24);
6100    $t3_4 = ($t2_3 & 0xFF);
6101    $t1_2.$set($t3_4);
6102    $t4_5 = $t0_1.$get().addr(1);
6103    $t5_6 = (generation >>> 16);
6104    $t6_7 = ($t5_6 & 0xFF);
6105    $t4_5.$set($t6_7);
6106    $t7_8 = $t0_1.$get().addr(2);
6107    $t8_9 = (generation >>> 8);
6108    $t9_10 = ($t8_9 & 0xFF);
6109    $t7_8.$set($t9_10);
6110    $t10_11 = $t0_1.$get().addr(3);
6111    $t11_12 = (generation & 0xFF);
6112    $t10_11.$set($t11_12);
6113    $t12_13 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
6114    $t13_14 = CipherSuite$expandWithLabel(cs, secret, label, $t12_13, length);
6115    $t14_15 = $t13_14[0];
6116    $t15_16 = $t13_14[1];
6117    return [$t14_15, $t15_16];
6118  }
6119  
6120  export function TestKeySchedule() {
6121    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139, $t139_140, $t140_141, $t141_142, $t142_143, $t143_144, $t144_145, $t145_146, $t146_147, $t147_148, $t148_149, $t149_150, $t150_151, $t151_152, $t152_153, $t153_154, $t154_155, $t155_156, $t156_157, $t157_158, $t158_159, $t159_160, $t160_161, $t161_162, $t162_163, $t163_164, $t164_165, $t165_166, $t166_167, $t167_168, $t168_169, $t169_170, $t170_171, $t171_172, $t172_173, $t173_174, $t174_175, $t175_176, $t176_177, $t177_178, $t178_179, $t179_180, $t180_181, $t181_182, $t182_183, $t183_184, $t184_185, $t185_186, $t186_187, $t187_188, $t188_189, $t189_190, $t190_191, $t191_192, $t192_193, $t193_194, $t194_195, $t195_196, $t196_197, $t197_198, $t198_199, $t199_200, $t200_201, $t201_202, $t202_203, $t203_204, $t204_205, $t205_206, $t206_207, $t207_208, $t208_209, $t209_210, $t210_211, $t211_212, $t212_213, $t213_214, $t214_215, $t215_216, $t216_217, $t217_218, $t218_219, $t219_220, $t220_221, $t221_222, $t222_223, $t223_224, $t224_225, $t225_226, $t226_227, $t227_228, $t228_229, $t229_230, $t230_231, $t231_232, $t232_233, $t233_234, $t234_235, $t235_236, $t236_237, $t237_238, $t238_239, $t239_240, $t240_241, $t241_242, $t242_243, $t243_244, $t244_245, $t245_246, $t246_247, $t247_248, $t248_249, $t249_250, $t250_251, $t251_252, $t252_253, $t253_254, $t254_255, $t255_256, $t256_257, $t257_258, $t258_259, $t259_260, $t260_261, $t261_262, $t262_263, $t263_264, $t264_265, $t265_266, $t266_267, $t267_268, $t268_269, $t269_270, $t270_271, $t271_272, $t272_273, $t273_274, $t274_275, $t275_276, $t276_277, $t277_278, $t278_279;
6122    let $block = 0;
6123    while (true) {
6124      switch ($block) {
6125        case 0: {
6126          $t0_1 = hexb('a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e');
6127          $t1_2 = hexb('a897b53575b4dd35fed4466e4e714bfa949eaa72e616a9c68a47b39cb7a60d2e');
6128          $t2_3 = ksEpochs.$get();
6129          $t3_4 = $rt.builtin.len($t2_3);
6130          $t4_5 = $t1_2;
6131          $t5_6 = -1;
6132          $block = 1; break;
6133          break;
6134        }
6135        case 1: {
6136          $t6_7 = ($t5_6 + 1);
6137          $t7_8 = ($t6_7 < $t3_4);
6138          if ($t7_8) {
6139            $block = 2; break;
6140          }
6141          else {
6142            $block = 3; break;
6143          }
6144          break;
6145        }
6146        case 2: {
6147          $t8_9 = $t2_3.addr($t6_7);
6148          $t9_10 = $t8_9.$get();
6149          $t10_11 = { $value: { commitSecret: null, treeHash: null, confirmedTranscriptHash: null, pskSecret: null, groupContext: null, joinerSecret: null, welcomeSecret: null, initSecret: null, senderDataSecret: null, encryptionSecret: null, exporterSecret: null, externalSecret: null, confirmationKey: null, membershipKey: null, resumptionPSK: null, epochAuthenticator: null, externalPub: null, exporterLabel: null, exporterContext: null, exporterLength: 0, exporterValue: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
6150          $t10_11.$set($rt.builtin.cloneValue($t9_10));
6151          $t11_12 = { $value: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
6152          $t12_13 = { $get() { return $t11_12.$get().version; }, $set(v) { const obj = $t11_12.$get(); obj.version = v; $t11_12.$set(obj); } };
6153          $t13_14 = { $get() { return $t11_12.$get().cipherSuite; }, $set(v) { const obj = $t11_12.$get(); obj.cipherSuite = v; $t11_12.$set(obj); } };
6154          $t14_15 = { $get() { return $t11_12.$get().groupID; }, $set(v) { const obj = $t11_12.$get(); obj.groupID = v; $t11_12.$set(obj); } };
6155          $t15_16 = $t0_1;
6156          $t16_17 = { $get() { return $t11_12.$get().epoch; }, $set(v) { const obj = $t11_12.$get(); obj.epoch = v; $t11_12.$set(obj); } };
6157          $t17_18 = BigInt.asUintN(64, BigInt($t6_7));
6158          $t18_19 = { $get() { return $t11_12.$get().treeHash; }, $set(v) { const obj = $t11_12.$get(); obj.treeHash = v; $t11_12.$set(obj); } };
6159          $t19_20 = { $get() { return $t10_11.$get().treeHash; }, $set(v) { const obj = $t10_11.$get(); obj.treeHash = v; $t10_11.$set(obj); } };
6160          $t20_21 = $t19_20.$get();
6161          $t21_22 = { $get() { return $t11_12.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t11_12.$get(); obj.confirmedTranscriptHash = v; $t11_12.$set(obj); } };
6162          $t22_23 = { $get() { return $t10_11.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t10_11.$get(); obj.confirmedTranscriptHash = v; $t10_11.$set(obj); } };
6163          $t23_24 = $t22_23.$get();
6164          $t12_13.$set(1);
6165          $t13_14.$set(3);
6166          $t14_15.$set($t15_16);
6167          $t16_17.$set($t17_18);
6168          $t18_19.$set($t20_21);
6169          $t21_22.$set($t23_24);
6170          $t24_25 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupContext', $t11_12);
6171          $t25_26 = marshalRaw($t24_25);
6172          $t26_27 = $t25_26[0];
6173          $t27_28 = $t25_26[1];
6174          $t28_29 = ($t27_28 !== null);
6175          if ($t28_29) {
6176            $block = 4; break;
6177          }
6178          else {
6179            $block = 5; break;
6180          }
6181          break;
6182        }
6183        case 3: {
6184          return null;
6185          break;
6186        }
6187        case 4: {
6188          $t29_30 = itoa($t6_7);
6189          $t30_31 = ('epoch ' + $t29_30);
6190          $t31_32 = ($t30_31 + ': marshalRaw: ');
6191          $t32_33 = $rt.types.methodCall($t27_28, 'Error', []);
6192          $t33_34 = ($t31_32 + $t32_33);
6193          $t34_35 = errors.New($t33_34);
6194          return $t34_35;
6195          break;
6196        }
6197        case 5: {
6198          $t35_36 = { $get() { return $t10_11.$get().groupContext; }, $set(v) { const obj = $t10_11.$get(); obj.groupContext = v; $t10_11.$set(obj); } };
6199          $t36_37 = $t35_36.$get();
6200          $t37_38 = bytesEqual($t26_27, $t36_37);
6201          if ($t37_38) {
6202            $block = 7; break;
6203          }
6204          else {
6205            $block = 6; break;
6206          }
6207          break;
6208        }
6209        case 6: {
6210          $t38_39 = itoa($t6_7);
6211          $t39_40 = ('epoch ' + $t38_39);
6212          $t40_41 = ($t39_40 + ': group_context mismatch: got ');
6213          $t41_42 = hexenc($t26_27);
6214          $t42_43 = ($t40_41 + $t41_42);
6215          $t43_44 = ($t42_43 + ' want ');
6216          $t44_45 = { $get() { return $t10_11.$get().groupContext; }, $set(v) { const obj = $t10_11.$get(); obj.groupContext = v; $t10_11.$set(obj); } };
6217          $t45_46 = $t44_45.$get();
6218          $t46_47 = hexenc($t45_46);
6219          $t47_48 = ($t43_44 + $t46_47);
6220          $t48_49 = errors.New($t47_48);
6221          return $t48_49;
6222          break;
6223        }
6224        case 7: {
6225          $t49_50 = { $get() { return $t10_11.$get().commitSecret; }, $set(v) { const obj = $t10_11.$get(); obj.commitSecret = v; $t10_11.$set(obj); } };
6226          $t50_51 = $t49_50.$get();
6227          $t51_52 = groupContext$extractJoinerSecret($t11_12, $t4_5, $t50_51);
6228          $t52_53 = $t51_52[0];
6229          $t53_54 = $t51_52[1];
6230          $t54_55 = ($t53_54 !== null);
6231          if ($t54_55) {
6232            $block = 8; break;
6233          }
6234          else {
6235            $block = 9; break;
6236          }
6237          break;
6238        }
6239        case 8: {
6240          $t55_56 = itoa($t6_7);
6241          $t56_57 = ('epoch ' + $t55_56);
6242          $t57_58 = ($t56_57 + ': extractJoinerSecret: ');
6243          $t58_59 = $rt.types.methodCall($t53_54, 'Error', []);
6244          $t59_60 = ($t57_58 + $t58_59);
6245          $t60_61 = errors.New($t59_60);
6246          return $t60_61;
6247          break;
6248        }
6249        case 9: {
6250          $t61_62 = { $get() { return $t10_11.$get().joinerSecret; }, $set(v) { const obj = $t10_11.$get(); obj.joinerSecret = v; $t10_11.$set(obj); } };
6251          $t62_63 = $t61_62.$get();
6252          $t63_64 = bytesEqual($t52_53, $t62_63);
6253          if ($t63_64) {
6254            $block = 11; break;
6255          }
6256          else {
6257            $block = 10; break;
6258          }
6259          break;
6260        }
6261        case 10: {
6262          $t64_65 = itoa($t6_7);
6263          $t65_66 = ('epoch ' + $t64_65);
6264          $t66_67 = ($t65_66 + ': joiner_secret mismatch: got ');
6265          $t67_68 = hexenc($t52_53);
6266          $t68_69 = ($t66_67 + $t67_68);
6267          $t69_70 = ($t68_69 + ' want ');
6268          $t70_71 = { $get() { return $t10_11.$get().joinerSecret; }, $set(v) { const obj = $t10_11.$get(); obj.joinerSecret = v; $t10_11.$set(obj); } };
6269          $t71_72 = $t70_71.$get();
6270          $t72_73 = hexenc($t71_72);
6271          $t73_74 = ($t69_70 + $t72_73);
6272          $t74_75 = errors.New($t73_74);
6273          return $t74_75;
6274          break;
6275        }
6276        case 11: {
6277          $t75_76 = { $get() { return $t10_11.$get().pskSecret; }, $set(v) { const obj = $t10_11.$get(); obj.pskSecret = v; $t10_11.$set(obj); } };
6278          $t76_77 = $t75_76.$get();
6279          $t77_78 = extractWelcomeSecret(3, $t52_53, $t76_77);
6280          $t78_79 = $t77_78[0];
6281          $t79_80 = $t77_78[1];
6282          $t80_81 = ($t79_80 !== null);
6283          if ($t80_81) {
6284            $block = 12; break;
6285          }
6286          else {
6287            $block = 13; break;
6288          }
6289          break;
6290        }
6291        case 12: {
6292          $t81_82 = itoa($t6_7);
6293          $t82_83 = ('epoch ' + $t81_82);
6294          $t83_84 = ($t82_83 + ': extractWelcomeSecret: ');
6295          $t84_85 = $rt.types.methodCall($t79_80, 'Error', []);
6296          $t85_86 = ($t83_84 + $t84_85);
6297          $t86_87 = errors.New($t85_86);
6298          return $t86_87;
6299          break;
6300        }
6301        case 13: {
6302          $t87_88 = { $get() { return $t10_11.$get().welcomeSecret; }, $set(v) { const obj = $t10_11.$get(); obj.welcomeSecret = v; $t10_11.$set(obj); } };
6303          $t88_89 = $t87_88.$get();
6304          $t89_90 = bytesEqual($t78_79, $t88_89);
6305          if ($t89_90) {
6306            $block = 15; break;
6307          }
6308          else {
6309            $block = 14; break;
6310          }
6311          break;
6312        }
6313        case 14: {
6314          $t90_91 = itoa($t6_7);
6315          $t91_92 = ('epoch ' + $t90_91);
6316          $t92_93 = ($t91_92 + ': welcome_secret mismatch');
6317          $t93_94 = errors.New($t92_93);
6318          return $t93_94;
6319          break;
6320        }
6321        case 15: {
6322          $t94_95 = { $get() { return $t10_11.$get().pskSecret; }, $set(v) { const obj = $t10_11.$get(); obj.pskSecret = v; $t10_11.$set(obj); } };
6323          $t95_96 = $t94_95.$get();
6324          $t96_97 = groupContext$extractEpochSecret($t11_12, $t52_53, $t95_96);
6325          $t97_98 = $t96_97[0];
6326          $t98_99 = $t96_97[1];
6327          $t99_100 = ($t98_99 !== null);
6328          if ($t99_100) {
6329            $block = 16; break;
6330          }
6331          else {
6332            $block = 17; break;
6333          }
6334          break;
6335        }
6336        case 16: {
6337          $t100_101 = itoa($t6_7);
6338          $t101_102 = ('epoch ' + $t100_101);
6339          $t102_103 = ($t101_102 + ': extractEpochSecret: ');
6340          $t103_104 = $rt.types.methodCall($t98_99, 'Error', []);
6341          $t104_105 = ($t102_103 + $t103_104);
6342          $t105_106 = errors.New($t104_105);
6343          return $t105_106;
6344          break;
6345        }
6346        case 17: {
6347          $t106_107 = { $value: $rt.builtin.makeSlice(8, 8, { label: null, want: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
6348          $t107_108 = $t106_107.$get().addr(0);
6349          $t108_109 = { $get() { return $t107_108.$get().label; }, $set(v) { const obj = $t107_108.$get(); obj.label = v; $t107_108.$set(obj); } };
6350          $t109_110 = secretLabelInit.$get();
6351          $t110_111 = { $get() { return $t107_108.$get().want; }, $set(v) { const obj = $t107_108.$get(); obj.want = v; $t107_108.$set(obj); } };
6352          $t111_112 = { $get() { return $t10_11.$get().initSecret; }, $set(v) { const obj = $t10_11.$get(); obj.initSecret = v; $t10_11.$set(obj); } };
6353          $t112_113 = $t111_112.$get();
6354          $t108_109.$set($t109_110);
6355          $t110_111.$set($t112_113);
6356          $t113_114 = $t106_107.$get().addr(1);
6357          $t114_115 = { $get() { return $t113_114.$get().label; }, $set(v) { const obj = $t113_114.$get(); obj.label = v; $t113_114.$set(obj); } };
6358          $t115_116 = secretLabelSenderData.$get();
6359          $t116_117 = { $get() { return $t113_114.$get().want; }, $set(v) { const obj = $t113_114.$get(); obj.want = v; $t113_114.$set(obj); } };
6360          $t117_118 = { $get() { return $t10_11.$get().senderDataSecret; }, $set(v) { const obj = $t10_11.$get(); obj.senderDataSecret = v; $t10_11.$set(obj); } };
6361          $t118_119 = $t117_118.$get();
6362          $t114_115.$set($t115_116);
6363          $t116_117.$set($t118_119);
6364          $t119_120 = $t106_107.$get().addr(2);
6365          $t120_121 = { $get() { return $t119_120.$get().label; }, $set(v) { const obj = $t119_120.$get(); obj.label = v; $t119_120.$set(obj); } };
6366          $t121_122 = secretLabelEncryption.$get();
6367          $t122_123 = { $get() { return $t119_120.$get().want; }, $set(v) { const obj = $t119_120.$get(); obj.want = v; $t119_120.$set(obj); } };
6368          $t123_124 = { $get() { return $t10_11.$get().encryptionSecret; }, $set(v) { const obj = $t10_11.$get(); obj.encryptionSecret = v; $t10_11.$set(obj); } };
6369          $t124_125 = $t123_124.$get();
6370          $t120_121.$set($t121_122);
6371          $t122_123.$set($t124_125);
6372          $t125_126 = $t106_107.$get().addr(3);
6373          $t126_127 = { $get() { return $t125_126.$get().label; }, $set(v) { const obj = $t125_126.$get(); obj.label = v; $t125_126.$set(obj); } };
6374          $t127_128 = secretLabelExporter.$get();
6375          $t128_129 = { $get() { return $t125_126.$get().want; }, $set(v) { const obj = $t125_126.$get(); obj.want = v; $t125_126.$set(obj); } };
6376          $t129_130 = { $get() { return $t10_11.$get().exporterSecret; }, $set(v) { const obj = $t10_11.$get(); obj.exporterSecret = v; $t10_11.$set(obj); } };
6377          $t130_131 = $t129_130.$get();
6378          $t126_127.$set($t127_128);
6379          $t128_129.$set($t130_131);
6380          $t131_132 = $t106_107.$get().addr(4);
6381          $t132_133 = { $get() { return $t131_132.$get().label; }, $set(v) { const obj = $t131_132.$get(); obj.label = v; $t131_132.$set(obj); } };
6382          $t133_134 = secretLabelExternal.$get();
6383          $t134_135 = { $get() { return $t131_132.$get().want; }, $set(v) { const obj = $t131_132.$get(); obj.want = v; $t131_132.$set(obj); } };
6384          $t135_136 = { $get() { return $t10_11.$get().externalSecret; }, $set(v) { const obj = $t10_11.$get(); obj.externalSecret = v; $t10_11.$set(obj); } };
6385          $t136_137 = $t135_136.$get();
6386          $t132_133.$set($t133_134);
6387          $t134_135.$set($t136_137);
6388          $t137_138 = $t106_107.$get().addr(5);
6389          $t138_139 = { $get() { return $t137_138.$get().label; }, $set(v) { const obj = $t137_138.$get(); obj.label = v; $t137_138.$set(obj); } };
6390          $t139_140 = secretLabelConfirm.$get();
6391          $t140_141 = { $get() { return $t137_138.$get().want; }, $set(v) { const obj = $t137_138.$get(); obj.want = v; $t137_138.$set(obj); } };
6392          $t141_142 = { $get() { return $t10_11.$get().confirmationKey; }, $set(v) { const obj = $t10_11.$get(); obj.confirmationKey = v; $t10_11.$set(obj); } };
6393          $t142_143 = $t141_142.$get();
6394          $t138_139.$set($t139_140);
6395          $t140_141.$set($t142_143);
6396          $t143_144 = $t106_107.$get().addr(6);
6397          $t144_145 = { $get() { return $t143_144.$get().label; }, $set(v) { const obj = $t143_144.$get(); obj.label = v; $t143_144.$set(obj); } };
6398          $t145_146 = secretLabelMembership.$get();
6399          $t146_147 = { $get() { return $t143_144.$get().want; }, $set(v) { const obj = $t143_144.$get(); obj.want = v; $t143_144.$set(obj); } };
6400          $t147_148 = { $get() { return $t10_11.$get().membershipKey; }, $set(v) { const obj = $t10_11.$get(); obj.membershipKey = v; $t10_11.$set(obj); } };
6401          $t148_149 = $t147_148.$get();
6402          $t144_145.$set($t145_146);
6403          $t146_147.$set($t148_149);
6404          $t149_150 = $t106_107.$get().addr(7);
6405          $t150_151 = { $get() { return $t149_150.$get().label; }, $set(v) { const obj = $t149_150.$get(); obj.label = v; $t149_150.$set(obj); } };
6406          $t151_152 = secretLabelResumption.$get();
6407          $t152_153 = { $get() { return $t149_150.$get().want; }, $set(v) { const obj = $t149_150.$get(); obj.want = v; $t149_150.$set(obj); } };
6408          $t153_154 = { $get() { return $t10_11.$get().resumptionPSK; }, $set(v) { const obj = $t10_11.$get(); obj.resumptionPSK = v; $t10_11.$set(obj); } };
6409          $t154_155 = $t153_154.$get();
6410          $t150_151.$set($t151_152);
6411          $t152_153.$set($t154_155);
6412          $t155_156 = $rt.builtin.sliceSlice($t106_107.$get(), undefined, undefined, undefined);
6413          $t156_157 = $rt.builtin.len($t155_156);
6414          $t157_158 = -1;
6415          $block = 18; break;
6416          break;
6417        }
6418        case 18: {
6419          $t158_159 = ($t157_158 + 1);
6420          $t159_160 = ($t158_159 < $t156_157);
6421          if ($t159_160) {
6422            $block = 19; break;
6423          }
6424          else {
6425            $block = 20; break;
6426          }
6427          break;
6428        }
6429        case 19: {
6430          $t160_161 = $t155_156.addr($t158_159);
6431          $t161_162 = $t160_161.$get();
6432          $t162_163 = { $value: { label: null, want: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
6433          $t162_163.$set($rt.builtin.cloneValue($t161_162));
6434          $t163_164 = { $get() { return $t162_163.$get().label; }, $set(v) { const obj = $t162_163.$get(); obj.label = v; $t162_163.$set(obj); } };
6435          $t164_165 = $t163_164.$get();
6436          $t165_166 = CipherSuite$deriveSecret(3, $t97_98, $t164_165);
6437          $t166_167 = $t165_166[0];
6438          $t167_168 = $t165_166[1];
6439          $t168_169 = ($t167_168 !== null);
6440          if ($t168_169) {
6441            $block = 21; break;
6442          }
6443          else {
6444            $block = 22; break;
6445          }
6446          break;
6447        }
6448        case 20: {
6449          $t169_170 = secretLabelAuthentication.$get();
6450          $t170_171 = CipherSuite$deriveSecret(3, $t97_98, $t169_170);
6451          $t171_172 = $t170_171[0];
6452          $t172_173 = $t170_171[1];
6453          $t173_174 = ($t172_173 !== null);
6454          if ($t173_174) {
6455            $block = 24; break;
6456          }
6457          else {
6458            $block = 25; break;
6459          }
6460          break;
6461        }
6462        case 21: {
6463          $t174_175 = itoa($t6_7);
6464          $t175_176 = ('epoch ' + $t174_175);
6465          $t176_177 = ($t175_176 + ': deriveSecret(');
6466          $t177_178 = { $get() { return $t162_163.$get().label; }, $set(v) { const obj = $t162_163.$get(); obj.label = v; $t162_163.$set(obj); } };
6467          $t178_179 = $t177_178.$get();
6468          $t179_180 = ($t176_177 + $t178_179);
6469          $t180_181 = ($t179_180 + '): ');
6470          $t181_182 = $rt.types.methodCall($t167_168, 'Error', []);
6471          $t182_183 = ($t180_181 + $t181_182);
6472          $t183_184 = errors.New($t182_183);
6473          return $t183_184;
6474          break;
6475        }
6476        case 22: {
6477          $t184_185 = { $get() { return $t162_163.$get().want; }, $set(v) { const obj = $t162_163.$get(); obj.want = v; $t162_163.$set(obj); } };
6478          $t185_186 = $t184_185.$get();
6479          $t186_187 = bytesEqual($t166_167, $t185_186);
6480          if ($t186_187) {
6481            $t157_158 = $t158_159;
6482            $block = 18; break;
6483          }
6484          else {
6485            $block = 23; break;
6486          }
6487          break;
6488        }
6489        case 23: {
6490          $t187_188 = itoa($t6_7);
6491          $t188_189 = ('epoch ' + $t187_188);
6492          $t189_190 = ($t188_189 + ': deriveSecret(');
6493          $t190_191 = { $get() { return $t162_163.$get().label; }, $set(v) { const obj = $t162_163.$get(); obj.label = v; $t162_163.$set(obj); } };
6494          $t191_192 = $t190_191.$get();
6495          $t192_193 = ($t189_190 + $t191_192);
6496          $t193_194 = ($t192_193 + ') mismatch: got ');
6497          $t194_195 = hexenc($t166_167);
6498          $t195_196 = ($t193_194 + $t194_195);
6499          $t196_197 = ($t195_196 + ' want ');
6500          $t197_198 = { $get() { return $t162_163.$get().want; }, $set(v) { const obj = $t162_163.$get(); obj.want = v; $t162_163.$set(obj); } };
6501          $t198_199 = $t197_198.$get();
6502          $t199_200 = hexenc($t198_199);
6503          $t200_201 = ($t196_197 + $t199_200);
6504          $t201_202 = errors.New($t200_201);
6505          return $t201_202;
6506          break;
6507        }
6508        case 24: {
6509          $t202_203 = itoa($t6_7);
6510          $t203_204 = ('epoch ' + $t202_203);
6511          $t204_205 = ($t203_204 + ': deriveSecret(authentication): ');
6512          $t205_206 = $rt.types.methodCall($t172_173, 'Error', []);
6513          $t206_207 = ($t204_205 + $t205_206);
6514          $t207_208 = errors.New($t206_207);
6515          return $t207_208;
6516          break;
6517        }
6518        case 25: {
6519          $t208_209 = { $get() { return $t10_11.$get().epochAuthenticator; }, $set(v) { const obj = $t10_11.$get(); obj.epochAuthenticator = v; $t10_11.$set(obj); } };
6520          $t209_210 = $t208_209.$get();
6521          $t210_211 = bytesEqual($t171_172, $t209_210);
6522          if ($t210_211) {
6523            $block = 27; break;
6524          }
6525          else {
6526            $block = 26; break;
6527          }
6528          break;
6529        }
6530        case 26: {
6531          $t211_212 = itoa($t6_7);
6532          $t212_213 = ('epoch ' + $t211_212);
6533          $t213_214 = ($t212_213 + ': epoch_authenticator mismatch');
6534          $t214_215 = errors.New($t213_214);
6535          return $t214_215;
6536          break;
6537        }
6538        case 27: {
6539          $t215_216 = { $get() { return $t10_11.$get().externalSecret; }, $set(v) { const obj = $t10_11.$get(); obj.externalSecret = v; $t10_11.$set(obj); } };
6540          $t216_217 = $t215_216.$get();
6541          $t217_218 = CipherSuite$deriveEncryptionKeyPair(3, $t216_217);
6542          $t218_219 = $t217_218[0];
6543          $t219_220 = $t217_218[1];
6544          $t220_221 = $t217_218[2];
6545          $t221_222 = ($t220_221 !== null);
6546          if ($t221_222) {
6547            $block = 28; break;
6548          }
6549          else {
6550            $block = 29; break;
6551          }
6552          break;
6553        }
6554        case 28: {
6555          $t222_223 = itoa($t6_7);
6556          $t223_224 = ('epoch ' + $t222_223);
6557          $t224_225 = ($t223_224 + ': deriveEncryptionKeyPair: ');
6558          $t225_226 = $rt.types.methodCall($t220_221, 'Error', []);
6559          $t226_227 = ($t224_225 + $t225_226);
6560          $t227_228 = errors.New($t226_227);
6561          return $t227_228;
6562          break;
6563        }
6564        case 29: {
6565          $t228_229 = $t218_219;
6566          $t229_230 = { $get() { return $t10_11.$get().externalPub; }, $set(v) { const obj = $t10_11.$get(); obj.externalPub = v; $t10_11.$set(obj); } };
6567          $t230_231 = $t229_230.$get();
6568          $t231_232 = bytesEqual($t228_229, $t230_231);
6569          if ($t231_232) {
6570            $block = 31; break;
6571          }
6572          else {
6573            $block = 30; break;
6574          }
6575          break;
6576        }
6577        case 30: {
6578          $t232_233 = itoa($t6_7);
6579          $t233_234 = ('epoch ' + $t232_233);
6580          $t234_235 = ($t233_234 + ': external_pub mismatch: got ');
6581          $t235_236 = $t218_219;
6582          $t236_237 = hexenc($t235_236);
6583          $t237_238 = ($t234_235 + $t236_237);
6584          $t238_239 = ($t237_238 + ' want ');
6585          $t239_240 = { $get() { return $t10_11.$get().externalPub; }, $set(v) { const obj = $t10_11.$get(); obj.externalPub = v; $t10_11.$set(obj); } };
6586          $t240_241 = $t239_240.$get();
6587          $t241_242 = hexenc($t240_241);
6588          $t242_243 = ($t238_239 + $t241_242);
6589          $t243_244 = errors.New($t242_243);
6590          return $t243_244;
6591          break;
6592        }
6593        case 31: {
6594          $t244_245 = { $get() { return $t10_11.$get().exporterSecret; }, $set(v) { const obj = $t10_11.$get(); obj.exporterSecret = v; $t10_11.$set(obj); } };
6595          $t245_246 = $t244_245.$get();
6596          $t246_247 = { $get() { return $t10_11.$get().exporterLabel; }, $set(v) { const obj = $t10_11.$get(); obj.exporterLabel = v; $t10_11.$set(obj); } };
6597          $t247_248 = $t246_247.$get();
6598          $t248_249 = { $get() { return $t10_11.$get().exporterContext; }, $set(v) { const obj = $t10_11.$get(); obj.exporterContext = v; $t10_11.$set(obj); } };
6599          $t249_250 = $t248_249.$get();
6600          $t250_251 = { $get() { return $t10_11.$get().exporterLength; }, $set(v) { const obj = $t10_11.$get(); obj.exporterLength = v; $t10_11.$set(obj); } };
6601          $t251_252 = $t250_251.$get();
6602          $t252_253 = ($t251_252 & 0xFFFF);
6603          $t253_254 = deriveExporter(3, $t245_246, $t247_248, $t249_250, $t252_253);
6604          $t254_255 = $t253_254[0];
6605          $t255_256 = $t253_254[1];
6606          $t256_257 = ($t255_256 !== null);
6607          if ($t256_257) {
6608            $block = 32; break;
6609          }
6610          else {
6611            $block = 33; break;
6612          }
6613          break;
6614        }
6615        case 32: {
6616          $t257_258 = itoa($t6_7);
6617          $t258_259 = ('epoch ' + $t257_258);
6618          $t259_260 = ($t258_259 + ': deriveExporter: ');
6619          $t260_261 = $rt.types.methodCall($t255_256, 'Error', []);
6620          $t261_262 = ($t259_260 + $t260_261);
6621          $t262_263 = errors.New($t261_262);
6622          return $t262_263;
6623          break;
6624        }
6625        case 33: {
6626          $t263_264 = { $get() { return $t10_11.$get().exporterValue; }, $set(v) { const obj = $t10_11.$get(); obj.exporterValue = v; $t10_11.$set(obj); } };
6627          $t264_265 = $t263_264.$get();
6628          $t265_266 = bytesEqual($t254_255, $t264_265);
6629          if ($t265_266) {
6630            $block = 35; break;
6631          }
6632          else {
6633            $block = 34; break;
6634          }
6635          break;
6636        }
6637        case 34: {
6638          $t266_267 = itoa($t6_7);
6639          $t267_268 = ('epoch ' + $t266_267);
6640          $t268_269 = ($t267_268 + ': exporter mismatch: got ');
6641          $t269_270 = hexenc($t254_255);
6642          $t270_271 = ($t268_269 + $t269_270);
6643          $t271_272 = ($t270_271 + ' want ');
6644          $t272_273 = { $get() { return $t10_11.$get().exporterValue; }, $set(v) { const obj = $t10_11.$get(); obj.exporterValue = v; $t10_11.$set(obj); } };
6645          $t273_274 = $t272_273.$get();
6646          $t274_275 = hexenc($t273_274);
6647          $t275_276 = ($t271_272 + $t274_275);
6648          $t276_277 = errors.New($t275_276);
6649          return $t276_277;
6650          break;
6651        }
6652        case 35: {
6653          $t277_278 = { $get() { return $t10_11.$get().initSecret; }, $set(v) { const obj = $t10_11.$get(); obj.initSecret = v; $t10_11.$set(obj); } };
6654          $t278_279 = $t277_278.$get();
6655          $t4_5 = $t278_279;
6656          $t5_6 = $t6_7;
6657          $block = 1; break;
6658          break;
6659        }
6660      }
6661    }
6662  }
6663  
6664  export function itoa(n) {
6665    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
6666    let $block = 0;
6667    while (true) {
6668      switch ($block) {
6669        case 0: {
6670          $t0_1 = (n === 0);
6671          if ($t0_1) {
6672            $block = 1; break;
6673          }
6674          else {
6675            $block = 2; break;
6676          }
6677          break;
6678        }
6679        case 1: {
6680          return '0';
6681          break;
6682        }
6683        case 2: {
6684          $t1_2 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
6685          $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, 8, undefined);
6686          $t3_4 = $rt.builtin.len($t2_3);
6687          $t11_12 = n;
6688          $t12_13 = $t3_4;
6689          $block = 5; break;
6690          break;
6691        }
6692        case 3: {
6693          $t4_5 = ($t12_13 - 1);
6694          $t5_6 = ($t11_12 % 10);
6695          $t6_7 = (48 + $t5_6);
6696          $t7_8 = ($t6_7 & 0xFF);
6697          $t8_9 = $t2_3.addr($t4_5);
6698          $t8_9.$set($t7_8);
6699          $t9_10 = Math.trunc($t11_12 / 10);
6700          $t11_12 = $t9_10;
6701          $t12_13 = $t4_5;
6702          $block = 5; break;
6703          break;
6704        }
6705        case 4: {
6706          $t10_11 = $rt.builtin.sliceSlice($t2_3, $t12_13, undefined, undefined);
6707          return $t10_11;
6708          break;
6709        }
6710        case 5: {
6711          $t13_14 = ($t11_12 > 0);
6712          if ($t13_14) {
6713            $block = 3; break;
6714          }
6715          else {
6716            $block = 4; break;
6717          }
6718          break;
6719        }
6720      }
6721    }
6722  }
6723  
6724  export function TestMessageProtection() {
6725    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41;
6726    let $block = 0;
6727    while (true) {
6728      switch ($block) {
6729        case 0: {
6730          $t0_1 = hexb('fdbada2ddce02e7493673caab793308bdeb5cdb0558f151f647ab6e2ca0c63cf');
6731          $t1_2 = $t0_1;
6732          $t2_3 = hexb('5ae6ee5f282786b753d55f15938248f6212c69b2f677319e5fcdb2ce0bfbf48a');
6733          $t3_4 = hexb('0ba35f0d36007bc44df41db074b9d98a1314e3c690cb345ceeae152fbe5b6afe');
6734          $t4_5 = hexb('b1d7f2e45d6c94fa8bff3b63308bbba38024c5b70c22234834ee24294b6e0a28');
6735          $t5_6 = $t4_5;
6736          $t6_7 = hexb('ce02c4dd80a8ed57503e3a50ec11b926a549d65e840417c0635427a838b3cf29');
6737          $t7_8 = hexb('85fc31fac878dbe2850e30a8fa88bdc63dacd890756aade03433791b50a510f5');
6738          $t8_9 = hexb('82f73c829938c5d1a19e19de2b2c109214455ee6671cf918af426f364162678e');
6739          $t9_10 = hexb('000300000002');
6740          $t10_11 = hexb('0001000220fdbada2ddce02e7493673caab793308bdeb5cdb0558f151f647ab6e2ca0c63cf000000000012121202001cc15e1b90a18448376191078a6b66567941ce2472f110def1215eb1114058f9bf6e2c2dd19ff11b450ce94d9990ca3dbaf94edf8873c0f7cbf8feeefd362ac674b32d4c1c6ca646b8282fec7aaa51dcdd402345792aa77d98eaa97da5bf13969e44845f33114c10e1edd765d1c738059757570366687b');
6741          $t11_12 = hexb('0001000120fdbada2ddce02e7493673caab793308bdeb5cdb0558f151f647ab6e2ca0c63cf00000000001212120100000001000200030000000240402aef68e55e2092800105a0a963c84afb2039093f5431f9c59fce19d3f2bca20689a617deb8fa59085f21b609649b0373e62c0c099e9bfc66f939e623a851d3022048451581d2796c68ca95ddbf06fe4cc69f5b1360f12dce5947e095ab26c259a3');
6742          $t12_13 = hexb('4046010004012017e89d9ff20be622654e2b82b1e55d5b51c9e01d3b02cf0fa179c14e8697c11620d3ad3e549ffe3fe157d4d2e6627b8d35be6b5b8f37ffb10ed358bfb47c6c829500');
6743          $t13_14 = hexb('0001000220fdbada2ddce02e7493673caab793308bdeb5cdb0558f151f647ab6e2ca0c63cf000000000012121203001c71db9299c28f6e4feec4ddd63660f8ee186769ba51f2721953c48b9440bc32b3c5b162267da077973a9966c1c1bf6406d4326d9b0649bffeceec9ebe4dcf8603aa291254ce1954471cb01670b8e8e2f111ed54f8c818b348bd0300eb174602b484899f2fa95bbebdae6807de23355e2a988cf30cdeb2327759b2274205f485ff15b668b00a4f36ead53e21091be1133c2dd9a635bd6a942509921e33647e864a26af80aa5e54e15e695d2156209c2da2a7b8fe1938632192fce5e75736249c2fb6a7c2af46b29bfb5a83699d568f6b5614bf4edca36dc290f71d');
6744          $t14_15 = hexb('0001000120fdbada2ddce02e7493673caab793308bdeb5cdb0558f151f647ab6e2ca0c63cf0000000000121212010000000100034046010004012017e89d9ff20be622654e2b82b1e55d5b51c9e01d3b02cf0fa179c14e8697c11620d3ad3e549ffe3fe157d4d2e6627b8d35be6b5b8f37ffb10ed358bfb47c6c82950040402ad9df6c6e068cfb07cd8a6e49455f256ca630341744128cdc2bd180c8dd76b8e2b3affc5e8c0b3a70d55e349e46adf95e2641299b6c1ac78336e69ec243860520b613679a0814d9ec772f95d778c35fc5ff1697c493715653c6c712144292c5ad20aa0af8115702fcd155306e3f0091dbc40c772a97547ee9398157106ad10e9bf1');
6745          $t15_16 = hexb('725b6517ff1e5ed74224de23777a9b5f4a2dd74fe4a816d19ea71baa069d74c0975b7f10e61b7c3ef339');
6746          $t16_17 = hexb('0001000220fdbada2ddce02e7493673caab793308bdeb5cdb0558f151f647ab6e2ca0c63cf000000000012121201001c22d286c12043af1e8093bd213bf707b9b675ee98a171d0eeb206de91407d9d099e17b2aa1de37065098feb8efa598721128ec5bada3a6a07e06123eb61ced1dd265a0e7468f05f39b549ede80606f4795425de91acaee0b0bd840d0eabd284ae30adf04a5bf97027180836adee1203636c2cfd36f477747e9f0549dc99f5b3ef3a3db4f4def426625757365cf871061383a6dbd516127a11f83cc4');
6747          $t17_18 = { $value: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
6748          $t18_19 = { $get() { return $t17_18.$get().version; }, $set(v) { const obj = $t17_18.$get(); obj.version = v; $t17_18.$set(obj); } };
6749          $t19_20 = { $get() { return $t17_18.$get().cipherSuite; }, $set(v) { const obj = $t17_18.$get(); obj.cipherSuite = v; $t17_18.$set(obj); } };
6750          $t20_21 = { $get() { return $t17_18.$get().groupID; }, $set(v) { const obj = $t17_18.$get(); obj.groupID = v; $t17_18.$set(obj); } };
6751          $t21_22 = { $get() { return $t17_18.$get().epoch; }, $set(v) { const obj = $t17_18.$get(); obj.epoch = v; $t17_18.$set(obj); } };
6752          $t22_23 = { $get() { return $t17_18.$get().treeHash; }, $set(v) { const obj = $t17_18.$get(); obj.treeHash = v; $t17_18.$set(obj); } };
6753          $t23_24 = { $get() { return $t17_18.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t17_18.$get(); obj.confirmedTranscriptHash = v; $t17_18.$set(obj); } };
6754          $t18_19.$set(1);
6755          $t19_20.$set(3);
6756          $t20_21.$set($t1_2);
6757          $t21_22.$set(1184274n);
6758          $t22_23.$set($t2_3);
6759          $t23_24.$set($t3_4);
6760          $t24_25 = checkPublicMessage($t17_18, $t11_12, $t9_10, 2, $t5_6, $t8_9, 'proposal');
6761          $t25_26 = ($t24_25 !== null);
6762          if ($t25_26) {
6763            $block = 1; break;
6764          }
6765          else {
6766            $block = 2; break;
6767          }
6768          break;
6769        }
6770        case 1: {
6771          return $t24_25;
6772          break;
6773        }
6774        case 2: {
6775          $t26_27 = checkPublicMessage($t17_18, $t14_15, $t12_13, 3, $t5_6, $t8_9, 'commit');
6776          $t27_28 = ($t26_27 !== null);
6777          if ($t27_28) {
6778            $block = 3; break;
6779          }
6780          else {
6781            $block = 4; break;
6782          }
6783          break;
6784        }
6785        case 3: {
6786          return $t26_27;
6787          break;
6788        }
6789        case 4: {
6790          $t28_29 = deriveSecretTree(3, 2, $t6_7);
6791          $t29_30 = $t28_29[0];
6792          $t30_31 = $t28_29[1];
6793          $t31_32 = ($t30_31 !== null);
6794          if ($t31_32) {
6795            $block = 5; break;
6796          }
6797          else {
6798            $block = 6; break;
6799          }
6800          break;
6801        }
6802        case 5: {
6803          $t32_33 = $rt.types.methodCall($t30_31, 'Error', []);
6804          $t33_34 = ('deriveSecretTree: ' + $t32_33);
6805          $t34_35 = errors.New($t33_34);
6806          return $t34_35;
6807          break;
6808        }
6809        case 6: {
6810          $t35_36 = checkPrivateMessage($t17_18, $t29_30, $t7_8, $t10_11, $t9_10, 2, $t5_6, 'proposal_priv');
6811          $t36_37 = ($t35_36 !== null);
6812          if ($t36_37) {
6813            $block = 7; break;
6814          }
6815          else {
6816            $block = 8; break;
6817          }
6818          break;
6819        }
6820        case 7: {
6821          return $t35_36;
6822          break;
6823        }
6824        case 8: {
6825          $t37_38 = checkPrivateMessage($t17_18, $t29_30, $t7_8, $t13_14, $t12_13, 3, $t5_6, 'commit_priv');
6826          $t38_39 = ($t37_38 !== null);
6827          if ($t38_39) {
6828            $block = 9; break;
6829          }
6830          else {
6831            $block = 10; break;
6832          }
6833          break;
6834        }
6835        case 9: {
6836          return $t37_38;
6837          break;
6838        }
6839        case 10: {
6840          $t39_40 = checkPrivateMessage($t17_18, $t29_30, $t7_8, $t16_17, $t15_16, 1, $t5_6, 'application_priv');
6841          $t40_41 = ($t39_40 !== null);
6842          if ($t40_41) {
6843            $block = 11; break;
6844          }
6845          else {
6846            $block = 12; break;
6847          }
6848          break;
6849        }
6850        case 11: {
6851          return $t39_40;
6852          break;
6853        }
6854        case 12: {
6855          return null;
6856          break;
6857        }
6858      }
6859    }
6860  }
6861  
6862  export function checkPublicMessage(ctx, wire, wantBody, wantCT, sigPub, membershipKey, tag) {
6863    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60;
6864    let $block = 0;
6865    while (true) {
6866      switch ($block) {
6867        case 0: {
6868          $t0_1 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
6869          $t1_2 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t0_1);
6870          $t2_3 = unmarshalRaw(wire, $t1_2);
6871          $t3_4 = ($t2_3 !== null);
6872          if ($t3_4) {
6873            $block = 1; break;
6874          }
6875          else {
6876            $block = 2; break;
6877          }
6878          break;
6879        }
6880        case 1: {
6881          $t4_5 = (tag + ': unmarshal mlsMessage: ');
6882          $t5_6 = $rt.types.methodCall($t2_3, 'Error', []);
6883          $t6_7 = ($t4_5 + $t5_6);
6884          $t7_8 = errors.New($t6_7);
6885          return $t7_8;
6886          break;
6887        }
6888        case 2: {
6889          $t8_9 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
6890          $t9_10 = $t8_9.$get();
6891          $t10_11 = ($t9_10 !== 1);
6892          if ($t10_11) {
6893            $block = 3; break;
6894          }
6895          else {
6896            $block = 5; break;
6897          }
6898          break;
6899        }
6900        case 3: {
6901          $t11_12 = (tag + ': wireFormat is not public');
6902          $t12_13 = errors.New($t11_12);
6903          return $t12_13;
6904          break;
6905        }
6906        case 4: {
6907          $t13_14 = { $get() { return $t0_1.$get().publicMessage; }, $set(v) { const obj = $t0_1.$get(); obj.publicMessage = v; $t0_1.$set(obj); } };
6908          $t14_15 = $t13_14.$get();
6909          $t15_16 = { $get() { return $t14_15.$get().content; }, $set(v) { const obj = $t14_15.$get(); obj.content = v; $t14_15.$set(obj); } };
6910          $t16_17 = { $get() { return $t15_16.$get().contentType; }, $set(v) { const obj = $t15_16.$get(); obj.contentType = v; $t15_16.$set(obj); } };
6911          $t17_18 = $t16_17.$get();
6912          $t18_19 = ($t17_18 !== wantCT);
6913          if ($t18_19) {
6914            $block = 6; break;
6915          }
6916          else {
6917            $block = 7; break;
6918          }
6919          break;
6920        }
6921        case 5: {
6922          $t19_20 = { $get() { return $t0_1.$get().publicMessage; }, $set(v) { const obj = $t0_1.$get(); obj.publicMessage = v; $t0_1.$set(obj); } };
6923          $t20_21 = $t19_20.$get();
6924          $t21_22 = ($t20_21 === null);
6925          if ($t21_22) {
6926            $block = 3; break;
6927          }
6928          else {
6929            $block = 4; break;
6930          }
6931          break;
6932        }
6933        case 6: {
6934          $t22_23 = (tag + ': unexpected contentType');
6935          $t23_24 = errors.New($t22_23);
6936          return $t23_24;
6937          break;
6938        }
6939        case 7: {
6940          $t24_25 = publicMessage$authenticatedContent($t14_15);
6941          $t25_26 = authenticatedContent$verifySignature($t24_25, sigPub, ctx);
6942          if ($t25_26) {
6943            $block = 9; break;
6944          }
6945          else {
6946            $block = 8; break;
6947          }
6948          break;
6949        }
6950        case 8: {
6951          $t26_27 = (tag + ': verifySignature failed');
6952          $t27_28 = errors.New($t26_27);
6953          return $t27_28;
6954          break;
6955        }
6956        case 9: {
6957          $t28_29 = publicMessage$verifyMembershipTag($t14_15, membershipKey, ctx);
6958          if ($t28_29) {
6959            $block = 11; break;
6960          }
6961          else {
6962            $block = 10; break;
6963          }
6964          break;
6965        }
6966        case 10: {
6967          $t29_30 = (tag + ': verifyMembershipTag failed');
6968          $t30_31 = errors.New($t29_30);
6969          return $t30_31;
6970          break;
6971        }
6972        case 11: {
6973          $t31_32 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
6974          $t32_33 = (wantCT === 2);
6975          if ($t32_33) {
6976            $block = 13; break;
6977          }
6978          else {
6979            $block = 15; break;
6980          }
6981          break;
6982        }
6983        case 12: {
6984          $t33_34 = Writer$bytes($t31_32);
6985          $t34_35 = $t33_34[0];
6986          $t35_36 = $t33_34[1];
6987          $t36_37 = ($t35_36 !== null);
6988          if ($t36_37) {
6989            $block = 17; break;
6990          }
6991          else {
6992            $block = 18; break;
6993          }
6994          break;
6995        }
6996        case 13: {
6997          $t37_38 = { $get() { return $t14_15.$get().content; }, $set(v) { const obj = $t14_15.$get(); obj.content = v; $t14_15.$set(obj); } };
6998          $t38_39 = { $get() { return $t37_38.$get().proposal; }, $set(v) { const obj = $t37_38.$get(); obj.proposal = v; $t37_38.$set(obj); } };
6999          $t39_40 = $t38_39.$get();
7000          $t40_41 = proposal$marshal($t39_40, $t31_32);
7001          $block = 12; break;
7002          break;
7003        }
7004        case 14: {
7005          $t41_42 = { $get() { return $t14_15.$get().content; }, $set(v) { const obj = $t14_15.$get(); obj.content = v; $t14_15.$set(obj); } };
7006          $t42_43 = { $get() { return $t41_42.$get().commit; }, $set(v) { const obj = $t41_42.$get(); obj.commit = v; $t41_42.$set(obj); } };
7007          $t43_44 = $t42_43.$get();
7008          $t44_45 = commit$marshal($t43_44, $t31_32);
7009          $block = 12; break;
7010          break;
7011        }
7012        case 15: {
7013          $t45_46 = (wantCT === 3);
7014          if ($t45_46) {
7015            $block = 14; break;
7016          }
7017          else {
7018            $block = 16; break;
7019          }
7020          break;
7021        }
7022        case 16: {
7023          $t46_47 = (tag + ': unsupported contentType for public message');
7024          $t47_48 = errors.New($t46_47);
7025          return $t47_48;
7026          break;
7027        }
7028        case 17: {
7029          $t48_49 = (tag + ': marshal content body: ');
7030          $t49_50 = $rt.types.methodCall($t35_36, 'Error', []);
7031          $t50_51 = ($t48_49 + $t49_50);
7032          $t51_52 = errors.New($t50_51);
7033          return $t51_52;
7034          break;
7035        }
7036        case 18: {
7037          $t52_53 = bytesEqual($t34_35, wantBody);
7038          if ($t52_53) {
7039            $block = 20; break;
7040          }
7041          else {
7042            $block = 19; break;
7043          }
7044          break;
7045        }
7046        case 19: {
7047          $t53_54 = (tag + ': content body mismatch: got ');
7048          $t54_55 = hexenc($t34_35);
7049          $t55_56 = ($t53_54 + $t54_55);
7050          $t56_57 = ($t55_56 + ' want ');
7051          $t57_58 = hexenc(wantBody);
7052          $t58_59 = ($t56_57 + $t57_58);
7053          $t59_60 = errors.New($t58_59);
7054          return $t59_60;
7055          break;
7056        }
7057        case 20: {
7058          return null;
7059          break;
7060        }
7061      }
7062    }
7063  }
7064  
7065  export function checkPrivateMessage(ctx, tree, senderDataSecret, wire, wantBody, wantCT, sigPub, tag) {
7066    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139;
7067    let $block = 0;
7068    while (true) {
7069      switch ($block) {
7070        case 0: {
7071          $t0_1 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
7072          $t1_2 = $t0_1.$get();
7073          $t2_3 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7074          $t3_4 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t2_3);
7075          $t4_5 = unmarshalRaw(wire, $t3_4);
7076          $t5_6 = ($t4_5 !== null);
7077          if ($t5_6) {
7078            $block = 1; break;
7079          }
7080          else {
7081            $block = 2; break;
7082          }
7083          break;
7084        }
7085        case 1: {
7086          $t6_7 = (tag + ': unmarshal mlsMessage: ');
7087          $t7_8 = $rt.types.methodCall($t4_5, 'Error', []);
7088          $t8_9 = ($t6_7 + $t7_8);
7089          $t9_10 = errors.New($t8_9);
7090          return $t9_10;
7091          break;
7092        }
7093        case 2: {
7094          $t10_11 = { $get() { return $t2_3.$get().wireFormat; }, $set(v) { const obj = $t2_3.$get(); obj.wireFormat = v; $t2_3.$set(obj); } };
7095          $t11_12 = $t10_11.$get();
7096          $t12_13 = ($t11_12 !== 2);
7097          if ($t12_13) {
7098            $block = 3; break;
7099          }
7100          else {
7101            $block = 5; break;
7102          }
7103          break;
7104        }
7105        case 3: {
7106          $t13_14 = (tag + ': wireFormat is not private');
7107          $t14_15 = errors.New($t13_14);
7108          return $t14_15;
7109          break;
7110        }
7111        case 4: {
7112          $t15_16 = { $get() { return $t2_3.$get().privateMessage; }, $set(v) { const obj = $t2_3.$get(); obj.privateMessage = v; $t2_3.$set(obj); } };
7113          $t16_17 = $t15_16.$get();
7114          $t17_18 = { $get() { return $t16_17.$get().contentType; }, $set(v) { const obj = $t16_17.$get(); obj.contentType = v; $t16_17.$set(obj); } };
7115          $t18_19 = $t17_18.$get();
7116          $t19_20 = ($t18_19 !== wantCT);
7117          if ($t19_20) {
7118            $block = 6; break;
7119          }
7120          else {
7121            $block = 7; break;
7122          }
7123          break;
7124        }
7125        case 5: {
7126          $t20_21 = { $get() { return $t2_3.$get().privateMessage; }, $set(v) { const obj = $t2_3.$get(); obj.privateMessage = v; $t2_3.$set(obj); } };
7127          $t21_22 = $t20_21.$get();
7128          $t22_23 = ($t21_22 === null);
7129          if ($t22_23) {
7130            $block = 3; break;
7131          }
7132          else {
7133            $block = 4; break;
7134          }
7135          break;
7136        }
7137        case 6: {
7138          $t23_24 = (tag + ': unexpected contentType');
7139          $t24_25 = errors.New($t23_24);
7140          return $t24_25;
7141          break;
7142        }
7143        case 7: {
7144          $t25_26 = privateMessage$decryptSenderData($t16_17, $t1_2, senderDataSecret);
7145          $t26_27 = $t25_26[0];
7146          $t27_28 = $t25_26[1];
7147          $t28_29 = ($t27_28 !== null);
7148          if ($t28_29) {
7149            $block = 8; break;
7150          }
7151          else {
7152            $block = 9; break;
7153          }
7154          break;
7155        }
7156        case 8: {
7157          $t29_30 = (tag + ': decryptSenderData: ');
7158          $t30_31 = $rt.types.methodCall($t27_28, 'Error', []);
7159          $t31_32 = ($t29_30 + $t30_31);
7160          $t32_33 = errors.New($t31_32);
7161          return $t32_33;
7162          break;
7163        }
7164        case 9: {
7165          $t33_34 = ratchetLabelFromContentType(wantCT);
7166          $t34_35 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7167          $t35_36 = { $get() { return $t26_27.$get().leafIndex; }, $set(v) { const obj = $t26_27.$get(); obj.leafIndex = v; $t26_27.$set(obj); } };
7168          $t36_37 = $t35_36.$get();
7169          $t37_38 = leafIndex$nodeIndex($t36_37);
7170          $t38_39 = secretTree$deriveRatchetRoot(tree, $t1_2, $t37_38, $t33_34);
7171          $t39_40 = $t38_39[0];
7172          $t34_35.$set($rt.builtin.cloneValue($t39_40));
7173          $t40_41 = $t38_39[1];
7174          $t41_42 = ($t40_41 !== null);
7175          if ($t41_42) {
7176            $block = 10; break;
7177          }
7178          else {
7179            $block = 13; break;
7180          }
7181          break;
7182        }
7183        case 10: {
7184          $t42_43 = (tag + ': deriveRatchetRoot: ');
7185          $t43_44 = $rt.types.methodCall($t40_41, 'Error', []);
7186          $t44_45 = ($t42_43 + $t43_44);
7187          $t45_46 = errors.New($t44_45);
7188          return $t45_46;
7189          break;
7190        }
7191        case 11: {
7192          $t46_47 = $t34_35.$get();
7193          $t47_48 = ratchetSecret$deriveNext($t46_47, $t1_2);
7194          $t48_49 = $t47_48[0];
7195          $t34_35.$set($rt.builtin.cloneValue($t48_49));
7196          $t49_50 = $t47_48[1];
7197          $t50_51 = ($t49_50 !== null);
7198          if ($t50_51) {
7199            $block = 14; break;
7200          }
7201          else {
7202            $block = 13; break;
7203          }
7204          break;
7205        }
7206        case 12: {
7207          $t51_52 = $t34_35.$get();
7208          $t52_53 = { $get() { return $t26_27.$get().reuseGuard; }, $set(v) { const obj = $t26_27.$get(); obj.reuseGuard = v; $t26_27.$set(obj); } };
7209          $t53_54 = $t52_53.$get();
7210          $t54_55 = privateMessage$decryptContent($t16_17, $t1_2, $t51_52, $t53_54);
7211          $t55_56 = $t54_55[0];
7212          $t56_57 = $t54_55[1];
7213          $t57_58 = ($t56_57 !== null);
7214          if ($t57_58) {
7215            $block = 15; break;
7216          }
7217          else {
7218            $block = 16; break;
7219          }
7220          break;
7221        }
7222        case 13: {
7223          $t58_59 = { $get() { return $t34_35.$get().generation; }, $set(v) { const obj = $t34_35.$get(); obj.generation = v; $t34_35.$set(obj); } };
7224          $t59_60 = $t58_59.$get();
7225          $t60_61 = { $get() { return $t26_27.$get().generation; }, $set(v) { const obj = $t26_27.$get(); obj.generation = v; $t26_27.$set(obj); } };
7226          $t61_62 = $t60_61.$get();
7227          $t62_63 = ($t59_60 < $t61_62);
7228          if ($t62_63) {
7229            $block = 11; break;
7230          }
7231          else {
7232            $block = 12; break;
7233          }
7234          break;
7235        }
7236        case 14: {
7237          $t63_64 = (tag + ': deriveNext: ');
7238          $t64_65 = $rt.types.methodCall($t49_50, 'Error', []);
7239          $t65_66 = ($t63_64 + $t64_65);
7240          $t66_67 = errors.New($t65_66);
7241          return $t66_67;
7242          break;
7243        }
7244        case 15: {
7245          $t67_68 = (tag + ': decryptContent: ');
7246          $t68_69 = $rt.types.methodCall($t56_57, 'Error', []);
7247          $t69_70 = ($t67_68 + $t68_69);
7248          $t70_71 = errors.New($t69_70);
7249          return $t70_71;
7250          break;
7251        }
7252        case 16: {
7253          $t71_72 = { $value: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7254          $t72_73 = { $get() { return $t71_72.$get().groupID; }, $set(v) { const obj = $t71_72.$get(); obj.groupID = v; $t71_72.$set(obj); } };
7255          $t73_74 = { $get() { return $t16_17.$get().groupID; }, $set(v) { const obj = $t16_17.$get(); obj.groupID = v; $t16_17.$set(obj); } };
7256          $t74_75 = $t73_74.$get();
7257          $t75_76 = { $get() { return $t71_72.$get().epoch; }, $set(v) { const obj = $t71_72.$get(); obj.epoch = v; $t71_72.$set(obj); } };
7258          $t76_77 = { $get() { return $t16_17.$get().epoch; }, $set(v) { const obj = $t16_17.$get(); obj.epoch = v; $t16_17.$set(obj); } };
7259          $t77_78 = $t76_77.$get();
7260          $t78_79 = { $get() { return $t71_72.$get().sender; }, $set(v) { const obj = $t71_72.$get(); obj.sender = v; $t71_72.$set(obj); } };
7261          $t79_80 = { $get() { return $t78_79.$get().senderType; }, $set(v) { const obj = $t78_79.$get(); obj.senderType = v; $t78_79.$set(obj); } };
7262          $t80_81 = { $get() { return $t78_79.$get().leafIndex; }, $set(v) { const obj = $t78_79.$get(); obj.leafIndex = v; $t78_79.$set(obj); } };
7263          $t81_82 = { $get() { return $t26_27.$get().leafIndex; }, $set(v) { const obj = $t26_27.$get(); obj.leafIndex = v; $t26_27.$set(obj); } };
7264          $t82_83 = $t81_82.$get();
7265          $t83_84 = { $get() { return $t71_72.$get().authenticatedData; }, $set(v) { const obj = $t71_72.$get(); obj.authenticatedData = v; $t71_72.$set(obj); } };
7266          $t84_85 = { $get() { return $t16_17.$get().authenticatedData; }, $set(v) { const obj = $t16_17.$get(); obj.authenticatedData = v; $t16_17.$set(obj); } };
7267          $t85_86 = $t84_85.$get();
7268          $t86_87 = { $get() { return $t71_72.$get().contentType; }, $set(v) { const obj = $t71_72.$get(); obj.contentType = v; $t71_72.$set(obj); } };
7269          $t87_88 = { $get() { return $t16_17.$get().contentType; }, $set(v) { const obj = $t16_17.$get(); obj.contentType = v; $t16_17.$set(obj); } };
7270          $t88_89 = $t87_88.$get();
7271          $t89_90 = { $get() { return $t71_72.$get().applicationData; }, $set(v) { const obj = $t71_72.$get(); obj.applicationData = v; $t71_72.$set(obj); } };
7272          $t90_91 = { $get() { return $t55_56.$get().applicationData; }, $set(v) { const obj = $t55_56.$get(); obj.applicationData = v; $t55_56.$set(obj); } };
7273          $t91_92 = $t90_91.$get();
7274          $t92_93 = { $get() { return $t71_72.$get().proposal; }, $set(v) { const obj = $t71_72.$get(); obj.proposal = v; $t71_72.$set(obj); } };
7275          $t93_94 = { $get() { return $t55_56.$get().proposal; }, $set(v) { const obj = $t55_56.$get(); obj.proposal = v; $t55_56.$set(obj); } };
7276          $t94_95 = $t93_94.$get();
7277          $t95_96 = { $get() { return $t71_72.$get().commit; }, $set(v) { const obj = $t71_72.$get(); obj.commit = v; $t71_72.$set(obj); } };
7278          $t96_97 = { $get() { return $t55_56.$get().commit; }, $set(v) { const obj = $t55_56.$get(); obj.commit = v; $t55_56.$set(obj); } };
7279          $t97_98 = $t96_97.$get();
7280          $t72_73.$set($t74_75);
7281          $t75_76.$set($t77_78);
7282          $t79_80.$set(1);
7283          $t80_81.$set($t82_83);
7284          $t83_84.$set($t85_86);
7285          $t86_87.$set($t88_89);
7286          $t89_90.$set($t91_92);
7287          $t92_93.$set($t94_95);
7288          $t95_96.$set($t97_98);
7289          $t98_99 = { $value: { wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7290          $t99_100 = { $get() { return $t98_99.$get().wireFormat; }, $set(v) { const obj = $t98_99.$get(); obj.wireFormat = v; $t98_99.$set(obj); } };
7291          $t100_101 = { $get() { return $t98_99.$get().content; }, $set(v) { const obj = $t98_99.$get(); obj.content = v; $t98_99.$set(obj); } };
7292          $t101_102 = $t71_72.$get();
7293          $t102_103 = { $get() { return $t98_99.$get().auth; }, $set(v) { const obj = $t98_99.$get(); obj.auth = v; $t98_99.$set(obj); } };
7294          $t103_104 = { $get() { return $t55_56.$get().auth; }, $set(v) { const obj = $t55_56.$get(); obj.auth = v; $t55_56.$set(obj); } };
7295          $t104_105 = $t103_104.$get();
7296          $t99_100.$set(2);
7297          $t100_101.$set($rt.builtin.cloneValue($t101_102));
7298          $t102_103.$set($rt.builtin.cloneValue($t104_105));
7299          $t105_106 = authenticatedContent$verifySignature($t98_99, sigPub, ctx);
7300          if ($t105_106) {
7301            $block = 18; break;
7302          }
7303          else {
7304            $block = 17; break;
7305          }
7306          break;
7307        }
7308        case 17: {
7309          $t106_107 = (tag + ': verifySignature failed');
7310          $t107_108 = errors.New($t106_107);
7311          return $t107_108;
7312          break;
7313        }
7314        case 18: {
7315          $t108_109 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7316          $t109_110 = (wantCT === 1);
7317          if ($t109_110) {
7318            $block = 20; break;
7319          }
7320          else {
7321            $block = 22; break;
7322          }
7323          break;
7324        }
7325        case 19: {
7326          $t110_111 = Writer$bytes($t108_109);
7327          $t111_112 = $t110_111[0];
7328          $t112_113 = $t110_111[1];
7329          $t113_114 = ($t112_113 !== null);
7330          if ($t113_114) {
7331            $block = 26; break;
7332          }
7333          else {
7334            $block = 27; break;
7335          }
7336          break;
7337        }
7338        case 20: {
7339          $t114_115 = { $get() { return $t55_56.$get().applicationData; }, $set(v) { const obj = $t55_56.$get(); obj.applicationData = v; $t55_56.$set(obj); } };
7340          $t115_116 = $t114_115.$get();
7341          $t116_117 = Writer$addBytes($t108_109, $t115_116);
7342          $block = 19; break;
7343          break;
7344        }
7345        case 21: {
7346          $t117_118 = { $get() { return $t55_56.$get().proposal; }, $set(v) { const obj = $t55_56.$get(); obj.proposal = v; $t55_56.$set(obj); } };
7347          $t118_119 = $t117_118.$get();
7348          $t119_120 = proposal$marshal($t118_119, $t108_109);
7349          $block = 19; break;
7350          break;
7351        }
7352        case 22: {
7353          $t120_121 = (wantCT === 2);
7354          if ($t120_121) {
7355            $block = 21; break;
7356          }
7357          else {
7358            $block = 24; break;
7359          }
7360          break;
7361        }
7362        case 23: {
7363          $t121_122 = { $get() { return $t55_56.$get().commit; }, $set(v) { const obj = $t55_56.$get(); obj.commit = v; $t55_56.$set(obj); } };
7364          $t122_123 = $t121_122.$get();
7365          $t123_124 = commit$marshal($t122_123, $t108_109);
7366          $block = 19; break;
7367          break;
7368        }
7369        case 24: {
7370          $t124_125 = (wantCT === 3);
7371          if ($t124_125) {
7372            $block = 23; break;
7373          }
7374          else {
7375            $block = 25; break;
7376          }
7377          break;
7378        }
7379        case 25: {
7380          $t125_126 = (tag + ': unsupported contentType');
7381          $t126_127 = errors.New($t125_126);
7382          return $t126_127;
7383          break;
7384        }
7385        case 26: {
7386          $t127_128 = (tag + ': marshal content body: ');
7387          $t128_129 = $rt.types.methodCall($t112_113, 'Error', []);
7388          $t129_130 = ($t127_128 + $t128_129);
7389          $t130_131 = errors.New($t129_130);
7390          return $t130_131;
7391          break;
7392        }
7393        case 27: {
7394          $t131_132 = bytesEqual($t111_112, wantBody);
7395          if ($t131_132) {
7396            $block = 29; break;
7397          }
7398          else {
7399            $block = 28; break;
7400          }
7401          break;
7402        }
7403        case 28: {
7404          $t132_133 = (tag + ': content body mismatch: got ');
7405          $t133_134 = hexenc($t111_112);
7406          $t134_135 = ($t132_133 + $t133_134);
7407          $t135_136 = ($t134_135 + ' want ');
7408          $t136_137 = hexenc(wantBody);
7409          $t137_138 = ($t135_136 + $t136_137);
7410          $t138_139 = errors.New($t137_138);
7411          return $t138_139;
7412          break;
7413        }
7414        case 29: {
7415          return null;
7416          break;
7417        }
7418      }
7419    }
7420  }
7421  
7422  export function TestSecretTree() {
7423    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139, $t139_140, $t140_141, $t141_142, $t142_143, $t143_144, $t144_145, $t145_146, $t146_147, $t147_148, $t148_149, $t149_150, $t150_151, $t151_152, $t152_153, $t153_154, $t154_155, $t155_156, $t156_157, $t157_158, $t158_159, $t159_160, $t160_161, $t161_162, $t162_163, $t163_164, $t164_165, $t165_166, $t166_167, $t167_168, $t168_169, $t169_170, $t170_171, $t171_172, $t172_173, $t173_174, $t174_175, $t175_176, $t176_177, $t177_178, $t178_179, $t179_180, $t180_181, $t181_182, $t182_183, $t183_184, $t184_185, $t185_186, $t186_187, $t187_188, $t188_189, $t189_190, $t190_191, $t191_192, $t192_193, $t193_194, $t194_195, $t195_196, $t196_197, $t197_198, $t198_199, $t199_200, $t200_201, $t201_202;
7424    let $block = 0;
7425    while (true) {
7426      switch ($block) {
7427        case 0: {
7428          $t0_1 = stEntries.$get();
7429          $t1_2 = $rt.builtin.len($t0_1);
7430          $t2_3 = -1;
7431          $block = 1; break;
7432          break;
7433        }
7434        case 1: {
7435          $t3_4 = ($t2_3 + 1);
7436          $t4_5 = ($t3_4 < $t1_2);
7437          if ($t4_5) {
7438            $block = 2; break;
7439          }
7440          else {
7441            $block = 3; break;
7442          }
7443          break;
7444        }
7445        case 2: {
7446          $t5_6 = $t0_1.addr($t3_4);
7447          $t6_7 = $t5_6.$get();
7448          $t7_8 = { $value: { numLeaves: 0, encryptionSecret: null, sdSecret: null, sdCiphertext: null, sdKey: null, sdNonce: null, leaves: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7449          $t7_8.$set($rt.builtin.cloneValue($t6_7));
7450          $t8_9 = { $get() { return $t7_8.$get().sdSecret; }, $set(v) { const obj = $t7_8.$get(); obj.sdSecret = v; $t7_8.$set(obj); } };
7451          $t9_10 = $t8_9.$get();
7452          $t10_11 = { $get() { return $t7_8.$get().sdCiphertext; }, $set(v) { const obj = $t7_8.$get(); obj.sdCiphertext = v; $t7_8.$set(obj); } };
7453          $t11_12 = $t10_11.$get();
7454          $t12_13 = expandSenderDataKey(3, $t9_10, $t11_12);
7455          $t13_14 = $t12_13[0];
7456          $t14_15 = $t12_13[1];
7457          $t15_16 = ($t14_15 !== null);
7458          if ($t15_16) {
7459            $block = 4; break;
7460          }
7461          else {
7462            $block = 5; break;
7463          }
7464          break;
7465        }
7466        case 3: {
7467          return null;
7468          break;
7469        }
7470        case 4: {
7471          $t16_17 = itoa($t3_4);
7472          $t17_18 = ('entry ' + $t16_17);
7473          $t18_19 = ($t17_18 + ': expandSenderDataKey: ');
7474          $t19_20 = $rt.types.methodCall($t14_15, 'Error', []);
7475          $t20_21 = ($t18_19 + $t19_20);
7476          $t21_22 = errors.New($t20_21);
7477          return $t21_22;
7478          break;
7479        }
7480        case 5: {
7481          $t22_23 = { $get() { return $t7_8.$get().sdKey; }, $set(v) { const obj = $t7_8.$get(); obj.sdKey = v; $t7_8.$set(obj); } };
7482          $t23_24 = $t22_23.$get();
7483          $t24_25 = bytesEqual($t13_14, $t23_24);
7484          if ($t24_25) {
7485            $block = 7; break;
7486          }
7487          else {
7488            $block = 6; break;
7489          }
7490          break;
7491        }
7492        case 6: {
7493          $t25_26 = itoa($t3_4);
7494          $t26_27 = ('entry ' + $t25_26);
7495          $t27_28 = ($t26_27 + ': sender data key mismatch');
7496          $t28_29 = errors.New($t27_28);
7497          return $t28_29;
7498          break;
7499        }
7500        case 7: {
7501          $t29_30 = { $get() { return $t7_8.$get().sdSecret; }, $set(v) { const obj = $t7_8.$get(); obj.sdSecret = v; $t7_8.$set(obj); } };
7502          $t30_31 = $t29_30.$get();
7503          $t31_32 = { $get() { return $t7_8.$get().sdCiphertext; }, $set(v) { const obj = $t7_8.$get(); obj.sdCiphertext = v; $t7_8.$set(obj); } };
7504          $t32_33 = $t31_32.$get();
7505          $t33_34 = expandSenderDataNonce(3, $t30_31, $t32_33);
7506          $t34_35 = $t33_34[0];
7507          $t35_36 = $t33_34[1];
7508          $t36_37 = ($t35_36 !== null);
7509          if ($t36_37) {
7510            $block = 8; break;
7511          }
7512          else {
7513            $block = 9; break;
7514          }
7515          break;
7516        }
7517        case 8: {
7518          $t37_38 = itoa($t3_4);
7519          $t38_39 = ('entry ' + $t37_38);
7520          $t39_40 = ($t38_39 + ': expandSenderDataNonce: ');
7521          $t40_41 = $rt.types.methodCall($t35_36, 'Error', []);
7522          $t41_42 = ($t39_40 + $t40_41);
7523          $t42_43 = errors.New($t41_42);
7524          return $t42_43;
7525          break;
7526        }
7527        case 9: {
7528          $t43_44 = { $get() { return $t7_8.$get().sdNonce; }, $set(v) { const obj = $t7_8.$get(); obj.sdNonce = v; $t7_8.$set(obj); } };
7529          $t44_45 = $t43_44.$get();
7530          $t45_46 = bytesEqual($t34_35, $t44_45);
7531          if ($t45_46) {
7532            $block = 11; break;
7533          }
7534          else {
7535            $block = 10; break;
7536          }
7537          break;
7538        }
7539        case 10: {
7540          $t46_47 = itoa($t3_4);
7541          $t47_48 = ('entry ' + $t46_47);
7542          $t48_49 = ($t47_48 + ': sender data nonce mismatch');
7543          $t49_50 = errors.New($t48_49);
7544          return $t49_50;
7545          break;
7546        }
7547        case 11: {
7548          $t50_51 = { $get() { return $t7_8.$get().numLeaves; }, $set(v) { const obj = $t7_8.$get(); obj.numLeaves = v; $t7_8.$set(obj); } };
7549          $t51_52 = $t50_51.$get();
7550          $t52_53 = ($t51_52 >>> 0);
7551          $t53_54 = { $get() { return $t7_8.$get().encryptionSecret; }, $set(v) { const obj = $t7_8.$get(); obj.encryptionSecret = v; $t7_8.$set(obj); } };
7552          $t54_55 = $t53_54.$get();
7553          $t55_56 = deriveSecretTree(3, $t52_53, $t54_55);
7554          $t56_57 = $t55_56[0];
7555          $t57_58 = $t55_56[1];
7556          $t58_59 = ($t57_58 !== null);
7557          if ($t58_59) {
7558            $block = 12; break;
7559          }
7560          else {
7561            $block = 13; break;
7562          }
7563          break;
7564        }
7565        case 12: {
7566          $t59_60 = itoa($t3_4);
7567          $t60_61 = ('entry ' + $t59_60);
7568          $t61_62 = ($t60_61 + ': deriveSecretTree: ');
7569          $t62_63 = $rt.types.methodCall($t57_58, 'Error', []);
7570          $t63_64 = ($t61_62 + $t62_63);
7571          $t64_65 = errors.New($t63_64);
7572          return $t64_65;
7573          break;
7574        }
7575        case 13: {
7576          $t65_66 = { $get() { return $t7_8.$get().leaves; }, $set(v) { const obj = $t7_8.$get(); obj.leaves = v; $t7_8.$set(obj); } };
7577          $t66_67 = $t65_66.$get();
7578          $t67_68 = $rt.builtin.len($t66_67);
7579          $t68_69 = -1;
7580          $block = 14; break;
7581          break;
7582        }
7583        case 14: {
7584          $t69_70 = ($t68_69 + 1);
7585          $t70_71 = ($t69_70 < $t67_68);
7586          if ($t70_71) {
7587            $block = 15; break;
7588          }
7589          else {
7590            $t2_3 = $t3_4;
7591            $block = 1; break;
7592          }
7593          break;
7594        }
7595        case 15: {
7596          $t71_72 = $t66_67.addr($t69_70);
7597          $t72_73 = $t71_72.$get();
7598          $t73_74 = { $value: { gens: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7599          $t73_74.$set($rt.builtin.cloneValue($t72_73));
7600          $t74_75 = ($t69_70 >>> 0);
7601          $t75_76 = leafIndex$nodeIndex($t74_75);
7602          $t76_77 = { $value: $rt.builtin.makeSlice(2, 2, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
7603          $t77_78 = $t76_77.$get().addr(0);
7604          $t78_79 = ratchetLabelHandshake.$get();
7605          $t77_78.$set($t78_79);
7606          $t79_80 = $t76_77.$get().addr(1);
7607          $t80_81 = ratchetLabelApplication.$get();
7608          $t79_80.$set($t80_81);
7609          $t81_82 = $rt.builtin.sliceSlice($t76_77.$get(), undefined, undefined, undefined);
7610          $t82_83 = $rt.builtin.len($t81_82);
7611          $t83_84 = -1;
7612          $block = 16; break;
7613          break;
7614        }
7615        case 16: {
7616          $t84_85 = ($t83_84 + 1);
7617          $t85_86 = ($t84_85 < $t82_83);
7618          if ($t85_86) {
7619            $block = 17; break;
7620          }
7621          else {
7622            $t68_69 = $t69_70;
7623            $block = 14; break;
7624          }
7625          break;
7626        }
7627        case 17: {
7628          $t86_87 = $t81_82.addr($t84_85);
7629          $t87_88 = $t86_87.$get();
7630          $t88_89 = secretTree$deriveRatchetRoot($t56_57, 3, $t75_76, $t87_88);
7631          $t89_90 = $t88_89[0];
7632          $t90_91 = $t88_89[1];
7633          $t91_92 = ($t90_91 !== null);
7634          if ($t91_92) {
7635            $block = 18; break;
7636          }
7637          else {
7638            $block = 19; break;
7639          }
7640          break;
7641        }
7642        case 18: {
7643          $t92_93 = itoa($t3_4);
7644          $t93_94 = ('entry ' + $t92_93);
7645          $t94_95 = ($t93_94 + ' leaf ');
7646          $t95_96 = itoa($t69_70);
7647          $t96_97 = ($t94_95 + $t95_96);
7648          $t97_98 = ($t96_97 + ': deriveRatchetRoot: ');
7649          $t98_99 = $rt.types.methodCall($t90_91, 'Error', []);
7650          $t99_100 = ($t97_98 + $t98_99);
7651          $t100_101 = errors.New($t99_100);
7652          return $t100_101;
7653          break;
7654        }
7655        case 19: {
7656          $t101_102 = { $get() { return $t73_74.$get().gens; }, $set(v) { const obj = $t73_74.$get(); obj.gens = v; $t73_74.$set(obj); } };
7657          $t102_103 = $t101_102.$get();
7658          $t103_104 = $rt.builtin.len($t102_103);
7659          $t104_105 = -1;
7660          $block = 20; break;
7661          break;
7662        }
7663        case 20: {
7664          $t105_106 = ($t104_105 + 1);
7665          $t106_107 = ($t105_106 < $t103_104);
7666          if ($t106_107) {
7667            $block = 21; break;
7668          }
7669          else {
7670            $t83_84 = $t84_85;
7671            $block = 16; break;
7672          }
7673          break;
7674        }
7675        case 21: {
7676          $t107_108 = $t102_103.addr($t105_106);
7677          $t108_109 = $t107_108.$get();
7678          $t109_110 = { $value: { generation: 0, appKey: null, appNonce: null, hsKey: null, hsNonce: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7679          $t109_110.$set($rt.builtin.cloneValue($t108_109));
7680          $t110_111 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7681          $t110_111.$set($rt.builtin.cloneValue($t89_90));
7682          $block = 24; break;
7683          break;
7684        }
7685        case 22: {
7686          $t111_112 = $t110_111.$get();
7687          $t112_113 = ratchetSecret$deriveNext($t111_112, 3);
7688          $t113_114 = $t112_113[0];
7689          $t110_111.$set($rt.builtin.cloneValue($t113_114));
7690          $t114_115 = $t112_113[1];
7691          $t115_116 = ($t114_115 !== null);
7692          if ($t115_116) {
7693            $block = 25; break;
7694          }
7695          else {
7696            $block = 24; break;
7697          }
7698          break;
7699        }
7700        case 23: {
7701          $t116_117 = $t110_111.$get();
7702          $t117_118 = ratchetSecret$deriveKey($t116_117, 3);
7703          $t118_119 = $t117_118[0];
7704          $t119_120 = $t117_118[1];
7705          $t120_121 = ($t119_120 !== null);
7706          if ($t120_121) {
7707            $block = 26; break;
7708          }
7709          else {
7710            $block = 27; break;
7711          }
7712          break;
7713        }
7714        case 24: {
7715          $t121_122 = { $get() { return $t110_111.$get().generation; }, $set(v) { const obj = $t110_111.$get(); obj.generation = v; $t110_111.$set(obj); } };
7716          $t122_123 = $t121_122.$get();
7717          $t123_124 = { $get() { return $t109_110.$get().generation; }, $set(v) { const obj = $t109_110.$get(); obj.generation = v; $t109_110.$set(obj); } };
7718          $t124_125 = $t123_124.$get();
7719          $t125_126 = ($t122_123 < $t124_125);
7720          if ($t125_126) {
7721            $block = 22; break;
7722          }
7723          else {
7724            $block = 23; break;
7725          }
7726          break;
7727        }
7728        case 25: {
7729          $t126_127 = itoa($t3_4);
7730          $t127_128 = ('entry ' + $t126_127);
7731          $t128_129 = ($t127_128 + ' leaf ');
7732          $t129_130 = itoa($t69_70);
7733          $t130_131 = ($t128_129 + $t129_130);
7734          $t131_132 = ($t130_131 + ': deriveNext: ');
7735          $t132_133 = $rt.types.methodCall($t114_115, 'Error', []);
7736          $t133_134 = ($t131_132 + $t132_133);
7737          $t134_135 = errors.New($t133_134);
7738          return $t134_135;
7739          break;
7740        }
7741        case 26: {
7742          $t135_136 = itoa($t3_4);
7743          $t136_137 = ('entry ' + $t135_136);
7744          $t137_138 = ($t136_137 + ' leaf ');
7745          $t138_139 = itoa($t69_70);
7746          $t139_140 = ($t137_138 + $t138_139);
7747          $t140_141 = ($t139_140 + ': deriveKey: ');
7748          $t141_142 = $rt.types.methodCall($t119_120, 'Error', []);
7749          $t142_143 = ($t140_141 + $t141_142);
7750          $t143_144 = errors.New($t142_143);
7751          return $t143_144;
7752          break;
7753        }
7754        case 27: {
7755          $t144_145 = $t110_111.$get();
7756          $t145_146 = ratchetSecret$deriveNonce($t144_145, 3);
7757          $t146_147 = $t145_146[0];
7758          $t147_148 = $t145_146[1];
7759          $t148_149 = ($t147_148 !== null);
7760          if ($t148_149) {
7761            $block = 28; break;
7762          }
7763          else {
7764            $block = 29; break;
7765          }
7766          break;
7767        }
7768        case 28: {
7769          $t149_150 = itoa($t3_4);
7770          $t150_151 = ('entry ' + $t149_150);
7771          $t151_152 = ($t150_151 + ' leaf ');
7772          $t152_153 = itoa($t69_70);
7773          $t153_154 = ($t151_152 + $t152_153);
7774          $t154_155 = ($t153_154 + ': deriveNonce: ');
7775          $t155_156 = $rt.types.methodCall($t147_148, 'Error', []);
7776          $t156_157 = ($t154_155 + $t155_156);
7777          $t157_158 = errors.New($t156_157);
7778          return $t157_158;
7779          break;
7780        }
7781        case 29: {
7782          $t158_159 = ratchetLabelHandshake.$get();
7783          $t159_160 = $rt.builtin.stringEqual($t87_88, $t158_159);
7784          if ($t159_160) {
7785            $block = 30; break;
7786          }
7787          else {
7788            $block = 32; break;
7789          }
7790          break;
7791        }
7792        case 30: {
7793          $t160_161 = { $get() { return $t109_110.$get().hsKey; }, $set(v) { const obj = $t109_110.$get(); obj.hsKey = v; $t109_110.$set(obj); } };
7794          $t161_162 = $t160_161.$get();
7795          $t162_163 = { $get() { return $t109_110.$get().hsNonce; }, $set(v) { const obj = $t109_110.$get(); obj.hsNonce = v; $t109_110.$set(obj); } };
7796          $t163_164 = $t162_163.$get();
7797          $t164_165 = $t161_162;
7798          $t165_166 = $t163_164;
7799          $block = 31; break;
7800          break;
7801        }
7802        case 31: {
7803          $t166_167 = bytesEqual($t118_119, $t164_165);
7804          if ($t166_167) {
7805            $block = 34; break;
7806          }
7807          else {
7808            $block = 33; break;
7809          }
7810          break;
7811        }
7812        case 32: {
7813          $t167_168 = { $get() { return $t109_110.$get().appKey; }, $set(v) { const obj = $t109_110.$get(); obj.appKey = v; $t109_110.$set(obj); } };
7814          $t168_169 = $t167_168.$get();
7815          $t169_170 = { $get() { return $t109_110.$get().appNonce; }, $set(v) { const obj = $t109_110.$get(); obj.appNonce = v; $t109_110.$set(obj); } };
7816          $t170_171 = $t169_170.$get();
7817          $t164_165 = $t168_169;
7818          $t165_166 = $t170_171;
7819          $block = 31; break;
7820          break;
7821        }
7822        case 33: {
7823          $t171_172 = itoa($t3_4);
7824          $t172_173 = ('entry ' + $t171_172);
7825          $t173_174 = ($t172_173 + ' leaf ');
7826          $t174_175 = itoa($t69_70);
7827          $t175_176 = ($t173_174 + $t174_175);
7828          $t176_177 = ($t175_176 + ' gen ');
7829          $t177_178 = { $get() { return $t109_110.$get().generation; }, $set(v) { const obj = $t109_110.$get(); obj.generation = v; $t109_110.$set(obj); } };
7830          $t178_179 = $t177_178.$get();
7831          $t179_180 = $t178_179;
7832          $t180_181 = itoa($t179_180);
7833          $t181_182 = ($t176_177 + $t180_181);
7834          $t182_183 = ($t181_182 + ' ');
7835          $t183_184 = ($t182_183 + $t87_88);
7836          $t184_185 = ($t183_184 + ' key mismatch');
7837          $t185_186 = errors.New($t184_185);
7838          return $t185_186;
7839          break;
7840        }
7841        case 34: {
7842          $t186_187 = bytesEqual($t146_147, $t165_166);
7843          if ($t186_187) {
7844            $t104_105 = $t105_106;
7845            $block = 20; break;
7846          }
7847          else {
7848            $block = 35; break;
7849          }
7850          break;
7851        }
7852        case 35: {
7853          $t187_188 = itoa($t3_4);
7854          $t188_189 = ('entry ' + $t187_188);
7855          $t189_190 = ($t188_189 + ' leaf ');
7856          $t190_191 = itoa($t69_70);
7857          $t191_192 = ($t189_190 + $t190_191);
7858          $t192_193 = ($t191_192 + ' gen ');
7859          $t193_194 = { $get() { return $t109_110.$get().generation; }, $set(v) { const obj = $t109_110.$get(); obj.generation = v; $t109_110.$set(obj); } };
7860          $t194_195 = $t193_194.$get();
7861          $t195_196 = $t194_195;
7862          $t196_197 = itoa($t195_196);
7863          $t197_198 = ($t192_193 + $t196_197);
7864          $t198_199 = ($t197_198 + ' ');
7865          $t199_200 = ($t198_199 + $t87_88);
7866          $t200_201 = ($t199_200 + ' nonce mismatch');
7867          $t201_202 = errors.New($t200_201);
7868          return $t201_202;
7869          break;
7870        }
7871      }
7872    }
7873  }
7874  
7875  export function TestTreeMath() {
7876    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90;
7877    let $block = 0;
7878    while (true) {
7879      switch ($block) {
7880        case 0: {
7881          $t0_1 = treeMathVectors.$get();
7882          $t1_2 = $rt.builtin.len($t0_1);
7883          $t2_3 = -1;
7884          $block = 1; break;
7885          break;
7886        }
7887        case 1: {
7888          $t3_4 = ($t2_3 + 1);
7889          $t4_5 = ($t3_4 < $t1_2);
7890          if ($t4_5) {
7891            $block = 2; break;
7892          }
7893          else {
7894            $block = 3; break;
7895          }
7896          break;
7897        }
7898        case 2: {
7899          $t5_6 = $t0_1.addr($t3_4);
7900          $t6_7 = $t5_6.$get();
7901          $t7_8 = { $value: { nLeaves: 0, nNodes: 0, root: 0, left: null, right: null, parent: null, sibling: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
7902          $t7_8.$set($rt.builtin.cloneValue($t6_7));
7903          $t8_9 = { $get() { return $t7_8.$get().nLeaves; }, $set(v) { const obj = $t7_8.$get(); obj.nLeaves = v; $t7_8.$set(obj); } };
7904          $t9_10 = $t8_9.$get();
7905          $t10_11 = ($t9_10 >>> 0);
7906          $t11_12 = numLeaves$width($t10_11);
7907          $t12_13 = { $get() { return $t7_8.$get().nNodes; }, $set(v) { const obj = $t7_8.$get(); obj.nNodes = v; $t7_8.$set(obj); } };
7908          $t13_14 = $t12_13.$get();
7909          $t14_15 = ($t11_12 !== $t13_14);
7910          if ($t14_15) {
7911            $block = 4; break;
7912          }
7913          else {
7914            $block = 5; break;
7915          }
7916          break;
7917        }
7918        case 3: {
7919          return null;
7920          break;
7921        }
7922        case 4: {
7923          $t15_16 = errors.New('width mismatch');
7924          return $t15_16;
7925          break;
7926        }
7927        case 5: {
7928          $t16_17 = numLeaves$root($t10_11);
7929          $t17_18 = $t16_17;
7930          $t18_19 = { $get() { return $t7_8.$get().root; }, $set(v) { const obj = $t7_8.$get(); obj.root = v; $t7_8.$set(obj); } };
7931          $t19_20 = $t18_19.$get();
7932          $t20_21 = ($t17_18 !== $t19_20);
7933          if ($t20_21) {
7934            $block = 6; break;
7935          }
7936          else {
7937            $block = 7; break;
7938          }
7939          break;
7940        }
7941        case 6: {
7942          $t21_22 = errors.New('root mismatch');
7943          return $t21_22;
7944          break;
7945        }
7946        case 7: {
7947          $t22_23 = { $get() { return $t7_8.$get().left; }, $set(v) { const obj = $t7_8.$get(); obj.left = v; $t7_8.$set(obj); } };
7948          $t23_24 = $t22_23.$get();
7949          $t24_25 = $rt.builtin.len($t23_24);
7950          $t25_26 = -1;
7951          $block = 8; break;
7952          break;
7953        }
7954        case 8: {
7955          $t26_27 = ($t25_26 + 1);
7956          $t27_28 = ($t26_27 < $t24_25);
7957          if ($t27_28) {
7958            $block = 9; break;
7959          }
7960          else {
7961            $block = 10; break;
7962          }
7963          break;
7964        }
7965        case 9: {
7966          $t28_29 = $t23_24.addr($t26_27);
7967          $t29_30 = $t28_29.$get();
7968          $t30_31 = ($t26_27 >>> 0);
7969          $t31_32 = nodeIndex$left($t30_31);
7970          $t32_33 = $t31_32[0];
7971          $t33_34 = $t31_32[1];
7972          $t34_35 = ($t29_30 < 0);
7973          if ($t34_35) {
7974            $block = 11; break;
7975          }
7976          else {
7977            $block = 12; break;
7978          }
7979          break;
7980        }
7981        case 10: {
7982          $t35_36 = { $get() { return $t7_8.$get().right; }, $set(v) { const obj = $t7_8.$get(); obj.right = v; $t7_8.$set(obj); } };
7983          $t36_37 = $t35_36.$get();
7984          $t37_38 = $rt.builtin.len($t36_37);
7985          $t42_43 = -1;
7986          $block = 16; break;
7987          break;
7988        }
7989        case 11: {
7990          if ($t33_34) {
7991            $block = 13; break;
7992          }
7993          else {
7994            $t25_26 = $t26_27;
7995            $block = 8; break;
7996          }
7997          break;
7998        }
7999        case 12: {
8000          if ($t33_34) {
8001            $block = 15; break;
8002          }
8003          else {
8004            $block = 14; break;
8005          }
8006          break;
8007        }
8008        case 13: {
8009          $t38_39 = errors.New('left should be nil');
8010          return $t38_39;
8011          break;
8012        }
8013        case 14: {
8014          $t39_40 = errors.New('left mismatch');
8015          return $t39_40;
8016          break;
8017        }
8018        case 15: {
8019          $t40_41 = $t32_33;
8020          $t41_42 = ($t40_41 !== $t29_30);
8021          if ($t41_42) {
8022            $block = 14; break;
8023          }
8024          else {
8025            $t25_26 = $t26_27;
8026            $block = 8; break;
8027          }
8028          break;
8029        }
8030        case 16: {
8031          $t43_44 = ($t42_43 + 1);
8032          $t44_45 = ($t43_44 < $t37_38);
8033          if ($t44_45) {
8034            $block = 17; break;
8035          }
8036          else {
8037            $block = 18; break;
8038          }
8039          break;
8040        }
8041        case 17: {
8042          $t45_46 = $t36_37.addr($t43_44);
8043          $t46_47 = $t45_46.$get();
8044          $t47_48 = ($t43_44 >>> 0);
8045          $t48_49 = nodeIndex$right($t47_48);
8046          $t49_50 = $t48_49[0];
8047          $t50_51 = $t48_49[1];
8048          $t51_52 = ($t46_47 < 0);
8049          if ($t51_52) {
8050            $block = 19; break;
8051          }
8052          else {
8053            $block = 20; break;
8054          }
8055          break;
8056        }
8057        case 18: {
8058          $t52_53 = { $get() { return $t7_8.$get().parent; }, $set(v) { const obj = $t7_8.$get(); obj.parent = v; $t7_8.$set(obj); } };
8059          $t53_54 = $t52_53.$get();
8060          $t54_55 = $rt.builtin.len($t53_54);
8061          $t59_60 = -1;
8062          $block = 24; break;
8063          break;
8064        }
8065        case 19: {
8066          if ($t50_51) {
8067            $block = 21; break;
8068          }
8069          else {
8070            $t42_43 = $t43_44;
8071            $block = 16; break;
8072          }
8073          break;
8074        }
8075        case 20: {
8076          if ($t50_51) {
8077            $block = 23; break;
8078          }
8079          else {
8080            $block = 22; break;
8081          }
8082          break;
8083        }
8084        case 21: {
8085          $t55_56 = errors.New('right should be nil');
8086          return $t55_56;
8087          break;
8088        }
8089        case 22: {
8090          $t56_57 = errors.New('right mismatch');
8091          return $t56_57;
8092          break;
8093        }
8094        case 23: {
8095          $t57_58 = $t49_50;
8096          $t58_59 = ($t57_58 !== $t46_47);
8097          if ($t58_59) {
8098            $block = 22; break;
8099          }
8100          else {
8101            $t42_43 = $t43_44;
8102            $block = 16; break;
8103          }
8104          break;
8105        }
8106        case 24: {
8107          $t60_61 = ($t59_60 + 1);
8108          $t61_62 = ($t60_61 < $t54_55);
8109          if ($t61_62) {
8110            $block = 25; break;
8111          }
8112          else {
8113            $block = 26; break;
8114          }
8115          break;
8116        }
8117        case 25: {
8118          $t62_63 = $t53_54.addr($t60_61);
8119          $t63_64 = $t62_63.$get();
8120          $t64_65 = ($t60_61 >>> 0);
8121          $t65_66 = numLeaves$parent($t10_11, $t64_65);
8122          $t66_67 = $t65_66[0];
8123          $t67_68 = $t65_66[1];
8124          $t68_69 = ($t63_64 < 0);
8125          if ($t68_69) {
8126            $block = 27; break;
8127          }
8128          else {
8129            $block = 28; break;
8130          }
8131          break;
8132        }
8133        case 26: {
8134          $t69_70 = { $get() { return $t7_8.$get().sibling; }, $set(v) { const obj = $t7_8.$get(); obj.sibling = v; $t7_8.$set(obj); } };
8135          $t70_71 = $t69_70.$get();
8136          $t71_72 = $rt.builtin.len($t70_71);
8137          $t76_77 = -1;
8138          $block = 32; break;
8139          break;
8140        }
8141        case 27: {
8142          if ($t67_68) {
8143            $block = 29; break;
8144          }
8145          else {
8146            $t59_60 = $t60_61;
8147            $block = 24; break;
8148          }
8149          break;
8150        }
8151        case 28: {
8152          if ($t67_68) {
8153            $block = 31; break;
8154          }
8155          else {
8156            $block = 30; break;
8157          }
8158          break;
8159        }
8160        case 29: {
8161          $t72_73 = errors.New('parent should be nil');
8162          return $t72_73;
8163          break;
8164        }
8165        case 30: {
8166          $t73_74 = errors.New('parent mismatch');
8167          return $t73_74;
8168          break;
8169        }
8170        case 31: {
8171          $t74_75 = $t66_67;
8172          $t75_76 = ($t74_75 !== $t63_64);
8173          if ($t75_76) {
8174            $block = 30; break;
8175          }
8176          else {
8177            $t59_60 = $t60_61;
8178            $block = 24; break;
8179          }
8180          break;
8181        }
8182        case 32: {
8183          $t77_78 = ($t76_77 + 1);
8184          $t78_79 = ($t77_78 < $t71_72);
8185          if ($t78_79) {
8186            $block = 33; break;
8187          }
8188          else {
8189            $t2_3 = $t3_4;
8190            $block = 1; break;
8191          }
8192          break;
8193        }
8194        case 33: {
8195          $t79_80 = $t70_71.addr($t77_78);
8196          $t80_81 = $t79_80.$get();
8197          $t81_82 = ($t77_78 >>> 0);
8198          $t82_83 = numLeaves$sibling($t10_11, $t81_82);
8199          $t83_84 = $t82_83[0];
8200          $t84_85 = $t82_83[1];
8201          $t85_86 = ($t80_81 < 0);
8202          if ($t85_86) {
8203            $block = 34; break;
8204          }
8205          else {
8206            $block = 35; break;
8207          }
8208          break;
8209        }
8210        case 34: {
8211          if ($t84_85) {
8212            $block = 36; break;
8213          }
8214          else {
8215            $t76_77 = $t77_78;
8216            $block = 32; break;
8217          }
8218          break;
8219        }
8220        case 35: {
8221          if ($t84_85) {
8222            $block = 38; break;
8223          }
8224          else {
8225            $block = 37; break;
8226          }
8227          break;
8228        }
8229        case 36: {
8230          $t86_87 = errors.New('sibling should be nil');
8231          return $t86_87;
8232          break;
8233        }
8234        case 37: {
8235          $t87_88 = errors.New('sibling mismatch');
8236          return $t87_88;
8237          break;
8238        }
8239        case 38: {
8240          $t88_89 = $t83_84;
8241          $t89_90 = ($t88_89 !== $t80_81);
8242          if ($t89_90) {
8243            $block = 37; break;
8244          }
8245          else {
8246            $t76_77 = $t77_78;
8247            $block = 32; break;
8248          }
8249          break;
8250        }
8251      }
8252    }
8253  }
8254  
8255  export function TestCryptoBasics() {
8256    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116;
8257    let $block = 0;
8258    while (true) {
8259      switch ($block) {
8260        case 0: {
8261          $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
8262          $t1_2 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
8263          $t2_3 = 0;
8264          $block = 1; break;
8265          break;
8266        }
8267        case 1: {
8268          $t3_4 = ($t2_3 < 32);
8269          if ($t3_4) {
8270            $block = 2; break;
8271          }
8272          else {
8273            $block = 3; break;
8274          }
8275          break;
8276        }
8277        case 2: {
8278          $t4_5 = ($t2_3 & 0xFF);
8279          $t5_6 = $t0_1.$get().addr($t2_3);
8280          $t5_6.$set($t4_5);
8281          $t6_7 = ($t2_3 + 1);
8282          $t2_3 = $t6_7;
8283          $block = 1; break;
8284          break;
8285        }
8286        case 3: {
8287          $t7_8 = 0;
8288          $block = 4; break;
8289          break;
8290        }
8291        case 4: {
8292          $t8_9 = ($t7_8 < 12);
8293          if ($t8_9) {
8294            $block = 5; break;
8295          }
8296          else {
8297            $block = 6; break;
8298          }
8299          break;
8300        }
8301        case 5: {
8302          $t9_10 = ($t7_8 + 1);
8303          $t10_11 = ($t9_10 & 0xFF);
8304          $t11_12 = $t1_2.$get().addr($t7_8);
8305          $t11_12.$set($t10_11);
8306          $t12_13 = ($t7_8 + 1);
8307          $t7_8 = $t12_13;
8308          $block = 4; break;
8309          break;
8310        }
8311        case 6: {
8312          $t13_14 = $t0_1.$get();
8313          $t14_15 = $t1_2.$get();
8314          $t15_16 = smesh$lol$web$common$crypto$chacha20poly1305.Seal($t13_14, $t14_15, 'Hello, MLS!', null);
8315          $t16_17 = $t0_1.$get();
8316          $t17_18 = $t1_2.$get();
8317          $t18_19 = smesh$lol$web$common$crypto$chacha20poly1305.Open($t16_17, $t17_18, $t15_16, null);
8318          $t19_20 = $t18_19[0];
8319          $t20_21 = $t18_19[1];
8320          if ($t20_21) {
8321            $block = 8; break;
8322          }
8323          else {
8324            $block = 7; break;
8325          }
8326          break;
8327        }
8328        case 7: {
8329          $t21_22 = errors.New('aead roundtrip: Open returned !ok');
8330          return $t21_22;
8331          break;
8332        }
8333        case 8: {
8334          $t22_23 = bytesEqual($t19_20, 'Hello, MLS!');
8335          if ($t22_23) {
8336            $block = 10; break;
8337          }
8338          else {
8339            $block = 9; break;
8340          }
8341          break;
8342        }
8343        case 9: {
8344          $t23_24 = errors.New('aead roundtrip: plaintext mismatch');
8345          return $t23_24;
8346          break;
8347        }
8348        case 10: {
8349          $t24_25 = hexb('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f');
8350          $t25_26 = hexb('070000004041424344454647');
8351          $t26_27 = hexb('50515253c0c1c2c3c4c5c6c7');
8352          $t27_28 = hexb('4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e');
8353          $t28_29 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
8354          $t29_30 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
8355          $t30_31 = $rt.builtin.sliceSlice($t28_29.$get(), undefined, undefined, undefined);
8356          $t31_32 = $rt.builtin.copy($t30_31, $t24_25);
8357          $t32_33 = $rt.builtin.sliceSlice($t29_30.$get(), undefined, undefined, undefined);
8358          $t33_34 = $rt.builtin.copy($t32_33, $t25_26);
8359          $t34_35 = hexb('d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116');
8360          $t35_36 = hexb('1ae10b594f09e26a7e902ecbd0600691');
8361          $t36_37 = $rt.builtin.appendSlice($t34_35, $t35_36);
8362          $t37_38 = $t28_29.$get();
8363          $t38_39 = $t29_30.$get();
8364          $t39_40 = smesh$lol$web$common$crypto$chacha20poly1305.Seal($t37_38, $t38_39, $t27_28, $t26_27);
8365          $t40_41 = bytesEqual($t39_40, $t36_37);
8366          if ($t40_41) {
8367            $block = 12; break;
8368          }
8369          else {
8370            $block = 11; break;
8371          }
8372          break;
8373        }
8374        case 11: {
8375          $t41_42 = errors.New('rfc8439 AEAD Seal mismatch');
8376          return $t41_42;
8377          break;
8378        }
8379        case 12: {
8380          $t42_43 = $t28_29.$get();
8381          $t43_44 = $t29_30.$get();
8382          $t44_45 = smesh$lol$web$common$crypto$chacha20poly1305.Open($t42_43, $t43_44, $t39_40, $t26_27);
8383          $t45_46 = $t44_45[0];
8384          $t46_47 = $t44_45[1];
8385          if ($t46_47) {
8386            $block = 14; break;
8387          }
8388          else {
8389            $block = 13; break;
8390          }
8391          break;
8392        }
8393        case 13: {
8394          $t47_48 = errors.New('rfc8439 AEAD Open failed');
8395          return $t47_48;
8396          break;
8397        }
8398        case 14: {
8399          $t48_49 = bytesEqual($t45_46, $t27_28);
8400          if ($t48_49) {
8401            $block = 16; break;
8402          }
8403          else {
8404            $block = 15; break;
8405          }
8406          break;
8407        }
8408        case 15: {
8409          $t49_50 = errors.New('rfc8439 AEAD Open mismatch');
8410          return $t49_50;
8411          break;
8412        }
8413        case 16: {
8414          $t50_51 = hexb('4f0c86f9c82fba0a896bd7eecf79a29856e98a7e4f13b9f841ae285d70ed8b68');
8415          $t51_52 = CipherSuite$refHash(3, 'RefHash', $t50_51);
8416          $t52_53 = $t51_52[0];
8417          $t53_54 = $t51_52[1];
8418          $t54_55 = ($t53_54 !== null);
8419          if ($t54_55) {
8420            $block = 17; break;
8421          }
8422          else {
8423            $block = 18; break;
8424          }
8425          break;
8426        }
8427        case 17: {
8428          return $t53_54;
8429          break;
8430        }
8431        case 18: {
8432          $t55_56 = hexb('f11019703c8b630060839b12a475fd39c6a30f8a866790ff46a35f9c65e1df3c');
8433          $t56_57 = bytesEqual($t52_53, $t55_56);
8434          if ($t56_57) {
8435            $block = 20; break;
8436          }
8437          else {
8438            $block = 19; break;
8439          }
8440          break;
8441        }
8442        case 19: {
8443          $t57_58 = errors.New('refHash mismatch');
8444          return $t57_58;
8445          break;
8446        }
8447        case 20: {
8448          $t58_59 = hexb('55aa3ae5242564782567ce097beafe19510230660008b2cc064a78387fa16f36');
8449          $t59_60 = hexb('2e07148f4340c62a55e7608c20d73fddf1f3b8dafb2c7ef24eceb70e136c0d8c');
8450          $t60_61 = CipherSuite$expandWithLabel(3, $t58_59, 'ExpandWithLabel', $t59_60, 32);
8451          $t61_62 = $t60_61[0];
8452          $t62_63 = $t60_61[1];
8453          $t63_64 = ($t62_63 !== null);
8454          if ($t63_64) {
8455            $block = 21; break;
8456          }
8457          else {
8458            $block = 22; break;
8459          }
8460          break;
8461        }
8462        case 21: {
8463          return $t62_63;
8464          break;
8465        }
8466        case 22: {
8467          $t64_65 = hexb('1df5ba7996a34f75d717916a094a14083c03a75e80f0330a8095f5f11cfe1e1f');
8468          $t65_66 = bytesEqual($t61_62, $t64_65);
8469          if ($t65_66) {
8470            $block = 24; break;
8471          }
8472          else {
8473            $block = 23; break;
8474          }
8475          break;
8476        }
8477        case 23: {
8478          $t66_67 = errors.New('expandWithLabel mismatch');
8479          return $t66_67;
8480          break;
8481        }
8482        case 24: {
8483          $t67_68 = hexb('cae460c779ebaa3e81c061a371486dff1ed1ff273bea369cc0fc46550b83c407');
8484          $t68_69 = CipherSuite$deriveSecret(3, $t67_68, 'DeriveSecret');
8485          $t69_70 = $t68_69[0];
8486          $t70_71 = $t68_69[1];
8487          $t71_72 = ($t70_71 !== null);
8488          if ($t71_72) {
8489            $block = 25; break;
8490          }
8491          else {
8492            $block = 26; break;
8493          }
8494          break;
8495        }
8496        case 25: {
8497          return $t70_71;
8498          break;
8499        }
8500        case 26: {
8501          $t72_73 = hexb('aad859818ca5f2a9896d4d3ee2dccc0cefcd69b666bdb16b52f1de15fb1a5567');
8502          $t73_74 = bytesEqual($t69_70, $t72_73);
8503          if ($t73_74) {
8504            $block = 28; break;
8505          }
8506          else {
8507            $block = 27; break;
8508          }
8509          break;
8510        }
8511        case 27: {
8512          $t74_75 = errors.New('deriveSecret mismatch');
8513          return $t74_75;
8514          break;
8515        }
8516        case 28: {
8517          $t75_76 = hexb('c994e257b53f726087ddd7121876f558f1fbd6f807e5ff010830d618d7bab6f2');
8518          $t76_77 = deriveTreeSecret(3, $t75_76, 'DeriveTreeSecret', 2694881440, 32);
8519          $t77_78 = $t76_77[0];
8520          $t78_79 = $t76_77[1];
8521          $t79_80 = ($t78_79 !== null);
8522          if ($t79_80) {
8523            $block = 29; break;
8524          }
8525          else {
8526            $block = 30; break;
8527          }
8528          break;
8529        }
8530        case 29: {
8531          return $t78_79;
8532          break;
8533        }
8534        case 30: {
8535          $t80_81 = hexb('2095d6a81ab87095d1df26f6bdf012ec06f197e418381c1795a7b758603c936d');
8536          $t81_82 = bytesEqual($t77_78, $t80_81);
8537          if ($t81_82) {
8538            $block = 32; break;
8539          }
8540          else {
8541            $block = 31; break;
8542          }
8543          break;
8544        }
8545        case 31: {
8546          $t82_83 = errors.New('deriveTreeSecret mismatch');
8547          return $t82_83;
8548          break;
8549        }
8550        case 32: {
8551          $t83_84 = hexb('18275f892ee0ca6f4687ff26c990776387502646ff658c3f572b324faecb05c5');
8552          $t84_85 = hexb('df308cf2dbf471edf2c29d30e3daf161b5b87d350ee3b2c715c298ec3d10d432');
8553          $t85_86 = hexb('4f56851c2c47f5115a61ff0ab6121b4a4732d4e94805fc7135a5132f87d5ca5f1dc7408816c1ea4f25887725cf5914b48c427a52cabcfeb746a2b8a12e821f08');
8554          $t86_87 = $t83_84;
8555          $t87_88 = CipherSuite$verifyWithLabel(3, $t86_87, 'SignWithLabel', $t84_85, $t85_86);
8556          if ($t87_88) {
8557            $block = 34; break;
8558          }
8559          else {
8560            $block = 33; break;
8561          }
8562          break;
8563        }
8564        case 33: {
8565          $t88_89 = errors.New('signWithLabel: reference signature verify failed');
8566          return $t88_89;
8567          break;
8568        }
8569        case 34: {
8570          $t89_90 = hexb('4e312160ee4981358db479aa877412847abc7f7054b5605511256c395404d054');
8571          $t90_91 = hexb('df308cf2dbf471edf2c29d30e3daf161b5b87d350ee3b2c715c298ec3d10d432');
8572          $t91_92 = $t89_90;
8573          $t92_93 = CipherSuite$signWithLabel(3, $t91_92, 'SignWithLabel', $t90_91);
8574          $t93_94 = $t92_93[0];
8575          $t94_95 = $t92_93[1];
8576          $t95_96 = ($t94_95 !== null);
8577          if ($t95_96) {
8578            $block = 35; break;
8579          }
8580          else {
8581            $block = 36; break;
8582          }
8583          break;
8584        }
8585        case 35: {
8586          return $t94_95;
8587          break;
8588        }
8589        case 36: {
8590          $t96_97 = hexb('18275f892ee0ca6f4687ff26c990776387502646ff658c3f572b324faecb05c5');
8591          $t97_98 = hexb('df308cf2dbf471edf2c29d30e3daf161b5b87d350ee3b2c715c298ec3d10d432');
8592          $t98_99 = $t96_97;
8593          $t99_100 = CipherSuite$verifyWithLabel(3, $t98_99, 'SignWithLabel', $t97_98, $t93_94);
8594          if ($t99_100) {
8595            $block = 38; break;
8596          }
8597          else {
8598            $block = 37; break;
8599          }
8600          break;
8601        }
8602        case 37: {
8603          $t100_101 = errors.New('signWithLabel: round-trip verify failed');
8604          return $t100_101;
8605          break;
8606        }
8607        case 38: {
8608          $t101_102 = hexb('9d122ad4638fcb301b6eb5f4073414afb44bb34d37b4ddee9975b2941d700edb');
8609          $t102_103 = hexb('0d6a5cf9ee88b1f8c79d8512477d9bfc5496c207c8173f8dcac0368b4dba7407');
8610          $t103_104 = hexb('f26e9e5a94396a90f85a5f72eedf3dacfb1b7f4164e0573edeb9c6c912e1cb49');
8611          $t104_105 = hexb('40dd09ad4c5dc29d373f814bf054c9359cb75a468bc4d2c8bbcffb072a73105c4d9416ebd4fafeb62e59a9dea55da3cd');
8612          $t105_106 = $t101_102;
8613          $t106_107 = CipherSuite$decryptWithLabel(3, $t105_106, 'EncryptWithLabel', $t102_103, $t103_104, $t104_105);
8614          $t107_108 = $t106_107[0];
8615          $t108_109 = $t106_107[1];
8616          $t109_110 = ($t108_109 !== null);
8617          if ($t109_110) {
8618            $block = 39; break;
8619          }
8620          else {
8621            $block = 40; break;
8622          }
8623          break;
8624        }
8625        case 39: {
8626          $t110_111 = $rt.types.methodCall($t108_109, 'Error', []);
8627          $t111_112 = ('decryptWithLabel error: ' + $t110_111);
8628          $t112_113 = errors.New($t111_112);
8629          return $t112_113;
8630          break;
8631        }
8632        case 40: {
8633          $t113_114 = hexb('1dd4c1904996ce7d42cee7de68881459fa7a345da59a02040ade37103505baf6');
8634          $t114_115 = bytesEqual($t107_108, $t113_114);
8635          if ($t114_115) {
8636            $block = 42; break;
8637          }
8638          else {
8639            $block = 41; break;
8640          }
8641          break;
8642        }
8643        case 41: {
8644          $t115_116 = errors.New('decryptWithLabel mismatch');
8645          return $t115_116;
8646          break;
8647        }
8648        case 42: {
8649          return null;
8650          break;
8651        }
8652      }
8653    }
8654  }
8655  
8656  export function hexb(s) {
8657    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
8658    let $block = 0;
8659    while (true) {
8660      switch ($block) {
8661        case 0: {
8662          $t0_1 = $rt.builtin.len(s);
8663          $t1_2 = Math.trunc($t0_1 / 2);
8664          $t2_3 = $rt.builtin.makeSlice($t1_2, $t1_2, 0);
8665          $t3_4 = 0;
8666          $block = 1; break;
8667          break;
8668        }
8669        case 1: {
8670          $t4_5 = ($t3_4 < $t1_2);
8671          if ($t4_5) {
8672            $block = 2; break;
8673          }
8674          else {
8675            $block = 3; break;
8676          }
8677          break;
8678        }
8679        case 2: {
8680          $t5_6 = (2 * $t3_4);
8681          $t6_7 = s.addr($t5_6);
8682          $t7_8 = $t6_7.$get();
8683          $t8_9 = hexdig($t7_8);
8684          $t9_10 = (($t8_9 << 4) & 0xFF);
8685          $t10_11 = (2 * $t3_4);
8686          $t11_12 = ($t10_11 + 1);
8687          $t12_13 = s.addr($t11_12);
8688          $t13_14 = $t12_13.$get();
8689          $t14_15 = hexdig($t13_14);
8690          $t15_16 = (($t9_10 + $t14_15) & 0xFF);
8691          $t16_17 = $t2_3.addr($t3_4);
8692          $t16_17.$set($t15_16);
8693          $t17_18 = ($t3_4 + 1);
8694          $t3_4 = $t17_18;
8695          $block = 1; break;
8696          break;
8697        }
8698        case 3: {
8699          return $t2_3;
8700          break;
8701        }
8702      }
8703    }
8704  }
8705  
8706  export function hexenc(b) {
8707    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24;
8708    let $block = 0;
8709    while (true) {
8710      switch ($block) {
8711        case 0: {
8712          $t0_1 = $rt.builtin.len(b);
8713          $t1_2 = ($t0_1 * 2);
8714          $t2_3 = $rt.builtin.makeSlice($t1_2, $t1_2, 0);
8715          $t3_4 = 0;
8716          $block = 1; break;
8717          break;
8718        }
8719        case 1: {
8720          $t4_5 = $rt.builtin.len(b);
8721          $t5_6 = ($t3_4 < $t4_5);
8722          if ($t5_6) {
8723            $block = 2; break;
8724          }
8725          else {
8726            $block = 3; break;
8727          }
8728          break;
8729        }
8730        case 2: {
8731          $t6_7 = (2 * $t3_4);
8732          $t7_8 = hexchars.$get();
8733          $t8_9 = b.addr($t3_4);
8734          $t9_10 = $t8_9.$get();
8735          $t10_11 = (($t9_10 & 0xFF) >> 4);
8736          $t11_12 = $t7_8.addr($t10_11);
8737          $t12_13 = $t11_12.$get();
8738          $t13_14 = $t2_3.addr($t6_7);
8739          $t13_14.$set($t12_13);
8740          $t14_15 = (2 * $t3_4);
8741          $t15_16 = ($t14_15 + 1);
8742          $t16_17 = hexchars.$get();
8743          $t17_18 = b.addr($t3_4);
8744          $t18_19 = $t17_18.$get();
8745          $t19_20 = ($t18_19 & 15);
8746          $t20_21 = $t16_17.addr($t19_20);
8747          $t21_22 = $t20_21.$get();
8748          $t22_23 = $t2_3.addr($t15_16);
8749          $t22_23.$set($t21_22);
8750          $t23_24 = ($t3_4 + 1);
8751          $t3_4 = $t23_24;
8752          $block = 1; break;
8753          break;
8754        }
8755        case 3: {
8756          return $t2_3;
8757          break;
8758        }
8759      }
8760    }
8761  }
8762  
8763  export function hexdig(c) {
8764    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
8765    let $block = 0;
8766    while (true) {
8767      switch ($block) {
8768        case 0: {
8769          $t0_1 = (c >= 48);
8770          if ($t0_1) {
8771            $block = 3; break;
8772          }
8773          else {
8774            $block = 2; break;
8775          }
8776          break;
8777        }
8778        case 1: {
8779          $t1_2 = ((c - 48) & 0xFF);
8780          return $t1_2;
8781          break;
8782        }
8783        case 2: {
8784          $t2_3 = (c >= 97);
8785          if ($t2_3) {
8786            $block = 6; break;
8787          }
8788          else {
8789            $block = 5; break;
8790          }
8791          break;
8792        }
8793        case 3: {
8794          $t3_4 = (c <= 57);
8795          if ($t3_4) {
8796            $block = 1; break;
8797          }
8798          else {
8799            $block = 2; break;
8800          }
8801          break;
8802        }
8803        case 4: {
8804          $t4_5 = ((c - 97) & 0xFF);
8805          $t5_6 = (($t4_5 + 10) & 0xFF);
8806          return $t5_6;
8807          break;
8808        }
8809        case 5: {
8810          return 0;
8811          break;
8812        }
8813        case 6: {
8814          $t6_7 = (c <= 102);
8815          if ($t6_7) {
8816            $block = 4; break;
8817          }
8818          else {
8819            $block = 5; break;
8820          }
8821          break;
8822        }
8823      }
8824    }
8825  }
8826  
8827  export function TestTranscriptHashes() {
8828    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52;
8829    let $block = 0;
8830    while (true) {
8831      switch ($block) {
8832        case 0: {
8833          $t0_1 = hexb('45eb25e0f6024d7dca9a319bbb5d86d22d156613e6319507b54f4844f71bc858');
8834          $t1_2 = hexb('00010567726f7570000000000000345601000000000003220220e740a6faf2db65f5853148d75d9a335d7c4b94ab106fe5f237bc34fdcfc745840040406d0a302c5106ea9d31f3aec1d43df3fff47c1c0b059f4a0b1884798c5f6c973b4e3933b927b7e5f841813e1c14d8513c579b3662a3ce5e4c50adf53c4d60df022043646bfab3e0513b627b89997a2c3192afec8c9b6e9ef839dbb5fc7c0b90c9cd');
8835          $t2_3 = hexb('0a56a7ac12b2fdab74b9356d100f5458dbce550c1fe69d43283001496fd08901');
8836          $t3_4 = hexb('93e90c899f8a485dad5521123de058cefde35d5659521efd9b19c16fbdd8b42c');
8837          $t4_5 = hexb('4184f0b59dc75aa1771efb5601124785ed6d590fe8cd58c398f4ccdbef46f3f0');
8838          $t5_6 = { $value: { wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
8839          $t6_7 = $rt.types.makeInterface('*smesh.lol/web/common/mls.authenticatedContent', $t5_6);
8840          $t7_8 = unmarshalRaw($t1_2, $t6_7);
8841          $t8_9 = ($t7_8 !== null);
8842          if ($t8_9) {
8843            $block = 1; break;
8844          }
8845          else {
8846            $block = 2; break;
8847          }
8848          break;
8849        }
8850        case 1: {
8851          $t9_10 = $rt.types.methodCall($t7_8, 'Error', []);
8852          $t10_11 = ('unmarshal authContent: ' + $t9_10);
8853          $t11_12 = errors.New($t10_11);
8854          return $t11_12;
8855          break;
8856        }
8857        case 2: {
8858          $t12_13 = { $get() { return $t5_6.$get().content; }, $set(v) { const obj = $t5_6.$get(); obj.content = v; $t5_6.$set(obj); } };
8859          $t13_14 = { $get() { return $t12_13.$get().contentType; }, $set(v) { const obj = $t12_13.$get(); obj.contentType = v; $t12_13.$set(obj); } };
8860          $t14_15 = $t13_14.$get();
8861          $t15_16 = ($t14_15 !== 3);
8862          if ($t15_16) {
8863            $block = 3; break;
8864          }
8865          else {
8866            $block = 4; break;
8867          }
8868          break;
8869        }
8870        case 3: {
8871          $t16_17 = errors.New('authContent is not a commit');
8872          return $t16_17;
8873          break;
8874        }
8875        case 4: {
8876          $t17_18 = authenticatedContent$confirmedTranscriptHashInput($t5_6);
8877          $t18_19 = confirmedTranscriptHashInput$hashValue($t17_18, 3, $t2_3);
8878          $t19_20 = $t18_19[0];
8879          $t20_21 = $t18_19[1];
8880          $t21_22 = ($t20_21 !== null);
8881          if ($t21_22) {
8882            $block = 5; break;
8883          }
8884          else {
8885            $block = 6; break;
8886          }
8887          break;
8888        }
8889        case 5: {
8890          $t22_23 = $rt.types.methodCall($t20_21, 'Error', []);
8891          $t23_24 = ('confirmedTranscriptHashInput.hashValue: ' + $t22_23);
8892          $t24_25 = errors.New($t23_24);
8893          return $t24_25;
8894          break;
8895        }
8896        case 6: {
8897          $t25_26 = bytesEqual($t19_20, $t3_4);
8898          if ($t25_26) {
8899            $block = 8; break;
8900          }
8901          else {
8902            $block = 7; break;
8903          }
8904          break;
8905        }
8906        case 7: {
8907          $t26_27 = hexenc($t19_20);
8908          $t27_28 = ('confirmed_transcript_hash_after mismatch: got ' + $t26_27);
8909          $t28_29 = ($t27_28 + ' want ');
8910          $t29_30 = hexenc($t3_4);
8911          $t30_31 = ($t28_29 + $t29_30);
8912          $t31_32 = errors.New($t30_31);
8913          return $t31_32;
8914          break;
8915        }
8916        case 8: {
8917          $t32_33 = { $get() { return $t5_6.$get().auth; }, $set(v) { const obj = $t5_6.$get(); obj.auth = v; $t5_6.$set(obj); } };
8918          $t33_34 = { $get() { return $t32_33.$get().confirmationTag; }, $set(v) { const obj = $t32_33.$get(); obj.confirmationTag = v; $t32_33.$set(obj); } };
8919          $t34_35 = $t33_34.$get();
8920          $t35_36 = nextInterimTranscriptHash(3, $t3_4, $t34_35);
8921          $t36_37 = $t35_36[0];
8922          $t37_38 = $t35_36[1];
8923          $t38_39 = ($t37_38 !== null);
8924          if ($t38_39) {
8925            $block = 9; break;
8926          }
8927          else {
8928            $block = 10; break;
8929          }
8930          break;
8931        }
8932        case 9: {
8933          $t39_40 = $rt.types.methodCall($t37_38, 'Error', []);
8934          $t40_41 = ('nextInterimTranscriptHash: ' + $t39_40);
8935          $t41_42 = errors.New($t40_41);
8936          return $t41_42;
8937          break;
8938        }
8939        case 10: {
8940          $t42_43 = bytesEqual($t36_37, $t4_5);
8941          if ($t42_43) {
8942            $block = 12; break;
8943          }
8944          else {
8945            $block = 11; break;
8946          }
8947          break;
8948        }
8949        case 11: {
8950          $t43_44 = hexenc($t36_37);
8951          $t44_45 = ('interim_transcript_hash_after mismatch: got ' + $t43_44);
8952          $t45_46 = ($t44_45 + ' want ');
8953          $t46_47 = hexenc($t4_5);
8954          $t47_48 = ($t45_46 + $t46_47);
8955          $t48_49 = errors.New($t47_48);
8956          return $t48_49;
8957          break;
8958        }
8959        case 12: {
8960          $t49_50 = { $get() { return $t5_6.$get().auth; }, $set(v) { const obj = $t5_6.$get(); obj.auth = v; $t5_6.$set(obj); } };
8961          $t50_51 = framedContentAuthData$verifyConfirmationTag($t49_50, 3, $t0_1, $t3_4);
8962          if ($t50_51) {
8963            $block = 14; break;
8964          }
8965          else {
8966            $block = 13; break;
8967          }
8968          break;
8969        }
8970        case 13: {
8971          $t51_52 = errors.New('verifyConfirmationTag failed');
8972          return $t51_52;
8973          break;
8974        }
8975        case 14: {
8976          return null;
8977          break;
8978        }
8979      }
8980    }
8981  }
8982  
8983  export function bytesEqual(a, b) {
8984    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
8985    let $block = 0;
8986    while (true) {
8987      switch ($block) {
8988        case 0: {
8989          $t0_1 = $rt.builtin.len(a);
8990          $t1_2 = $rt.builtin.len(b);
8991          $t2_3 = ($t0_1 !== $t1_2);
8992          if ($t2_3) {
8993            $block = 1; break;
8994          }
8995          else {
8996            $block = 2; break;
8997          }
8998          break;
8999        }
9000        case 1: {
9001          return false;
9002          break;
9003        }
9004        case 2: {
9005          $t3_4 = $rt.builtin.len(a);
9006          $t4_5 = -1;
9007          $block = 3; break;
9008          break;
9009        }
9010        case 3: {
9011          $t5_6 = ($t4_5 + 1);
9012          $t6_7 = ($t5_6 < $t3_4);
9013          if ($t6_7) {
9014            $block = 4; break;
9015          }
9016          else {
9017            $block = 5; break;
9018          }
9019          break;
9020        }
9021        case 4: {
9022          $t7_8 = a.addr($t5_6);
9023          $t8_9 = $t7_8.$get();
9024          $t9_10 = b.addr($t5_6);
9025          $t10_11 = $t9_10.$get();
9026          $t11_12 = ($t8_9 !== $t10_11);
9027          if ($t11_12) {
9028            $block = 6; break;
9029          }
9030          else {
9031            $t4_5 = $t5_6;
9032            $block = 3; break;
9033          }
9034          break;
9035        }
9036        case 5: {
9037          return true;
9038          break;
9039        }
9040        case 6: {
9041          return false;
9042          break;
9043        }
9044      }
9045    }
9046  }
9047  
9048  export function NewExtension(t, data) {
9049    let $t0_1, $t1_2, $t2_3, $t3_4;
9050    $t0_1 = { $value: { extensionType: 0, extensionData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9051    $t1_2 = { $get() { return $t0_1.$get().extensionType; }, $set(v) { const obj = $t0_1.$get(); obj.extensionType = v; $t0_1.$set(obj); } };
9052    $t2_3 = { $get() { return $t0_1.$get().extensionData; }, $set(v) { const obj = $t0_1.$get(); obj.extensionData = v; $t0_1.$set(obj); } };
9053    $t1_2.$set(t);
9054    $t2_3.$set(data);
9055    $t3_4 = $t0_1.$get();
9056    return $t3_4;
9057  }
9058  
9059  export function unmarshalExtensionVec(r) {
9060    let $t0_1, $t1_2, $t2_3, $t3_4;
9061    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9062    $t1_2 = unmarshalExtensionVec$1.bind(null, $t0_1);
9063    $t2_3 = Reader$readVector(r, $t1_2);
9064    $t3_4 = $t0_1.$get();
9065    return [$t3_4, $t2_3];
9066  }
9067  
9068  function unmarshalExtensionVec$1(exts, r) {
9069    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
9070    let $block = 0;
9071    while (true) {
9072      switch ($block) {
9073        case 0: {
9074          $t0_1 = { $value: { extensionType: 0, extensionData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9075          $t1_2 = Reader$readUint16(r);
9076          $t2_3 = $t1_2[0];
9077          $t3_4 = $t1_2[1];
9078          if ($t3_4) {
9079            $block = 2; break;
9080          }
9081          else {
9082            $block = 1; break;
9083          }
9084          break;
9085        }
9086        case 1: {
9087          $t4_5 = errUnexpectedEOF.$get();
9088          return $t4_5;
9089          break;
9090        }
9091        case 2: {
9092          $t5_6 = $t2_3;
9093          $t6_7 = { $get() { return $t0_1.$get().extensionType; }, $set(v) { const obj = $t0_1.$get(); obj.extensionType = v; $t0_1.$set(obj); } };
9094          $t6_7.$set($t5_6);
9095          $t7_8 = Reader$readOpaqueVec(r);
9096          $t8_9 = $t7_8[0];
9097          $t9_10 = { $get() { return $t0_1.$get().extensionData; }, $set(v) { const obj = $t0_1.$get(); obj.extensionData = v; $t0_1.$set(obj); } };
9098          $t9_10.$set($t8_9);
9099          $t10_11 = $t7_8[1];
9100          if ($t10_11) {
9101            $block = 4; break;
9102          }
9103          else {
9104            $block = 3; break;
9105          }
9106          break;
9107        }
9108        case 3: {
9109          $t11_12 = errUnexpectedEOF.$get();
9110          return $t11_12;
9111          break;
9112        }
9113        case 4: {
9114          $t12_13 = exts.$get();
9115          $t13_14 = $t0_1.$get();
9116          $t14_15 = { $value: $rt.builtin.makeSlice(1, 1, { extensionType: 0, extensionData: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
9117          $t15_16 = $t14_15.$get().addr(0);
9118          $t15_16.$set($rt.builtin.cloneValue($t13_14));
9119          $t16_17 = $rt.builtin.sliceSlice($t14_15.$get(), undefined, undefined, undefined);
9120          $t17_18 = $rt.builtin.appendSlice($t12_13, $t16_17);
9121          exts.$set($t17_18);
9122          return null;
9123          break;
9124        }
9125      }
9126    }
9127  }
9128  
9129  export function marshalExtensionVec(w, exts) {
9130    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
9131    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9132    $t0_1.$set(exts);
9133    $t1_2 = $t0_1.$get();
9134    $t2_3 = $rt.builtin.len($t1_2);
9135    $t3_4 = marshalExtensionVec$1.bind(null, $t0_1);
9136    $t4_5 = Writer$writeVector(w, $t2_3, $t3_4);
9137    return;
9138  }
9139  
9140  function marshalExtensionVec$1(exts, w, i) {
9141    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
9142    $t0_1 = { $value: { extensionType: 0, extensionData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9143    $t1_2 = exts.$get();
9144    $t2_3 = $t1_2.addr(i);
9145    $t3_4 = $t2_3.$get();
9146    $t0_1.$set($rt.builtin.cloneValue($t3_4));
9147    $t4_5 = { $get() { return $t0_1.$get().extensionType; }, $set(v) { const obj = $t0_1.$get(); obj.extensionType = v; $t0_1.$set(obj); } };
9148    $t5_6 = $t4_5.$get();
9149    $t6_7 = $t5_6;
9150    $t7_8 = Writer$addUint16(w, $t6_7);
9151    $t8_9 = { $get() { return $t0_1.$get().extensionData; }, $set(v) { const obj = $t0_1.$get(); obj.extensionData = v; $t0_1.$set(obj); } };
9152    $t9_10 = $t8_9.$get();
9153    $t10_11 = Writer$writeOpaqueVec(w, $t9_10);
9154    return;
9155  }
9156  
9157  export function findExtensionData(exts, t) {
9158    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
9159    let $block = 0;
9160    while (true) {
9161      switch ($block) {
9162        case 0: {
9163          $t0_1 = $rt.builtin.len(exts);
9164          $t1_2 = -1;
9165          $block = 1; break;
9166          break;
9167        }
9168        case 1: {
9169          $t2_3 = ($t1_2 + 1);
9170          $t3_4 = ($t2_3 < $t0_1);
9171          if ($t3_4) {
9172            $block = 2; break;
9173          }
9174          else {
9175            $block = 3; break;
9176          }
9177          break;
9178        }
9179        case 2: {
9180          $t4_5 = exts.addr($t2_3);
9181          $t5_6 = $t4_5.$get();
9182          $t6_7 = { $value: { extensionType: 0, extensionData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9183          $t6_7.$set($rt.builtin.cloneValue($t5_6));
9184          $t7_8 = { $get() { return $t6_7.$get().extensionType; }, $set(v) { const obj = $t6_7.$get(); obj.extensionType = v; $t6_7.$set(obj); } };
9185          $t8_9 = $t7_8.$get();
9186          $t9_10 = ($t8_9 === t);
9187          if ($t9_10) {
9188            $block = 4; break;
9189          }
9190          else {
9191            $t1_2 = $t2_3;
9192            $block = 1; break;
9193          }
9194          break;
9195        }
9196        case 3: {
9197          return null;
9198          break;
9199        }
9200        case 4: {
9201          $t10_11 = { $get() { return $t6_7.$get().extensionData; }, $set(v) { const obj = $t6_7.$get(); obj.extensionData = v; $t6_7.$set(obj); } };
9202          $t11_12 = $t10_11.$get();
9203          return $t11_12;
9204          break;
9205        }
9206      }
9207    }
9208  }
9209  
9210  export function hasUnmergedLeaf(pn, target) {
9211    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
9212    let $block = 0;
9213    while (true) {
9214      switch ($block) {
9215        case 0: {
9216          $t0_1 = { $get() { return pn.$get().unmergedLeaves; }, $set(v) { const obj = pn.$get(); obj.unmergedLeaves = v; pn.$set(obj); } };
9217          $t1_2 = $t0_1.$get();
9218          $t2_3 = $rt.builtin.len($t1_2);
9219          $t3_4 = -1;
9220          $block = 1; break;
9221          break;
9222        }
9223        case 1: {
9224          $t4_5 = ($t3_4 + 1);
9225          $t5_6 = ($t4_5 < $t2_3);
9226          if ($t5_6) {
9227            $block = 2; break;
9228          }
9229          else {
9230            $block = 3; break;
9231          }
9232          break;
9233        }
9234        case 2: {
9235          $t6_7 = $t1_2.addr($t4_5);
9236          $t7_8 = $t6_7.$get();
9237          $t8_9 = ($t7_8 === target);
9238          if ($t8_9) {
9239            $block = 4; break;
9240          }
9241          else {
9242            $t3_4 = $t4_5;
9243            $block = 1; break;
9244          }
9245          break;
9246        }
9247        case 3: {
9248          return false;
9249          break;
9250        }
9251        case 4: {
9252          return true;
9253          break;
9254        }
9255      }
9256    }
9257  }
9258  
9259  export function marshalParentHashInput(encryptionKey, parentHash, originalSiblingTreeHash) {
9260    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
9261    $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9262    $t1_2 = encryptionKey;
9263    $t2_3 = Writer$writeOpaqueVec($t0_1, $t1_2);
9264    $t3_4 = Writer$writeOpaqueVec($t0_1, parentHash);
9265    $t4_5 = Writer$writeOpaqueVec($t0_1, originalSiblingTreeHash);
9266    $t5_6 = Writer$bytes($t0_1);
9267    $t6_7 = $t5_6[0];
9268    $t7_8 = $t5_6[1];
9269    return [$t6_7, $t7_8];
9270  }
9271  
9272  export function decryptPathSecret(cs, nodePriv, ctx, ct) {
9273    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
9274    let $block = 0;
9275    while (true) {
9276      switch ($block) {
9277        case 0: {
9278          $t0_1 = { $value: { kemOutput: null, ciphertext: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9279          $t0_1.$set($rt.builtin.cloneValue(ct));
9280          $t1_2 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupContext', ctx);
9281          $t2_3 = marshalRaw($t1_2);
9282          $t3_4 = $t2_3[0];
9283          $t4_5 = $t2_3[1];
9284          $t5_6 = ($t4_5 !== null);
9285          if ($t5_6) {
9286            $block = 1; break;
9287          }
9288          else {
9289            $block = 2; break;
9290          }
9291          break;
9292        }
9293        case 1: {
9294          return [null, $t4_5];
9295          break;
9296        }
9297        case 2: {
9298          $t6_7 = { $get() { return $t0_1.$get().kemOutput; }, $set(v) { const obj = $t0_1.$get(); obj.kemOutput = v; $t0_1.$set(obj); } };
9299          $t7_8 = $t6_7.$get();
9300          $t8_9 = { $get() { return $t0_1.$get().ciphertext; }, $set(v) { const obj = $t0_1.$get(); obj.ciphertext = v; $t0_1.$set(obj); } };
9301          $t9_10 = $t8_9.$get();
9302          $t10_11 = CipherSuite$decryptWithLabel(cs, nodePriv, 'UpdatePathNode', $t3_4, $t7_8, $t9_10);
9303          $t11_12 = $t10_11[0];
9304          $t12_13 = $t10_11[1];
9305          return [$t11_12, $t12_13];
9306          break;
9307        }
9308      }
9309    }
9310  }
9311  
9312  export function nodePrivFromPathSecret(cs, pathSecret, nodePub) {
9313    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
9314    let $block = 0;
9315    while (true) {
9316      switch ($block) {
9317        case 0: {
9318          $t0_1 = CipherSuite$deriveSecret(cs, pathSecret, 'node');
9319          $t1_2 = $t0_1[0];
9320          $t2_3 = $t0_1[1];
9321          $t3_4 = ($t2_3 !== null);
9322          if ($t3_4) {
9323            $block = 1; break;
9324          }
9325          else {
9326            $block = 2; break;
9327          }
9328          break;
9329        }
9330        case 1: {
9331          return [null, $t2_3];
9332          break;
9333        }
9334        case 2: {
9335          $t4_5 = CipherSuite$deriveEncryptionKeyPair(cs, $t1_2);
9336          $t5_6 = $t4_5[0];
9337          $t6_7 = $t4_5[1];
9338          $t7_8 = $t4_5[2];
9339          $t8_9 = ($t7_8 !== null);
9340          if ($t8_9) {
9341            $block = 3; break;
9342          }
9343          else {
9344            $block = 4; break;
9345          }
9346          break;
9347        }
9348        case 3: {
9349          return [null, $t7_8];
9350          break;
9351        }
9352        case 4: {
9353          $t9_10 = $t5_6;
9354          $t10_11 = nodePub;
9355          $t11_12 = bytesEqual($t9_10, $t10_11);
9356          if ($t11_12) {
9357            $block = 6; break;
9358          }
9359          else {
9360            $block = 5; break;
9361          }
9362          break;
9363        }
9364        case 5: {
9365          $t12_13 = errNodeKeyMismatch.$get();
9366          return [null, $t12_13];
9367          break;
9368        }
9369        case 6: {
9370          return [$t6_7, null];
9371          break;
9372        }
9373      }
9374    }
9375  }
9376  
9377  export function numLeavesFromWidth(w) {
9378    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
9379    let $block = 0;
9380    while (true) {
9381      switch ($block) {
9382        case 0: {
9383          $t0_1 = (w === 0);
9384          if ($t0_1) {
9385            $block = 1; break;
9386          }
9387          else {
9388            $block = 2; break;
9389          }
9390          break;
9391        }
9392        case 1: {
9393          return 0;
9394          break;
9395        }
9396        case 2: {
9397          $t1_2 = ((w - 1) >>> 0);
9398          $t2_3 = ((Math.trunc($t1_2 / 2)) >>> 0);
9399          $t3_4 = (($t2_3 + 1) >>> 0);
9400          $t4_5 = ($t3_4 >>> 0);
9401          return $t4_5;
9402          break;
9403        }
9404      }
9405    }
9406  }
9407  
9408  export function commonAncestor(x, y) {
9409    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24;
9410    let $block = 0;
9411    while (true) {
9412      switch ($block) {
9413        case 0: {
9414          $t0_1 = nodeIndex$level(x);
9415          $t1_2 = (($t0_1 + 1) >>> 0);
9416          $t2_3 = nodeIndex$level(y);
9417          $t3_4 = (($t2_3 + 1) >>> 0);
9418          $t4_5 = ($t1_2 <= $t3_4);
9419          if ($t4_5) {
9420            $block = 3; break;
9421          }
9422          else {
9423            $block = 2; break;
9424          }
9425          break;
9426        }
9427        case 1: {
9428          return y;
9429          break;
9430        }
9431        case 2: {
9432          $t5_6 = ($t3_4 <= $t1_2);
9433          if ($t5_6) {
9434            $block = 6; break;
9435          }
9436          else {
9437            $block = 5; break;
9438          }
9439          break;
9440        }
9441        case 3: {
9442          $t6_7 = (x >>> $t3_4);
9443          $t7_8 = (y >>> $t3_4);
9444          $t8_9 = ($t6_7 === $t7_8);
9445          if ($t8_9) {
9446            $block = 1; break;
9447          }
9448          else {
9449            $block = 2; break;
9450          }
9451          break;
9452        }
9453        case 4: {
9454          return x;
9455          break;
9456        }
9457        case 5: {
9458          $t20_21 = x;
9459          $t21_22 = y;
9460          $t22_23 = 0;
9461          $block = 9; break;
9462          break;
9463        }
9464        case 6: {
9465          $t9_10 = (x >>> $t1_2);
9466          $t10_11 = (y >>> $t1_2);
9467          $t11_12 = ($t9_10 === $t10_11);
9468          if ($t11_12) {
9469            $block = 4; break;
9470          }
9471          else {
9472            $block = 5; break;
9473          }
9474          break;
9475        }
9476        case 7: {
9477          $t12_13 = ($t20_21 >>> 1);
9478          $t13_14 = ($t21_22 >>> 1);
9479          $t14_15 = (($t22_23 + 1) >>> 0);
9480          $t20_21 = $t12_13;
9481          $t21_22 = $t13_14;
9482          $t22_23 = $t14_15;
9483          $block = 9; break;
9484          break;
9485        }
9486        case 8: {
9487          $t15_16 = (($t20_21 << $t22_23) >>> 0);
9488          $t16_17 = (($t22_23 - 1) >>> 0);
9489          $t17_18 = ((1 << $t16_17) >>> 0);
9490          $t18_19 = (($t15_16 + $t17_18) >>> 0);
9491          $t19_20 = (($t18_19 - 1) >>> 0);
9492          return $t19_20;
9493          break;
9494        }
9495        case 9: {
9496          $t23_24 = ($t20_21 !== $t21_22);
9497          if ($t23_24) {
9498            $block = 7; break;
9499          }
9500          else {
9501            $block = 8; break;
9502          }
9503          break;
9504        }
9505      }
9506    }
9507  }
9508  
9509  export function log2(x) {
9510    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
9511    let $block = 0;
9512    while (true) {
9513      switch ($block) {
9514        case 0: {
9515          $t0_1 = (x === 0);
9516          if ($t0_1) {
9517            $block = 1; break;
9518          }
9519          else {
9520            $block = 2; break;
9521          }
9522          break;
9523        }
9524        case 1: {
9525          return 0;
9526          break;
9527        }
9528        case 2: {
9529          $t3_4 = 0;
9530          $block = 5; break;
9531          break;
9532        }
9533        case 3: {
9534          $t1_2 = (($t3_4 + 1) >>> 0);
9535          $t3_4 = $t1_2;
9536          $block = 5; break;
9537          break;
9538        }
9539        case 4: {
9540          $t2_3 = (($t3_4 - 1) >>> 0);
9541          return $t2_3;
9542          break;
9543        }
9544        case 5: {
9545          $t4_5 = (x >>> $t3_4);
9546          $t5_6 = ($t4_5 > 0);
9547          if ($t5_6) {
9548            $block = 3; break;
9549          }
9550          else {
9551            $block = 4; break;
9552          }
9553          break;
9554        }
9555      }
9556    }
9557  }
9558  
9559  export function isPowerOf2(x) {
9560    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
9561    let $block = 0;
9562    while (true) {
9563      switch ($block) {
9564        case 0: {
9565          $t0_1 = (x !== 0);
9566          if ($t0_1) {
9567            $block = 1; break;
9568          }
9569          else {
9570            $t4_5 = false;
9571            $block = 2; break;
9572          }
9573          break;
9574        }
9575        case 1: {
9576          $t1_2 = ((x - 1) >>> 0);
9577          $t2_3 = ((x & $t1_2) >>> 0);
9578          $t3_4 = ($t2_3 === 0);
9579          $t4_5 = $t3_4;
9580          $block = 2; break;
9581          break;
9582        }
9583        case 2: {
9584          return $t4_5;
9585          break;
9586        }
9587      }
9588    }
9589  }
9590  
9591  export function NewBasicCredential(identity) {
9592    let $t0_1, $t1_2, $t2_3;
9593    $t0_1 = { $value: { credentialType: 0, identity: null, certificates: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
9594    $t1_2 = { $get() { return $t0_1.$get().credentialType; }, $set(v) { const obj = $t0_1.$get(); obj.credentialType = v; $t0_1.$set(obj); } };
9595    $t2_3 = { $get() { return $t0_1.$get().identity; }, $set(v) { const obj = $t0_1.$get(); obj.identity = v; $t0_1.$set(obj); } };
9596    $t1_2.$set(1);
9597    $t2_3.$set(identity);
9598    return $t0_1;
9599  }
9600  
9601  export function hpkeSealer$seal(s, plaintext, aad) {
9602    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
9603    $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
9604    $t1_2 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
9605    $t2_3 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
9606    $t3_4 = { $get() { return s.$get().key; }, $set(v) { const obj = s.$get(); obj.key = v; s.$set(obj); } };
9607    $t4_5 = $t3_4.$get();
9608    $t5_6 = $rt.builtin.copy($t2_3, $t4_5);
9609    $t6_7 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
9610    $t7_8 = { $get() { return s.$get().nonce; }, $set(v) { const obj = s.$get(); obj.nonce = v; s.$set(obj); } };
9611    $t8_9 = $t7_8.$get();
9612    $t9_10 = $rt.builtin.copy($t6_7, $t8_9);
9613    $t10_11 = $t0_1.$get();
9614    $t11_12 = $t1_2.$get();
9615    $t12_13 = smesh$lol$web$common$crypto$chacha20poly1305.Seal($t10_11, $t11_12, plaintext, aad);
9616    return $t12_13;
9617  }
9618  
9619  $rt.types.getType('smesh.lol/web/common/mls.hpkeSealer')?.methods?.set('seal', hpkeSealer$seal);
9620  export function hpkeOpener$open(o, ciphertext, aad) {
9621    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
9622    $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
9623    $t1_2 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
9624    $t2_3 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
9625    $t3_4 = { $get() { return o.$get().key; }, $set(v) { const obj = o.$get(); obj.key = v; o.$set(obj); } };
9626    $t4_5 = $t3_4.$get();
9627    $t5_6 = $rt.builtin.copy($t2_3, $t4_5);
9628    $t6_7 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
9629    $t7_8 = { $get() { return o.$get().nonce; }, $set(v) { const obj = o.$get(); obj.nonce = v; o.$set(obj); } };
9630    $t8_9 = $t7_8.$get();
9631    $t9_10 = $rt.builtin.copy($t6_7, $t8_9);
9632    $t10_11 = $t0_1.$get();
9633    $t11_12 = $t1_2.$get();
9634    $t12_13 = smesh$lol$web$common$crypto$chacha20poly1305.Open($t10_11, $t11_12, ciphertext, aad);
9635    $t13_14 = $t12_13[0];
9636    $t14_15 = $t12_13[1];
9637    return [$t13_14, $t14_15];
9638  }
9639  
9640  $rt.types.getType('smesh.lol/web/common/mls.hpkeOpener')?.methods?.set('open', hpkeOpener$open);
9641  export function Reader$empty(r) {
9642    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
9643    $t0_1 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9644    $t1_2 = $t0_1.$get();
9645    $t2_3 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9646    $t3_4 = $t2_3.$get();
9647    $t4_5 = $rt.builtin.len($t3_4);
9648    $t5_6 = ($t1_2 >= $t4_5);
9649    return $t5_6;
9650  }
9651  
9652  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('empty', Reader$empty);
9653  export function Reader$readByte(r) {
9654    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
9655    let $block = 0;
9656    while (true) {
9657      switch ($block) {
9658        case 0: {
9659          $t0_1 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9660          $t1_2 = $t0_1.$get();
9661          $t2_3 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9662          $t3_4 = $t2_3.$get();
9663          $t4_5 = $rt.builtin.len($t3_4);
9664          $t5_6 = ($t1_2 >= $t4_5);
9665          if ($t5_6) {
9666            $block = 1; break;
9667          }
9668          else {
9669            $block = 2; break;
9670          }
9671          break;
9672        }
9673        case 1: {
9674          return [0, false];
9675          break;
9676        }
9677        case 2: {
9678          $t6_7 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9679          $t7_8 = $t6_7.$get();
9680          $t8_9 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9681          $t9_10 = $t8_9.$get();
9682          $t10_11 = $t7_8.addr($t9_10);
9683          $t11_12 = $t10_11.$get();
9684          $t12_13 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9685          $t13_14 = $t12_13.$get();
9686          $t14_15 = ($t13_14 + 1);
9687          $t15_16 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9688          $t15_16.$set($t14_15);
9689          return [$t11_12, true];
9690          break;
9691        }
9692      }
9693    }
9694  }
9695  
9696  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readByte', Reader$readByte);
9697  export function Reader$readN(r, n) {
9698    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
9699    let $block = 0;
9700    while (true) {
9701      switch ($block) {
9702        case 0: {
9703          $t0_1 = Reader$remaining(r);
9704          $t1_2 = ($t0_1 < n);
9705          if ($t1_2) {
9706            $block = 1; break;
9707          }
9708          else {
9709            $block = 2; break;
9710          }
9711          break;
9712        }
9713        case 1: {
9714          return [null, false];
9715          break;
9716        }
9717        case 2: {
9718          $t2_3 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9719          $t3_4 = $t2_3.$get();
9720          $t4_5 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9721          $t5_6 = $t4_5.$get();
9722          $t6_7 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9723          $t7_8 = $t6_7.$get();
9724          $t8_9 = ($t7_8 + n);
9725          $t9_10 = $rt.builtin.sliceSlice($t3_4, $t5_6, $t8_9, undefined);
9726          $t10_11 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9727          $t11_12 = $t10_11.$get();
9728          $t12_13 = ($t11_12 + n);
9729          $t13_14 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9730          $t13_14.$set($t12_13);
9731          return [$t9_10, true];
9732          break;
9733        }
9734      }
9735    }
9736  }
9737  
9738  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readN', Reader$readN);
9739  export function Reader$readOpaqueVec(r) {
9740    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
9741    let $block = 0;
9742    while (true) {
9743      switch ($block) {
9744        case 0: {
9745          $t0_1 = Reader$readVarint(r);
9746          $t1_2 = $t0_1[0];
9747          $t2_3 = $t0_1[1];
9748          if ($t2_3) {
9749            $block = 2; break;
9750          }
9751          else {
9752            $block = 1; break;
9753          }
9754          break;
9755        }
9756        case 1: {
9757          return [null, false];
9758          break;
9759        }
9760        case 2: {
9761          $t3_4 = $t1_2;
9762          $t4_5 = Reader$readN(r, $t3_4);
9763          $t5_6 = $t4_5[0];
9764          $t6_7 = $t4_5[1];
9765          if ($t6_7) {
9766            $block = 4; break;
9767          }
9768          else {
9769            $block = 3; break;
9770          }
9771          break;
9772        }
9773        case 3: {
9774          return [null, false];
9775          break;
9776        }
9777        case 4: {
9778          $t7_8 = $t1_2;
9779          $t8_9 = $rt.builtin.makeSlice($t7_8, $t7_8, 0);
9780          $t9_10 = $rt.builtin.copy($t8_9, $t5_6);
9781          return [$t8_9, true];
9782          break;
9783        }
9784      }
9785    }
9786  }
9787  
9788  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readOpaqueVec', Reader$readOpaqueVec);
9789  export function Reader$readOptional(r) {
9790    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
9791    let $block = 0;
9792    while (true) {
9793      switch ($block) {
9794        case 0: {
9795          $t0_1 = Reader$readByte(r);
9796          $t1_2 = $t0_1[0];
9797          $t2_3 = $t0_1[1];
9798          if ($t2_3) {
9799            $block = 2; break;
9800          }
9801          else {
9802            $block = 1; break;
9803          }
9804          break;
9805        }
9806        case 1: {
9807          return [false, false];
9808          break;
9809        }
9810        case 2: {
9811          $t3_4 = ($t1_2 === 0);
9812          if ($t3_4) {
9813            $block = 3; break;
9814          }
9815          else {
9816            $block = 5; break;
9817          }
9818          break;
9819        }
9820        case 3: {
9821          return [false, true];
9822          break;
9823        }
9824        case 4: {
9825          return [true, true];
9826          break;
9827        }
9828        case 5: {
9829          $t4_5 = ($t1_2 === 1);
9830          if ($t4_5) {
9831            $block = 4; break;
9832          }
9833          else {
9834            $block = 6; break;
9835          }
9836          break;
9837        }
9838        case 6: {
9839          return [false, false];
9840          break;
9841        }
9842      }
9843    }
9844  }
9845  
9846  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readOptional', Reader$readOptional);
9847  export function Reader$readUint16(r) {
9848    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
9849    let $block = 0;
9850    while (true) {
9851      switch ($block) {
9852        case 0: {
9853          $t0_1 = Reader$remaining(r);
9854          $t1_2 = ($t0_1 < 2);
9855          if ($t1_2) {
9856            $block = 1; break;
9857          }
9858          else {
9859            $block = 2; break;
9860          }
9861          break;
9862        }
9863        case 1: {
9864          return [0, false];
9865          break;
9866        }
9867        case 2: {
9868          $t2_3 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9869          $t3_4 = $t2_3.$get();
9870          $t4_5 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9871          $t5_6 = $t4_5.$get();
9872          $t6_7 = $t3_4.addr($t5_6);
9873          $t7_8 = $t6_7.$get();
9874          $t8_9 = ($t7_8 & 0xFFFF);
9875          $t9_10 = (($t8_9 << 8) & 0xFFFF);
9876          $t10_11 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9877          $t11_12 = $t10_11.$get();
9878          $t12_13 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9879          $t13_14 = $t12_13.$get();
9880          $t14_15 = ($t13_14 + 1);
9881          $t15_16 = $t11_12.addr($t14_15);
9882          $t16_17 = $t15_16.$get();
9883          $t17_18 = ($t16_17 & 0xFFFF);
9884          $t18_19 = (($t9_10 + $t17_18) & 0xFFFF);
9885          $t19_20 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9886          $t20_21 = $t19_20.$get();
9887          $t21_22 = ($t20_21 + 2);
9888          $t22_23 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9889          $t22_23.$set($t21_22);
9890          return [$t18_19, true];
9891          break;
9892        }
9893      }
9894    }
9895  }
9896  
9897  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readUint16', Reader$readUint16);
9898  export function Reader$readUint32(r) {
9899    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43;
9900    let $block = 0;
9901    while (true) {
9902      switch ($block) {
9903        case 0: {
9904          $t0_1 = Reader$remaining(r);
9905          $t1_2 = ($t0_1 < 4);
9906          if ($t1_2) {
9907            $block = 1; break;
9908          }
9909          else {
9910            $block = 2; break;
9911          }
9912          break;
9913        }
9914        case 1: {
9915          return [0, false];
9916          break;
9917        }
9918        case 2: {
9919          $t2_3 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9920          $t3_4 = $t2_3.$get();
9921          $t4_5 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9922          $t5_6 = $t4_5.$get();
9923          $t6_7 = $t3_4.addr($t5_6);
9924          $t7_8 = $t6_7.$get();
9925          $t8_9 = ($t7_8 >>> 0);
9926          $t9_10 = (($t8_9 << 24) >>> 0);
9927          $t10_11 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9928          $t11_12 = $t10_11.$get();
9929          $t12_13 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9930          $t13_14 = $t12_13.$get();
9931          $t14_15 = ($t13_14 + 1);
9932          $t15_16 = $t11_12.addr($t14_15);
9933          $t16_17 = $t15_16.$get();
9934          $t17_18 = ($t16_17 >>> 0);
9935          $t18_19 = (($t17_18 << 16) >>> 0);
9936          $t19_20 = (($t9_10 + $t18_19) >>> 0);
9937          $t20_21 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9938          $t21_22 = $t20_21.$get();
9939          $t22_23 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9940          $t23_24 = $t22_23.$get();
9941          $t24_25 = ($t23_24 + 2);
9942          $t25_26 = $t21_22.addr($t24_25);
9943          $t26_27 = $t25_26.$get();
9944          $t27_28 = ($t26_27 >>> 0);
9945          $t28_29 = (($t27_28 << 8) >>> 0);
9946          $t29_30 = (($t19_20 + $t28_29) >>> 0);
9947          $t30_31 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9948          $t31_32 = $t30_31.$get();
9949          $t32_33 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9950          $t33_34 = $t32_33.$get();
9951          $t34_35 = ($t33_34 + 3);
9952          $t35_36 = $t31_32.addr($t34_35);
9953          $t36_37 = $t35_36.$get();
9954          $t37_38 = ($t36_37 >>> 0);
9955          $t38_39 = (($t29_30 + $t37_38) >>> 0);
9956          $t39_40 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9957          $t40_41 = $t39_40.$get();
9958          $t41_42 = ($t40_41 + 4);
9959          $t42_43 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9960          $t42_43.$set($t41_42);
9961          return [$t38_39, true];
9962          break;
9963        }
9964      }
9965    }
9966  }
9967  
9968  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readUint32', Reader$readUint32);
9969  export function Reader$readUint64(r) {
9970    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83;
9971    let $block = 0;
9972    while (true) {
9973      switch ($block) {
9974        case 0: {
9975          $t0_1 = Reader$remaining(r);
9976          $t1_2 = ($t0_1 < 8);
9977          if ($t1_2) {
9978            $block = 1; break;
9979          }
9980          else {
9981            $block = 2; break;
9982          }
9983          break;
9984        }
9985        case 1: {
9986          return [0n, false];
9987          break;
9988        }
9989        case 2: {
9990          $t2_3 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9991          $t3_4 = $t2_3.$get();
9992          $t4_5 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
9993          $t5_6 = $t4_5.$get();
9994          $t6_7 = $t3_4.addr($t5_6);
9995          $t7_8 = $t6_7.$get();
9996          $t8_9 = BigInt.asUintN(64, BigInt($t7_8));
9997          $t9_10 = BigInt.asUintN(64, $t8_9 << BigInt(56));
9998          $t10_11 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
9999          $t11_12 = $t10_11.$get();
10000          $t12_13 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10001          $t13_14 = $t12_13.$get();
10002          $t14_15 = ($t13_14 + 1);
10003          $t15_16 = $t11_12.addr($t14_15);
10004          $t16_17 = $t15_16.$get();
10005          $t17_18 = BigInt.asUintN(64, BigInt($t16_17));
10006          $t18_19 = BigInt.asUintN(64, $t17_18 << BigInt(48));
10007          $t19_20 = BigInt.asUintN(64, $t9_10 + $t18_19);
10008          $t20_21 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10009          $t21_22 = $t20_21.$get();
10010          $t22_23 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10011          $t23_24 = $t22_23.$get();
10012          $t24_25 = ($t23_24 + 2);
10013          $t25_26 = $t21_22.addr($t24_25);
10014          $t26_27 = $t25_26.$get();
10015          $t27_28 = BigInt.asUintN(64, BigInt($t26_27));
10016          $t28_29 = BigInt.asUintN(64, $t27_28 << BigInt(40));
10017          $t29_30 = BigInt.asUintN(64, $t19_20 + $t28_29);
10018          $t30_31 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10019          $t31_32 = $t30_31.$get();
10020          $t32_33 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10021          $t33_34 = $t32_33.$get();
10022          $t34_35 = ($t33_34 + 3);
10023          $t35_36 = $t31_32.addr($t34_35);
10024          $t36_37 = $t35_36.$get();
10025          $t37_38 = BigInt.asUintN(64, BigInt($t36_37));
10026          $t38_39 = BigInt.asUintN(64, $t37_38 << BigInt(32));
10027          $t39_40 = BigInt.asUintN(64, $t29_30 + $t38_39);
10028          $t40_41 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10029          $t41_42 = $t40_41.$get();
10030          $t42_43 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10031          $t43_44 = $t42_43.$get();
10032          $t44_45 = ($t43_44 + 4);
10033          $t45_46 = $t41_42.addr($t44_45);
10034          $t46_47 = $t45_46.$get();
10035          $t47_48 = BigInt.asUintN(64, BigInt($t46_47));
10036          $t48_49 = BigInt.asUintN(64, $t47_48 << BigInt(24));
10037          $t49_50 = BigInt.asUintN(64, $t39_40 + $t48_49);
10038          $t50_51 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10039          $t51_52 = $t50_51.$get();
10040          $t52_53 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10041          $t53_54 = $t52_53.$get();
10042          $t54_55 = ($t53_54 + 5);
10043          $t55_56 = $t51_52.addr($t54_55);
10044          $t56_57 = $t55_56.$get();
10045          $t57_58 = BigInt.asUintN(64, BigInt($t56_57));
10046          $t58_59 = BigInt.asUintN(64, $t57_58 << BigInt(16));
10047          $t59_60 = BigInt.asUintN(64, $t49_50 + $t58_59);
10048          $t60_61 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10049          $t61_62 = $t60_61.$get();
10050          $t62_63 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10051          $t63_64 = $t62_63.$get();
10052          $t64_65 = ($t63_64 + 6);
10053          $t65_66 = $t61_62.addr($t64_65);
10054          $t66_67 = $t65_66.$get();
10055          $t67_68 = BigInt.asUintN(64, BigInt($t66_67));
10056          $t68_69 = BigInt.asUintN(64, $t67_68 << BigInt(8));
10057          $t69_70 = BigInt.asUintN(64, $t59_60 + $t68_69);
10058          $t70_71 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10059          $t71_72 = $t70_71.$get();
10060          $t72_73 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10061          $t73_74 = $t72_73.$get();
10062          $t74_75 = ($t73_74 + 7);
10063          $t75_76 = $t71_72.addr($t74_75);
10064          $t76_77 = $t75_76.$get();
10065          $t77_78 = BigInt.asUintN(64, BigInt($t76_77));
10066          $t78_79 = BigInt.asUintN(64, $t69_70 + $t77_78);
10067          $t79_80 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10068          $t80_81 = $t79_80.$get();
10069          $t81_82 = ($t80_81 + 8);
10070          $t82_83 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10071          $t82_83.$set($t81_82);
10072          return [$t78_79, true];
10073          break;
10074        }
10075      }
10076    }
10077  }
10078  
10079  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readUint64', Reader$readUint64);
10080  export function Reader$readVarint(r) {
10081    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27;
10082    let $block = 0;
10083    while (true) {
10084      switch ($block) {
10085        case 0: {
10086          $t0_1 = Reader$readByte(r);
10087          $t1_2 = $t0_1[0];
10088          $t2_3 = $t0_1[1];
10089          if ($t2_3) {
10090            $block = 2; break;
10091          }
10092          else {
10093            $block = 1; break;
10094          }
10095          break;
10096        }
10097        case 1: {
10098          return [0, false];
10099          break;
10100        }
10101        case 2: {
10102          $t3_4 = (($t1_2 & 0xFF) >> 6);
10103          $t4_5 = ($t3_4 === 3);
10104          if ($t4_5) {
10105            $block = 3; break;
10106          }
10107          else {
10108            $block = 4; break;
10109          }
10110          break;
10111        }
10112        case 3: {
10113          return [0, false];
10114          break;
10115        }
10116        case 4: {
10117          $t5_6 = $t3_4;
10118          $t6_7 = (1 << $t5_6);
10119          $t7_8 = ($t1_2 & 63);
10120          $t8_9 = ($t7_8 >>> 0);
10121          $t9_10 = $t8_9;
10122          $t10_11 = 0;
10123          $block = 5; break;
10124          break;
10125        }
10126        case 5: {
10127          $t11_12 = ($t6_7 - 1);
10128          $t12_13 = ($t10_11 < $t11_12);
10129          if ($t12_13) {
10130            $block = 6; break;
10131          }
10132          else {
10133            $block = 7; break;
10134          }
10135          break;
10136        }
10137        case 6: {
10138          $t13_14 = Reader$readByte(r);
10139          $t14_15 = $t13_14[0];
10140          $t15_16 = $t13_14[1];
10141          if ($t15_16) {
10142            $block = 9; break;
10143          }
10144          else {
10145            $block = 8; break;
10146          }
10147          break;
10148        }
10149        case 7: {
10150          $t16_17 = ($t3_4 >= 1);
10151          if ($t16_17) {
10152            $block = 12; break;
10153          }
10154          else {
10155            $block = 11; break;
10156          }
10157          break;
10158        }
10159        case 8: {
10160          return [0, false];
10161          break;
10162        }
10163        case 9: {
10164          $t17_18 = (($t9_10 << 8) >>> 0);
10165          $t18_19 = ($t14_15 >>> 0);
10166          $t19_20 = (($t17_18 + $t18_19) >>> 0);
10167          $t20_21 = ($t10_11 + 1);
10168          $t9_10 = $t19_20;
10169          $t10_11 = $t20_21;
10170          $block = 5; break;
10171          break;
10172        }
10173        case 10: {
10174          return [0, false];
10175          break;
10176        }
10177        case 11: {
10178          return [$t9_10, true];
10179          break;
10180        }
10181        case 12: {
10182          $t21_22 = Math.trunc($t6_7 / 2);
10183          $t22_23 = (8 * $t21_22);
10184          $t23_24 = ($t22_23 - 2);
10185          $t24_25 = ($t23_24 >>> 0);
10186          $t25_26 = ((1 << $t24_25) >>> 0);
10187          $t26_27 = ($t9_10 < $t25_26);
10188          if ($t26_27) {
10189            $block = 10; break;
10190          }
10191          else {
10192            $block = 11; break;
10193          }
10194          break;
10195        }
10196      }
10197    }
10198  }
10199  
10200  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readVarint', Reader$readVarint);
10201  export function Reader$readVector(r, f) {
10202    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
10203    let $block = 0;
10204    while (true) {
10205      switch ($block) {
10206        case 0: {
10207          $t0_1 = Reader$readVarint(r);
10208          $t1_2 = $t0_1[0];
10209          $t2_3 = $t0_1[1];
10210          if ($t2_3) {
10211            $block = 2; break;
10212          }
10213          else {
10214            $block = 1; break;
10215          }
10216          break;
10217        }
10218        case 1: {
10219          $t3_4 = errUnexpectedEOF.$get();
10220          return $t3_4;
10221          break;
10222        }
10223        case 2: {
10224          $t4_5 = $t1_2;
10225          $t5_6 = Reader$readN(r, $t4_5);
10226          $t6_7 = $t5_6[0];
10227          $t7_8 = $t5_6[1];
10228          if ($t7_8) {
10229            $block = 4; break;
10230          }
10231          else {
10232            $block = 3; break;
10233          }
10234          break;
10235        }
10236        case 3: {
10237          $t8_9 = errUnexpectedEOF.$get();
10238          return $t8_9;
10239          break;
10240        }
10241        case 4: {
10242          $t9_10 = { $value: { data: null, pos: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
10243          $t10_11 = newReader($t6_7);
10244          $t9_10.$set($rt.builtin.cloneValue($t10_11));
10245          $block = 7; break;
10246          break;
10247        }
10248        case 5: {
10249          $t11_12 = f($t9_10);
10250          $t12_13 = ($t11_12 !== null);
10251          if ($t12_13) {
10252            $block = 8; break;
10253          }
10254          else {
10255            $block = 7; break;
10256          }
10257          break;
10258        }
10259        case 6: {
10260          return null;
10261          break;
10262        }
10263        case 7: {
10264          $t13_14 = Reader$empty($t9_10);
10265          if ($t13_14) {
10266            $block = 6; break;
10267          }
10268          else {
10269            $block = 5; break;
10270          }
10271          break;
10272        }
10273        case 8: {
10274          return $t11_12;
10275          break;
10276        }
10277      }
10278    }
10279  }
10280  
10281  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('readVector', Reader$readVector);
10282  export function Reader$remaining(r) {
10283    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
10284    $t0_1 = { $get() { return r.$get().data; }, $set(v) { const obj = r.$get(); obj.data = v; r.$set(obj); } };
10285    $t1_2 = $t0_1.$get();
10286    $t2_3 = $rt.builtin.len($t1_2);
10287    $t3_4 = { $get() { return r.$get().pos; }, $set(v) { const obj = r.$get(); obj.pos = v; r.$set(obj); } };
10288    $t4_5 = $t3_4.$get();
10289    $t5_6 = ($t2_3 - $t4_5);
10290    return $t5_6;
10291  }
10292  
10293  $rt.types.getType('smesh.lol/web/common/mls.Reader')?.methods?.set('remaining', Reader$remaining);
10294  export function Writer$addByte(w, v) {
10295    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
10296    let $block = 0;
10297    while (true) {
10298      switch ($block) {
10299        case 0: {
10300          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10301          $t1_2 = $t0_1.$get();
10302          $t2_3 = ($t1_2 !== null);
10303          if ($t2_3) {
10304            $block = 1; break;
10305          }
10306          else {
10307            $block = 2; break;
10308          }
10309          break;
10310        }
10311        case 1: {
10312          return;
10313          break;
10314        }
10315        case 2: {
10316          $t3_4 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10317          $t4_5 = $t3_4.$get();
10318          $t5_6 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10319          $t6_7 = $t5_6.$get().addr(0);
10320          $t6_7.$set(v);
10321          $t7_8 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
10322          $t8_9 = $rt.builtin.appendSlice($t4_5, $t7_8);
10323          $t9_10 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10324          $t9_10.$set($t8_9);
10325          return;
10326          break;
10327        }
10328      }
10329    }
10330  }
10331  
10332  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('addByte', Writer$addByte);
10333  export function Writer$addBytes(w, v) {
10334    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
10335    let $block = 0;
10336    while (true) {
10337      switch ($block) {
10338        case 0: {
10339          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10340          $t1_2 = $t0_1.$get();
10341          $t2_3 = ($t1_2 !== null);
10342          if ($t2_3) {
10343            $block = 1; break;
10344          }
10345          else {
10346            $block = 2; break;
10347          }
10348          break;
10349        }
10350        case 1: {
10351          return;
10352          break;
10353        }
10354        case 2: {
10355          $t3_4 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10356          $t4_5 = $t3_4.$get();
10357          $t5_6 = $rt.builtin.appendSlice($t4_5, v);
10358          $t6_7 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10359          $t6_7.$set($t5_6);
10360          return;
10361          break;
10362        }
10363      }
10364    }
10365  }
10366  
10367  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('addBytes', Writer$addBytes);
10368  export function Writer$addUint16(w, v) {
10369    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
10370    let $block = 0;
10371    while (true) {
10372      switch ($block) {
10373        case 0: {
10374          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10375          $t1_2 = $t0_1.$get();
10376          $t2_3 = ($t1_2 !== null);
10377          if ($t2_3) {
10378            $block = 1; break;
10379          }
10380          else {
10381            $block = 2; break;
10382          }
10383          break;
10384        }
10385        case 1: {
10386          return;
10387          break;
10388        }
10389        case 2: {
10390          $t3_4 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10391          $t4_5 = $t3_4.$get();
10392          $t5_6 = ((v & 0xFFFF) >> 8);
10393          $t6_7 = ($t5_6 & 0xFF);
10394          $t7_8 = (v & 0xFF);
10395          $t8_9 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10396          $t9_10 = $t8_9.$get().addr(0);
10397          $t9_10.$set($t6_7);
10398          $t10_11 = $t8_9.$get().addr(1);
10399          $t10_11.$set($t7_8);
10400          $t11_12 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
10401          $t12_13 = $rt.builtin.appendSlice($t4_5, $t11_12);
10402          $t13_14 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10403          $t13_14.$set($t12_13);
10404          return;
10405          break;
10406        }
10407      }
10408    }
10409  }
10410  
10411  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('addUint16', Writer$addUint16);
10412  export function Writer$addUint32(w, v) {
10413    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
10414    let $block = 0;
10415    while (true) {
10416      switch ($block) {
10417        case 0: {
10418          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10419          $t1_2 = $t0_1.$get();
10420          $t2_3 = ($t1_2 !== null);
10421          if ($t2_3) {
10422            $block = 1; break;
10423          }
10424          else {
10425            $block = 2; break;
10426          }
10427          break;
10428        }
10429        case 1: {
10430          return;
10431          break;
10432        }
10433        case 2: {
10434          $t3_4 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10435          $t4_5 = $t3_4.$get();
10436          $t5_6 = (v >>> 24);
10437          $t6_7 = ($t5_6 & 0xFF);
10438          $t7_8 = (v >>> 16);
10439          $t8_9 = ($t7_8 & 0xFF);
10440          $t9_10 = (v >>> 8);
10441          $t10_11 = ($t9_10 & 0xFF);
10442          $t11_12 = (v & 0xFF);
10443          $t12_13 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10444          $t13_14 = $t12_13.$get().addr(0);
10445          $t13_14.$set($t6_7);
10446          $t14_15 = $t12_13.$get().addr(1);
10447          $t14_15.$set($t8_9);
10448          $t15_16 = $t12_13.$get().addr(2);
10449          $t15_16.$set($t10_11);
10450          $t16_17 = $t12_13.$get().addr(3);
10451          $t16_17.$set($t11_12);
10452          $t17_18 = $rt.builtin.sliceSlice($t12_13.$get(), undefined, undefined, undefined);
10453          $t18_19 = $rt.builtin.appendSlice($t4_5, $t17_18);
10454          $t19_20 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10455          $t19_20.$set($t18_19);
10456          return;
10457          break;
10458        }
10459      }
10460    }
10461  }
10462  
10463  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('addUint32', Writer$addUint32);
10464  export function Writer$addUint64(w, v) {
10465    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32;
10466    let $block = 0;
10467    while (true) {
10468      switch ($block) {
10469        case 0: {
10470          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10471          $t1_2 = $t0_1.$get();
10472          $t2_3 = ($t1_2 !== null);
10473          if ($t2_3) {
10474            $block = 1; break;
10475          }
10476          else {
10477            $block = 2; break;
10478          }
10479          break;
10480        }
10481        case 1: {
10482          return;
10483          break;
10484        }
10485        case 2: {
10486          $t3_4 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10487          $t4_5 = $t3_4.$get();
10488          $t5_6 = (v >> BigInt(56));
10489          $t6_7 = (Number($t5_6) & 0xFF);
10490          $t7_8 = (v >> BigInt(48));
10491          $t8_9 = (Number($t7_8) & 0xFF);
10492          $t9_10 = (v >> BigInt(40));
10493          $t10_11 = (Number($t9_10) & 0xFF);
10494          $t11_12 = (v >> BigInt(32));
10495          $t12_13 = (Number($t11_12) & 0xFF);
10496          $t13_14 = (v >> BigInt(24));
10497          $t14_15 = (Number($t13_14) & 0xFF);
10498          $t15_16 = (v >> BigInt(16));
10499          $t16_17 = (Number($t15_16) & 0xFF);
10500          $t17_18 = (v >> BigInt(8));
10501          $t18_19 = (Number($t17_18) & 0xFF);
10502          $t19_20 = (Number(v) & 0xFF);
10503          $t20_21 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10504          $t21_22 = $t20_21.$get().addr(0);
10505          $t21_22.$set($t6_7);
10506          $t22_23 = $t20_21.$get().addr(1);
10507          $t22_23.$set($t8_9);
10508          $t23_24 = $t20_21.$get().addr(2);
10509          $t23_24.$set($t10_11);
10510          $t24_25 = $t20_21.$get().addr(3);
10511          $t24_25.$set($t12_13);
10512          $t25_26 = $t20_21.$get().addr(4);
10513          $t25_26.$set($t14_15);
10514          $t26_27 = $t20_21.$get().addr(5);
10515          $t26_27.$set($t16_17);
10516          $t27_28 = $t20_21.$get().addr(6);
10517          $t27_28.$set($t18_19);
10518          $t28_29 = $t20_21.$get().addr(7);
10519          $t28_29.$set($t19_20);
10520          $t29_30 = $rt.builtin.sliceSlice($t20_21.$get(), undefined, undefined, undefined);
10521          $t30_31 = $rt.builtin.appendSlice($t4_5, $t29_30);
10522          $t31_32 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10523          $t31_32.$set($t30_31);
10524          return;
10525          break;
10526        }
10527      }
10528    }
10529  }
10530  
10531  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('addUint64', Writer$addUint64);
10532  export function Writer$bytes(w) {
10533    let $t0_1, $t1_2, $t2_3, $t3_4;
10534    $t0_1 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10535    $t1_2 = $t0_1.$get();
10536    $t2_3 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10537    $t3_4 = $t2_3.$get();
10538    return [$t1_2, $t3_4];
10539  }
10540  
10541  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('bytes', Writer$bytes);
10542  export function Writer$setError(w, err) {
10543    let $t0_1, $t1_2, $t2_3, $t3_4;
10544    let $block = 0;
10545    while (true) {
10546      switch ($block) {
10547        case 0: {
10548          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10549          $t1_2 = $t0_1.$get();
10550          $t2_3 = ($t1_2 === null);
10551          if ($t2_3) {
10552            $block = 1; break;
10553          }
10554          else {
10555            $block = 2; break;
10556          }
10557          break;
10558        }
10559        case 1: {
10560          $t3_4 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10561          $t3_4.$set(err);
10562          $block = 2; break;
10563          break;
10564        }
10565        case 2: {
10566          return;
10567          break;
10568        }
10569      }
10570    }
10571  }
10572  
10573  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('setError', Writer$setError);
10574  export function Writer$writeOpaqueVec(w, data) {
10575    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
10576    let $block = 0;
10577    while (true) {
10578      switch ($block) {
10579        case 0: {
10580          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10581          $t1_2 = $t0_1.$get();
10582          $t2_3 = ($t1_2 !== null);
10583          if ($t2_3) {
10584            $block = 1; break;
10585          }
10586          else {
10587            $block = 2; break;
10588          }
10589          break;
10590        }
10591        case 1: {
10592          return;
10593          break;
10594        }
10595        case 2: {
10596          $t3_4 = $rt.builtin.len(data);
10597          $t4_5 = ($t3_4 >>> 0);
10598          $t5_6 = Writer$writeVarint(w, $t4_5);
10599          $t6_7 = Writer$addBytes(w, data);
10600          return;
10601          break;
10602        }
10603      }
10604    }
10605  }
10606  
10607  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('writeOpaqueVec', Writer$writeOpaqueVec);
10608  export function Writer$writeOptional(w, present) {
10609    let $t0_1, $t1_2;
10610    let $block = 0;
10611    while (true) {
10612      switch ($block) {
10613        case 0: {
10614          if (present) {
10615            $block = 1; break;
10616          }
10617          else {
10618            $block = 3; break;
10619          }
10620          break;
10621        }
10622        case 1: {
10623          $t0_1 = Writer$addByte(w, 1);
10624          $block = 2; break;
10625          break;
10626        }
10627        case 2: {
10628          return;
10629          break;
10630        }
10631        case 3: {
10632          $t1_2 = Writer$addByte(w, 0);
10633          $block = 2; break;
10634          break;
10635        }
10636      }
10637    }
10638  }
10639  
10640  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('writeOptional', Writer$writeOptional);
10641  export function Writer$writeVarint(w, n) {
10642    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46;
10643    let $block = 0;
10644    while (true) {
10645      switch ($block) {
10646        case 0: {
10647          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10648          $t1_2 = $t0_1.$get();
10649          $t2_3 = ($t1_2 !== null);
10650          if ($t2_3) {
10651            $block = 1; break;
10652          }
10653          else {
10654            $block = 2; break;
10655          }
10656          break;
10657        }
10658        case 1: {
10659          return;
10660          break;
10661        }
10662        case 2: {
10663          $t3_4 = (n < 64);
10664          if ($t3_4) {
10665            $block = 4; break;
10666          }
10667          else {
10668            $block = 6; break;
10669          }
10670          break;
10671        }
10672        case 3: {
10673          return;
10674          break;
10675        }
10676        case 4: {
10677          $t4_5 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10678          $t5_6 = $t4_5.$get();
10679          $t6_7 = (n & 0xFF);
10680          $t7_8 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10681          $t8_9 = $t7_8.$get().addr(0);
10682          $t8_9.$set($t6_7);
10683          $t9_10 = $rt.builtin.sliceSlice($t7_8.$get(), undefined, undefined, undefined);
10684          $t10_11 = $rt.builtin.appendSlice($t5_6, $t9_10);
10685          $t11_12 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10686          $t11_12.$set($t10_11);
10687          $block = 3; break;
10688          break;
10689        }
10690        case 5: {
10691          $t12_13 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10692          $t13_14 = $t12_13.$get();
10693          $t14_15 = (n >>> 8);
10694          $t15_16 = ($t14_15 & 0xFF);
10695          $t16_17 = ((64 + $t15_16) & 0xFF);
10696          $t17_18 = (n & 0xFF);
10697          $t18_19 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10698          $t19_20 = $t18_19.$get().addr(0);
10699          $t19_20.$set($t16_17);
10700          $t20_21 = $t18_19.$get().addr(1);
10701          $t20_21.$set($t17_18);
10702          $t21_22 = $rt.builtin.sliceSlice($t18_19.$get(), undefined, undefined, undefined);
10703          $t22_23 = $rt.builtin.appendSlice($t13_14, $t21_22);
10704          $t23_24 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10705          $t23_24.$set($t22_23);
10706          $block = 3; break;
10707          break;
10708        }
10709        case 6: {
10710          $t24_25 = (n < 16384);
10711          if ($t24_25) {
10712            $block = 5; break;
10713          }
10714          else {
10715            $block = 8; break;
10716          }
10717          break;
10718        }
10719        case 7: {
10720          $t25_26 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10721          $t26_27 = $t25_26.$get();
10722          $t27_28 = (n >>> 24);
10723          $t28_29 = ($t27_28 & 0xFF);
10724          $t29_30 = ((128 + $t28_29) & 0xFF);
10725          $t30_31 = (n >>> 16);
10726          $t31_32 = ($t30_31 & 0xFF);
10727          $t32_33 = (n >>> 8);
10728          $t33_34 = ($t32_33 & 0xFF);
10729          $t34_35 = (n & 0xFF);
10730          $t35_36 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
10731          $t36_37 = $t35_36.$get().addr(0);
10732          $t36_37.$set($t29_30);
10733          $t37_38 = $t35_36.$get().addr(1);
10734          $t37_38.$set($t31_32);
10735          $t38_39 = $t35_36.$get().addr(2);
10736          $t38_39.$set($t33_34);
10737          $t39_40 = $t35_36.$get().addr(3);
10738          $t39_40.$set($t34_35);
10739          $t40_41 = $rt.builtin.sliceSlice($t35_36.$get(), undefined, undefined, undefined);
10740          $t41_42 = $rt.builtin.appendSlice($t26_27, $t40_41);
10741          $t42_43 = { $get() { return w.$get().buf; }, $set(v) { const obj = w.$get(); obj.buf = v; w.$set(obj); } };
10742          $t42_43.$set($t41_42);
10743          $block = 3; break;
10744          break;
10745        }
10746        case 8: {
10747          $t43_44 = (n < 1073741824);
10748          if ($t43_44) {
10749            $block = 7; break;
10750          }
10751          else {
10752            $block = 9; break;
10753          }
10754          break;
10755        }
10756        case 9: {
10757          $t44_45 = errVarintOverflow.$get();
10758          $t45_46 = Writer$setError(w, $t44_45);
10759          $block = 3; break;
10760          break;
10761        }
10762      }
10763    }
10764  }
10765  
10766  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('writeVarint', Writer$writeVarint);
10767  export function Writer$writeVector(w, n, f) {
10768    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
10769    let $block = 0;
10770    while (true) {
10771      switch ($block) {
10772        case 0: {
10773          $t0_1 = { $get() { return w.$get().err; }, $set(v) { const obj = w.$get(); obj.err = v; w.$set(obj); } };
10774          $t1_2 = $t0_1.$get();
10775          $t2_3 = ($t1_2 !== null);
10776          if ($t2_3) {
10777            $block = 1; break;
10778          }
10779          else {
10780            $block = 2; break;
10781          }
10782          break;
10783        }
10784        case 1: {
10785          return;
10786          break;
10787        }
10788        case 2: {
10789          $t3_4 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
10790          $t4_5 = 0;
10791          $block = 3; break;
10792          break;
10793        }
10794        case 3: {
10795          $t5_6 = ($t4_5 < n);
10796          if ($t5_6) {
10797            $block = 4; break;
10798          }
10799          else {
10800            $block = 5; break;
10801          }
10802          break;
10803        }
10804        case 4: {
10805          $t6_7 = f($t3_4, $t4_5);
10806          $t7_8 = { $get() { return $t3_4.$get().err; }, $set(v) { const obj = $t3_4.$get(); obj.err = v; $t3_4.$set(obj); } };
10807          $t8_9 = $t7_8.$get();
10808          $t9_10 = ($t8_9 !== null);
10809          if ($t9_10) {
10810            $block = 6; break;
10811          }
10812          else {
10813            $block = 7; break;
10814          }
10815          break;
10816        }
10817        case 5: {
10818          $t10_11 = { $get() { return $t3_4.$get().buf; }, $set(v) { const obj = $t3_4.$get(); obj.buf = v; $t3_4.$set(obj); } };
10819          $t11_12 = $t10_11.$get();
10820          $t12_13 = Writer$writeOpaqueVec(w, $t11_12);
10821          return;
10822          break;
10823        }
10824        case 6: {
10825          $t13_14 = { $get() { return $t3_4.$get().err; }, $set(v) { const obj = $t3_4.$get(); obj.err = v; $t3_4.$set(obj); } };
10826          $t14_15 = $t13_14.$get();
10827          $t15_16 = Writer$setError(w, $t14_15);
10828          return;
10829          break;
10830        }
10831        case 7: {
10832          $t16_17 = ($t4_5 + 1);
10833          $t4_5 = $t16_17;
10834          $block = 3; break;
10835          break;
10836        }
10837      }
10838    }
10839  }
10840  
10841  $rt.types.getType('smesh.lol/web/common/mls.Writer')?.methods?.set('writeVector', Writer$writeVector);
10842  export function contentType$marshal(ct, w) {
10843    let $t0_1, $t1_2;
10844    $t0_1 = ct;
10845    $t1_2 = Writer$addByte(w, $t0_1);
10846    return;
10847  }
10848  
10849  $rt.types.getType('smesh.lol/web/common/mls.contentType')?.methods?.set('marshal', contentType$marshal);
10850  export function contentType$unmarshal(ct, r) {
10851    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
10852    let $block = 0;
10853    while (true) {
10854      switch ($block) {
10855        case 0: {
10856          $t0_1 = Reader$readByte(r);
10857          $t1_2 = $t0_1[0];
10858          $t2_3 = $t0_1[1];
10859          if ($t2_3) {
10860            $block = 2; break;
10861          }
10862          else {
10863            $block = 1; break;
10864          }
10865          break;
10866        }
10867        case 1: {
10868          $t3_4 = errUnexpectedEOF.$get();
10869          return $t3_4;
10870          break;
10871        }
10872        case 2: {
10873          $t4_5 = $t1_2;
10874          ct.$set($t4_5);
10875          $t5_6 = ct.$get();
10876          $t6_7 = ($t5_6 === 1);
10877          if ($t6_7) {
10878            $block = 3; break;
10879          }
10880          else {
10881            $block = 4; break;
10882          }
10883          break;
10884        }
10885        case 3: {
10886          return null;
10887          break;
10888        }
10889        case 4: {
10890          $t7_8 = ($t5_6 === 2);
10891          if ($t7_8) {
10892            $block = 3; break;
10893          }
10894          else {
10895            $block = 5; break;
10896          }
10897          break;
10898        }
10899        case 5: {
10900          $t8_9 = ($t5_6 === 3);
10901          if ($t8_9) {
10902            $block = 3; break;
10903          }
10904          else {
10905            $block = 6; break;
10906          }
10907          break;
10908        }
10909        case 6: {
10910          $t9_10 = errInvalidContentType.$get();
10911          return $t9_10;
10912          break;
10913        }
10914      }
10915    }
10916  }
10917  
10918  $rt.types.getType('smesh.lol/web/common/mls.contentType')?.methods?.set('unmarshal', contentType$unmarshal);
10919  export function senderType$marshal(st, w) {
10920    let $t0_1, $t1_2;
10921    $t0_1 = st;
10922    $t1_2 = Writer$addByte(w, $t0_1);
10923    return;
10924  }
10925  
10926  $rt.types.getType('smesh.lol/web/common/mls.senderType')?.methods?.set('marshal', senderType$marshal);
10927  export function senderType$unmarshal(st, r) {
10928    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
10929    let $block = 0;
10930    while (true) {
10931      switch ($block) {
10932        case 0: {
10933          $t0_1 = Reader$readByte(r);
10934          $t1_2 = $t0_1[0];
10935          $t2_3 = $t0_1[1];
10936          if ($t2_3) {
10937            $block = 2; break;
10938          }
10939          else {
10940            $block = 1; break;
10941          }
10942          break;
10943        }
10944        case 1: {
10945          $t3_4 = errUnexpectedEOF.$get();
10946          return $t3_4;
10947          break;
10948        }
10949        case 2: {
10950          $t4_5 = $t1_2;
10951          st.$set($t4_5);
10952          $t5_6 = st.$get();
10953          $t6_7 = ($t5_6 === 1);
10954          if ($t6_7) {
10955            $block = 3; break;
10956          }
10957          else {
10958            $block = 4; break;
10959          }
10960          break;
10961        }
10962        case 3: {
10963          return null;
10964          break;
10965        }
10966        case 4: {
10967          $t7_8 = ($t5_6 === 2);
10968          if ($t7_8) {
10969            $block = 3; break;
10970          }
10971          else {
10972            $block = 5; break;
10973          }
10974          break;
10975        }
10976        case 5: {
10977          $t8_9 = ($t5_6 === 3);
10978          if ($t8_9) {
10979            $block = 3; break;
10980          }
10981          else {
10982            $block = 6; break;
10983          }
10984          break;
10985        }
10986        case 6: {
10987          $t9_10 = ($t5_6 === 4);
10988          if ($t9_10) {
10989            $block = 3; break;
10990          }
10991          else {
10992            $block = 7; break;
10993          }
10994          break;
10995        }
10996        case 7: {
10997          $t10_11 = errInvalidSenderType.$get();
10998          return $t10_11;
10999          break;
11000        }
11001      }
11002    }
11003  }
11004  
11005  $rt.types.getType('smesh.lol/web/common/mls.senderType')?.methods?.set('unmarshal', senderType$unmarshal);
11006  export function sender$marshal(snd, w) {
11007    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
11008    let $block = 0;
11009    while (true) {
11010      switch ($block) {
11011        case 0: {
11012          $t0_1 = { $get() { return snd.$get().senderType; }, $set(v) { const obj = snd.$get(); obj.senderType = v; snd.$set(obj); } };
11013          $t1_2 = $t0_1.$get();
11014          $t2_3 = senderType$marshal($t1_2, w);
11015          $t3_4 = { $get() { return snd.$get().senderType; }, $set(v) { const obj = snd.$get(); obj.senderType = v; snd.$set(obj); } };
11016          $t4_5 = $t3_4.$get();
11017          $t5_6 = ($t4_5 === 1);
11018          if ($t5_6) {
11019            $block = 2; break;
11020          }
11021          else {
11022            $block = 4; break;
11023          }
11024          break;
11025        }
11026        case 1: {
11027          return;
11028          break;
11029        }
11030        case 2: {
11031          $t6_7 = { $get() { return snd.$get().leafIndex; }, $set(v) { const obj = snd.$get(); obj.leafIndex = v; snd.$set(obj); } };
11032          $t7_8 = $t6_7.$get();
11033          $t8_9 = $t7_8;
11034          $t9_10 = Writer$addUint32(w, $t8_9);
11035          $block = 1; break;
11036          break;
11037        }
11038        case 3: {
11039          $t10_11 = { $get() { return snd.$get().senderIndex; }, $set(v) { const obj = snd.$get(); obj.senderIndex = v; snd.$set(obj); } };
11040          $t11_12 = $t10_11.$get();
11041          $t12_13 = Writer$addUint32(w, $t11_12);
11042          $block = 1; break;
11043          break;
11044        }
11045        case 4: {
11046          $t13_14 = ($t4_5 === 2);
11047          if ($t13_14) {
11048            $block = 3; break;
11049          }
11050          else {
11051            $block = 1; break;
11052          }
11053          break;
11054        }
11055      }
11056    }
11057  }
11058  
11059  $rt.types.getType('smesh.lol/web/common/mls.sender')?.methods?.set('marshal', sender$marshal);
11060  export function sender$unmarshal(snd, r) {
11061    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
11062    let $block = 0;
11063    while (true) {
11064      switch ($block) {
11065        case 0: {
11066          snd.$set($rt.builtin.cloneValue({ senderType: 0, leafIndex: 0, senderIndex: 0 }));
11067          $t0_1 = { $get() { return snd.$get().senderType; }, $set(v) { const obj = snd.$get(); obj.senderType = v; snd.$set(obj); } };
11068          $t1_2 = senderType$unmarshal($t0_1, r);
11069          $t2_3 = ($t1_2 !== null);
11070          if ($t2_3) {
11071            $block = 1; break;
11072          }
11073          else {
11074            $block = 2; break;
11075          }
11076          break;
11077        }
11078        case 1: {
11079          return $t1_2;
11080          break;
11081        }
11082        case 2: {
11083          $t3_4 = { $get() { return snd.$get().senderType; }, $set(v) { const obj = snd.$get(); obj.senderType = v; snd.$set(obj); } };
11084          $t4_5 = $t3_4.$get();
11085          $t5_6 = ($t4_5 === 1);
11086          if ($t5_6) {
11087            $block = 4; break;
11088          }
11089          else {
11090            $block = 6; break;
11091          }
11092          break;
11093        }
11094        case 3: {
11095          return null;
11096          break;
11097        }
11098        case 4: {
11099          $t6_7 = Reader$readUint32(r);
11100          $t7_8 = $t6_7[0];
11101          $t8_9 = $t6_7[1];
11102          if ($t8_9) {
11103            $block = 8; break;
11104          }
11105          else {
11106            $block = 7; break;
11107          }
11108          break;
11109        }
11110        case 5: {
11111          $t9_10 = Reader$readUint32(r);
11112          $t10_11 = $t9_10[0];
11113          $t11_12 = $t9_10[1];
11114          if ($t11_12) {
11115            $block = 10; break;
11116          }
11117          else {
11118            $block = 9; break;
11119          }
11120          break;
11121        }
11122        case 6: {
11123          $t12_13 = ($t4_5 === 2);
11124          if ($t12_13) {
11125            $block = 5; break;
11126          }
11127          else {
11128            $block = 3; break;
11129          }
11130          break;
11131        }
11132        case 7: {
11133          $t13_14 = errUnexpectedEOF.$get();
11134          return $t13_14;
11135          break;
11136        }
11137        case 8: {
11138          $t14_15 = $t7_8;
11139          $t15_16 = { $get() { return snd.$get().leafIndex; }, $set(v) { const obj = snd.$get(); obj.leafIndex = v; snd.$set(obj); } };
11140          $t15_16.$set($t14_15);
11141          $block = 3; break;
11142          break;
11143        }
11144        case 9: {
11145          $t16_17 = errUnexpectedEOF.$get();
11146          return $t16_17;
11147          break;
11148        }
11149        case 10: {
11150          $t17_18 = { $get() { return snd.$get().senderIndex; }, $set(v) { const obj = snd.$get(); obj.senderIndex = v; snd.$set(obj); } };
11151          $t17_18.$set($t10_11);
11152          $block = 3; break;
11153          break;
11154        }
11155      }
11156    }
11157  }
11158  
11159  $rt.types.getType('smesh.lol/web/common/mls.sender')?.methods?.set('unmarshal', sender$unmarshal);
11160  export function wireFormat$marshal(wf, w) {
11161    let $t0_1, $t1_2;
11162    $t0_1 = wf;
11163    $t1_2 = Writer$addUint16(w, $t0_1);
11164    return;
11165  }
11166  
11167  $rt.types.getType('smesh.lol/web/common/mls.wireFormat')?.methods?.set('marshal', wireFormat$marshal);
11168  export function wireFormat$unmarshal(wf, r) {
11169    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
11170    let $block = 0;
11171    while (true) {
11172      switch ($block) {
11173        case 0: {
11174          $t0_1 = Reader$readUint16(r);
11175          $t1_2 = $t0_1[0];
11176          $t2_3 = $t0_1[1];
11177          if ($t2_3) {
11178            $block = 2; break;
11179          }
11180          else {
11181            $block = 1; break;
11182          }
11183          break;
11184        }
11185        case 1: {
11186          $t3_4 = errUnexpectedEOF.$get();
11187          return $t3_4;
11188          break;
11189        }
11190        case 2: {
11191          $t4_5 = $t1_2;
11192          wf.$set($t4_5);
11193          $t5_6 = wf.$get();
11194          $t6_7 = ($t5_6 === 1);
11195          if ($t6_7) {
11196            $block = 3; break;
11197          }
11198          else {
11199            $block = 4; break;
11200          }
11201          break;
11202        }
11203        case 3: {
11204          return null;
11205          break;
11206        }
11207        case 4: {
11208          $t7_8 = ($t5_6 === 2);
11209          if ($t7_8) {
11210            $block = 3; break;
11211          }
11212          else {
11213            $block = 5; break;
11214          }
11215          break;
11216        }
11217        case 5: {
11218          $t8_9 = ($t5_6 === 3);
11219          if ($t8_9) {
11220            $block = 3; break;
11221          }
11222          else {
11223            $block = 6; break;
11224          }
11225          break;
11226        }
11227        case 6: {
11228          $t9_10 = ($t5_6 === 4);
11229          if ($t9_10) {
11230            $block = 3; break;
11231          }
11232          else {
11233            $block = 7; break;
11234          }
11235          break;
11236        }
11237        case 7: {
11238          $t10_11 = ($t5_6 === 5);
11239          if ($t10_11) {
11240            $block = 3; break;
11241          }
11242          else {
11243            $block = 8; break;
11244          }
11245          break;
11246        }
11247        case 8: {
11248          $t11_12 = errInvalidWireFormat.$get();
11249          return $t11_12;
11250          break;
11251        }
11252      }
11253    }
11254  }
11255  
11256  $rt.types.getType('smesh.lol/web/common/mls.wireFormat')?.methods?.set('unmarshal', wireFormat$unmarshal);
11257  export function GroupID$equal(ref, other) {
11258    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
11259    let $block = 0;
11260    while (true) {
11261      switch ($block) {
11262        case 0: {
11263          $t0_1 = $rt.builtin.len(ref);
11264          $t1_2 = $rt.builtin.len(other);
11265          $t2_3 = ($t0_1 !== $t1_2);
11266          if ($t2_3) {
11267            $block = 1; break;
11268          }
11269          else {
11270            $block = 2; break;
11271          }
11272          break;
11273        }
11274        case 1: {
11275          return false;
11276          break;
11277        }
11278        case 2: {
11279          $t3_4 = $rt.builtin.len(ref);
11280          $t4_5 = -1;
11281          $block = 3; break;
11282          break;
11283        }
11284        case 3: {
11285          $t5_6 = ($t4_5 + 1);
11286          $t6_7 = ($t5_6 < $t3_4);
11287          if ($t6_7) {
11288            $block = 4; break;
11289          }
11290          else {
11291            $block = 5; break;
11292          }
11293          break;
11294        }
11295        case 4: {
11296          $t7_8 = ref.addr($t5_6);
11297          $t8_9 = $t7_8.$get();
11298          $t9_10 = other.addr($t5_6);
11299          $t10_11 = $t9_10.$get();
11300          $t11_12 = ($t8_9 !== $t10_11);
11301          if ($t11_12) {
11302            $block = 6; break;
11303          }
11304          else {
11305            $t4_5 = $t5_6;
11306            $block = 3; break;
11307          }
11308          break;
11309        }
11310        case 5: {
11311          return true;
11312          break;
11313        }
11314        case 6: {
11315          return false;
11316          break;
11317        }
11318      }
11319    }
11320  }
11321  
11322  $rt.types.getType('smesh.lol/web/common/mls.GroupID')?.methods?.set('equal', GroupID$equal);
11323  export function framedContent$marshal(content, w) {
11324    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30;
11325    let $block = 0;
11326    while (true) {
11327      switch ($block) {
11328        case 0: {
11329          $t0_1 = { $get() { return content.$get().groupID; }, $set(v) { const obj = content.$get(); obj.groupID = v; content.$set(obj); } };
11330          $t1_2 = $t0_1.$get();
11331          $t2_3 = $t1_2;
11332          $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
11333          $t4_5 = { $get() { return content.$get().epoch; }, $set(v) { const obj = content.$get(); obj.epoch = v; content.$set(obj); } };
11334          $t5_6 = $t4_5.$get();
11335          $t6_7 = Writer$addUint64(w, $t5_6);
11336          $t7_8 = { $get() { return content.$get().sender; }, $set(v) { const obj = content.$get(); obj.sender = v; content.$set(obj); } };
11337          $t8_9 = sender$marshal($t7_8, w);
11338          $t9_10 = { $get() { return content.$get().authenticatedData; }, $set(v) { const obj = content.$get(); obj.authenticatedData = v; content.$set(obj); } };
11339          $t10_11 = $t9_10.$get();
11340          $t11_12 = Writer$writeOpaqueVec(w, $t10_11);
11341          $t12_13 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
11342          $t13_14 = $t12_13.$get();
11343          $t14_15 = contentType$marshal($t13_14, w);
11344          $t15_16 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
11345          $t16_17 = $t15_16.$get();
11346          $t17_18 = ($t16_17 === 1);
11347          if ($t17_18) {
11348            $block = 2; break;
11349          }
11350          else {
11351            $block = 4; break;
11352          }
11353          break;
11354        }
11355        case 1: {
11356          return;
11357          break;
11358        }
11359        case 2: {
11360          $t18_19 = { $get() { return content.$get().applicationData; }, $set(v) { const obj = content.$get(); obj.applicationData = v; content.$set(obj); } };
11361          $t19_20 = $t18_19.$get();
11362          $t20_21 = Writer$writeOpaqueVec(w, $t19_20);
11363          $block = 1; break;
11364          break;
11365        }
11366        case 3: {
11367          $t21_22 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
11368          $t22_23 = $t21_22.$get();
11369          $t23_24 = proposal$marshal($t22_23, w);
11370          $block = 1; break;
11371          break;
11372        }
11373        case 4: {
11374          $t24_25 = ($t16_17 === 2);
11375          if ($t24_25) {
11376            $block = 3; break;
11377          }
11378          else {
11379            $block = 6; break;
11380          }
11381          break;
11382        }
11383        case 5: {
11384          $t25_26 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
11385          $t26_27 = $t25_26.$get();
11386          $t27_28 = commit$marshal($t26_27, w);
11387          $block = 1; break;
11388          break;
11389        }
11390        case 6: {
11391          $t28_29 = ($t16_17 === 3);
11392          if ($t28_29) {
11393            $block = 5; break;
11394          }
11395          else {
11396            $block = 7; break;
11397          }
11398          break;
11399        }
11400        case 7: {
11401          $t29_30 = $rt.types.makeInterface('string', 'unreachable');
11402          $rt.runtime.panic($t29_30);
11403          break;
11404        }
11405      }
11406    }
11407  }
11408  
11409  $rt.types.getType('smesh.lol/web/common/mls.framedContent')?.methods?.set('marshal', framedContent$marshal);
11410  export function framedContent$unmarshal(content, r) {
11411    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43;
11412    let $block = 0;
11413    while (true) {
11414      switch ($block) {
11415        case 0: {
11416          content.$set($rt.builtin.cloneValue({ groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }));
11417          $t0_1 = Reader$readOpaqueVec(r);
11418          $t1_2 = $t0_1[0];
11419          $t2_3 = { $get() { return content.$get().groupID; }, $set(v) { const obj = content.$get(); obj.groupID = v; content.$set(obj); } };
11420          $t3_4 = $t1_2;
11421          $t2_3.$set($t3_4);
11422          $t4_5 = $t0_1[1];
11423          if ($t4_5) {
11424            $block = 2; break;
11425          }
11426          else {
11427            $block = 1; break;
11428          }
11429          break;
11430        }
11431        case 1: {
11432          $t5_6 = errUnexpectedEOF.$get();
11433          return $t5_6;
11434          break;
11435        }
11436        case 2: {
11437          $t6_7 = Reader$readUint64(r);
11438          $t7_8 = $t6_7[0];
11439          $t8_9 = { $get() { return content.$get().epoch; }, $set(v) { const obj = content.$get(); obj.epoch = v; content.$set(obj); } };
11440          $t8_9.$set($t7_8);
11441          $t9_10 = $t6_7[1];
11442          if ($t9_10) {
11443            $block = 4; break;
11444          }
11445          else {
11446            $block = 3; break;
11447          }
11448          break;
11449        }
11450        case 3: {
11451          $t10_11 = errUnexpectedEOF.$get();
11452          return $t10_11;
11453          break;
11454        }
11455        case 4: {
11456          $t11_12 = { $get() { return content.$get().sender; }, $set(v) { const obj = content.$get(); obj.sender = v; content.$set(obj); } };
11457          $t12_13 = sender$unmarshal($t11_12, r);
11458          $t13_14 = ($t12_13 !== null);
11459          if ($t13_14) {
11460            $block = 5; break;
11461          }
11462          else {
11463            $block = 6; break;
11464          }
11465          break;
11466        }
11467        case 5: {
11468          return $t12_13;
11469          break;
11470        }
11471        case 6: {
11472          $t14_15 = Reader$readOpaqueVec(r);
11473          $t15_16 = $t14_15[0];
11474          $t16_17 = { $get() { return content.$get().authenticatedData; }, $set(v) { const obj = content.$get(); obj.authenticatedData = v; content.$set(obj); } };
11475          $t16_17.$set($t15_16);
11476          $t17_18 = $t14_15[1];
11477          if ($t17_18) {
11478            $block = 8; break;
11479          }
11480          else {
11481            $block = 7; break;
11482          }
11483          break;
11484        }
11485        case 7: {
11486          $t18_19 = errUnexpectedEOF.$get();
11487          return $t18_19;
11488          break;
11489        }
11490        case 8: {
11491          $t19_20 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
11492          $t20_21 = contentType$unmarshal($t19_20, r);
11493          $t21_22 = ($t20_21 !== null);
11494          if ($t21_22) {
11495            $block = 9; break;
11496          }
11497          else {
11498            $block = 10; break;
11499          }
11500          break;
11501        }
11502        case 9: {
11503          return $t20_21;
11504          break;
11505        }
11506        case 10: {
11507          $t22_23 = { $get() { return content.$get().contentType; }, $set(v) { const obj = content.$get(); obj.contentType = v; content.$set(obj); } };
11508          $t23_24 = $t22_23.$get();
11509          $t24_25 = ($t23_24 === 1);
11510          if ($t24_25) {
11511            $block = 11; break;
11512          }
11513          else {
11514            $block = 13; break;
11515          }
11516          break;
11517        }
11518        case 11: {
11519          $t25_26 = Reader$readOpaqueVec(r);
11520          $t26_27 = $t25_26[0];
11521          $t27_28 = { $get() { return content.$get().applicationData; }, $set(v) { const obj = content.$get(); obj.applicationData = v; content.$set(obj); } };
11522          $t27_28.$set($t26_27);
11523          $t28_29 = $t25_26[1];
11524          if ($t28_29) {
11525            $block = 15; break;
11526          }
11527          else {
11528            $block = 14; break;
11529          }
11530          break;
11531        }
11532        case 12: {
11533          $t29_30 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11534          $t30_31 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
11535          $t30_31.$set($t29_30);
11536          $t31_32 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
11537          $t32_33 = $t31_32.$get();
11538          $t33_34 = proposal$unmarshal($t32_33, r);
11539          return $t33_34;
11540          break;
11541        }
11542        case 13: {
11543          $t34_35 = ($t23_24 === 2);
11544          if ($t34_35) {
11545            $block = 12; break;
11546          }
11547          else {
11548            $block = 17; break;
11549          }
11550          break;
11551        }
11552        case 14: {
11553          $t35_36 = errUnexpectedEOF.$get();
11554          return $t35_36;
11555          break;
11556        }
11557        case 15: {
11558          return null;
11559          break;
11560        }
11561        case 16: {
11562          $t36_37 = { $value: { proposals: null, path: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11563          $t37_38 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
11564          $t37_38.$set($t36_37);
11565          $t38_39 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
11566          $t39_40 = $t38_39.$get();
11567          $t40_41 = commit$unmarshal($t39_40, r);
11568          return $t40_41;
11569          break;
11570        }
11571        case 17: {
11572          $t41_42 = ($t23_24 === 3);
11573          if ($t41_42) {
11574            $block = 16; break;
11575          }
11576          else {
11577            $block = 18; break;
11578          }
11579          break;
11580        }
11581        case 18: {
11582          $t42_43 = $rt.types.makeInterface('string', 'unreachable');
11583          $rt.runtime.panic($t42_43);
11584          break;
11585        }
11586      }
11587    }
11588  }
11589  
11590  $rt.types.getType('smesh.lol/web/common/mls.framedContent')?.methods?.set('unmarshal', framedContent$unmarshal);
11591  export function mlsMessage$marshal(msg, w) {
11592    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30;
11593    let $block = 0;
11594    while (true) {
11595      switch ($block) {
11596        case 0: {
11597          $t0_1 = { $get() { return msg.$get().version; }, $set(v) { const obj = msg.$get(); obj.version = v; msg.$set(obj); } };
11598          $t1_2 = $t0_1.$get();
11599          $t2_3 = $t1_2;
11600          $t3_4 = Writer$addUint16(w, $t2_3);
11601          $t4_5 = { $get() { return msg.$get().wireFormat; }, $set(v) { const obj = msg.$get(); obj.wireFormat = v; msg.$set(obj); } };
11602          $t5_6 = $t4_5.$get();
11603          $t6_7 = wireFormat$marshal($t5_6, w);
11604          $t7_8 = { $get() { return msg.$get().wireFormat; }, $set(v) { const obj = msg.$get(); obj.wireFormat = v; msg.$set(obj); } };
11605          $t8_9 = $t7_8.$get();
11606          $t9_10 = ($t8_9 === 1);
11607          if ($t9_10) {
11608            $block = 2; break;
11609          }
11610          else {
11611            $block = 4; break;
11612          }
11613          break;
11614        }
11615        case 1: {
11616          return;
11617          break;
11618        }
11619        case 2: {
11620          $t10_11 = { $get() { return msg.$get().publicMessage; }, $set(v) { const obj = msg.$get(); obj.publicMessage = v; msg.$set(obj); } };
11621          $t11_12 = $t10_11.$get();
11622          $t12_13 = publicMessage$marshal($t11_12, w);
11623          $block = 1; break;
11624          break;
11625        }
11626        case 3: {
11627          $t13_14 = { $get() { return msg.$get().privateMessage; }, $set(v) { const obj = msg.$get(); obj.privateMessage = v; msg.$set(obj); } };
11628          $t14_15 = $t13_14.$get();
11629          $t15_16 = privateMessage$marshal($t14_15, w);
11630          $block = 1; break;
11631          break;
11632        }
11633        case 4: {
11634          $t16_17 = ($t8_9 === 2);
11635          if ($t16_17) {
11636            $block = 3; break;
11637          }
11638          else {
11639            $block = 6; break;
11640          }
11641          break;
11642        }
11643        case 5: {
11644          $t17_18 = { $get() { return msg.$get().welcome; }, $set(v) { const obj = msg.$get(); obj.welcome = v; msg.$set(obj); } };
11645          $t18_19 = $t17_18.$get();
11646          $t19_20 = Welcome$marshal($t18_19, w);
11647          $block = 1; break;
11648          break;
11649        }
11650        case 6: {
11651          $t20_21 = ($t8_9 === 3);
11652          if ($t20_21) {
11653            $block = 5; break;
11654          }
11655          else {
11656            $block = 8; break;
11657          }
11658          break;
11659        }
11660        case 7: {
11661          $t21_22 = { $get() { return msg.$get().groupInfo; }, $set(v) { const obj = msg.$get(); obj.groupInfo = v; msg.$set(obj); } };
11662          $t22_23 = $t21_22.$get();
11663          $t23_24 = groupInfo$marshal($t22_23, w);
11664          $block = 1; break;
11665          break;
11666        }
11667        case 8: {
11668          $t24_25 = ($t8_9 === 4);
11669          if ($t24_25) {
11670            $block = 7; break;
11671          }
11672          else {
11673            $block = 10; break;
11674          }
11675          break;
11676        }
11677        case 9: {
11678          $t25_26 = { $get() { return msg.$get().keyPackage; }, $set(v) { const obj = msg.$get(); obj.keyPackage = v; msg.$set(obj); } };
11679          $t26_27 = $t25_26.$get();
11680          $t27_28 = KeyPackage$marshal($t26_27, w);
11681          $block = 1; break;
11682          break;
11683        }
11684        case 10: {
11685          $t28_29 = ($t8_9 === 5);
11686          if ($t28_29) {
11687            $block = 9; break;
11688          }
11689          else {
11690            $block = 11; break;
11691          }
11692          break;
11693        }
11694        case 11: {
11695          $t29_30 = $rt.types.makeInterface('string', 'unreachable');
11696          $rt.runtime.panic($t29_30);
11697          break;
11698        }
11699      }
11700    }
11701  }
11702  
11703  $rt.types.getType('smesh.lol/web/common/mls.mlsMessage')?.methods?.set('marshal', mlsMessage$marshal);
11704  export function mlsMessage$unmarshal(msg, r) {
11705    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46;
11706    let $block = 0;
11707    while (true) {
11708      switch ($block) {
11709        case 0: {
11710          msg.$set($rt.builtin.cloneValue({ version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }));
11711          $t0_1 = Reader$readUint16(r);
11712          $t1_2 = $t0_1[0];
11713          $t2_3 = $t0_1[1];
11714          if ($t2_3) {
11715            $block = 2; break;
11716          }
11717          else {
11718            $block = 1; break;
11719          }
11720          break;
11721        }
11722        case 1: {
11723          $t3_4 = errUnexpectedEOF.$get();
11724          return $t3_4;
11725          break;
11726        }
11727        case 2: {
11728          $t4_5 = $t1_2;
11729          $t5_6 = { $get() { return msg.$get().version; }, $set(v) { const obj = msg.$get(); obj.version = v; msg.$set(obj); } };
11730          $t5_6.$set($t4_5);
11731          $t6_7 = { $get() { return msg.$get().version; }, $set(v) { const obj = msg.$get(); obj.version = v; msg.$set(obj); } };
11732          $t7_8 = $t6_7.$get();
11733          $t8_9 = ($t7_8 !== 1);
11734          if ($t8_9) {
11735            $block = 3; break;
11736          }
11737          else {
11738            $block = 4; break;
11739          }
11740          break;
11741        }
11742        case 3: {
11743          $t9_10 = errInvalidVersion.$get();
11744          return $t9_10;
11745          break;
11746        }
11747        case 4: {
11748          $t10_11 = { $get() { return msg.$get().wireFormat; }, $set(v) { const obj = msg.$get(); obj.wireFormat = v; msg.$set(obj); } };
11749          $t11_12 = wireFormat$unmarshal($t10_11, r);
11750          $t12_13 = ($t11_12 !== null);
11751          if ($t12_13) {
11752            $block = 5; break;
11753          }
11754          else {
11755            $block = 6; break;
11756          }
11757          break;
11758        }
11759        case 5: {
11760          return $t11_12;
11761          break;
11762        }
11763        case 6: {
11764          $t13_14 = { $get() { return msg.$get().wireFormat; }, $set(v) { const obj = msg.$get(); obj.wireFormat = v; msg.$set(obj); } };
11765          $t14_15 = $t13_14.$get();
11766          $t15_16 = ($t14_15 === 1);
11767          if ($t15_16) {
11768            $block = 7; break;
11769          }
11770          else {
11771            $block = 9; break;
11772          }
11773          break;
11774        }
11775        case 7: {
11776          $t16_17 = { $value: { content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null }, membershipTag: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11777          $t17_18 = { $get() { return msg.$get().publicMessage; }, $set(v) { const obj = msg.$get(); obj.publicMessage = v; msg.$set(obj); } };
11778          $t17_18.$set($t16_17);
11779          $t18_19 = { $get() { return msg.$get().publicMessage; }, $set(v) { const obj = msg.$get(); obj.publicMessage = v; msg.$set(obj); } };
11780          $t19_20 = $t18_19.$get();
11781          $t20_21 = publicMessage$unmarshal($t19_20, r);
11782          return $t20_21;
11783          break;
11784        }
11785        case 8: {
11786          $t21_22 = { $value: { groupID: null, epoch: 0n, contentType: 0, authenticatedData: null, encryptedSenderData: null, ciphertext: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11787          $t22_23 = { $get() { return msg.$get().privateMessage; }, $set(v) { const obj = msg.$get(); obj.privateMessage = v; msg.$set(obj); } };
11788          $t22_23.$set($t21_22);
11789          $t23_24 = { $get() { return msg.$get().privateMessage; }, $set(v) { const obj = msg.$get(); obj.privateMessage = v; msg.$set(obj); } };
11790          $t24_25 = $t23_24.$get();
11791          $t25_26 = privateMessage$unmarshal($t24_25, r);
11792          return $t25_26;
11793          break;
11794        }
11795        case 9: {
11796          $t26_27 = ($t14_15 === 2);
11797          if ($t26_27) {
11798            $block = 8; break;
11799          }
11800          else {
11801            $block = 11; break;
11802          }
11803          break;
11804        }
11805        case 10: {
11806          $t27_28 = { $value: { cipherSuite: 0, secrets: null, encryptedGroupInfo: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11807          $t28_29 = { $get() { return msg.$get().welcome; }, $set(v) { const obj = msg.$get(); obj.welcome = v; msg.$set(obj); } };
11808          $t28_29.$set($t27_28);
11809          $t29_30 = { $get() { return msg.$get().welcome; }, $set(v) { const obj = msg.$get(); obj.welcome = v; msg.$set(obj); } };
11810          $t30_31 = $t29_30.$get();
11811          $t31_32 = Welcome$unmarshal($t30_31, r);
11812          return $t31_32;
11813          break;
11814        }
11815        case 11: {
11816          $t32_33 = ($t14_15 === 3);
11817          if ($t32_33) {
11818            $block = 10; break;
11819          }
11820          else {
11821            $block = 13; break;
11822          }
11823          break;
11824        }
11825        case 12: {
11826          $t33_34 = { $value: { groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, extensions: null, confirmationTag: null, signer: 0, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11827          $t34_35 = { $get() { return msg.$get().groupInfo; }, $set(v) { const obj = msg.$get(); obj.groupInfo = v; msg.$set(obj); } };
11828          $t34_35.$set($t33_34);
11829          $t35_36 = { $get() { return msg.$get().groupInfo; }, $set(v) { const obj = msg.$get(); obj.groupInfo = v; msg.$set(obj); } };
11830          $t36_37 = $t35_36.$get();
11831          $t37_38 = groupInfo$unmarshal($t36_37, r);
11832          return $t37_38;
11833          break;
11834        }
11835        case 13: {
11836          $t38_39 = ($t14_15 === 4);
11837          if ($t38_39) {
11838            $block = 12; break;
11839          }
11840          else {
11841            $block = 15; break;
11842          }
11843          break;
11844        }
11845        case 14: {
11846          $t39_40 = { $value: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
11847          $t40_41 = { $get() { return msg.$get().keyPackage; }, $set(v) { const obj = msg.$get(); obj.keyPackage = v; msg.$set(obj); } };
11848          $t40_41.$set($t39_40);
11849          $t41_42 = { $get() { return msg.$get().keyPackage; }, $set(v) { const obj = msg.$get(); obj.keyPackage = v; msg.$set(obj); } };
11850          $t42_43 = $t41_42.$get();
11851          $t43_44 = KeyPackage$unmarshal($t42_43, r);
11852          return $t43_44;
11853          break;
11854        }
11855        case 15: {
11856          $t44_45 = ($t14_15 === 5);
11857          if ($t44_45) {
11858            $block = 14; break;
11859          }
11860          else {
11861            $block = 16; break;
11862          }
11863          break;
11864        }
11865        case 16: {
11866          $t45_46 = $rt.types.makeInterface('string', 'unreachable');
11867          $rt.runtime.panic($t45_46);
11868          break;
11869        }
11870      }
11871    }
11872  }
11873  
11874  $rt.types.getType('smesh.lol/web/common/mls.mlsMessage')?.methods?.set('unmarshal', mlsMessage$unmarshal);
11875  export function framedContentAuthData$marshal(authData, w, ct) {
11876    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
11877    let $block = 0;
11878    while (true) {
11879      switch ($block) {
11880        case 0: {
11881          $t0_1 = { $get() { return authData.$get().signature; }, $set(v) { const obj = authData.$get(); obj.signature = v; authData.$set(obj); } };
11882          $t1_2 = $t0_1.$get();
11883          $t2_3 = Writer$writeOpaqueVec(w, $t1_2);
11884          $t3_4 = (ct === 3);
11885          if ($t3_4) {
11886            $block = 1; break;
11887          }
11888          else {
11889            $block = 2; break;
11890          }
11891          break;
11892        }
11893        case 1: {
11894          $t4_5 = { $get() { return authData.$get().confirmationTag; }, $set(v) { const obj = authData.$get(); obj.confirmationTag = v; authData.$set(obj); } };
11895          $t5_6 = $t4_5.$get();
11896          $t6_7 = Writer$writeOpaqueVec(w, $t5_6);
11897          $block = 2; break;
11898          break;
11899        }
11900        case 2: {
11901          return;
11902          break;
11903        }
11904      }
11905    }
11906  }
11907  
11908  $rt.types.getType('smesh.lol/web/common/mls.framedContentAuthData')?.methods?.set('marshal', framedContentAuthData$marshal);
11909  export function framedContentAuthData$unmarshal(authData, r, ct) {
11910    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
11911    let $block = 0;
11912    while (true) {
11913      switch ($block) {
11914        case 0: {
11915          authData.$set($rt.builtin.cloneValue({ signature: null, confirmationTag: null }));
11916          $t0_1 = Reader$readOpaqueVec(r);
11917          $t1_2 = $t0_1[0];
11918          $t2_3 = { $get() { return authData.$get().signature; }, $set(v) { const obj = authData.$get(); obj.signature = v; authData.$set(obj); } };
11919          $t2_3.$set($t1_2);
11920          $t3_4 = $t0_1[1];
11921          if ($t3_4) {
11922            $block = 2; break;
11923          }
11924          else {
11925            $block = 1; break;
11926          }
11927          break;
11928        }
11929        case 1: {
11930          $t4_5 = errUnexpectedEOF.$get();
11931          return $t4_5;
11932          break;
11933        }
11934        case 2: {
11935          $t5_6 = (ct === 3);
11936          if ($t5_6) {
11937            $block = 3; break;
11938          }
11939          else {
11940            $block = 4; break;
11941          }
11942          break;
11943        }
11944        case 3: {
11945          $t6_7 = Reader$readOpaqueVec(r);
11946          $t7_8 = $t6_7[0];
11947          $t8_9 = { $get() { return authData.$get().confirmationTag; }, $set(v) { const obj = authData.$get(); obj.confirmationTag = v; authData.$set(obj); } };
11948          $t8_9.$set($t7_8);
11949          $t9_10 = $t6_7[1];
11950          if ($t9_10) {
11951            $block = 4; break;
11952          }
11953          else {
11954            $block = 5; break;
11955          }
11956          break;
11957        }
11958        case 4: {
11959          return null;
11960          break;
11961        }
11962        case 5: {
11963          $t10_11 = errUnexpectedEOF.$get();
11964          return $t10_11;
11965          break;
11966        }
11967      }
11968    }
11969  }
11970  
11971  $rt.types.getType('smesh.lol/web/common/mls.framedContentAuthData')?.methods?.set('unmarshal', framedContentAuthData$unmarshal);
11972  export function framedContentAuthData$verifyConfirmationTag(authData, cs, confirmationKey, confirmedTranscriptHash) {
11973    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
11974    let $block = 0;
11975    while (true) {
11976      switch ($block) {
11977        case 0: {
11978          $t0_1 = { $get() { return authData.$get().confirmationTag; }, $set(v) { const obj = authData.$get(); obj.confirmationTag = v; authData.$set(obj); } };
11979          $t1_2 = $t0_1.$get();
11980          $t2_3 = $rt.builtin.len($t1_2);
11981          $t3_4 = ($t2_3 === 0);
11982          if ($t3_4) {
11983            $block = 1; break;
11984          }
11985          else {
11986            $block = 2; break;
11987          }
11988          break;
11989        }
11990        case 1: {
11991          return false;
11992          break;
11993        }
11994        case 2: {
11995          $t4_5 = { $get() { return authData.$get().confirmationTag; }, $set(v) { const obj = authData.$get(); obj.confirmationTag = v; authData.$set(obj); } };
11996          $t5_6 = $t4_5.$get();
11997          $t6_7 = CipherSuite$verifyMAC(cs, confirmationKey, confirmedTranscriptHash, $t5_6);
11998          return $t6_7;
11999          break;
12000        }
12001      }
12002    }
12003  }
12004  
12005  $rt.types.getType('smesh.lol/web/common/mls.framedContentAuthData')?.methods?.set('verifyConfirmationTag', framedContentAuthData$verifyConfirmationTag);
12006  export function framedContentAuthData$verifySignature(authData, cs, verifKey, content) {
12007    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
12008    let $block = 0;
12009    while (true) {
12010      switch ($block) {
12011        case 0: {
12012          $t0_1 = $rt.types.makeInterface('*smesh.lol/web/common/mls.framedContentTBS', content);
12013          $t1_2 = marshalRaw($t0_1);
12014          $t2_3 = $t1_2[0];
12015          $t3_4 = $t1_2[1];
12016          $t4_5 = ($t3_4 !== null);
12017          if ($t4_5) {
12018            $block = 1; break;
12019          }
12020          else {
12021            $block = 2; break;
12022          }
12023          break;
12024        }
12025        case 1: {
12026          return false;
12027          break;
12028        }
12029        case 2: {
12030          $t5_6 = { $get() { return authData.$get().signature; }, $set(v) { const obj = authData.$get(); obj.signature = v; authData.$set(obj); } };
12031          $t6_7 = $t5_6.$get();
12032          $t7_8 = CipherSuite$verifyWithLabel(cs, verifKey, 'FramedContentTBS', $t2_3, $t6_7);
12033          return $t7_8;
12034          break;
12035        }
12036      }
12037    }
12038  }
12039  
12040  $rt.types.getType('smesh.lol/web/common/mls.framedContentAuthData')?.methods?.set('verifySignature', framedContentAuthData$verifySignature);
12041  export function authenticatedContent$confirmedTranscriptHashInput(authContent) {
12042    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
12043    $t0_1 = { $value: { wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12044    $t1_2 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
12045    $t2_3 = { $get() { return authContent.$get().wireFormat; }, $set(v) { const obj = authContent.$get(); obj.wireFormat = v; authContent.$set(obj); } };
12046    $t3_4 = $t2_3.$get();
12047    $t4_5 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
12048    $t5_6 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12049    $t6_7 = $t5_6.$get();
12050    $t7_8 = { $get() { return $t0_1.$get().signature; }, $set(v) { const obj = $t0_1.$get(); obj.signature = v; $t0_1.$set(obj); } };
12051    $t8_9 = { $get() { return authContent.$get().auth; }, $set(v) { const obj = authContent.$get(); obj.auth = v; authContent.$set(obj); } };
12052    $t9_10 = { $get() { return $t8_9.$get().signature; }, $set(v) { const obj = $t8_9.$get(); obj.signature = v; $t8_9.$set(obj); } };
12053    $t10_11 = $t9_10.$get();
12054    $t1_2.$set($t3_4);
12055    $t4_5.$set($rt.builtin.cloneValue($t6_7));
12056    $t7_8.$set($t10_11);
12057    return $t0_1;
12058  }
12059  
12060  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContent')?.methods?.set('confirmedTranscriptHashInput', authenticatedContent$confirmedTranscriptHashInput);
12061  export function authenticatedContent$framedContentTBS(authContent, ctx) {
12062    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
12063    $t0_1 = { $value: { version: 0, wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, context: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12064    $t1_2 = { $get() { return $t0_1.$get().version; }, $set(v) { const obj = $t0_1.$get(); obj.version = v; $t0_1.$set(obj); } };
12065    $t2_3 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
12066    $t3_4 = { $get() { return authContent.$get().wireFormat; }, $set(v) { const obj = authContent.$get(); obj.wireFormat = v; authContent.$set(obj); } };
12067    $t4_5 = $t3_4.$get();
12068    $t5_6 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
12069    $t6_7 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12070    $t7_8 = $t6_7.$get();
12071    $t8_9 = { $get() { return $t0_1.$get().context; }, $set(v) { const obj = $t0_1.$get(); obj.context = v; $t0_1.$set(obj); } };
12072    $t1_2.$set(1);
12073    $t2_3.$set($t4_5);
12074    $t5_6.$set($rt.builtin.cloneValue($t7_8));
12075    $t8_9.$set(ctx);
12076    return $t0_1;
12077  }
12078  
12079  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContent')?.methods?.set('framedContentTBS', authenticatedContent$framedContentTBS);
12080  export function authenticatedContent$generateProposalRef(authContent, cs) {
12081    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
12082    let $block = 0;
12083    while (true) {
12084      switch ($block) {
12085        case 0: {
12086          $t0_1 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12087          $t1_2 = { $get() { return $t0_1.$get().contentType; }, $set(v) { const obj = $t0_1.$get(); obj.contentType = v; $t0_1.$set(obj); } };
12088          $t2_3 = $t1_2.$get();
12089          $t3_4 = ($t2_3 !== 2);
12090          if ($t3_4) {
12091            $block = 1; break;
12092          }
12093          else {
12094            $block = 2; break;
12095          }
12096          break;
12097        }
12098        case 1: {
12099          $t4_5 = $rt.types.makeInterface('string', 'mls: not a proposal');
12100          $rt.runtime.panic($t4_5);
12101          break;
12102        }
12103        case 2: {
12104          $t5_6 = $rt.types.makeInterface('*smesh.lol/web/common/mls.authenticatedContent', authContent);
12105          $t6_7 = marshalRaw($t5_6);
12106          $t7_8 = $t6_7[0];
12107          $t8_9 = $t6_7[1];
12108          $t9_10 = ($t8_9 !== null);
12109          if ($t9_10) {
12110            $block = 3; break;
12111          }
12112          else {
12113            $block = 4; break;
12114          }
12115          break;
12116        }
12117        case 3: {
12118          return [null, $t8_9];
12119          break;
12120        }
12121        case 4: {
12122          $t10_11 = CipherSuite$refHash(cs, 'MLS 1.0 Proposal Reference', $t7_8);
12123          $t11_12 = $t10_11[0];
12124          $t12_13 = $t10_11[1];
12125          $t13_14 = ($t12_13 !== null);
12126          if ($t13_14) {
12127            $block = 5; break;
12128          }
12129          else {
12130            $block = 6; break;
12131          }
12132          break;
12133        }
12134        case 5: {
12135          return [null, $t12_13];
12136          break;
12137        }
12138        case 6: {
12139          $t14_15 = $t11_12;
12140          return [$t14_15, null];
12141          break;
12142        }
12143      }
12144    }
12145  }
12146  
12147  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContent')?.methods?.set('generateProposalRef', authenticatedContent$generateProposalRef);
12148  export function authenticatedContent$marshal(authContent, w) {
12149    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
12150    $t0_1 = { $get() { return authContent.$get().wireFormat; }, $set(v) { const obj = authContent.$get(); obj.wireFormat = v; authContent.$set(obj); } };
12151    $t1_2 = $t0_1.$get();
12152    $t2_3 = wireFormat$marshal($t1_2, w);
12153    $t3_4 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12154    $t4_5 = framedContent$marshal($t3_4, w);
12155    $t5_6 = { $get() { return authContent.$get().auth; }, $set(v) { const obj = authContent.$get(); obj.auth = v; authContent.$set(obj); } };
12156    $t6_7 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12157    $t7_8 = { $get() { return $t6_7.$get().contentType; }, $set(v) { const obj = $t6_7.$get(); obj.contentType = v; $t6_7.$set(obj); } };
12158    $t8_9 = $t7_8.$get();
12159    $t9_10 = framedContentAuthData$marshal($t5_6, w, $t8_9);
12160    return;
12161  }
12162  
12163  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContent')?.methods?.set('marshal', authenticatedContent$marshal);
12164  export function authenticatedContent$unmarshal(authContent, r) {
12165    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
12166    let $block = 0;
12167    while (true) {
12168      switch ($block) {
12169        case 0: {
12170          $t0_1 = { $get() { return authContent.$get().wireFormat; }, $set(v) { const obj = authContent.$get(); obj.wireFormat = v; authContent.$set(obj); } };
12171          $t1_2 = wireFormat$unmarshal($t0_1, r);
12172          $t2_3 = ($t1_2 !== null);
12173          if ($t2_3) {
12174            $block = 1; break;
12175          }
12176          else {
12177            $block = 2; break;
12178          }
12179          break;
12180        }
12181        case 1: {
12182          return $t1_2;
12183          break;
12184        }
12185        case 2: {
12186          $t3_4 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12187          $t4_5 = framedContent$unmarshal($t3_4, r);
12188          $t5_6 = ($t4_5 !== null);
12189          if ($t5_6) {
12190            $block = 3; break;
12191          }
12192          else {
12193            $block = 4; break;
12194          }
12195          break;
12196        }
12197        case 3: {
12198          return $t4_5;
12199          break;
12200        }
12201        case 4: {
12202          $t6_7 = { $get() { return authContent.$get().auth; }, $set(v) { const obj = authContent.$get(); obj.auth = v; authContent.$set(obj); } };
12203          $t7_8 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
12204          $t8_9 = { $get() { return $t7_8.$get().contentType; }, $set(v) { const obj = $t7_8.$get(); obj.contentType = v; $t7_8.$set(obj); } };
12205          $t9_10 = $t8_9.$get();
12206          $t10_11 = framedContentAuthData$unmarshal($t6_7, r, $t9_10);
12207          return $t10_11;
12208          break;
12209        }
12210      }
12211    }
12212  }
12213  
12214  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContent')?.methods?.set('unmarshal', authenticatedContent$unmarshal);
12215  export function authenticatedContent$verifySignature(authContent, verifKey, ctx) {
12216    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
12217    let $block = 0;
12218    while (true) {
12219      switch ($block) {
12220        case 0: {
12221          $t0_1 = authenticatedContent$framedContentTBS(authContent, ctx);
12222          $t1_2 = $rt.types.makeInterface('*smesh.lol/web/common/mls.framedContentTBS', $t0_1);
12223          $t2_3 = marshalRaw($t1_2);
12224          $t3_4 = $t2_3[0];
12225          $t4_5 = $t2_3[1];
12226          $t5_6 = ($t4_5 !== null);
12227          if ($t5_6) {
12228            $block = 1; break;
12229          }
12230          else {
12231            $block = 2; break;
12232          }
12233          break;
12234        }
12235        case 1: {
12236          return false;
12237          break;
12238        }
12239        case 2: {
12240          $t6_7 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
12241          $t7_8 = $t6_7.$get();
12242          $t8_9 = { $get() { return authContent.$get().auth; }, $set(v) { const obj = authContent.$get(); obj.auth = v; authContent.$set(obj); } };
12243          $t9_10 = { $get() { return $t8_9.$get().signature; }, $set(v) { const obj = $t8_9.$get(); obj.signature = v; $t8_9.$set(obj); } };
12244          $t10_11 = $t9_10.$get();
12245          $t11_12 = CipherSuite$verifyWithLabel($t7_8, verifKey, 'FramedContentTBS', $t3_4, $t10_11);
12246          return $t11_12;
12247          break;
12248        }
12249      }
12250    }
12251  }
12252  
12253  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContent')?.methods?.set('verifySignature', authenticatedContent$verifySignature);
12254  export function framedContentTBS$marshal(content, w) {
12255    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
12256    let $block = 0;
12257    while (true) {
12258      switch ($block) {
12259        case 0: {
12260          $t0_1 = { $get() { return content.$get().version; }, $set(v) { const obj = content.$get(); obj.version = v; content.$set(obj); } };
12261          $t1_2 = $t0_1.$get();
12262          $t2_3 = $t1_2;
12263          $t3_4 = Writer$addUint16(w, $t2_3);
12264          $t4_5 = { $get() { return content.$get().wireFormat; }, $set(v) { const obj = content.$get(); obj.wireFormat = v; content.$set(obj); } };
12265          $t5_6 = $t4_5.$get();
12266          $t6_7 = wireFormat$marshal($t5_6, w);
12267          $t7_8 = { $get() { return content.$get().content; }, $set(v) { const obj = content.$get(); obj.content = v; content.$set(obj); } };
12268          $t8_9 = framedContent$marshal($t7_8, w);
12269          $t9_10 = { $get() { return content.$get().content; }, $set(v) { const obj = content.$get(); obj.content = v; content.$set(obj); } };
12270          $t10_11 = { $get() { return $t9_10.$get().sender; }, $set(v) { const obj = $t9_10.$get(); obj.sender = v; $t9_10.$set(obj); } };
12271          $t11_12 = { $get() { return $t10_11.$get().senderType; }, $set(v) { const obj = $t10_11.$get(); obj.senderType = v; $t10_11.$set(obj); } };
12272          $t12_13 = $t11_12.$get();
12273          $t13_14 = ($t12_13 === 1);
12274          if ($t13_14) {
12275            $block = 2; break;
12276          }
12277          else {
12278            $block = 3; break;
12279          }
12280          break;
12281        }
12282        case 1: {
12283          return;
12284          break;
12285        }
12286        case 2: {
12287          $t14_15 = { $get() { return content.$get().context; }, $set(v) { const obj = content.$get(); obj.context = v; content.$set(obj); } };
12288          $t15_16 = $t14_15.$get();
12289          $t16_17 = groupContext$marshal($t15_16, w);
12290          $block = 1; break;
12291          break;
12292        }
12293        case 3: {
12294          $t17_18 = ($t12_13 === 4);
12295          if ($t17_18) {
12296            $block = 2; break;
12297          }
12298          else {
12299            $block = 1; break;
12300          }
12301          break;
12302        }
12303      }
12304    }
12305  }
12306  
12307  $rt.types.getType('smesh.lol/web/common/mls.framedContentTBS')?.methods?.set('marshal', framedContentTBS$marshal);
12308  export function publicMessage$authenticatedContent(msg) {
12309    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
12310    $t0_1 = { $value: { wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12311    $t1_2 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
12312    $t2_3 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
12313    $t3_4 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12314    $t4_5 = $t3_4.$get();
12315    $t5_6 = { $get() { return $t0_1.$get().auth; }, $set(v) { const obj = $t0_1.$get(); obj.auth = v; $t0_1.$set(obj); } };
12316    $t6_7 = { $get() { return msg.$get().auth; }, $set(v) { const obj = msg.$get(); obj.auth = v; msg.$set(obj); } };
12317    $t7_8 = $t6_7.$get();
12318    $t1_2.$set(1);
12319    $t2_3.$set($rt.builtin.cloneValue($t4_5));
12320    $t5_6.$set($rt.builtin.cloneValue($t7_8));
12321    return $t0_1;
12322  }
12323  
12324  $rt.types.getType('smesh.lol/web/common/mls.publicMessage')?.methods?.set('authenticatedContent', publicMessage$authenticatedContent);
12325  export function publicMessage$authenticatedContentTBM(msg, ctx) {
12326    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
12327    $t0_1 = { $value: { contentTBS: { version: 0, wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, context: null }, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12328    $t1_2 = { $get() { return $t0_1.$get().contentTBS; }, $set(v) { const obj = $t0_1.$get(); obj.contentTBS = v; $t0_1.$set(obj); } };
12329    $t2_3 = publicMessage$authenticatedContent(msg);
12330    $t3_4 = authenticatedContent$framedContentTBS($t2_3, ctx);
12331    $t4_5 = $t3_4.$get();
12332    $t5_6 = { $get() { return $t0_1.$get().auth; }, $set(v) { const obj = $t0_1.$get(); obj.auth = v; $t0_1.$set(obj); } };
12333    $t6_7 = { $get() { return msg.$get().auth; }, $set(v) { const obj = msg.$get(); obj.auth = v; msg.$set(obj); } };
12334    $t7_8 = $t6_7.$get();
12335    $t1_2.$set($rt.builtin.cloneValue($t4_5));
12336    $t5_6.$set($rt.builtin.cloneValue($t7_8));
12337    return $t0_1;
12338  }
12339  
12340  $rt.types.getType('smesh.lol/web/common/mls.publicMessage')?.methods?.set('authenticatedContentTBM', publicMessage$authenticatedContentTBM);
12341  export function publicMessage$marshal(msg, w) {
12342    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
12343    let $block = 0;
12344    while (true) {
12345      switch ($block) {
12346        case 0: {
12347          $t0_1 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12348          $t1_2 = framedContent$marshal($t0_1, w);
12349          $t2_3 = { $get() { return msg.$get().auth; }, $set(v) { const obj = msg.$get(); obj.auth = v; msg.$set(obj); } };
12350          $t3_4 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12351          $t4_5 = { $get() { return $t3_4.$get().contentType; }, $set(v) { const obj = $t3_4.$get(); obj.contentType = v; $t3_4.$set(obj); } };
12352          $t5_6 = $t4_5.$get();
12353          $t6_7 = framedContentAuthData$marshal($t2_3, w, $t5_6);
12354          $t7_8 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12355          $t8_9 = { $get() { return $t7_8.$get().sender; }, $set(v) { const obj = $t7_8.$get(); obj.sender = v; $t7_8.$set(obj); } };
12356          $t9_10 = { $get() { return $t8_9.$get().senderType; }, $set(v) { const obj = $t8_9.$get(); obj.senderType = v; $t8_9.$set(obj); } };
12357          $t10_11 = $t9_10.$get();
12358          $t11_12 = ($t10_11 === 1);
12359          if ($t11_12) {
12360            $block = 1; break;
12361          }
12362          else {
12363            $block = 2; break;
12364          }
12365          break;
12366        }
12367        case 1: {
12368          $t12_13 = { $get() { return msg.$get().membershipTag; }, $set(v) { const obj = msg.$get(); obj.membershipTag = v; msg.$set(obj); } };
12369          $t13_14 = $t12_13.$get();
12370          $t14_15 = Writer$writeOpaqueVec(w, $t13_14);
12371          $block = 2; break;
12372          break;
12373        }
12374        case 2: {
12375          return;
12376          break;
12377        }
12378      }
12379    }
12380  }
12381  
12382  $rt.types.getType('smesh.lol/web/common/mls.publicMessage')?.methods?.set('marshal', publicMessage$marshal);
12383  export function publicMessage$signMembershipTag(msg, cs, membershipKey, ctx) {
12384    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
12385    let $block = 0;
12386    while (true) {
12387      switch ($block) {
12388        case 0: {
12389          $t0_1 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12390          $t1_2 = { $get() { return $t0_1.$get().sender; }, $set(v) { const obj = $t0_1.$get(); obj.sender = v; $t0_1.$set(obj); } };
12391          $t2_3 = { $get() { return $t1_2.$get().senderType; }, $set(v) { const obj = $t1_2.$get(); obj.senderType = v; $t1_2.$set(obj); } };
12392          $t3_4 = $t2_3.$get();
12393          $t4_5 = ($t3_4 !== 1);
12394          if ($t4_5) {
12395            $block = 1; break;
12396          }
12397          else {
12398            $block = 2; break;
12399          }
12400          break;
12401        }
12402        case 1: {
12403          return null;
12404          break;
12405        }
12406        case 2: {
12407          $t5_6 = publicMessage$authenticatedContentTBM(msg, ctx);
12408          $t6_7 = $rt.types.makeInterface('*smesh.lol/web/common/mls.authenticatedContentTBM', $t5_6);
12409          $t7_8 = marshalRaw($t6_7);
12410          $t8_9 = $t7_8[0];
12411          $t9_10 = $t7_8[1];
12412          $t10_11 = ($t9_10 !== null);
12413          if ($t10_11) {
12414            $block = 3; break;
12415          }
12416          else {
12417            $block = 4; break;
12418          }
12419          break;
12420        }
12421        case 3: {
12422          return $t9_10;
12423          break;
12424        }
12425        case 4: {
12426          $t11_12 = CipherSuite$signMAC(cs, membershipKey, $t8_9);
12427          $t12_13 = { $get() { return msg.$get().membershipTag; }, $set(v) { const obj = msg.$get(); obj.membershipTag = v; msg.$set(obj); } };
12428          $t12_13.$set($t11_12);
12429          return null;
12430          break;
12431        }
12432      }
12433    }
12434  }
12435  
12436  $rt.types.getType('smesh.lol/web/common/mls.publicMessage')?.methods?.set('signMembershipTag', publicMessage$signMembershipTag);
12437  export function publicMessage$unmarshal(msg, r) {
12438    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
12439    let $block = 0;
12440    while (true) {
12441      switch ($block) {
12442        case 0: {
12443          msg.$set($rt.builtin.cloneValue({ content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null }, membershipTag: null }));
12444          $t0_1 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12445          $t1_2 = framedContent$unmarshal($t0_1, r);
12446          $t2_3 = ($t1_2 !== null);
12447          if ($t2_3) {
12448            $block = 1; break;
12449          }
12450          else {
12451            $block = 2; break;
12452          }
12453          break;
12454        }
12455        case 1: {
12456          return $t1_2;
12457          break;
12458        }
12459        case 2: {
12460          $t3_4 = { $get() { return msg.$get().auth; }, $set(v) { const obj = msg.$get(); obj.auth = v; msg.$set(obj); } };
12461          $t4_5 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12462          $t5_6 = { $get() { return $t4_5.$get().contentType; }, $set(v) { const obj = $t4_5.$get(); obj.contentType = v; $t4_5.$set(obj); } };
12463          $t6_7 = $t5_6.$get();
12464          $t7_8 = framedContentAuthData$unmarshal($t3_4, r, $t6_7);
12465          $t8_9 = ($t7_8 !== null);
12466          if ($t8_9) {
12467            $block = 3; break;
12468          }
12469          else {
12470            $block = 4; break;
12471          }
12472          break;
12473        }
12474        case 3: {
12475          return $t7_8;
12476          break;
12477        }
12478        case 4: {
12479          $t9_10 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12480          $t10_11 = { $get() { return $t9_10.$get().sender; }, $set(v) { const obj = $t9_10.$get(); obj.sender = v; $t9_10.$set(obj); } };
12481          $t11_12 = { $get() { return $t10_11.$get().senderType; }, $set(v) { const obj = $t10_11.$get(); obj.senderType = v; $t10_11.$set(obj); } };
12482          $t12_13 = $t11_12.$get();
12483          $t13_14 = ($t12_13 === 1);
12484          if ($t13_14) {
12485            $block = 5; break;
12486          }
12487          else {
12488            $block = 6; break;
12489          }
12490          break;
12491        }
12492        case 5: {
12493          $t14_15 = Reader$readOpaqueVec(r);
12494          $t15_16 = $t14_15[0];
12495          $t16_17 = { $get() { return msg.$get().membershipTag; }, $set(v) { const obj = msg.$get(); obj.membershipTag = v; msg.$set(obj); } };
12496          $t16_17.$set($t15_16);
12497          $t17_18 = $t14_15[1];
12498          if ($t17_18) {
12499            $block = 6; break;
12500          }
12501          else {
12502            $block = 7; break;
12503          }
12504          break;
12505        }
12506        case 6: {
12507          return null;
12508          break;
12509        }
12510        case 7: {
12511          $t18_19 = errUnexpectedEOF.$get();
12512          return $t18_19;
12513          break;
12514        }
12515      }
12516    }
12517  }
12518  
12519  $rt.types.getType('smesh.lol/web/common/mls.publicMessage')?.methods?.set('unmarshal', publicMessage$unmarshal);
12520  export function publicMessage$verifyMembershipTag(msg, membershipKey, ctx) {
12521    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
12522    let $block = 0;
12523    while (true) {
12524      switch ($block) {
12525        case 0: {
12526          $t0_1 = { $get() { return msg.$get().content; }, $set(v) { const obj = msg.$get(); obj.content = v; msg.$set(obj); } };
12527          $t1_2 = { $get() { return $t0_1.$get().sender; }, $set(v) { const obj = $t0_1.$get(); obj.sender = v; $t0_1.$set(obj); } };
12528          $t2_3 = { $get() { return $t1_2.$get().senderType; }, $set(v) { const obj = $t1_2.$get(); obj.senderType = v; $t1_2.$set(obj); } };
12529          $t3_4 = $t2_3.$get();
12530          $t4_5 = ($t3_4 !== 1);
12531          if ($t4_5) {
12532            $block = 1; break;
12533          }
12534          else {
12535            $block = 2; break;
12536          }
12537          break;
12538        }
12539        case 1: {
12540          return true;
12541          break;
12542        }
12543        case 2: {
12544          $t5_6 = publicMessage$authenticatedContentTBM(msg, ctx);
12545          $t6_7 = $rt.types.makeInterface('*smesh.lol/web/common/mls.authenticatedContentTBM', $t5_6);
12546          $t7_8 = marshalRaw($t6_7);
12547          $t8_9 = $t7_8[0];
12548          $t9_10 = $t7_8[1];
12549          $t10_11 = ($t9_10 !== null);
12550          if ($t10_11) {
12551            $block = 3; break;
12552          }
12553          else {
12554            $block = 4; break;
12555          }
12556          break;
12557        }
12558        case 3: {
12559          return false;
12560          break;
12561        }
12562        case 4: {
12563          $t11_12 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
12564          $t12_13 = $t11_12.$get();
12565          $t13_14 = { $get() { return msg.$get().membershipTag; }, $set(v) { const obj = msg.$get(); obj.membershipTag = v; msg.$set(obj); } };
12566          $t14_15 = $t13_14.$get();
12567          $t15_16 = CipherSuite$verifyMAC($t12_13, membershipKey, $t8_9, $t14_15);
12568          return $t15_16;
12569          break;
12570        }
12571      }
12572    }
12573  }
12574  
12575  $rt.types.getType('smesh.lol/web/common/mls.publicMessage')?.methods?.set('verifyMembershipTag', publicMessage$verifyMembershipTag);
12576  export function authenticatedContentTBM$marshal(tbm, w) {
12577    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
12578    $t0_1 = { $get() { return tbm.$get().contentTBS; }, $set(v) { const obj = tbm.$get(); obj.contentTBS = v; tbm.$set(obj); } };
12579    $t1_2 = framedContentTBS$marshal($t0_1, w);
12580    $t2_3 = { $get() { return tbm.$get().auth; }, $set(v) { const obj = tbm.$get(); obj.auth = v; tbm.$set(obj); } };
12581    $t3_4 = { $get() { return tbm.$get().contentTBS; }, $set(v) { const obj = tbm.$get(); obj.contentTBS = v; tbm.$set(obj); } };
12582    $t4_5 = { $get() { return $t3_4.$get().content; }, $set(v) { const obj = $t3_4.$get(); obj.content = v; $t3_4.$set(obj); } };
12583    $t5_6 = { $get() { return $t4_5.$get().contentType; }, $set(v) { const obj = $t4_5.$get(); obj.contentType = v; $t4_5.$set(obj); } };
12584    $t6_7 = $t5_6.$get();
12585    $t7_8 = framedContentAuthData$marshal($t2_3, w, $t6_7);
12586    return;
12587  }
12588  
12589  $rt.types.getType('smesh.lol/web/common/mls.authenticatedContentTBM')?.methods?.set('marshal', authenticatedContentTBM$marshal);
12590  export function privateMessage$authenticatedContent(msg, sd, content) {
12591    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28;
12592    $t0_1 = { $value: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12593    $t1_2 = { $get() { return $t0_1.$get().groupID; }, $set(v) { const obj = $t0_1.$get(); obj.groupID = v; $t0_1.$set(obj); } };
12594    $t2_3 = { $get() { return msg.$get().groupID; }, $set(v) { const obj = msg.$get(); obj.groupID = v; msg.$set(obj); } };
12595    $t3_4 = $t2_3.$get();
12596    $t4_5 = { $get() { return $t0_1.$get().epoch; }, $set(v) { const obj = $t0_1.$get(); obj.epoch = v; $t0_1.$set(obj); } };
12597    $t5_6 = { $get() { return msg.$get().epoch; }, $set(v) { const obj = msg.$get(); obj.epoch = v; msg.$set(obj); } };
12598    $t6_7 = $t5_6.$get();
12599    $t7_8 = { $get() { return $t0_1.$get().sender; }, $set(v) { const obj = $t0_1.$get(); obj.sender = v; $t0_1.$set(obj); } };
12600    $t8_9 = { $get() { return $t7_8.$get().senderType; }, $set(v) { const obj = $t7_8.$get(); obj.senderType = v; $t7_8.$set(obj); } };
12601    $t9_10 = { $get() { return $t7_8.$get().leafIndex; }, $set(v) { const obj = $t7_8.$get(); obj.leafIndex = v; $t7_8.$set(obj); } };
12602    $t10_11 = { $get() { return sd.$get().leafIndex; }, $set(v) { const obj = sd.$get(); obj.leafIndex = v; sd.$set(obj); } };
12603    $t11_12 = $t10_11.$get();
12604    $t12_13 = { $get() { return $t0_1.$get().authenticatedData; }, $set(v) { const obj = $t0_1.$get(); obj.authenticatedData = v; $t0_1.$set(obj); } };
12605    $t13_14 = { $get() { return msg.$get().authenticatedData; }, $set(v) { const obj = msg.$get(); obj.authenticatedData = v; msg.$set(obj); } };
12606    $t14_15 = $t13_14.$get();
12607    $t15_16 = { $get() { return $t0_1.$get().contentType; }, $set(v) { const obj = $t0_1.$get(); obj.contentType = v; $t0_1.$set(obj); } };
12608    $t16_17 = { $get() { return msg.$get().contentType; }, $set(v) { const obj = msg.$get(); obj.contentType = v; msg.$set(obj); } };
12609    $t17_18 = $t16_17.$get();
12610    $t18_19 = { $get() { return $t0_1.$get().applicationData; }, $set(v) { const obj = $t0_1.$get(); obj.applicationData = v; $t0_1.$set(obj); } };
12611    $t19_20 = { $get() { return content.$get().applicationData; }, $set(v) { const obj = content.$get(); obj.applicationData = v; content.$set(obj); } };
12612    $t20_21 = $t19_20.$get();
12613    $t21_22 = { $get() { return $t0_1.$get().proposal; }, $set(v) { const obj = $t0_1.$get(); obj.proposal = v; $t0_1.$set(obj); } };
12614    $t22_23 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
12615    $t23_24 = $t22_23.$get();
12616    $t24_25 = { $get() { return $t0_1.$get().commit; }, $set(v) { const obj = $t0_1.$get(); obj.commit = v; $t0_1.$set(obj); } };
12617    $t25_26 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
12618    $t26_27 = $t25_26.$get();
12619    $t1_2.$set($t3_4);
12620    $t4_5.$set($t6_7);
12621    $t8_9.$set(1);
12622    $t9_10.$set($t11_12);
12623    $t12_13.$set($t14_15);
12624    $t15_16.$set($t17_18);
12625    $t18_19.$set($t20_21);
12626    $t21_22.$set($t23_24);
12627    $t24_25.$set($t26_27);
12628    $t27_28 = privateMessageContent$authenticatedContent(content, $t0_1);
12629    return $t27_28;
12630  }
12631  
12632  $rt.types.getType('smesh.lol/web/common/mls.privateMessage')?.methods?.set('authenticatedContent', privateMessage$authenticatedContent);
12633  export function privateMessage$decryptContent(msg, cs, secret, reuseGuard) {
12634    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42;
12635    let $block = 0;
12636    while (true) {
12637      switch ($block) {
12638        case 0: {
12639          $t0_1 = derivePrivateMessageKeyAndNonce(cs, secret, reuseGuard);
12640          $t1_2 = $t0_1[0];
12641          $t2_3 = $t0_1[1];
12642          $t3_4 = $t0_1[2];
12643          $t4_5 = ($t3_4 !== null);
12644          if ($t4_5) {
12645            $block = 1; break;
12646          }
12647          else {
12648            $block = 2; break;
12649          }
12650          break;
12651        }
12652        case 1: {
12653          return [null, $t3_4];
12654          break;
12655        }
12656        case 2: {
12657          $t5_6 = { $value: { groupID: null, epoch: 0n, contentType: 0, authenticatedData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12658          $t6_7 = { $get() { return $t5_6.$get().groupID; }, $set(v) { const obj = $t5_6.$get(); obj.groupID = v; $t5_6.$set(obj); } };
12659          $t7_8 = { $get() { return msg.$get().groupID; }, $set(v) { const obj = msg.$get(); obj.groupID = v; msg.$set(obj); } };
12660          $t8_9 = $t7_8.$get();
12661          $t9_10 = { $get() { return $t5_6.$get().epoch; }, $set(v) { const obj = $t5_6.$get(); obj.epoch = v; $t5_6.$set(obj); } };
12662          $t10_11 = { $get() { return msg.$get().epoch; }, $set(v) { const obj = msg.$get(); obj.epoch = v; msg.$set(obj); } };
12663          $t11_12 = $t10_11.$get();
12664          $t12_13 = { $get() { return $t5_6.$get().contentType; }, $set(v) { const obj = $t5_6.$get(); obj.contentType = v; $t5_6.$set(obj); } };
12665          $t13_14 = { $get() { return msg.$get().contentType; }, $set(v) { const obj = msg.$get(); obj.contentType = v; msg.$set(obj); } };
12666          $t14_15 = $t13_14.$get();
12667          $t15_16 = { $get() { return $t5_6.$get().authenticatedData; }, $set(v) { const obj = $t5_6.$get(); obj.authenticatedData = v; $t5_6.$set(obj); } };
12668          $t16_17 = { $get() { return msg.$get().authenticatedData; }, $set(v) { const obj = msg.$get(); obj.authenticatedData = v; msg.$set(obj); } };
12669          $t17_18 = $t16_17.$get();
12670          $t6_7.$set($t8_9);
12671          $t9_10.$set($t11_12);
12672          $t12_13.$set($t14_15);
12673          $t15_16.$set($t17_18);
12674          $t18_19 = $rt.types.makeInterface('*smesh.lol/web/common/mls.privateContentAAD', $t5_6);
12675          $t19_20 = marshalRaw($t18_19);
12676          $t20_21 = $t19_20[0];
12677          $t21_22 = $t19_20[1];
12678          $t22_23 = ($t21_22 !== null);
12679          if ($t22_23) {
12680            $block = 3; break;
12681          }
12682          else {
12683            $block = 4; break;
12684          }
12685          break;
12686        }
12687        case 3: {
12688          return [null, $t21_22];
12689          break;
12690        }
12691        case 4: {
12692          $t23_24 = { $get() { return msg.$get().ciphertext; }, $set(v) { const obj = msg.$get(); obj.ciphertext = v; msg.$set(obj); } };
12693          $t24_25 = $t23_24.$get();
12694          $t25_26 = CipherSuite$aeadOpen(cs, $t1_2, $t2_3, $t24_25, $t20_21);
12695          $t26_27 = $t25_26[0];
12696          $t27_28 = $t25_26[1];
12697          $t28_29 = ($t27_28 !== null);
12698          if ($t28_29) {
12699            $block = 5; break;
12700          }
12701          else {
12702            $block = 6; break;
12703          }
12704          break;
12705        }
12706        case 5: {
12707          return [null, $t27_28];
12708          break;
12709        }
12710        case 6: {
12711          $t29_30 = { $value: { data: null, pos: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12712          $t30_31 = newReader($t26_27);
12713          $t29_30.$set($rt.builtin.cloneValue($t30_31));
12714          $t31_32 = { $value: { applicationData: null, proposal: null, commit: null, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12715          $t32_33 = { $get() { return msg.$get().contentType; }, $set(v) { const obj = msg.$get(); obj.contentType = v; msg.$set(obj); } };
12716          $t33_34 = $t32_33.$get();
12717          $t34_35 = privateMessageContent$unmarshal($t31_32, $t29_30, $t33_34);
12718          $t35_36 = ($t34_35 !== null);
12719          if ($t35_36) {
12720            $block = 7; break;
12721          }
12722          else {
12723            $block = 10; break;
12724          }
12725          break;
12726        }
12727        case 7: {
12728          return [null, $t34_35];
12729          break;
12730        }
12731        case 8: {
12732          $t36_37 = Reader$readByte($t29_30);
12733          $t37_38 = $t36_37[0];
12734          $t38_39 = $t36_37[1];
12735          $t39_40 = ($t37_38 !== 0);
12736          if ($t39_40) {
12737            $block = 11; break;
12738          }
12739          else {
12740            $block = 10; break;
12741          }
12742          break;
12743        }
12744        case 9: {
12745          return [$t31_32, null];
12746          break;
12747        }
12748        case 10: {
12749          $t40_41 = Reader$empty($t29_30);
12750          if ($t40_41) {
12751            $block = 9; break;
12752          }
12753          else {
12754            $block = 8; break;
12755          }
12756          break;
12757        }
12758        case 11: {
12759          $t41_42 = errNonZeroPadding.$get();
12760          return [null, $t41_42];
12761          break;
12762        }
12763      }
12764    }
12765  }
12766  
12767  $rt.types.getType('smesh.lol/web/common/mls.privateMessage')?.methods?.set('decryptContent', privateMessage$decryptContent);
12768  export function privateMessage$decryptSenderData(msg, cs, senderDataSecret) {
12769    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37;
12770    let $block = 0;
12771    while (true) {
12772      switch ($block) {
12773        case 0: {
12774          $t0_1 = { $get() { return msg.$get().ciphertext; }, $set(v) { const obj = msg.$get(); obj.ciphertext = v; msg.$set(obj); } };
12775          $t1_2 = $t0_1.$get();
12776          $t2_3 = expandSenderDataKey(cs, senderDataSecret, $t1_2);
12777          $t3_4 = $t2_3[0];
12778          $t4_5 = $t2_3[1];
12779          $t5_6 = ($t4_5 !== null);
12780          if ($t5_6) {
12781            $block = 1; break;
12782          }
12783          else {
12784            $block = 2; break;
12785          }
12786          break;
12787        }
12788        case 1: {
12789          return [null, $t4_5];
12790          break;
12791        }
12792        case 2: {
12793          $t6_7 = { $get() { return msg.$get().ciphertext; }, $set(v) { const obj = msg.$get(); obj.ciphertext = v; msg.$set(obj); } };
12794          $t7_8 = $t6_7.$get();
12795          $t8_9 = expandSenderDataNonce(cs, senderDataSecret, $t7_8);
12796          $t9_10 = $t8_9[0];
12797          $t10_11 = $t8_9[1];
12798          $t11_12 = ($t10_11 !== null);
12799          if ($t11_12) {
12800            $block = 3; break;
12801          }
12802          else {
12803            $block = 4; break;
12804          }
12805          break;
12806        }
12807        case 3: {
12808          return [null, $t10_11];
12809          break;
12810        }
12811        case 4: {
12812          $t12_13 = { $value: { groupID: null, epoch: 0n, contentType: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12813          $t13_14 = { $get() { return $t12_13.$get().groupID; }, $set(v) { const obj = $t12_13.$get(); obj.groupID = v; $t12_13.$set(obj); } };
12814          $t14_15 = { $get() { return msg.$get().groupID; }, $set(v) { const obj = msg.$get(); obj.groupID = v; msg.$set(obj); } };
12815          $t15_16 = $t14_15.$get();
12816          $t16_17 = { $get() { return $t12_13.$get().epoch; }, $set(v) { const obj = $t12_13.$get(); obj.epoch = v; $t12_13.$set(obj); } };
12817          $t17_18 = { $get() { return msg.$get().epoch; }, $set(v) { const obj = msg.$get(); obj.epoch = v; msg.$set(obj); } };
12818          $t18_19 = $t17_18.$get();
12819          $t19_20 = { $get() { return $t12_13.$get().contentType; }, $set(v) { const obj = $t12_13.$get(); obj.contentType = v; $t12_13.$set(obj); } };
12820          $t20_21 = { $get() { return msg.$get().contentType; }, $set(v) { const obj = msg.$get(); obj.contentType = v; msg.$set(obj); } };
12821          $t21_22 = $t20_21.$get();
12822          $t13_14.$set($t15_16);
12823          $t16_17.$set($t18_19);
12824          $t19_20.$set($t21_22);
12825          $t22_23 = $rt.types.makeInterface('*smesh.lol/web/common/mls.senderDataAAD', $t12_13);
12826          $t23_24 = marshalRaw($t22_23);
12827          $t24_25 = $t23_24[0];
12828          $t25_26 = $t23_24[1];
12829          $t26_27 = ($t25_26 !== null);
12830          if ($t26_27) {
12831            $block = 5; break;
12832          }
12833          else {
12834            $block = 6; break;
12835          }
12836          break;
12837        }
12838        case 5: {
12839          return [null, $t25_26];
12840          break;
12841        }
12842        case 6: {
12843          $t27_28 = { $get() { return msg.$get().encryptedSenderData; }, $set(v) { const obj = msg.$get(); obj.encryptedSenderData = v; msg.$set(obj); } };
12844          $t28_29 = $t27_28.$get();
12845          $t29_30 = CipherSuite$aeadOpen(cs, $t3_4, $t9_10, $t28_29, $t24_25);
12846          $t30_31 = $t29_30[0];
12847          $t31_32 = $t29_30[1];
12848          $t32_33 = ($t31_32 !== null);
12849          if ($t32_33) {
12850            $block = 7; break;
12851          }
12852          else {
12853            $block = 8; break;
12854          }
12855          break;
12856        }
12857        case 7: {
12858          return [null, $t31_32];
12859          break;
12860        }
12861        case 8: {
12862          $t33_34 = { $value: { leafIndex: 0, generation: 0, reuseGuard: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12863          $t34_35 = $rt.types.makeInterface('*smesh.lol/web/common/mls.senderData', $t33_34);
12864          $t35_36 = unmarshalRaw($t30_31, $t34_35);
12865          $t36_37 = ($t35_36 !== null);
12866          if ($t36_37) {
12867            $block = 9; break;
12868          }
12869          else {
12870            $block = 10; break;
12871          }
12872          break;
12873        }
12874        case 9: {
12875          return [null, $t35_36];
12876          break;
12877        }
12878        case 10: {
12879          return [$t33_34, null];
12880          break;
12881        }
12882      }
12883    }
12884  }
12885  
12886  $rt.types.getType('smesh.lol/web/common/mls.privateMessage')?.methods?.set('decryptSenderData', privateMessage$decryptSenderData);
12887  export function privateMessage$marshal(msg, w) {
12888    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
12889    $t0_1 = { $get() { return msg.$get().groupID; }, $set(v) { const obj = msg.$get(); obj.groupID = v; msg.$set(obj); } };
12890    $t1_2 = $t0_1.$get();
12891    $t2_3 = $t1_2;
12892    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
12893    $t4_5 = { $get() { return msg.$get().epoch; }, $set(v) { const obj = msg.$get(); obj.epoch = v; msg.$set(obj); } };
12894    $t5_6 = $t4_5.$get();
12895    $t6_7 = Writer$addUint64(w, $t5_6);
12896    $t7_8 = { $get() { return msg.$get().contentType; }, $set(v) { const obj = msg.$get(); obj.contentType = v; msg.$set(obj); } };
12897    $t8_9 = $t7_8.$get();
12898    $t9_10 = contentType$marshal($t8_9, w);
12899    $t10_11 = { $get() { return msg.$get().authenticatedData; }, $set(v) { const obj = msg.$get(); obj.authenticatedData = v; msg.$set(obj); } };
12900    $t11_12 = $t10_11.$get();
12901    $t12_13 = Writer$writeOpaqueVec(w, $t11_12);
12902    $t13_14 = { $get() { return msg.$get().encryptedSenderData; }, $set(v) { const obj = msg.$get(); obj.encryptedSenderData = v; msg.$set(obj); } };
12903    $t14_15 = $t13_14.$get();
12904    $t15_16 = Writer$writeOpaqueVec(w, $t14_15);
12905    $t16_17 = { $get() { return msg.$get().ciphertext; }, $set(v) { const obj = msg.$get(); obj.ciphertext = v; msg.$set(obj); } };
12906    $t17_18 = $t16_17.$get();
12907    $t18_19 = Writer$writeOpaqueVec(w, $t17_18);
12908    return;
12909  }
12910  
12911  $rt.types.getType('smesh.lol/web/common/mls.privateMessage')?.methods?.set('marshal', privateMessage$marshal);
12912  export function privateMessage$unmarshal(msg, r) {
12913    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29;
12914    let $block = 0;
12915    while (true) {
12916      switch ($block) {
12917        case 0: {
12918          msg.$set($rt.builtin.cloneValue({ groupID: null, epoch: 0n, contentType: 0, authenticatedData: null, encryptedSenderData: null, ciphertext: null }));
12919          $t0_1 = Reader$readOpaqueVec(r);
12920          $t1_2 = $t0_1[0];
12921          $t2_3 = { $get() { return msg.$get().groupID; }, $set(v) { const obj = msg.$get(); obj.groupID = v; msg.$set(obj); } };
12922          $t3_4 = $t1_2;
12923          $t2_3.$set($t3_4);
12924          $t4_5 = $t0_1[1];
12925          if ($t4_5) {
12926            $block = 2; break;
12927          }
12928          else {
12929            $block = 1; break;
12930          }
12931          break;
12932        }
12933        case 1: {
12934          $t5_6 = errUnexpectedEOF.$get();
12935          return $t5_6;
12936          break;
12937        }
12938        case 2: {
12939          $t6_7 = Reader$readUint64(r);
12940          $t7_8 = $t6_7[0];
12941          $t8_9 = { $get() { return msg.$get().epoch; }, $set(v) { const obj = msg.$get(); obj.epoch = v; msg.$set(obj); } };
12942          $t8_9.$set($t7_8);
12943          $t9_10 = $t6_7[1];
12944          if ($t9_10) {
12945            $block = 4; break;
12946          }
12947          else {
12948            $block = 3; break;
12949          }
12950          break;
12951        }
12952        case 3: {
12953          $t10_11 = errUnexpectedEOF.$get();
12954          return $t10_11;
12955          break;
12956        }
12957        case 4: {
12958          $t11_12 = { $get() { return msg.$get().contentType; }, $set(v) { const obj = msg.$get(); obj.contentType = v; msg.$set(obj); } };
12959          $t12_13 = contentType$unmarshal($t11_12, r);
12960          $t13_14 = ($t12_13 !== null);
12961          if ($t13_14) {
12962            $block = 5; break;
12963          }
12964          else {
12965            $block = 6; break;
12966          }
12967          break;
12968        }
12969        case 5: {
12970          return $t12_13;
12971          break;
12972        }
12973        case 6: {
12974          $t14_15 = Reader$readOpaqueVec(r);
12975          $t15_16 = $t14_15[0];
12976          $t16_17 = { $get() { return msg.$get().authenticatedData; }, $set(v) { const obj = msg.$get(); obj.authenticatedData = v; msg.$set(obj); } };
12977          $t16_17.$set($t15_16);
12978          $t17_18 = $t14_15[1];
12979          if ($t17_18) {
12980            $block = 8; break;
12981          }
12982          else {
12983            $block = 7; break;
12984          }
12985          break;
12986        }
12987        case 7: {
12988          $t18_19 = errUnexpectedEOF.$get();
12989          return $t18_19;
12990          break;
12991        }
12992        case 8: {
12993          $t19_20 = Reader$readOpaqueVec(r);
12994          $t20_21 = $t19_20[0];
12995          $t21_22 = { $get() { return msg.$get().encryptedSenderData; }, $set(v) { const obj = msg.$get(); obj.encryptedSenderData = v; msg.$set(obj); } };
12996          $t21_22.$set($t20_21);
12997          $t22_23 = $t19_20[1];
12998          if ($t22_23) {
12999            $block = 10; break;
13000          }
13001          else {
13002            $block = 9; break;
13003          }
13004          break;
13005        }
13006        case 9: {
13007          $t23_24 = errUnexpectedEOF.$get();
13008          return $t23_24;
13009          break;
13010        }
13011        case 10: {
13012          $t24_25 = Reader$readOpaqueVec(r);
13013          $t25_26 = $t24_25[0];
13014          $t26_27 = { $get() { return msg.$get().ciphertext; }, $set(v) { const obj = msg.$get(); obj.ciphertext = v; msg.$set(obj); } };
13015          $t26_27.$set($t25_26);
13016          $t27_28 = $t24_25[1];
13017          if ($t27_28) {
13018            $block = 12; break;
13019          }
13020          else {
13021            $block = 11; break;
13022          }
13023          break;
13024        }
13025        case 11: {
13026          $t28_29 = errUnexpectedEOF.$get();
13027          return $t28_29;
13028          break;
13029        }
13030        case 12: {
13031          return null;
13032          break;
13033        }
13034      }
13035    }
13036  }
13037  
13038  $rt.types.getType('smesh.lol/web/common/mls.privateMessage')?.methods?.set('unmarshal', privateMessage$unmarshal);
13039  export function senderDataAAD$marshal(aad, w) {
13040    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
13041    $t0_1 = { $get() { return aad.$get().groupID; }, $set(v) { const obj = aad.$get(); obj.groupID = v; aad.$set(obj); } };
13042    $t1_2 = $t0_1.$get();
13043    $t2_3 = $t1_2;
13044    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
13045    $t4_5 = { $get() { return aad.$get().epoch; }, $set(v) { const obj = aad.$get(); obj.epoch = v; aad.$set(obj); } };
13046    $t5_6 = $t4_5.$get();
13047    $t6_7 = Writer$addUint64(w, $t5_6);
13048    $t7_8 = { $get() { return aad.$get().contentType; }, $set(v) { const obj = aad.$get(); obj.contentType = v; aad.$set(obj); } };
13049    $t8_9 = $t7_8.$get();
13050    $t9_10 = contentType$marshal($t8_9, w);
13051    return;
13052  }
13053  
13054  $rt.types.getType('smesh.lol/web/common/mls.senderDataAAD')?.methods?.set('marshal', senderDataAAD$marshal);
13055  export function privateContentAAD$marshal(aad, w) {
13056    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
13057    $t0_1 = { $get() { return aad.$get().groupID; }, $set(v) { const obj = aad.$get(); obj.groupID = v; aad.$set(obj); } };
13058    $t1_2 = $t0_1.$get();
13059    $t2_3 = $t1_2;
13060    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
13061    $t4_5 = { $get() { return aad.$get().epoch; }, $set(v) { const obj = aad.$get(); obj.epoch = v; aad.$set(obj); } };
13062    $t5_6 = $t4_5.$get();
13063    $t6_7 = Writer$addUint64(w, $t5_6);
13064    $t7_8 = { $get() { return aad.$get().contentType; }, $set(v) { const obj = aad.$get(); obj.contentType = v; aad.$set(obj); } };
13065    $t8_9 = $t7_8.$get();
13066    $t9_10 = contentType$marshal($t8_9, w);
13067    $t10_11 = { $get() { return aad.$get().authenticatedData; }, $set(v) { const obj = aad.$get(); obj.authenticatedData = v; aad.$set(obj); } };
13068    $t11_12 = $t10_11.$get();
13069    $t12_13 = Writer$writeOpaqueVec(w, $t11_12);
13070    return;
13071  }
13072  
13073  $rt.types.getType('smesh.lol/web/common/mls.privateContentAAD')?.methods?.set('marshal', privateContentAAD$marshal);
13074  export function privateMessageContent$authenticatedContent(content, fc) {
13075    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
13076    $t0_1 = { $value: { wireFormat: 0, content: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, auth: { signature: null, confirmationTag: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13077    $t1_2 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
13078    $t2_3 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
13079    $t3_4 = fc.$get();
13080    $t4_5 = { $get() { return $t0_1.$get().auth; }, $set(v) { const obj = $t0_1.$get(); obj.auth = v; $t0_1.$set(obj); } };
13081    $t5_6 = { $get() { return content.$get().auth; }, $set(v) { const obj = content.$get(); obj.auth = v; content.$set(obj); } };
13082    $t6_7 = $t5_6.$get();
13083    $t1_2.$set(2);
13084    $t2_3.$set($rt.builtin.cloneValue($t3_4));
13085    $t4_5.$set($rt.builtin.cloneValue($t6_7));
13086    return $t0_1;
13087  }
13088  
13089  $rt.types.getType('smesh.lol/web/common/mls.privateMessageContent')?.methods?.set('authenticatedContent', privateMessageContent$authenticatedContent);
13090  export function privateMessageContent$marshal(content, w, ct) {
13091    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
13092    let $block = 0;
13093    while (true) {
13094      switch ($block) {
13095        case 0: {
13096          $t0_1 = (ct === 1);
13097          if ($t0_1) {
13098            $block = 2; break;
13099          }
13100          else {
13101            $block = 4; break;
13102          }
13103          break;
13104        }
13105        case 1: {
13106          $t1_2 = { $get() { return content.$get().auth; }, $set(v) { const obj = content.$get(); obj.auth = v; content.$set(obj); } };
13107          $t2_3 = framedContentAuthData$marshal($t1_2, w, ct);
13108          return;
13109          break;
13110        }
13111        case 2: {
13112          $t3_4 = { $get() { return content.$get().applicationData; }, $set(v) { const obj = content.$get(); obj.applicationData = v; content.$set(obj); } };
13113          $t4_5 = $t3_4.$get();
13114          $t5_6 = Writer$writeOpaqueVec(w, $t4_5);
13115          $block = 1; break;
13116          break;
13117        }
13118        case 3: {
13119          $t6_7 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
13120          $t7_8 = $t6_7.$get();
13121          $t8_9 = proposal$marshal($t7_8, w);
13122          $block = 1; break;
13123          break;
13124        }
13125        case 4: {
13126          $t9_10 = (ct === 2);
13127          if ($t9_10) {
13128            $block = 3; break;
13129          }
13130          else {
13131            $block = 6; break;
13132          }
13133          break;
13134        }
13135        case 5: {
13136          $t10_11 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
13137          $t11_12 = $t10_11.$get();
13138          $t12_13 = commit$marshal($t11_12, w);
13139          $block = 1; break;
13140          break;
13141        }
13142        case 6: {
13143          $t13_14 = (ct === 3);
13144          if ($t13_14) {
13145            $block = 5; break;
13146          }
13147          else {
13148            $block = 7; break;
13149          }
13150          break;
13151        }
13152        case 7: {
13153          $t14_15 = $rt.types.makeInterface('string', 'unreachable');
13154          $rt.runtime.panic($t14_15);
13155          break;
13156        }
13157      }
13158    }
13159  }
13160  
13161  $rt.types.getType('smesh.lol/web/common/mls.privateMessageContent')?.methods?.set('marshal', privateMessageContent$marshal);
13162  export function privateMessageContent$unmarshal(content, r, ct) {
13163    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
13164    let $block = 0;
13165    while (true) {
13166      switch ($block) {
13167        case 0: {
13168          content.$set($rt.builtin.cloneValue({ applicationData: null, proposal: null, commit: null, auth: { signature: null, confirmationTag: null } }));
13169          $t0_1 = (ct === 1);
13170          if ($t0_1) {
13171            $block = 2; break;
13172          }
13173          else {
13174            $block = 4; break;
13175          }
13176          break;
13177        }
13178        case 1: {
13179          $t2_3 = ($t1_2 !== null);
13180          if ($t2_3) {
13181            $block = 9; break;
13182          }
13183          else {
13184            $block = 10; break;
13185          }
13186          break;
13187        }
13188        case 2: {
13189          $t3_4 = Reader$readOpaqueVec(r);
13190          $t4_5 = $t3_4[0];
13191          $t5_6 = { $get() { return content.$get().applicationData; }, $set(v) { const obj = content.$get(); obj.applicationData = v; content.$set(obj); } };
13192          $t5_6.$set($t4_5);
13193          $t6_7 = $t3_4[1];
13194          if ($t6_7) {
13195            $t1_2 = null;
13196            $block = 1; break;
13197          }
13198          else {
13199            $block = 5; break;
13200          }
13201          break;
13202        }
13203        case 3: {
13204          $t7_8 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13205          $t8_9 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
13206          $t8_9.$set($t7_8);
13207          $t9_10 = { $get() { return content.$get().proposal; }, $set(v) { const obj = content.$get(); obj.proposal = v; content.$set(obj); } };
13208          $t10_11 = $t9_10.$get();
13209          $t11_12 = proposal$unmarshal($t10_11, r);
13210          $t1_2 = $t11_12;
13211          $block = 1; break;
13212          break;
13213        }
13214        case 4: {
13215          $t12_13 = (ct === 2);
13216          if ($t12_13) {
13217            $block = 3; break;
13218          }
13219          else {
13220            $block = 7; break;
13221          }
13222          break;
13223        }
13224        case 5: {
13225          $t13_14 = errUnexpectedEOF.$get();
13226          $t1_2 = $t13_14;
13227          $block = 1; break;
13228          break;
13229        }
13230        case 6: {
13231          $t14_15 = { $value: { proposals: null, path: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13232          $t15_16 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
13233          $t15_16.$set($t14_15);
13234          $t16_17 = { $get() { return content.$get().commit; }, $set(v) { const obj = content.$get(); obj.commit = v; content.$set(obj); } };
13235          $t17_18 = $t16_17.$get();
13236          $t18_19 = commit$unmarshal($t17_18, r);
13237          $t1_2 = $t18_19;
13238          $block = 1; break;
13239          break;
13240        }
13241        case 7: {
13242          $t19_20 = (ct === 3);
13243          if ($t19_20) {
13244            $block = 6; break;
13245          }
13246          else {
13247            $block = 8; break;
13248          }
13249          break;
13250        }
13251        case 8: {
13252          $t20_21 = $rt.types.makeInterface('string', 'unreachable');
13253          $rt.runtime.panic($t20_21);
13254          break;
13255        }
13256        case 9: {
13257          return $t1_2;
13258          break;
13259        }
13260        case 10: {
13261          $t21_22 = { $get() { return content.$get().auth; }, $set(v) { const obj = content.$get(); obj.auth = v; content.$set(obj); } };
13262          $t22_23 = framedContentAuthData$unmarshal($t21_22, r, ct);
13263          return $t22_23;
13264          break;
13265        }
13266      }
13267    }
13268  }
13269  
13270  $rt.types.getType('smesh.lol/web/common/mls.privateMessageContent')?.methods?.set('unmarshal', privateMessageContent$unmarshal);
13271  export function senderData$marshal(data, w) {
13272    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
13273    $t0_1 = { $get() { return data.$get().leafIndex; }, $set(v) { const obj = data.$get(); obj.leafIndex = v; data.$set(obj); } };
13274    $t1_2 = $t0_1.$get();
13275    $t2_3 = $t1_2;
13276    $t3_4 = Writer$addUint32(w, $t2_3);
13277    $t4_5 = { $get() { return data.$get().generation; }, $set(v) { const obj = data.$get(); obj.generation = v; data.$set(obj); } };
13278    $t5_6 = $t4_5.$get();
13279    $t6_7 = Writer$addUint32(w, $t5_6);
13280    $t7_8 = { $get() { return data.$get().reuseGuard; }, $set(v) { const obj = data.$get(); obj.reuseGuard = v; data.$set(obj); } };
13281    $t8_9 = $rt.builtin.sliceSlice($t7_8.$get(), undefined, undefined, undefined);
13282    $t9_10 = Writer$addBytes(w, $t8_9);
13283    return;
13284  }
13285  
13286  $rt.types.getType('smesh.lol/web/common/mls.senderData')?.methods?.set('marshal', senderData$marshal);
13287  export function senderData$unmarshal(data, r) {
13288    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31;
13289    let $block = 0;
13290    while (true) {
13291      switch ($block) {
13292        case 0: {
13293          $t0_1 = Reader$readUint32(r);
13294          $t1_2 = $t0_1[0];
13295          $t2_3 = $t0_1[1];
13296          if ($t2_3) {
13297            $block = 2; break;
13298          }
13299          else {
13300            $block = 1; break;
13301          }
13302          break;
13303        }
13304        case 1: {
13305          $t3_4 = errUnexpectedEOF.$get();
13306          return $t3_4;
13307          break;
13308        }
13309        case 2: {
13310          $t4_5 = $t1_2;
13311          $t5_6 = { $get() { return data.$get().leafIndex; }, $set(v) { const obj = data.$get(); obj.leafIndex = v; data.$set(obj); } };
13312          $t5_6.$set($t4_5);
13313          $t6_7 = Reader$readUint32(r);
13314          $t7_8 = $t6_7[0];
13315          $t8_9 = { $get() { return data.$get().generation; }, $set(v) { const obj = data.$get(); obj.generation = v; data.$set(obj); } };
13316          $t8_9.$set($t7_8);
13317          $t9_10 = $t6_7[1];
13318          if ($t9_10) {
13319            $block = 4; break;
13320          }
13321          else {
13322            $block = 3; break;
13323          }
13324          break;
13325        }
13326        case 3: {
13327          $t10_11 = errUnexpectedEOF.$get();
13328          return $t10_11;
13329          break;
13330        }
13331        case 4: {
13332          $t11_12 = Reader$readN(r, 4);
13333          $t12_13 = $t11_12[0];
13334          $t13_14 = $t11_12[1];
13335          if ($t13_14) {
13336            $block = 6; break;
13337          }
13338          else {
13339            $block = 5; break;
13340          }
13341          break;
13342        }
13343        case 5: {
13344          $t14_15 = errUnexpectedEOF.$get();
13345          return $t14_15;
13346          break;
13347        }
13348        case 6: {
13349          $t15_16 = { $get() { return data.$get().reuseGuard; }, $set(v) { const obj = data.$get(); obj.reuseGuard = v; data.$set(obj); } };
13350          $t16_17 = $t12_13.addr(0);
13351          $t17_18 = $t16_17.$get();
13352          $t18_19 = $t15_16.$get().addr(0);
13353          $t18_19.$set($t17_18);
13354          $t19_20 = { $get() { return data.$get().reuseGuard; }, $set(v) { const obj = data.$get(); obj.reuseGuard = v; data.$set(obj); } };
13355          $t20_21 = $t12_13.addr(1);
13356          $t21_22 = $t20_21.$get();
13357          $t22_23 = $t19_20.$get().addr(1);
13358          $t22_23.$set($t21_22);
13359          $t23_24 = { $get() { return data.$get().reuseGuard; }, $set(v) { const obj = data.$get(); obj.reuseGuard = v; data.$set(obj); } };
13360          $t24_25 = $t12_13.addr(2);
13361          $t25_26 = $t24_25.$get();
13362          $t26_27 = $t23_24.$get().addr(2);
13363          $t26_27.$set($t25_26);
13364          $t27_28 = { $get() { return data.$get().reuseGuard; }, $set(v) { const obj = data.$get(); obj.reuseGuard = v; data.$set(obj); } };
13365          $t28_29 = $t12_13.addr(3);
13366          $t29_30 = $t28_29.$get();
13367          $t30_31 = $t27_28.$get().addr(3);
13368          $t30_31.$set($t29_30);
13369          return null;
13370          break;
13371        }
13372      }
13373    }
13374  }
13375  
13376  $rt.types.getType('smesh.lol/web/common/mls.senderData')?.methods?.set('unmarshal', senderData$unmarshal);
13377  export function Group$CreateApplicationMessage(g, data) {
13378    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29;
13379    let $block = 0;
13380    while (true) {
13381      switch ($block) {
13382        case 0: {
13383          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13384          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
13385          $t2_3 = $t1_2.$get();
13386          $t3_4 = { $value: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13387          $t4_5 = { $get() { return $t3_4.$get().groupID; }, $set(v) { const obj = $t3_4.$get(); obj.groupID = v; $t3_4.$set(obj); } };
13388          $t5_6 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13389          $t6_7 = { $get() { return $t5_6.$get().groupID; }, $set(v) { const obj = $t5_6.$get(); obj.groupID = v; $t5_6.$set(obj); } };
13390          $t7_8 = $t6_7.$get();
13391          $t8_9 = { $get() { return $t3_4.$get().epoch; }, $set(v) { const obj = $t3_4.$get(); obj.epoch = v; $t3_4.$set(obj); } };
13392          $t9_10 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13393          $t10_11 = { $get() { return $t9_10.$get().epoch; }, $set(v) { const obj = $t9_10.$get(); obj.epoch = v; $t9_10.$set(obj); } };
13394          $t11_12 = $t10_11.$get();
13395          $t12_13 = { $get() { return $t3_4.$get().sender; }, $set(v) { const obj = $t3_4.$get(); obj.sender = v; $t3_4.$set(obj); } };
13396          $t13_14 = { $get() { return $t12_13.$get().senderType; }, $set(v) { const obj = $t12_13.$get(); obj.senderType = v; $t12_13.$set(obj); } };
13397          $t14_15 = { $get() { return $t12_13.$get().leafIndex; }, $set(v) { const obj = $t12_13.$get(); obj.leafIndex = v; $t12_13.$set(obj); } };
13398          $t15_16 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
13399          $t16_17 = $t15_16.$get();
13400          $t17_18 = { $get() { return $t3_4.$get().contentType; }, $set(v) { const obj = $t3_4.$get(); obj.contentType = v; $t3_4.$set(obj); } };
13401          $t18_19 = { $get() { return $t3_4.$get().applicationData; }, $set(v) { const obj = $t3_4.$get(); obj.applicationData = v; $t3_4.$set(obj); } };
13402          $t4_5.$set($t7_8);
13403          $t8_9.$set($t11_12);
13404          $t13_14.$set(1);
13405          $t14_15.$set($t16_17);
13406          $t17_18.$set(1);
13407          $t18_19.$set(data);
13408          $t19_20 = { $get() { return g.$get().signaturePriv; }, $set(v) { const obj = g.$get(); obj.signaturePriv = v; g.$set(obj); } };
13409          $t20_21 = $t19_20.$get();
13410          $t21_22 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13411          $t22_23 = signPrivateMessageContent($t2_3, $t20_21, $t3_4, $t21_22);
13412          $t23_24 = $t22_23[0];
13413          $t24_25 = $t22_23[1];
13414          $t25_26 = ($t24_25 !== null);
13415          if ($t25_26) {
13416            $block = 1; break;
13417          }
13418          else {
13419            $block = 2; break;
13420          }
13421          break;
13422        }
13423        case 1: {
13424          return [null, $t24_25];
13425          break;
13426        }
13427        case 2: {
13428          $t26_27 = Group$encryptPrivateMessage(g, $t3_4, $t23_24);
13429          $t27_28 = $t26_27[0];
13430          $t28_29 = $t26_27[1];
13431          return [$t27_28, $t28_29];
13432          break;
13433        }
13434      }
13435    }
13436  }
13437  
13438  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('CreateApplicationMessage', Group$CreateApplicationMessage);
13439  export function Group$CreateWelcome(g, keyPkgs) {
13440    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139, $t139_140, $t140_141, $t141_142, $t142_143, $t143_144, $t144_145, $t145_146, $t146_147, $t147_148, $t148_149, $t149_150, $t150_151, $t151_152, $t152_153, $t153_154, $t154_155, $t155_156, $t156_157, $t157_158, $t158_159, $t159_160, $t160_161, $t161_162, $t162_163, $t163_164, $t164_165, $t165_166, $t166_167, $t167_168, $t168_169, $t169_170, $t170_171;
13441    let $block = 0;
13442    while (true) {
13443      switch ($block) {
13444        case 0: {
13445          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13446          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
13447          $t2_3 = $t1_2.$get();
13448          $t3_4 = $rt.builtin.len(keyPkgs);
13449          $t4_5 = $rt.builtin.makeSlice($t3_4, $t3_4, { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null });
13450          $t5_6 = $rt.builtin.len(keyPkgs);
13451          $t6_7 = $rt.builtin.makeSlice($t5_6, $t5_6, { typ: 0, proposal: null, reference: null });
13452          $t7_8 = $rt.builtin.len(keyPkgs);
13453          $t8_9 = -1;
13454          $block = 1; break;
13455          break;
13456        }
13457        case 1: {
13458          $t9_10 = ($t8_9 + 1);
13459          $t10_11 = ($t9_10 < $t7_8);
13460          if ($t10_11) {
13461            $block = 2; break;
13462          }
13463          else {
13464            $block = 3; break;
13465          }
13466          break;
13467        }
13468        case 2: {
13469          $t11_12 = keyPkgs.addr($t9_10);
13470          $t12_13 = $t11_12.$get();
13471          $t13_14 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13472          $t14_15 = { $get() { return $t13_14.$get().proposalType; }, $set(v) { const obj = $t13_14.$get(); obj.proposalType = v; $t13_14.$set(obj); } };
13473          $t15_16 = { $get() { return $t13_14.$get().add; }, $set(v) { const obj = $t13_14.$get(); obj.add = v; $t13_14.$set(obj); } };
13474          $t16_17 = { $value: { keyPackage: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13475          $t17_18 = { $get() { return $t16_17.$get().keyPackage; }, $set(v) { const obj = $t16_17.$get(); obj.keyPackage = v; $t16_17.$set(obj); } };
13476          $t17_18.$set($rt.builtin.cloneValue($t12_13));
13477          $t14_15.$set(1);
13478          $t15_16.$set($t16_17);
13479          $t18_19 = $t13_14.$get();
13480          $t19_20 = $t4_5.addr($t9_10);
13481          $t19_20.$set($rt.builtin.cloneValue($t18_19));
13482          $t20_21 = { $value: { typ: 0, proposal: null, reference: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13483          $t21_22 = { $get() { return $t20_21.$get().typ; }, $set(v) { const obj = $t20_21.$get(); obj.typ = v; $t20_21.$set(obj); } };
13484          $t22_23 = { $get() { return $t20_21.$get().proposal; }, $set(v) { const obj = $t20_21.$get(); obj.proposal = v; $t20_21.$set(obj); } };
13485          $t23_24 = $t4_5.addr($t9_10);
13486          $t21_22.$set(1);
13487          $t22_23.$set($t23_24);
13488          $t24_25 = $t20_21.$get();
13489          $t25_26 = $t6_7.addr($t9_10);
13490          $t25_26.$set($rt.builtin.cloneValue($t24_25));
13491          $t8_9 = $t9_10;
13492          $block = 1; break;
13493          break;
13494        }
13495        case 3: {
13496          $t26_27 = { $value: { proposals: null, path: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13497          $t27_28 = { $get() { return $t26_27.$get().proposals; }, $set(v) { const obj = $t26_27.$get(); obj.proposals = v; $t26_27.$set(obj); } };
13498          $t27_28.$set($t6_7);
13499          $t28_29 = { $value: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13500          $t29_30 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13501          $t30_31 = $t29_30.$get();
13502          $t28_29.$set($rt.builtin.cloneValue($t30_31));
13503          $t31_32 = { $get() { return $t28_29.$get().epoch; }, $set(v) { const obj = $t28_29.$get(); obj.epoch = v; $t28_29.$set(obj); } };
13504          $t32_33 = $t31_32.$get();
13505          $t33_34 = BigInt.asUintN(64, $t32_33 + 1n);
13506          $t34_35 = { $get() { return $t28_29.$get().epoch; }, $set(v) { const obj = $t28_29.$get(); obj.epoch = v; $t28_29.$set(obj); } };
13507          $t34_35.$set($t33_34);
13508          $t35_36 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13509          $t36_37 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
13510          $t37_38 = $t36_37.$get();
13511          $t38_39 = ratchetTree$copy($t37_38);
13512          $t35_36.$set($t38_39);
13513          $t39_40 = $rt.builtin.len($t4_5);
13514          $t40_41 = $rt.builtin.makeSlice($t39_40, $t39_40, 0);
13515          $t41_42 = $rt.builtin.len($t40_41);
13516          $t42_43 = -1;
13517          $block = 4; break;
13518          break;
13519        }
13520        case 4: {
13521          $t43_44 = ($t42_43 + 1);
13522          $t44_45 = ($t43_44 < $t41_42);
13523          if ($t44_45) {
13524            $block = 5; break;
13525          }
13526          else {
13527            $block = 6; break;
13528          }
13529          break;
13530        }
13531        case 5: {
13532          $t45_46 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
13533          $t46_47 = $t45_46.$get();
13534          $t47_48 = $t40_41.addr($t43_44);
13535          $t47_48.$set($t46_47);
13536          $t42_43 = $t43_44;
13537          $block = 4; break;
13538          break;
13539        }
13540        case 6: {
13541          $t48_49 = ratchetTree$apply($t35_36, $t4_5, $t40_41);
13542          $t49_50 = $t35_36.$get();
13543          $t50_51 = ratchetTree$computeRootTreeHash($t49_50, $t2_3);
13544          $t51_52 = $t50_51[0];
13545          $t52_53 = { $get() { return $t28_29.$get().treeHash; }, $set(v) { const obj = $t28_29.$get(); obj.treeHash = v; $t28_29.$set(obj); } };
13546          $t52_53.$set($t51_52);
13547          $t53_54 = $t50_51[1];
13548          $t54_55 = ($t53_54 !== null);
13549          if ($t54_55) {
13550            $block = 7; break;
13551          }
13552          else {
13553            $block = 8; break;
13554          }
13555          break;
13556        }
13557        case 7: {
13558          return [null, null, $t53_54];
13559          break;
13560        }
13561        case 8: {
13562          $t55_56 = CipherSuite$ExtractSize($t2_3);
13563          $t56_57 = $rt.builtin.makeSlice($t55_56, $t55_56, 0);
13564          $t57_58 = extractPSKSecret($t2_3, null, null);
13565          $t58_59 = $t57_58[0];
13566          $t59_60 = $t57_58[1];
13567          $t60_61 = ($t59_60 !== null);
13568          if ($t60_61) {
13569            $block = 9; break;
13570          }
13571          else {
13572            $block = 10; break;
13573          }
13574          break;
13575        }
13576        case 9: {
13577          return [null, null, $t59_60];
13578          break;
13579        }
13580        case 10: {
13581          $t61_62 = { $value: { groupID: null, epoch: 0n, sender: { senderType: 0, leafIndex: 0, senderIndex: 0 }, authenticatedData: null, contentType: 0, applicationData: null, proposal: null, commit: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13582          $t62_63 = { $get() { return $t61_62.$get().groupID; }, $set(v) { const obj = $t61_62.$get(); obj.groupID = v; $t61_62.$set(obj); } };
13583          $t63_64 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13584          $t64_65 = { $get() { return $t63_64.$get().groupID; }, $set(v) { const obj = $t63_64.$get(); obj.groupID = v; $t63_64.$set(obj); } };
13585          $t65_66 = $t64_65.$get();
13586          $t66_67 = { $get() { return $t61_62.$get().epoch; }, $set(v) { const obj = $t61_62.$get(); obj.epoch = v; $t61_62.$set(obj); } };
13587          $t67_68 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13588          $t68_69 = { $get() { return $t67_68.$get().epoch; }, $set(v) { const obj = $t67_68.$get(); obj.epoch = v; $t67_68.$set(obj); } };
13589          $t69_70 = $t68_69.$get();
13590          $t70_71 = { $get() { return $t61_62.$get().sender; }, $set(v) { const obj = $t61_62.$get(); obj.sender = v; $t61_62.$set(obj); } };
13591          $t71_72 = { $get() { return $t70_71.$get().senderType; }, $set(v) { const obj = $t70_71.$get(); obj.senderType = v; $t70_71.$set(obj); } };
13592          $t72_73 = { $get() { return $t70_71.$get().leafIndex; }, $set(v) { const obj = $t70_71.$get(); obj.leafIndex = v; $t70_71.$set(obj); } };
13593          $t73_74 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
13594          $t74_75 = $t73_74.$get();
13595          $t75_76 = { $get() { return $t61_62.$get().contentType; }, $set(v) { const obj = $t61_62.$get(); obj.contentType = v; $t61_62.$set(obj); } };
13596          $t76_77 = { $get() { return $t61_62.$get().commit; }, $set(v) { const obj = $t61_62.$get(); obj.commit = v; $t61_62.$set(obj); } };
13597          $t62_63.$set($t65_66);
13598          $t66_67.$set($t69_70);
13599          $t71_72.$set(1);
13600          $t72_73.$set($t74_75);
13601          $t75_76.$set(3);
13602          $t76_77.$set($t26_27);
13603          $t77_78 = { $get() { return g.$get().signaturePriv; }, $set(v) { const obj = g.$get(); obj.signaturePriv = v; g.$set(obj); } };
13604          $t78_79 = $t77_78.$get();
13605          $t79_80 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13606          $t80_81 = signPrivateMessageContent($t2_3, $t78_79, $t61_62, $t79_80);
13607          $t81_82 = $t80_81[0];
13608          $t82_83 = $t80_81[1];
13609          $t83_84 = ($t82_83 !== null);
13610          if ($t83_84) {
13611            $block = 11; break;
13612          }
13613          else {
13614            $block = 12; break;
13615          }
13616          break;
13617        }
13618        case 11: {
13619          return [null, null, $t82_83];
13620          break;
13621        }
13622        case 12: {
13623          $t84_85 = privateMessageContent$authenticatedContent($t81_82, $t61_62);
13624          $t85_86 = { $get() { return $t81_82.$get().auth; }, $set(v) { const obj = $t81_82.$get(); obj.auth = v; $t81_82.$set(obj); } };
13625          $t86_87 = authenticatedContent$confirmedTranscriptHashInput($t84_85);
13626          $t87_88 = { $get() { return g.$get().interimTranscriptHash; }, $set(v) { const obj = g.$get(); obj.interimTranscriptHash = v; g.$set(obj); } };
13627          $t88_89 = $t87_88.$get();
13628          $t89_90 = confirmedTranscriptHashInput$hashValue($t86_87, $t2_3, $t88_89);
13629          $t90_91 = $t89_90[0];
13630          $t91_92 = { $get() { return $t28_29.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t28_29.$get(); obj.confirmedTranscriptHash = v; $t28_29.$set(obj); } };
13631          $t91_92.$set($t90_91);
13632          $t92_93 = $t89_90[1];
13633          $t93_94 = ($t92_93 !== null);
13634          if ($t93_94) {
13635            $block = 13; break;
13636          }
13637          else {
13638            $block = 14; break;
13639          }
13640          break;
13641        }
13642        case 13: {
13643          return [null, null, $t92_93];
13644          break;
13645        }
13646        case 14: {
13647          $t94_95 = { $get() { return g.$get().initSecret; }, $set(v) { const obj = g.$get(); obj.initSecret = v; g.$set(obj); } };
13648          $t95_96 = $t94_95.$get();
13649          $t96_97 = groupContext$extractJoinerSecret($t28_29, $t95_96, $t56_57);
13650          $t97_98 = $t96_97[0];
13651          $t98_99 = $t96_97[1];
13652          $t99_100 = ($t98_99 !== null);
13653          if ($t99_100) {
13654            $block = 15; break;
13655          }
13656          else {
13657            $block = 16; break;
13658          }
13659          break;
13660        }
13661        case 15: {
13662          return [null, null, $t98_99];
13663          break;
13664        }
13665        case 16: {
13666          $t100_101 = groupContext$extractEpochSecret($t28_29, $t97_98, $t58_59);
13667          $t101_102 = $t100_101[0];
13668          $t102_103 = $t100_101[1];
13669          $t103_104 = ($t102_103 !== null);
13670          if ($t103_104) {
13671            $block = 17; break;
13672          }
13673          else {
13674            $block = 18; break;
13675          }
13676          break;
13677        }
13678        case 17: {
13679          return [null, null, $t102_103];
13680          break;
13681        }
13682        case 18: {
13683          $t104_105 = groupContext$signConfirmationTag($t28_29, $t101_102);
13684          $t105_106 = $t104_105[0];
13685          $t106_107 = $t104_105[1];
13686          $t107_108 = ($t106_107 !== null);
13687          if ($t107_108) {
13688            $block = 19; break;
13689          }
13690          else {
13691            $block = 20; break;
13692          }
13693          break;
13694        }
13695        case 19: {
13696          return [null, null, $t106_107];
13697          break;
13698        }
13699        case 20: {
13700          $t108_109 = { $get() { return $t85_86.$get().confirmationTag; }, $set(v) { const obj = $t85_86.$get(); obj.confirmationTag = v; $t85_86.$set(obj); } };
13701          $t108_109.$set($t105_106);
13702          $t109_110 = $t35_36.$get();
13703          $t110_111 = $rt.types.makeInterface('smesh.lol/web/common/mls.ratchetTree', $t109_110);
13704          $t111_112 = marshalRaw($t110_111);
13705          $t112_113 = $t111_112[0];
13706          $t113_114 = $t111_112[1];
13707          $t114_115 = ($t113_114 !== null);
13708          if ($t114_115) {
13709            $block = 21; break;
13710          }
13711          else {
13712            $block = 22; break;
13713          }
13714          break;
13715        }
13716        case 21: {
13717          return [null, null, $t113_114];
13718          break;
13719        }
13720        case 22: {
13721          $t115_116 = { $value: { groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, extensions: null, confirmationTag: null, signer: 0, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13722          $t116_117 = { $get() { return $t115_116.$get().groupContext; }, $set(v) { const obj = $t115_116.$get(); obj.groupContext = v; $t115_116.$set(obj); } };
13723          $t117_118 = $t28_29.$get();
13724          $t118_119 = { $get() { return $t115_116.$get().confirmationTag; }, $set(v) { const obj = $t115_116.$get(); obj.confirmationTag = v; $t115_116.$set(obj); } };
13725          $t119_120 = { $get() { return $t115_116.$get().signer; }, $set(v) { const obj = $t115_116.$get(); obj.signer = v; $t115_116.$set(obj); } };
13726          $t120_121 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
13727          $t121_122 = $t120_121.$get();
13728          $t122_123 = { $get() { return $t115_116.$get().extensions; }, $set(v) { const obj = $t115_116.$get(); obj.extensions = v; $t115_116.$set(obj); } };
13729          $t123_124 = { $value: $rt.builtin.makeSlice(1, 1, { extensionType: 0, extensionData: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
13730          $t124_125 = $t123_124.$get().addr(0);
13731          $t125_126 = { $get() { return $t124_125.$get().extensionType; }, $set(v) { const obj = $t124_125.$get(); obj.extensionType = v; $t124_125.$set(obj); } };
13732          $t126_127 = { $get() { return $t124_125.$get().extensionData; }, $set(v) { const obj = $t124_125.$get(); obj.extensionData = v; $t124_125.$set(obj); } };
13733          $t125_126.$set(2);
13734          $t126_127.$set($t112_113);
13735          $t127_128 = $rt.builtin.sliceSlice($t123_124.$get(), undefined, undefined, undefined);
13736          $t116_117.$set($rt.builtin.cloneValue($t117_118));
13737          $t118_119.$set($t105_106);
13738          $t119_120.$set($t121_122);
13739          $t122_123.$set($t127_128);
13740          $t128_129 = { $get() { return g.$get().signaturePriv; }, $set(v) { const obj = g.$get(); obj.signaturePriv = v; g.$set(obj); } };
13741          $t129_130 = $t128_129.$get();
13742          $t130_131 = groupInfo$sign($t115_116, $t129_130);
13743          $t131_132 = ($t130_131 !== null);
13744          if ($t131_132) {
13745            $block = 23; break;
13746          }
13747          else {
13748            $block = 24; break;
13749          }
13750          break;
13751        }
13752        case 23: {
13753          return [null, null, $t130_131];
13754          break;
13755        }
13756        case 24: {
13757          $t132_133 = groupInfo$encrypt($t115_116, $t97_98, $t58_59);
13758          $t133_134 = $t132_133[0];
13759          $t134_135 = $t132_133[1];
13760          $t135_136 = ($t134_135 !== null);
13761          if ($t135_136) {
13762            $block = 25; break;
13763          }
13764          else {
13765            $block = 26; break;
13766          }
13767          break;
13768        }
13769        case 25: {
13770          return [null, null, $t134_135];
13771          break;
13772        }
13773        case 26: {
13774          $t136_137 = { $value: { joinerSecret: null, pathSecret: null, psks: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13775          $t137_138 = { $get() { return $t136_137.$get().joinerSecret; }, $set(v) { const obj = $t136_137.$get(); obj.joinerSecret = v; $t136_137.$set(obj); } };
13776          $t137_138.$set($t97_98);
13777          $t138_139 = $rt.builtin.len(keyPkgs);
13778          $t139_140 = $rt.builtin.makeSlice($t138_139, $t138_139, { newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } });
13779          $t140_141 = $rt.builtin.len(keyPkgs);
13780          $t141_142 = -1;
13781          $block = 27; break;
13782          break;
13783        }
13784        case 27: {
13785          $t142_143 = ($t141_142 + 1);
13786          $t143_144 = ($t142_143 < $t140_141);
13787          if ($t143_144) {
13788            $block = 28; break;
13789          }
13790          else {
13791            $block = 29; break;
13792          }
13793          break;
13794        }
13795        case 28: {
13796          $t144_145 = keyPkgs.addr($t142_143);
13797          $t145_146 = $t144_145.$get();
13798          $t146_147 = { $value: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13799          $t146_147.$set($rt.builtin.cloneValue($t145_146));
13800          $t147_148 = KeyPackage$GenerateRef($t146_147);
13801          $t148_149 = $t147_148[0];
13802          $t149_150 = $t147_148[1];
13803          $t150_151 = ($t149_150 !== null);
13804          if ($t150_151) {
13805            $block = 30; break;
13806          }
13807          else {
13808            $block = 31; break;
13809          }
13810          break;
13811        }
13812        case 29: {
13813          $t151_152 = Group$encryptPrivateMessage(g, $t61_62, $t81_82);
13814          $t152_153 = $t151_152[0];
13815          $t153_154 = $t151_152[1];
13816          $t154_155 = ($t153_154 !== null);
13817          if ($t154_155) {
13818            $block = 34; break;
13819          }
13820          else {
13821            $block = 35; break;
13822          }
13823          break;
13824        }
13825        case 30: {
13826          return [null, null, $t149_150];
13827          break;
13828        }
13829        case 31: {
13830          $t155_156 = { $get() { return $t146_147.$get().initKey; }, $set(v) { const obj = $t146_147.$get(); obj.initKey = v; $t146_147.$set(obj); } };
13831          $t156_157 = $t155_156.$get();
13832          $t157_158 = groupSecrets$encrypt($t136_137, $t2_3, $t156_157, $t133_134);
13833          $t158_159 = $t157_158[0];
13834          $t159_160 = $t157_158[1];
13835          $t160_161 = ($t159_160 !== null);
13836          if ($t160_161) {
13837            $block = 32; break;
13838          }
13839          else {
13840            $block = 33; break;
13841          }
13842          break;
13843        }
13844        case 32: {
13845          return [null, null, $t159_160];
13846          break;
13847        }
13848        case 33: {
13849          $t161_162 = { $value: { newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13850          $t162_163 = { $get() { return $t161_162.$get().newMember; }, $set(v) { const obj = $t161_162.$get(); obj.newMember = v; $t161_162.$set(obj); } };
13851          $t163_164 = { $get() { return $t161_162.$get().encryptedGroupSecrets; }, $set(v) { const obj = $t161_162.$get(); obj.encryptedGroupSecrets = v; $t161_162.$set(obj); } };
13852          $t164_165 = $t158_159.$get();
13853          $t162_163.$set($t148_149);
13854          $t163_164.$set($rt.builtin.cloneValue($t164_165));
13855          $t165_166 = $t161_162.$get();
13856          $t166_167 = $t139_140.addr($t142_143);
13857          $t166_167.$set($rt.builtin.cloneValue($t165_166));
13858          $t141_142 = $t142_143;
13859          $block = 27; break;
13860          break;
13861        }
13862        case 34: {
13863          return [null, null, $t153_154];
13864          break;
13865        }
13866        case 35: {
13867          $t167_168 = { $value: { cipherSuite: 0, secrets: null, encryptedGroupInfo: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13868          $t168_169 = { $get() { return $t167_168.$get().cipherSuite; }, $set(v) { const obj = $t167_168.$get(); obj.cipherSuite = v; $t167_168.$set(obj); } };
13869          $t169_170 = { $get() { return $t167_168.$get().secrets; }, $set(v) { const obj = $t167_168.$get(); obj.secrets = v; $t167_168.$set(obj); } };
13870          $t170_171 = { $get() { return $t167_168.$get().encryptedGroupInfo; }, $set(v) { const obj = $t167_168.$get(); obj.encryptedGroupInfo = v; $t167_168.$set(obj); } };
13871          $t168_169.$set($t2_3);
13872          $t169_170.$set($t139_140);
13873          $t170_171.$set($t133_134);
13874          return [$t167_168, $t152_153, null];
13875          break;
13876        }
13877      }
13878    }
13879  }
13880  
13881  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('CreateWelcome', Group$CreateWelcome);
13882  export function Group$DeriveExporter(g, label, context, length) {
13883    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
13884    let $block = 0;
13885    while (true) {
13886      switch ($block) {
13887        case 0: {
13888          $t0_1 = Group$ExporterSecret(g);
13889          $t1_2 = $t0_1[0];
13890          $t2_3 = $t0_1[1];
13891          $t3_4 = ($t2_3 !== null);
13892          if ($t3_4) {
13893            $block = 1; break;
13894          }
13895          else {
13896            $block = 2; break;
13897          }
13898          break;
13899        }
13900        case 1: {
13901          return [null, $t2_3];
13902          break;
13903        }
13904        case 2: {
13905          $t4_5 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13906          $t5_6 = { $get() { return $t4_5.$get().cipherSuite; }, $set(v) { const obj = $t4_5.$get(); obj.cipherSuite = v; $t4_5.$set(obj); } };
13907          $t6_7 = $t5_6.$get();
13908          $t7_8 = deriveExporter($t6_7, $t1_2, label, context, length);
13909          $t8_9 = $t7_8[0];
13910          $t9_10 = $t7_8[1];
13911          return [$t8_9, $t9_10];
13912          break;
13913        }
13914      }
13915    }
13916  }
13917  
13918  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('DeriveExporter', Group$DeriveExporter);
13919  export function Group$Epoch(g) {
13920    let $t0_1, $t1_2, $t2_3;
13921    $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13922    $t1_2 = { $get() { return $t0_1.$get().epoch; }, $set(v) { const obj = $t0_1.$get(); obj.epoch = v; $t0_1.$set(obj); } };
13923    $t2_3 = $t1_2.$get();
13924    return $t2_3;
13925  }
13926  
13927  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('Epoch', Group$Epoch);
13928  export function Group$ExporterSecret(g) {
13929    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
13930    $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13931    $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
13932    $t2_3 = $t1_2.$get();
13933    $t3_4 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
13934    $t4_5 = $t3_4.$get();
13935    $t5_6 = secretLabelExporter.$get();
13936    $t6_7 = CipherSuite$deriveSecret($t2_3, $t4_5, $t5_6);
13937    $t7_8 = $t6_7[0];
13938    $t8_9 = $t6_7[1];
13939    return [$t7_8, $t8_9];
13940  }
13941  
13942  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('ExporterSecret', Group$ExporterSecret);
13943  export function Group$FindGroupContextExtension(g, t) {
13944    let $t0_1, $t1_2, $t2_3, $t3_4;
13945    $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13946    $t1_2 = { $get() { return $t0_1.$get().extensions; }, $set(v) { const obj = $t0_1.$get(); obj.extensions = v; $t0_1.$set(obj); } };
13947    $t2_3 = $t1_2.$get();
13948    $t3_4 = findExtensionData($t2_3, t);
13949    return $t3_4;
13950  }
13951  
13952  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('FindGroupContextExtension', Group$FindGroupContextExtension);
13953  export function Group$GroupContextExtensions(g) {
13954    let $t0_1, $t1_2, $t2_3;
13955    $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13956    $t1_2 = { $get() { return $t0_1.$get().extensions; }, $set(v) { const obj = $t0_1.$get(); obj.extensions = v; $t0_1.$set(obj); } };
13957    $t2_3 = $t1_2.$get();
13958    return $t2_3;
13959  }
13960  
13961  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('GroupContextExtensions', Group$GroupContextExtensions);
13962  export function Group$GroupID(g) {
13963    let $t0_1, $t1_2, $t2_3;
13964    $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
13965    $t1_2 = { $get() { return $t0_1.$get().groupID; }, $set(v) { const obj = $t0_1.$get(); obj.groupID = v; $t0_1.$set(obj); } };
13966    $t2_3 = $t1_2.$get();
13967    return $t2_3;
13968  }
13969  
13970  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('GroupID', Group$GroupID);
13971  export function Group$Marshal(g) {
13972    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44;
13973    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13974    $t0_1.$set(g);
13975    $t1_2 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
13976    $t2_3 = $t0_1.$get();
13977    $t3_4 = { $get() { return $t2_3.$get().groupContext; }, $set(v) { const obj = $t2_3.$get(); obj.groupContext = v; $t2_3.$set(obj); } };
13978    $t4_5 = groupContext$marshal($t3_4, $t1_2);
13979    $t5_6 = $t0_1.$get();
13980    $t6_7 = { $get() { return $t5_6.$get().tree; }, $set(v) { const obj = $t5_6.$get(); obj.tree = v; $t5_6.$set(obj); } };
13981    $t7_8 = $t6_7.$get();
13982    $t8_9 = ratchetTree$marshal($t7_8, $t1_2);
13983    $t9_10 = $t0_1.$get();
13984    $t10_11 = { $get() { return $t9_10.$get().interimTranscriptHash; }, $set(v) { const obj = $t9_10.$get(); obj.interimTranscriptHash = v; $t9_10.$set(obj); } };
13985    $t11_12 = $t10_11.$get();
13986    $t12_13 = Writer$writeOpaqueVec($t1_2, $t11_12);
13987    $t13_14 = $t0_1.$get();
13988    $t14_15 = { $get() { return $t13_14.$get().pskSecret; }, $set(v) { const obj = $t13_14.$get(); obj.pskSecret = v; $t13_14.$set(obj); } };
13989    $t15_16 = $t14_15.$get();
13990    $t16_17 = Writer$writeOpaqueVec($t1_2, $t15_16);
13991    $t17_18 = $t0_1.$get();
13992    $t18_19 = { $get() { return $t17_18.$get().epochSecret; }, $set(v) { const obj = $t17_18.$get(); obj.epochSecret = v; $t17_18.$set(obj); } };
13993    $t19_20 = $t18_19.$get();
13994    $t20_21 = Writer$writeOpaqueVec($t1_2, $t19_20);
13995    $t21_22 = $t0_1.$get();
13996    $t22_23 = { $get() { return $t21_22.$get().initSecret; }, $set(v) { const obj = $t21_22.$get(); obj.initSecret = v; $t21_22.$set(obj); } };
13997    $t23_24 = $t22_23.$get();
13998    $t24_25 = Writer$writeOpaqueVec($t1_2, $t23_24);
13999    $t25_26 = $t0_1.$get();
14000    $t26_27 = { $get() { return $t25_26.$get().myLeafIndex; }, $set(v) { const obj = $t25_26.$get(); obj.myLeafIndex = v; $t25_26.$set(obj); } };
14001    $t27_28 = $t26_27.$get();
14002    $t28_29 = $t27_28;
14003    $t29_30 = Writer$addUint32($t1_2, $t28_29);
14004    $t30_31 = $t0_1.$get();
14005    $t31_32 = { $get() { return $t30_31.$get().signaturePriv; }, $set(v) { const obj = $t30_31.$get(); obj.signaturePriv = v; $t30_31.$set(obj); } };
14006    $t32_33 = $t31_32.$get();
14007    $t33_34 = $t32_33;
14008    $t34_35 = Writer$writeOpaqueVec($t1_2, $t33_34);
14009    $t35_36 = $t0_1.$get();
14010    $t36_37 = { $get() { return $t35_36.$get().privTree; }, $set(v) { const obj = $t35_36.$get(); obj.privTree = v; $t35_36.$set(obj); } };
14011    $t37_38 = $t36_37.$get();
14012    $t38_39 = $rt.builtin.len($t37_38);
14013    $t39_40 = Group$Marshal$1.bind(null, $t0_1);
14014    $t40_41 = Writer$writeVector($t1_2, $t38_39, $t39_40);
14015    $t41_42 = Writer$bytes($t1_2);
14016    $t42_43 = $t41_42[0];
14017    $t43_44 = $t41_42[1];
14018    return [$t42_43, $t43_44];
14019  }
14020  
14021  function Group$Marshal$1(g, w, i) {
14022    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
14023    $t0_1 = g.$get();
14024    $t1_2 = { $get() { return $t0_1.$get().privTree; }, $set(v) { const obj = $t0_1.$get(); obj.privTree = v; $t0_1.$set(obj); } };
14025    $t2_3 = $t1_2.$get();
14026    $t3_4 = $t2_3.addr(i);
14027    $t4_5 = $t3_4.$get();
14028    $t5_6 = $t4_5;
14029    $t6_7 = Writer$writeOpaqueVec(w, $t5_6);
14030    return;
14031  }
14032  
14033  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('Marshal', Group$Marshal);
14034  export function Group$UnmarshalAndProcessMessage(g, raw) {
14035    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
14036    let $block = 0;
14037    while (true) {
14038      switch ($block) {
14039        case 0: {
14040          $t0_1 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14041          $t1_2 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t0_1);
14042          $t2_3 = unmarshalRaw(raw, $t1_2);
14043          $t3_4 = ($t2_3 !== null);
14044          if ($t3_4) {
14045            $block = 1; break;
14046          }
14047          else {
14048            $block = 2; break;
14049          }
14050          break;
14051        }
14052        case 1: {
14053          return [null, false, $t2_3];
14054          break;
14055        }
14056        case 2: {
14057          $t4_5 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
14058          $t5_6 = $t4_5.$get();
14059          $t6_7 = ($t5_6 === 1);
14060          if ($t6_7) {
14061            $block = 3; break;
14062          }
14063          else {
14064            $block = 5; break;
14065          }
14066          break;
14067        }
14068        case 3: {
14069          $t7_8 = { $get() { return $t0_1.$get().publicMessage; }, $set(v) { const obj = $t0_1.$get(); obj.publicMessage = v; $t0_1.$set(obj); } };
14070          $t8_9 = $t7_8.$get();
14071          $t9_10 = Group$processPublicMessage(g, $t8_9);
14072          return [null, false, $t9_10];
14073          break;
14074        }
14075        case 4: {
14076          $t10_11 = { $get() { return $t0_1.$get().privateMessage; }, $set(v) { const obj = $t0_1.$get(); obj.privateMessage = v; $t0_1.$set(obj); } };
14077          $t11_12 = $t10_11.$get();
14078          $t12_13 = Group$processPrivateMessage(g, $t11_12);
14079          $t13_14 = $t12_13[0];
14080          $t14_15 = $t12_13[1];
14081          $t15_16 = $t12_13[2];
14082          return [$t13_14, $t14_15, $t15_16];
14083          break;
14084        }
14085        case 5: {
14086          $t16_17 = ($t5_6 === 2);
14087          if ($t16_17) {
14088            $block = 4; break;
14089          }
14090          else {
14091            $block = 6; break;
14092          }
14093          break;
14094        }
14095        case 6: {
14096          $t17_18 = errors.New('mls: unsupported wire format');
14097          return [null, false, $t17_18];
14098          break;
14099        }
14100      }
14101    }
14102  }
14103  
14104  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('UnmarshalAndProcessMessage', Group$UnmarshalAndProcessMessage);
14105  export function Group$encryptPrivateMessage(g, fc, privContent) {
14106    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52;
14107    let $block = 0;
14108    while (true) {
14109      switch ($block) {
14110        case 0: {
14111          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14112          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
14113          $t2_3 = $t1_2.$get();
14114          $t3_4 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
14115          $t4_5 = $t3_4.$get();
14116          $t5_6 = newSenderData($t4_5, 0);
14117          $t6_7 = $t5_6[0];
14118          $t7_8 = $t5_6[1];
14119          $t8_9 = ($t7_8 !== null);
14120          if ($t8_9) {
14121            $block = 1; break;
14122          }
14123          else {
14124            $block = 2; break;
14125          }
14126          break;
14127        }
14128        case 1: {
14129          return [null, $t7_8];
14130          break;
14131        }
14132        case 2: {
14133          $t9_10 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
14134          $t10_11 = $t9_10.$get();
14135          $t11_12 = secretLabelEncryption.$get();
14136          $t12_13 = CipherSuite$deriveSecret($t2_3, $t10_11, $t11_12);
14137          $t13_14 = $t12_13[0];
14138          $t14_15 = $t12_13[1];
14139          $t15_16 = ($t14_15 !== null);
14140          if ($t15_16) {
14141            $block = 3; break;
14142          }
14143          else {
14144            $block = 4; break;
14145          }
14146          break;
14147        }
14148        case 3: {
14149          return [null, $t14_15];
14150          break;
14151        }
14152        case 4: {
14153          $t16_17 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
14154          $t17_18 = $t16_17.$get();
14155          $t18_19 = ratchetTree$numLeaves($t17_18);
14156          $t19_20 = deriveSecretTree($t2_3, $t18_19, $t13_14);
14157          $t20_21 = $t19_20[0];
14158          $t21_22 = $t19_20[1];
14159          $t22_23 = ($t21_22 !== null);
14160          if ($t22_23) {
14161            $block = 5; break;
14162          }
14163          else {
14164            $block = 6; break;
14165          }
14166          break;
14167        }
14168        case 5: {
14169          return [null, $t21_22];
14170          break;
14171        }
14172        case 6: {
14173          $t23_24 = { $get() { return fc.$get().contentType; }, $set(v) { const obj = fc.$get(); obj.contentType = v; fc.$set(obj); } };
14174          $t24_25 = $t23_24.$get();
14175          $t25_26 = ratchetLabelFromContentType($t24_25);
14176          $t26_27 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
14177          $t27_28 = $t26_27.$get();
14178          $t28_29 = leafIndex$nodeIndex($t27_28);
14179          $t29_30 = secretTree$deriveRatchetRoot($t20_21, $t2_3, $t28_29, $t25_26);
14180          $t30_31 = $t29_30[0];
14181          $t31_32 = $t29_30[1];
14182          $t32_33 = ($t31_32 !== null);
14183          if ($t32_33) {
14184            $block = 7; break;
14185          }
14186          else {
14187            $block = 8; break;
14188          }
14189          break;
14190        }
14191        case 7: {
14192          return [null, $t31_32];
14193          break;
14194        }
14195        case 8: {
14196          $t33_34 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
14197          $t34_35 = $t33_34.$get();
14198          $t35_36 = secretLabelSenderData.$get();
14199          $t36_37 = CipherSuite$deriveSecret($t2_3, $t34_35, $t35_36);
14200          $t37_38 = $t36_37[0];
14201          $t38_39 = $t36_37[1];
14202          $t39_40 = ($t38_39 !== null);
14203          if ($t39_40) {
14204            $block = 9; break;
14205          }
14206          else {
14207            $block = 10; break;
14208          }
14209          break;
14210        }
14211        case 9: {
14212          return [null, $t38_39];
14213          break;
14214        }
14215        case 10: {
14216          $t40_41 = encryptPrivateMessage($t2_3, $t30_31, $t37_38, fc, privContent, $t6_7);
14217          $t41_42 = $t40_41[0];
14218          $t42_43 = $t40_41[1];
14219          $t43_44 = ($t42_43 !== null);
14220          if ($t43_44) {
14221            $block = 11; break;
14222          }
14223          else {
14224            $block = 12; break;
14225          }
14226          break;
14227        }
14228        case 11: {
14229          return [null, $t42_43];
14230          break;
14231        }
14232        case 12: {
14233          $t44_45 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14234          $t45_46 = { $get() { return $t44_45.$get().version; }, $set(v) { const obj = $t44_45.$get(); obj.version = v; $t44_45.$set(obj); } };
14235          $t46_47 = { $get() { return $t44_45.$get().wireFormat; }, $set(v) { const obj = $t44_45.$get(); obj.wireFormat = v; $t44_45.$set(obj); } };
14236          $t47_48 = { $get() { return $t44_45.$get().privateMessage; }, $set(v) { const obj = $t44_45.$get(); obj.privateMessage = v; $t44_45.$set(obj); } };
14237          $t45_46.$set(1);
14238          $t46_47.$set(2);
14239          $t47_48.$set($t41_42);
14240          $t48_49 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t44_45);
14241          $t49_50 = marshalRaw($t48_49);
14242          $t50_51 = $t49_50[0];
14243          $t51_52 = $t49_50[1];
14244          return [$t50_51, $t51_52];
14245          break;
14246        }
14247      }
14248    }
14249  }
14250  
14251  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('encryptPrivateMessage', Group$encryptPrivateMessage);
14252  export function Group$processCommit(g, authContent, pskIDs, psks, nowUnix) {
14253    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139, $t139_140, $t140_141, $t141_142, $t142_143, $t143_144, $t144_145, $t145_146, $t146_147, $t147_148, $t148_149, $t149_150, $t150_151, $t151_152, $t152_153, $t153_154, $t154_155, $t155_156, $t156_157, $t157_158, $t158_159, $t159_160, $t160_161, $t161_162, $t162_163, $t163_164, $t164_165, $t165_166, $t166_167, $t167_168, $t168_169, $t169_170, $t170_171, $t171_172, $t172_173, $t173_174, $t174_175, $t175_176, $t176_177, $t177_178, $t178_179, $t179_180, $t180_181, $t181_182, $t182_183, $t183_184, $t184_185, $t185_186, $t186_187, $t187_188, $t188_189, $t189_190, $t190_191, $t191_192, $t192_193, $t193_194, $t194_195, $t195_196, $t196_197;
14254    let $block = 0;
14255    while (true) {
14256      switch ($block) {
14257        case 0: {
14258          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14259          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
14260          $t2_3 = $t1_2.$get();
14261          $t3_4 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
14262          $t4_5 = { $get() { return $t3_4.$get().sender; }, $set(v) { const obj = $t3_4.$get(); obj.sender = v; $t3_4.$set(obj); } };
14263          $t5_6 = { $get() { return $t4_5.$get().leafIndex; }, $set(v) { const obj = $t4_5.$get(); obj.leafIndex = v; $t4_5.$set(obj); } };
14264          $t6_7 = $t5_6.$get();
14265          $t7_8 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
14266          $t8_9 = { $get() { return $t7_8.$get().commit; }, $set(v) { const obj = $t7_8.$get(); obj.commit = v; $t7_8.$set(obj); } };
14267          $t9_10 = $t8_9.$get();
14268          $t10_11 = { $get() { return $t9_10.$get().proposals; }, $set(v) { const obj = $t9_10.$get(); obj.proposals = v; $t9_10.$set(obj); } };
14269          $t11_12 = $t10_11.$get();
14270          $t12_13 = { $get() { return g.$get().pendingProposals; }, $set(v) { const obj = g.$get(); obj.pendingProposals = v; g.$set(obj); } };
14271          $t13_14 = $t12_13.$get();
14272          $t14_15 = resolveProposals($t11_12, $t6_7, $t13_14);
14273          $t15_16 = $t14_15[0];
14274          $t16_17 = $t14_15[1];
14275          $t17_18 = $t14_15[2];
14276          $t18_19 = ($t17_18 !== null);
14277          if ($t18_19) {
14278            $block = 1; break;
14279          }
14280          else {
14281            $block = 2; break;
14282          }
14283          break;
14284        }
14285        case 1: {
14286          return $t17_18;
14287          break;
14288        }
14289        case 2: {
14290          $t19_20 = verifyProposalList($t15_16, $t16_17, $t6_7);
14291          $t20_21 = ($t19_20 !== null);
14292          if ($t20_21) {
14293            $block = 3; break;
14294          }
14295          else {
14296            $block = 4; break;
14297          }
14298          break;
14299        }
14300        case 3: {
14301          return $t19_20;
14302          break;
14303        }
14304        case 4: {
14305          $t21_22 = $rt.builtin.len($t15_16);
14306          $t22_23 = -1;
14307          $block = 5; break;
14308          break;
14309        }
14310        case 5: {
14311          $t23_24 = ($t22_23 + 1);
14312          $t24_25 = ($t23_24 < $t21_22);
14313          if ($t24_25) {
14314            $block = 6; break;
14315          }
14316          else {
14317            $block = 7; break;
14318          }
14319          break;
14320        }
14321        case 6: {
14322          $t25_26 = $t15_16.addr($t23_24);
14323          $t26_27 = $t25_26.$get();
14324          $t27_28 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14325          $t27_28.$set($rt.builtin.cloneValue($t26_27));
14326          $t28_29 = { $get() { return $t27_28.$get().proposalType; }, $set(v) { const obj = $t27_28.$get(); obj.proposalType = v; $t27_28.$set(obj); } };
14327          $t29_30 = $t28_29.$get();
14328          $t30_31 = ($t29_30 === 1);
14329          if ($t30_31) {
14330            $block = 8; break;
14331          }
14332          else {
14333            $t22_23 = $t23_24;
14334            $block = 5; break;
14335          }
14336          break;
14337        }
14338        case 7: {
14339          $t31_32 = proposalListNeedsPath($t15_16);
14340          if ($t31_32) {
14341            $block = 12; break;
14342          }
14343          else {
14344            $block = 11; break;
14345          }
14346          break;
14347        }
14348        case 8: {
14349          $t32_33 = { $get() { return $t27_28.$get().add; }, $set(v) { const obj = $t27_28.$get(); obj.add = v; $t27_28.$set(obj); } };
14350          $t33_34 = $t32_33.$get();
14351          $t34_35 = { $get() { return $t33_34.$get().keyPackage; }, $set(v) { const obj = $t33_34.$get(); obj.keyPackage = v; $t33_34.$set(obj); } };
14352          $t35_36 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14353          $t36_37 = KeyPackage$verify($t34_35, $t35_36);
14354          $t37_38 = ($t36_37 !== null);
14355          if ($t37_38) {
14356            $block = 9; break;
14357          }
14358          else {
14359            $t22_23 = $t23_24;
14360            $block = 5; break;
14361          }
14362          break;
14363        }
14364        case 9: {
14365          return $t36_37;
14366          break;
14367        }
14368        case 10: {
14369          $t38_39 = errors.New('mls: commit missing required update path');
14370          return $t38_39;
14371          break;
14372        }
14373        case 11: {
14374          $t39_40 = { $value: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14375          $t40_41 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14376          $t41_42 = $t40_41.$get();
14377          $t39_40.$set($rt.builtin.cloneValue($t41_42));
14378          $t42_43 = { $get() { return $t39_40.$get().epoch; }, $set(v) { const obj = $t39_40.$get(); obj.epoch = v; $t39_40.$set(obj); } };
14379          $t43_44 = $t42_43.$get();
14380          $t44_45 = BigInt.asUintN(64, $t43_44 + 1n);
14381          $t45_46 = { $get() { return $t39_40.$get().epoch; }, $set(v) { const obj = $t39_40.$get(); obj.epoch = v; $t39_40.$set(obj); } };
14382          $t45_46.$set($t44_45);
14383          $t46_47 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14384          $t47_48 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
14385          $t48_49 = $t47_48.$get();
14386          $t49_50 = ratchetTree$copy($t48_49);
14387          $t46_47.$set($t49_50);
14388          $t50_51 = ratchetTree$apply($t46_47, $t15_16, $t16_17);
14389          $t51_52 = $t46_47.$get();
14390          $t52_53 = $rt.builtin.len($t51_52);
14391          $t53_54 = $rt.builtin.makeSlice($t52_53, $t52_53, null);
14392          $t54_55 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
14393          $t55_56 = $t54_55.$get();
14394          $t56_57 = $rt.builtin.len($t55_56);
14395          $t60_61 = -1;
14396          $block = 13; break;
14397          break;
14398        }
14399        case 12: {
14400          $t57_58 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14401          $t58_59 = $t57_58.$get();
14402          $t59_60 = ($t58_59 === null);
14403          if ($t59_60) {
14404            $block = 10; break;
14405          }
14406          else {
14407            $block = 11; break;
14408          }
14409          break;
14410        }
14411        case 13: {
14412          $t61_62 = ($t60_61 + 1);
14413          $t62_63 = ($t61_62 < $t56_57);
14414          if ($t62_63) {
14415            $block = 14; break;
14416          }
14417          else {
14418            $block = 15; break;
14419          }
14420          break;
14421        }
14422        case 14: {
14423          $t63_64 = $rt.builtin.len($t53_54);
14424          $t64_65 = ($t61_62 < $t63_64);
14425          if ($t64_65) {
14426            $block = 16; break;
14427          }
14428          else {
14429            $t60_61 = $t61_62;
14430            $block = 13; break;
14431          }
14432          break;
14433        }
14434        case 15: {
14435          $t65_66 = CipherSuite$ExtractSize($t2_3);
14436          $t66_67 = $rt.builtin.makeSlice($t65_66, $t65_66, 0);
14437          $t67_68 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14438          $t68_69 = $t67_68.$get();
14439          $t69_70 = ($t68_69 !== null);
14440          if ($t69_70) {
14441            $block = 17; break;
14442          }
14443          else {
14444            $block = 19; break;
14445          }
14446          break;
14447        }
14448        case 16: {
14449          $t70_71 = { $get() { return g.$get().privTree; }, $set(v) { const obj = g.$get(); obj.privTree = v; g.$set(obj); } };
14450          $t71_72 = $t70_71.$get();
14451          $t72_73 = $t71_72.addr($t61_62);
14452          $t73_74 = $t72_73.$get();
14453          $t74_75 = $t53_54.addr($t61_62);
14454          $t74_75.$set($t73_74);
14455          $t60_61 = $t61_62;
14456          $block = 13; break;
14457          break;
14458        }
14459        case 17: {
14460          $t75_76 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14461          $t76_77 = $t75_76.$get();
14462          $t77_78 = { $get() { return $t76_77.$get().leafNode; }, $set(v) { const obj = $t76_77.$get(); obj.leafNode = v; $t76_77.$set(obj); } };
14463          $t78_79 = { $get() { return $t77_78.$get().leafNodeSource; }, $set(v) { const obj = $t77_78.$get(); obj.leafNodeSource = v; $t77_78.$set(obj); } };
14464          $t79_80 = $t78_79.$get();
14465          $t80_81 = ($t79_80 !== 3);
14466          if ($t80_81) {
14467            $block = 20; break;
14468          }
14469          else {
14470            $block = 21; break;
14471          }
14472          break;
14473        }
14474        case 18: {
14475          $t82_83 = authenticatedContent$confirmedTranscriptHashInput(authContent);
14476          $t83_84 = { $get() { return g.$get().interimTranscriptHash; }, $set(v) { const obj = g.$get(); obj.interimTranscriptHash = v; g.$set(obj); } };
14477          $t84_85 = $t83_84.$get();
14478          $t85_86 = confirmedTranscriptHashInput$hashValue($t82_83, $t2_3, $t84_85);
14479          $t86_87 = $t85_86[0];
14480          $t87_88 = { $get() { return $t39_40.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t39_40.$get(); obj.confirmedTranscriptHash = v; $t39_40.$set(obj); } };
14481          $t87_88.$set($t86_87);
14482          $t88_89 = $t85_86[1];
14483          $t89_90 = ($t88_89 !== null);
14484          if ($t89_90) {
14485            $block = 34; break;
14486          }
14487          else {
14488            $block = 35; break;
14489          }
14490          break;
14491        }
14492        case 19: {
14493          $t90_91 = $t46_47.$get();
14494          $t91_92 = ratchetTree$computeRootTreeHash($t90_91, $t2_3);
14495          $t92_93 = $t91_92[0];
14496          $t93_94 = { $get() { return $t39_40.$get().treeHash; }, $set(v) { const obj = $t39_40.$get(); obj.treeHash = v; $t39_40.$set(obj); } };
14497          $t93_94.$set($t92_93);
14498          $t94_95 = $t91_92[1];
14499          $t95_96 = ($t94_95 !== null);
14500          if ($t95_96) {
14501            $block = 33; break;
14502          }
14503          else {
14504            $t81_82 = $t66_67;
14505            $block = 18; break;
14506          }
14507          break;
14508        }
14509        case 20: {
14510          $t96_97 = errors.New('mls: commit path leaf source must be commit');
14511          return $t96_97;
14512          break;
14513        }
14514        case 21: {
14515          $t97_98 = $t46_47.$get();
14516          $t98_99 = ratchetTree$getLeaf($t97_98, $t6_7);
14517          $t99_100 = $t46_47.$get();
14518          $t100_101 = ratchetTree$keys($t99_100);
14519          $t101_102 = $t100_101[0];
14520          $t102_103 = $t100_101[1];
14521          $t103_104 = { $get() { return $t98_99.$get().signatureKey; }, $set(v) { const obj = $t98_99.$get(); obj.signatureKey = v; $t98_99.$set(obj); } };
14522          $t104_105 = $t103_104.$get();
14523          $t105_106 = $rt.builtin.mapDelete($t101_102, $t104_105);
14524          $t106_107 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14525          $t107_108 = $t106_107.$get();
14526          $t108_109 = { $get() { return $t107_108.$get().leafNode; }, $set(v) { const obj = $t107_108.$get(); obj.leafNode = v; $t107_108.$set(obj); } };
14527          $t109_110 = { $value: { cipherSuite: 0, groupID: null, leafIndex: 0, supportedCreds: null, signatureKeys: null, encryptionKeys: null, nowUnix: 0n }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14528          $t110_111 = { $get() { return $t109_110.$get().cipherSuite; }, $set(v) { const obj = $t109_110.$get(); obj.cipherSuite = v; $t109_110.$set(obj); } };
14529          $t111_112 = { $get() { return $t109_110.$get().groupID; }, $set(v) { const obj = $t109_110.$get(); obj.groupID = v; $t109_110.$set(obj); } };
14530          $t112_113 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14531          $t113_114 = { $get() { return $t112_113.$get().groupID; }, $set(v) { const obj = $t112_113.$get(); obj.groupID = v; $t112_113.$set(obj); } };
14532          $t114_115 = $t113_114.$get();
14533          $t115_116 = { $get() { return $t109_110.$get().leafIndex; }, $set(v) { const obj = $t109_110.$get(); obj.leafIndex = v; $t109_110.$set(obj); } };
14534          $t116_117 = { $get() { return $t109_110.$get().supportedCreds; }, $set(v) { const obj = $t109_110.$get(); obj.supportedCreds = v; $t109_110.$set(obj); } };
14535          $t117_118 = $t46_47.$get();
14536          $t118_119 = ratchetTree$supportedCreds($t117_118);
14537          $t119_120 = { $get() { return $t109_110.$get().signatureKeys; }, $set(v) { const obj = $t109_110.$get(); obj.signatureKeys = v; $t109_110.$set(obj); } };
14538          $t120_121 = { $get() { return $t109_110.$get().encryptionKeys; }, $set(v) { const obj = $t109_110.$get(); obj.encryptionKeys = v; $t109_110.$set(obj); } };
14539          $t121_122 = { $get() { return $t109_110.$get().nowUnix; }, $set(v) { const obj = $t109_110.$get(); obj.nowUnix = v; $t109_110.$set(obj); } };
14540          $t110_111.$set($t2_3);
14541          $t111_112.$set($t114_115);
14542          $t115_116.$set($t6_7);
14543          $t116_117.$set($t118_119);
14544          $t119_120.$set($t101_102);
14545          $t120_121.$set($t102_103);
14546          $t121_122.$set(nowUnix);
14547          $t122_123 = leafNode$verify($t108_109, $t109_110);
14548          $t123_124 = ($t122_123 !== null);
14549          if ($t123_124) {
14550            $block = 22; break;
14551          }
14552          else {
14553            $block = 23; break;
14554          }
14555          break;
14556        }
14557        case 22: {
14558          return $t122_123;
14559          break;
14560        }
14561        case 23: {
14562          $t124_125 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14563          $t125_126 = $t124_125.$get();
14564          $t126_127 = { $get() { return $t125_126.$get().nodes; }, $set(v) { const obj = $t125_126.$get(); obj.nodes = v; $t125_126.$set(obj); } };
14565          $t127_128 = $t126_127.$get();
14566          $t128_129 = $rt.builtin.len($t127_128);
14567          $t129_130 = -1;
14568          $block = 24; break;
14569          break;
14570        }
14571        case 24: {
14572          $t130_131 = ($t129_130 + 1);
14573          $t131_132 = ($t130_131 < $t128_129);
14574          if ($t131_132) {
14575            $block = 25; break;
14576          }
14577          else {
14578            $block = 26; break;
14579          }
14580          break;
14581        }
14582        case 25: {
14583          $t132_133 = $t127_128.addr($t130_131);
14584          $t133_134 = $t132_133.$get();
14585          $t134_135 = { $value: { encryptionKey: null, encryptedPathSecret: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14586          $t134_135.$set($rt.builtin.cloneValue($t133_134));
14587          $t135_136 = { $get() { return $t134_135.$get().encryptionKey; }, $set(v) { const obj = $t134_135.$get(); obj.encryptionKey = v; $t134_135.$set(obj); } };
14588          $t136_137 = $t135_136.$get();
14589          $t137_138 = $rt.builtin.mapLookup($t102_103, $t136_137).value;
14590          if ($t137_138) {
14591            $block = 27; break;
14592          }
14593          else {
14594            $t129_130 = $t130_131;
14595            $block = 24; break;
14596          }
14597          break;
14598        }
14599        case 26: {
14600          $t138_139 = $t46_47.$get();
14601          $t139_140 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14602          $t140_141 = $t139_140.$get();
14603          $t141_142 = ratchetTree$mergeUpdatePath($t138_139, $t2_3, $t6_7, $t140_141);
14604          $t142_143 = ($t141_142 !== null);
14605          if ($t142_143) {
14606            $block = 28; break;
14607          }
14608          else {
14609            $block = 29; break;
14610          }
14611          break;
14612        }
14613        case 27: {
14614          $t143_144 = errors.New('mls: update path encryption key already in tree');
14615          return $t143_144;
14616          break;
14617        }
14618        case 28: {
14619          return $t141_142;
14620          break;
14621        }
14622        case 29: {
14623          $t144_145 = $t46_47.$get();
14624          $t145_146 = ratchetTree$computeRootTreeHash($t144_145, $t2_3);
14625          $t146_147 = $t145_146[0];
14626          $t147_148 = { $get() { return $t39_40.$get().treeHash; }, $set(v) { const obj = $t39_40.$get(); obj.treeHash = v; $t39_40.$set(obj); } };
14627          $t147_148.$set($t146_147);
14628          $t148_149 = $t145_146[1];
14629          $t149_150 = ($t148_149 !== null);
14630          if ($t149_150) {
14631            $block = 30; break;
14632          }
14633          else {
14634            $block = 31; break;
14635          }
14636          break;
14637        }
14638        case 30: {
14639          return $t148_149;
14640          break;
14641        }
14642        case 31: {
14643          $t150_151 = $t46_47.$get();
14644          $t151_152 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
14645          $t152_153 = $t151_152.$get();
14646          $t153_154 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
14647          $t154_155 = $t153_154.$get();
14648          $t155_156 = ratchetTree$decryptPathSecrets($t150_151, $t2_3, $t39_40, $t6_7, $t152_153, $t154_155, $t53_54);
14649          $t156_157 = $t155_156[0];
14650          $t157_158 = $t155_156[1];
14651          $t158_159 = ($t157_158 !== null);
14652          if ($t158_159) {
14653            $block = 32; break;
14654          }
14655          else {
14656            $t81_82 = $t156_157;
14657            $block = 18; break;
14658          }
14659          break;
14660        }
14661        case 32: {
14662          return $t157_158;
14663          break;
14664        }
14665        case 33: {
14666          return $t94_95;
14667          break;
14668        }
14669        case 34: {
14670          return $t88_89;
14671          break;
14672        }
14673        case 35: {
14674          $t159_160 = { $get() { return $t39_40.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t39_40.$get(); obj.confirmedTranscriptHash = v; $t39_40.$set(obj); } };
14675          $t160_161 = $t159_160.$get();
14676          $t161_162 = { $get() { return authContent.$get().auth; }, $set(v) { const obj = authContent.$get(); obj.auth = v; authContent.$set(obj); } };
14677          $t162_163 = { $get() { return $t161_162.$get().confirmationTag; }, $set(v) { const obj = $t161_162.$get(); obj.confirmationTag = v; $t161_162.$set(obj); } };
14678          $t163_164 = $t162_163.$get();
14679          $t164_165 = nextInterimTranscriptHash($t2_3, $t160_161, $t163_164);
14680          $t165_166 = $t164_165[0];
14681          $t166_167 = $t164_165[1];
14682          $t167_168 = ($t166_167 !== null);
14683          if ($t167_168) {
14684            $block = 36; break;
14685          }
14686          else {
14687            $block = 37; break;
14688          }
14689          break;
14690        }
14691        case 36: {
14692          return $t166_167;
14693          break;
14694        }
14695        case 37: {
14696          $t168_169 = { $get() { return g.$get().initSecret; }, $set(v) { const obj = g.$get(); obj.initSecret = v; g.$set(obj); } };
14697          $t169_170 = $t168_169.$get();
14698          $t170_171 = groupContext$extractJoinerSecret($t39_40, $t169_170, $t81_82);
14699          $t171_172 = $t170_171[0];
14700          $t172_173 = $t170_171[1];
14701          $t173_174 = ($t172_173 !== null);
14702          if ($t173_174) {
14703            $block = 38; break;
14704          }
14705          else {
14706            $block = 39; break;
14707          }
14708          break;
14709        }
14710        case 38: {
14711          return $t172_173;
14712          break;
14713        }
14714        case 39: {
14715          $t174_175 = extractPSKSecret($t2_3, pskIDs, psks);
14716          $t175_176 = $t174_175[0];
14717          $t176_177 = $t174_175[1];
14718          $t177_178 = ($t176_177 !== null);
14719          if ($t177_178) {
14720            $block = 40; break;
14721          }
14722          else {
14723            $block = 41; break;
14724          }
14725          break;
14726        }
14727        case 40: {
14728          return $t176_177;
14729          break;
14730        }
14731        case 41: {
14732          $t178_179 = groupContext$extractEpochSecret($t39_40, $t171_172, $t175_176);
14733          $t179_180 = $t178_179[0];
14734          $t180_181 = $t178_179[1];
14735          $t181_182 = ($t180_181 !== null);
14736          if ($t181_182) {
14737            $block = 42; break;
14738          }
14739          else {
14740            $block = 43; break;
14741          }
14742          break;
14743        }
14744        case 42: {
14745          return $t180_181;
14746          break;
14747        }
14748        case 43: {
14749          $t182_183 = secretLabelInit.$get();
14750          $t183_184 = CipherSuite$deriveSecret($t2_3, $t179_180, $t182_183);
14751          $t184_185 = $t183_184[0];
14752          $t185_186 = $t183_184[1];
14753          $t186_187 = ($t185_186 !== null);
14754          if ($t186_187) {
14755            $block = 44; break;
14756          }
14757          else {
14758            $block = 45; break;
14759          }
14760          break;
14761        }
14762        case 44: {
14763          return $t185_186;
14764          break;
14765        }
14766        case 45: {
14767          $t187_188 = $t46_47.$get();
14768          $t188_189 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
14769          $t188_189.$set($t187_188);
14770          $t189_190 = { $get() { return g.$get().privTree; }, $set(v) { const obj = g.$get(); obj.privTree = v; g.$set(obj); } };
14771          $t189_190.$set($t53_54);
14772          $t190_191 = $t39_40.$get();
14773          $t191_192 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14774          $t191_192.$set($rt.builtin.cloneValue($t190_191));
14775          $t192_193 = { $get() { return g.$get().interimTranscriptHash; }, $set(v) { const obj = g.$get(); obj.interimTranscriptHash = v; g.$set(obj); } };
14776          $t192_193.$set($t165_166);
14777          $t193_194 = { $get() { return g.$get().pskSecret; }, $set(v) { const obj = g.$get(); obj.pskSecret = v; g.$set(obj); } };
14778          $t193_194.$set($t175_176);
14779          $t194_195 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
14780          $t194_195.$set($t179_180);
14781          $t195_196 = { $get() { return g.$get().initSecret; }, $set(v) { const obj = g.$get(); obj.initSecret = v; g.$set(obj); } };
14782          $t195_196.$set($t184_185);
14783          $t196_197 = { $get() { return g.$get().pendingProposals; }, $set(v) { const obj = g.$get(); obj.pendingProposals = v; g.$set(obj); } };
14784          $t196_197.$set(null);
14785          return null;
14786          break;
14787        }
14788      }
14789    }
14790  }
14791  
14792  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('processCommit', Group$processCommit);
14793  export function Group$processPrivateMessage(g, privMsg) {
14794    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100;
14795    let $block = 0;
14796    while (true) {
14797      switch ($block) {
14798        case 0: {
14799          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14800          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
14801          $t2_3 = $t1_2.$get();
14802          $t3_4 = { $get() { return privMsg.$get().groupID; }, $set(v) { const obj = privMsg.$get(); obj.groupID = v; privMsg.$set(obj); } };
14803          $t4_5 = $t3_4.$get();
14804          $t5_6 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14805          $t6_7 = { $get() { return $t5_6.$get().groupID; }, $set(v) { const obj = $t5_6.$get(); obj.groupID = v; $t5_6.$set(obj); } };
14806          $t7_8 = $t6_7.$get();
14807          $t8_9 = GroupID$equal($t4_5, $t7_8);
14808          if ($t8_9) {
14809            $block = 2; break;
14810          }
14811          else {
14812            $block = 1; break;
14813          }
14814          break;
14815        }
14816        case 1: {
14817          $t9_10 = errors.New('mls: group ID mismatch');
14818          return [null, false, $t9_10];
14819          break;
14820        }
14821        case 2: {
14822          $t10_11 = { $get() { return privMsg.$get().epoch; }, $set(v) { const obj = privMsg.$get(); obj.epoch = v; privMsg.$set(obj); } };
14823          $t11_12 = $t10_11.$get();
14824          $t12_13 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
14825          $t13_14 = { $get() { return $t12_13.$get().epoch; }, $set(v) { const obj = $t12_13.$get(); obj.epoch = v; $t12_13.$set(obj); } };
14826          $t14_15 = $t13_14.$get();
14827          $t15_16 = ($t11_12 !== $t14_15);
14828          if ($t15_16) {
14829            $block = 3; break;
14830          }
14831          else {
14832            $block = 4; break;
14833          }
14834          break;
14835        }
14836        case 3: {
14837          $t16_17 = errors.New('mls: epoch mismatch');
14838          return [null, false, $t16_17];
14839          break;
14840        }
14841        case 4: {
14842          $t17_18 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
14843          $t18_19 = $t17_18.$get();
14844          $t19_20 = secretLabelSenderData.$get();
14845          $t20_21 = CipherSuite$deriveSecret($t2_3, $t18_19, $t19_20);
14846          $t21_22 = $t20_21[0];
14847          $t22_23 = $t20_21[1];
14848          $t23_24 = ($t22_23 !== null);
14849          if ($t23_24) {
14850            $block = 5; break;
14851          }
14852          else {
14853            $block = 6; break;
14854          }
14855          break;
14856        }
14857        case 5: {
14858          return [null, false, $t22_23];
14859          break;
14860        }
14861        case 6: {
14862          $t24_25 = privateMessage$decryptSenderData(privMsg, $t2_3, $t21_22);
14863          $t25_26 = $t24_25[0];
14864          $t26_27 = $t24_25[1];
14865          $t27_28 = ($t26_27 !== null);
14866          if ($t27_28) {
14867            $block = 7; break;
14868          }
14869          else {
14870            $block = 8; break;
14871          }
14872          break;
14873        }
14874        case 7: {
14875          return [null, false, $t26_27];
14876          break;
14877        }
14878        case 8: {
14879          $t28_29 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
14880          $t29_30 = $t28_29.$get();
14881          $t30_31 = secretLabelEncryption.$get();
14882          $t31_32 = CipherSuite$deriveSecret($t2_3, $t29_30, $t30_31);
14883          $t32_33 = $t31_32[0];
14884          $t33_34 = $t31_32[1];
14885          $t34_35 = ($t33_34 !== null);
14886          if ($t34_35) {
14887            $block = 9; break;
14888          }
14889          else {
14890            $block = 10; break;
14891          }
14892          break;
14893        }
14894        case 9: {
14895          return [null, false, $t33_34];
14896          break;
14897        }
14898        case 10: {
14899          $t35_36 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
14900          $t36_37 = $t35_36.$get();
14901          $t37_38 = ratchetTree$numLeaves($t36_37);
14902          $t38_39 = deriveSecretTree($t2_3, $t37_38, $t32_33);
14903          $t39_40 = $t38_39[0];
14904          $t40_41 = $t38_39[1];
14905          $t41_42 = ($t40_41 !== null);
14906          if ($t41_42) {
14907            $block = 11; break;
14908          }
14909          else {
14910            $block = 12; break;
14911          }
14912          break;
14913        }
14914        case 11: {
14915          return [null, false, $t40_41];
14916          break;
14917        }
14918        case 12: {
14919          $t42_43 = { $get() { return privMsg.$get().contentType; }, $set(v) { const obj = privMsg.$get(); obj.contentType = v; privMsg.$set(obj); } };
14920          $t43_44 = $t42_43.$get();
14921          $t44_45 = ratchetLabelFromContentType($t43_44);
14922          $t45_46 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
14923          $t46_47 = { $get() { return $t25_26.$get().leafIndex; }, $set(v) { const obj = $t25_26.$get(); obj.leafIndex = v; $t25_26.$set(obj); } };
14924          $t47_48 = $t46_47.$get();
14925          $t48_49 = leafIndex$nodeIndex($t47_48);
14926          $t49_50 = secretTree$deriveRatchetRoot($t39_40, $t2_3, $t48_49, $t44_45);
14927          $t50_51 = $t49_50[0];
14928          $t45_46.$set($rt.builtin.cloneValue($t50_51));
14929          $t51_52 = $t49_50[1];
14930          $t52_53 = ($t51_52 !== null);
14931          if ($t52_53) {
14932            $block = 13; break;
14933          }
14934          else {
14935            $block = 16; break;
14936          }
14937          break;
14938        }
14939        case 13: {
14940          return [null, false, $t51_52];
14941          break;
14942        }
14943        case 14: {
14944          $t53_54 = $t45_46.$get();
14945          $t54_55 = ratchetSecret$deriveNext($t53_54, $t2_3);
14946          $t55_56 = $t54_55[0];
14947          $t45_46.$set($rt.builtin.cloneValue($t55_56));
14948          $t56_57 = $t54_55[1];
14949          $t57_58 = ($t56_57 !== null);
14950          if ($t57_58) {
14951            $block = 17; break;
14952          }
14953          else {
14954            $block = 16; break;
14955          }
14956          break;
14957        }
14958        case 15: {
14959          $t58_59 = $t45_46.$get();
14960          $t59_60 = { $get() { return $t25_26.$get().reuseGuard; }, $set(v) { const obj = $t25_26.$get(); obj.reuseGuard = v; $t25_26.$set(obj); } };
14961          $t60_61 = $t59_60.$get();
14962          $t61_62 = privateMessage$decryptContent(privMsg, $t2_3, $t58_59, $t60_61);
14963          $t62_63 = $t61_62[0];
14964          $t63_64 = $t61_62[1];
14965          $t64_65 = ($t63_64 !== null);
14966          if ($t64_65) {
14967            $block = 18; break;
14968          }
14969          else {
14970            $block = 19; break;
14971          }
14972          break;
14973        }
14974        case 16: {
14975          $t65_66 = { $get() { return $t45_46.$get().generation; }, $set(v) { const obj = $t45_46.$get(); obj.generation = v; $t45_46.$set(obj); } };
14976          $t66_67 = $t65_66.$get();
14977          $t67_68 = { $get() { return $t25_26.$get().generation; }, $set(v) { const obj = $t25_26.$get(); obj.generation = v; $t25_26.$set(obj); } };
14978          $t68_69 = $t67_68.$get();
14979          $t69_70 = ($t66_67 !== $t68_69);
14980          if ($t69_70) {
14981            $block = 14; break;
14982          }
14983          else {
14984            $block = 15; break;
14985          }
14986          break;
14987        }
14988        case 17: {
14989          return [null, false, $t56_57];
14990          break;
14991        }
14992        case 18: {
14993          return [null, false, $t63_64];
14994          break;
14995        }
14996        case 19: {
14997          $t70_71 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
14998          $t71_72 = $t70_71.$get();
14999          $t72_73 = { $get() { return $t25_26.$get().leafIndex; }, $set(v) { const obj = $t25_26.$get(); obj.leafIndex = v; $t25_26.$set(obj); } };
15000          $t73_74 = $t72_73.$get();
15001          $t74_75 = ratchetTree$getLeaf($t71_72, $t73_74);
15002          $t75_76 = ($t74_75 === null);
15003          if ($t75_76) {
15004            $block = 20; break;
15005          }
15006          else {
15007            $block = 21; break;
15008          }
15009          break;
15010        }
15011        case 20: {
15012          $t76_77 = errors.New('mls: signer node is blank');
15013          return [null, false, $t76_77];
15014          break;
15015        }
15016        case 21: {
15017          $t77_78 = privateMessage$authenticatedContent(privMsg, $t25_26, $t62_63);
15018          $t78_79 = { $get() { return $t74_75.$get().signatureKey; }, $set(v) { const obj = $t74_75.$get(); obj.signatureKey = v; $t74_75.$set(obj); } };
15019          $t79_80 = $t78_79.$get();
15020          $t80_81 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15021          $t81_82 = authenticatedContent$verifySignature($t77_78, $t79_80, $t80_81);
15022          if ($t81_82) {
15023            $block = 23; break;
15024          }
15025          else {
15026            $block = 22; break;
15027          }
15028          break;
15029        }
15030        case 22: {
15031          $t82_83 = errors.New('mls: private message signature verification failed');
15032          return [null, false, $t82_83];
15033          break;
15034        }
15035        case 23: {
15036          $t83_84 = { $get() { return $t25_26.$get().leafIndex; }, $set(v) { const obj = $t25_26.$get(); obj.leafIndex = v; $t25_26.$set(obj); } };
15037          $t84_85 = $t83_84.$get();
15038          $t85_86 = { $get() { return g.$get().myLeafIndex; }, $set(v) { const obj = g.$get(); obj.myLeafIndex = v; g.$set(obj); } };
15039          $t86_87 = $t85_86.$get();
15040          $t87_88 = ($t84_85 === $t86_87);
15041          $t88_89 = { $get() { return $t77_78.$get().content; }, $set(v) { const obj = $t77_78.$get(); obj.content = v; $t77_78.$set(obj); } };
15042          $t89_90 = { $get() { return $t88_89.$get().contentType; }, $set(v) { const obj = $t88_89.$get(); obj.contentType = v; $t88_89.$set(obj); } };
15043          $t90_91 = $t89_90.$get();
15044          $t91_92 = ($t90_91 === 2);
15045          if ($t91_92) {
15046            $block = 24; break;
15047          }
15048          else {
15049            $block = 26; break;
15050          }
15051          break;
15052        }
15053        case 24: {
15054          $t92_93 = Group$processProposal(g, $t77_78);
15055          return [null, false, $t92_93];
15056          break;
15057        }
15058        case 25: {
15059          $t93_94 = Group$processCommit(g, $t77_78, null, null, 0n);
15060          return [null, false, $t93_94];
15061          break;
15062        }
15063        case 26: {
15064          $t94_95 = ($t90_91 === 3);
15065          if ($t94_95) {
15066            $block = 25; break;
15067          }
15068          else {
15069            $block = 28; break;
15070          }
15071          break;
15072        }
15073        case 27: {
15074          $t95_96 = { $get() { return $t77_78.$get().content; }, $set(v) { const obj = $t77_78.$get(); obj.content = v; $t77_78.$set(obj); } };
15075          $t96_97 = { $get() { return $t95_96.$get().applicationData; }, $set(v) { const obj = $t95_96.$get(); obj.applicationData = v; $t95_96.$set(obj); } };
15076          $t97_98 = $t96_97.$get();
15077          return [$t97_98, $t87_88, null];
15078          break;
15079        }
15080        case 28: {
15081          $t98_99 = ($t90_91 === 1);
15082          if ($t98_99) {
15083            $block = 27; break;
15084          }
15085          else {
15086            $block = 29; break;
15087          }
15088          break;
15089        }
15090        case 29: {
15091          $t99_100 = errors.New('mls: unsupported content type');
15092          return [null, false, $t99_100];
15093          break;
15094        }
15095      }
15096    }
15097  }
15098  
15099  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('processPrivateMessage', Group$processPrivateMessage);
15100  export function Group$processProposal(g, authContent) {
15101    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26;
15102    let $block = 0;
15103    while (true) {
15104      switch ($block) {
15105        case 0: {
15106          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15107          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
15108          $t2_3 = $t1_2.$get();
15109          $t3_4 = authenticatedContent$generateProposalRef(authContent, $t2_3);
15110          $t4_5 = $t3_4[0];
15111          $t5_6 = $t3_4[1];
15112          $t6_7 = ($t5_6 !== null);
15113          if ($t6_7) {
15114            $block = 1; break;
15115          }
15116          else {
15117            $block = 2; break;
15118          }
15119          break;
15120        }
15121        case 1: {
15122          return $t5_6;
15123          break;
15124        }
15125        case 2: {
15126          $t7_8 = { $get() { return g.$get().pendingProposals; }, $set(v) { const obj = g.$get(); obj.pendingProposals = v; g.$set(obj); } };
15127          $t8_9 = $t7_8.$get();
15128          $t9_10 = { $value: { ref: null, proposal: null, sender: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15129          $t10_11 = { $get() { return $t9_10.$get().ref; }, $set(v) { const obj = $t9_10.$get(); obj.ref = v; $t9_10.$set(obj); } };
15130          $t11_12 = { $get() { return $t9_10.$get().proposal; }, $set(v) { const obj = $t9_10.$get(); obj.proposal = v; $t9_10.$set(obj); } };
15131          $t12_13 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
15132          $t13_14 = { $get() { return $t12_13.$get().proposal; }, $set(v) { const obj = $t12_13.$get(); obj.proposal = v; $t12_13.$set(obj); } };
15133          $t14_15 = $t13_14.$get();
15134          $t15_16 = { $get() { return $t9_10.$get().sender; }, $set(v) { const obj = $t9_10.$get(); obj.sender = v; $t9_10.$set(obj); } };
15135          $t16_17 = { $get() { return authContent.$get().content; }, $set(v) { const obj = authContent.$get(); obj.content = v; authContent.$set(obj); } };
15136          $t17_18 = { $get() { return $t16_17.$get().sender; }, $set(v) { const obj = $t16_17.$get(); obj.sender = v; $t16_17.$set(obj); } };
15137          $t18_19 = { $get() { return $t17_18.$get().leafIndex; }, $set(v) { const obj = $t17_18.$get(); obj.leafIndex = v; $t17_18.$set(obj); } };
15138          $t19_20 = $t18_19.$get();
15139          $t10_11.$set($t4_5);
15140          $t11_12.$set($t14_15);
15141          $t15_16.$set($t19_20);
15142          $t20_21 = $t9_10.$get();
15143          $t21_22 = { $value: $rt.builtin.makeSlice(1, 1, { ref: null, proposal: null, sender: 0 }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
15144          $t22_23 = $t21_22.$get().addr(0);
15145          $t22_23.$set($rt.builtin.cloneValue($t20_21));
15146          $t23_24 = $rt.builtin.sliceSlice($t21_22.$get(), undefined, undefined, undefined);
15147          $t24_25 = $rt.builtin.appendSlice($t8_9, $t23_24);
15148          $t25_26 = { $get() { return g.$get().pendingProposals; }, $set(v) { const obj = g.$get(); obj.pendingProposals = v; g.$set(obj); } };
15149          $t25_26.$set($t24_25);
15150          return null;
15151          break;
15152        }
15153      }
15154    }
15155  }
15156  
15157  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('processProposal', Group$processProposal);
15158  export function Group$processPublicMessage(g, pubMsg) {
15159    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
15160    let $block = 0;
15161    while (true) {
15162      switch ($block) {
15163        case 0: {
15164          $t0_1 = Group$verifyPublicMessage(g, pubMsg);
15165          $t1_2 = $t0_1[0];
15166          $t2_3 = $t0_1[1];
15167          $t3_4 = ($t2_3 !== null);
15168          if ($t3_4) {
15169            $block = 1; break;
15170          }
15171          else {
15172            $block = 2; break;
15173          }
15174          break;
15175        }
15176        case 1: {
15177          return $t2_3;
15178          break;
15179        }
15180        case 2: {
15181          $t4_5 = { $get() { return $t1_2.$get().content; }, $set(v) { const obj = $t1_2.$get(); obj.content = v; $t1_2.$set(obj); } };
15182          $t5_6 = { $get() { return $t4_5.$get().contentType; }, $set(v) { const obj = $t4_5.$get(); obj.contentType = v; $t4_5.$set(obj); } };
15183          $t6_7 = $t5_6.$get();
15184          $t7_8 = ($t6_7 === 2);
15185          if ($t7_8) {
15186            $block = 3; break;
15187          }
15188          else {
15189            $block = 5; break;
15190          }
15191          break;
15192        }
15193        case 3: {
15194          $t8_9 = Group$processProposal(g, $t1_2);
15195          return $t8_9;
15196          break;
15197        }
15198        case 4: {
15199          $t9_10 = Group$processCommit(g, $t1_2, null, null, 0n);
15200          return $t9_10;
15201          break;
15202        }
15203        case 5: {
15204          $t10_11 = ($t6_7 === 3);
15205          if ($t10_11) {
15206            $block = 4; break;
15207          }
15208          else {
15209            $block = 7; break;
15210          }
15211          break;
15212        }
15213        case 6: {
15214          $t11_12 = errors.New('mls: application content must be encrypted');
15215          return $t11_12;
15216          break;
15217        }
15218        case 7: {
15219          $t12_13 = ($t6_7 === 1);
15220          if ($t12_13) {
15221            $block = 6; break;
15222          }
15223          else {
15224            $block = 8; break;
15225          }
15226          break;
15227        }
15228        case 8: {
15229          $t13_14 = errors.New('mls: unsupported content type');
15230          return $t13_14;
15231          break;
15232        }
15233      }
15234    }
15235  }
15236  
15237  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('processPublicMessage', Group$processPublicMessage);
15238  export function Group$signPublicMessageMembershipTag(g, pubMsg) {
15239    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
15240    let $block = 0;
15241    while (true) {
15242      switch ($block) {
15243        case 0: {
15244          $t0_1 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15245          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
15246          $t2_3 = $t1_2.$get();
15247          $t3_4 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
15248          $t4_5 = $t3_4.$get();
15249          $t5_6 = secretLabelMembership.$get();
15250          $t6_7 = CipherSuite$deriveSecret($t2_3, $t4_5, $t5_6);
15251          $t7_8 = $t6_7[0];
15252          $t8_9 = $t6_7[1];
15253          $t9_10 = ($t8_9 !== null);
15254          if ($t9_10) {
15255            $block = 1; break;
15256          }
15257          else {
15258            $block = 2; break;
15259          }
15260          break;
15261        }
15262        case 1: {
15263          return [null, $t8_9];
15264          break;
15265        }
15266        case 2: {
15267          $t10_11 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15268          $t11_12 = publicMessage$signMembershipTag(pubMsg, $t2_3, $t7_8, $t10_11);
15269          $t12_13 = ($t11_12 !== null);
15270          if ($t12_13) {
15271            $block = 3; break;
15272          }
15273          else {
15274            $block = 4; break;
15275          }
15276          break;
15277        }
15278        case 3: {
15279          return [null, $t11_12];
15280          break;
15281        }
15282        case 4: {
15283          $t13_14 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15284          $t14_15 = { $get() { return $t13_14.$get().version; }, $set(v) { const obj = $t13_14.$get(); obj.version = v; $t13_14.$set(obj); } };
15285          $t15_16 = { $get() { return $t13_14.$get().wireFormat; }, $set(v) { const obj = $t13_14.$get(); obj.wireFormat = v; $t13_14.$set(obj); } };
15286          $t16_17 = { $get() { return $t13_14.$get().publicMessage; }, $set(v) { const obj = $t13_14.$get(); obj.publicMessage = v; $t13_14.$set(obj); } };
15287          $t14_15.$set(1);
15288          $t15_16.$set(1);
15289          $t16_17.$set(pubMsg);
15290          $t17_18 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t13_14);
15291          $t18_19 = marshalRaw($t17_18);
15292          $t19_20 = $t18_19[0];
15293          $t20_21 = $t18_19[1];
15294          return [$t19_20, $t20_21];
15295          break;
15296        }
15297      }
15298    }
15299  }
15300  
15301  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('signPublicMessageMembershipTag', Group$signPublicMessageMembershipTag);
15302  export function Group$verifyPublicMessage(g, pubMsg) {
15303    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50;
15304    let $block = 0;
15305    while (true) {
15306      switch ($block) {
15307        case 0: {
15308          $t0_1 = { $get() { return pubMsg.$get().content; }, $set(v) { const obj = pubMsg.$get(); obj.content = v; pubMsg.$set(obj); } };
15309          $t1_2 = { $get() { return $t0_1.$get().groupID; }, $set(v) { const obj = $t0_1.$get(); obj.groupID = v; $t0_1.$set(obj); } };
15310          $t2_3 = $t1_2.$get();
15311          $t3_4 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15312          $t4_5 = { $get() { return $t3_4.$get().groupID; }, $set(v) { const obj = $t3_4.$get(); obj.groupID = v; $t3_4.$set(obj); } };
15313          $t5_6 = $t4_5.$get();
15314          $t6_7 = GroupID$equal($t2_3, $t5_6);
15315          if ($t6_7) {
15316            $block = 2; break;
15317          }
15318          else {
15319            $block = 1; break;
15320          }
15321          break;
15322        }
15323        case 1: {
15324          $t7_8 = errors.New('mls: group ID mismatch');
15325          return [null, $t7_8];
15326          break;
15327        }
15328        case 2: {
15329          $t8_9 = { $get() { return pubMsg.$get().content; }, $set(v) { const obj = pubMsg.$get(); obj.content = v; pubMsg.$set(obj); } };
15330          $t9_10 = { $get() { return $t8_9.$get().epoch; }, $set(v) { const obj = $t8_9.$get(); obj.epoch = v; $t8_9.$set(obj); } };
15331          $t10_11 = $t9_10.$get();
15332          $t11_12 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15333          $t12_13 = { $get() { return $t11_12.$get().epoch; }, $set(v) { const obj = $t11_12.$get(); obj.epoch = v; $t11_12.$set(obj); } };
15334          $t13_14 = $t12_13.$get();
15335          $t14_15 = ($t10_11 !== $t13_14);
15336          if ($t14_15) {
15337            $block = 3; break;
15338          }
15339          else {
15340            $block = 4; break;
15341          }
15342          break;
15343        }
15344        case 3: {
15345          $t15_16 = errors.New('mls: epoch mismatch');
15346          return [null, $t15_16];
15347          break;
15348        }
15349        case 4: {
15350          $t16_17 = { $get() { return pubMsg.$get().content; }, $set(v) { const obj = pubMsg.$get(); obj.content = v; pubMsg.$set(obj); } };
15351          $t17_18 = { $get() { return $t16_17.$get().sender; }, $set(v) { const obj = $t16_17.$get(); obj.sender = v; $t16_17.$set(obj); } };
15352          $t18_19 = { $get() { return $t17_18.$get().senderType; }, $set(v) { const obj = $t17_18.$get(); obj.senderType = v; $t17_18.$set(obj); } };
15353          $t19_20 = $t18_19.$get();
15354          $t20_21 = ($t19_20 !== 1);
15355          if ($t20_21) {
15356            $block = 5; break;
15357          }
15358          else {
15359            $block = 6; break;
15360          }
15361          break;
15362        }
15363        case 5: {
15364          $t21_22 = errors.New('mls: unsupported sender type');
15365          return [null, $t21_22];
15366          break;
15367        }
15368        case 6: {
15369          $t22_23 = { $get() { return pubMsg.$get().content; }, $set(v) { const obj = pubMsg.$get(); obj.content = v; pubMsg.$set(obj); } };
15370          $t23_24 = { $get() { return $t22_23.$get().sender; }, $set(v) { const obj = $t22_23.$get(); obj.sender = v; $t22_23.$set(obj); } };
15371          $t24_25 = { $get() { return $t23_24.$get().leafIndex; }, $set(v) { const obj = $t23_24.$get(); obj.leafIndex = v; $t23_24.$set(obj); } };
15372          $t25_26 = $t24_25.$get();
15373          $t26_27 = { $get() { return g.$get().tree; }, $set(v) { const obj = g.$get(); obj.tree = v; g.$set(obj); } };
15374          $t27_28 = $t26_27.$get();
15375          $t28_29 = ratchetTree$getLeaf($t27_28, $t25_26);
15376          $t29_30 = ($t28_29 === null);
15377          if ($t29_30) {
15378            $block = 7; break;
15379          }
15380          else {
15381            $block = 8; break;
15382          }
15383          break;
15384        }
15385        case 7: {
15386          $t30_31 = errors.New('mls: blank sender leaf node');
15387          return [null, $t30_31];
15388          break;
15389        }
15390        case 8: {
15391          $t31_32 = publicMessage$authenticatedContent(pubMsg);
15392          $t32_33 = { $get() { return $t28_29.$get().signatureKey; }, $set(v) { const obj = $t28_29.$get(); obj.signatureKey = v; $t28_29.$set(obj); } };
15393          $t33_34 = $t32_33.$get();
15394          $t34_35 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15395          $t35_36 = authenticatedContent$verifySignature($t31_32, $t33_34, $t34_35);
15396          if ($t35_36) {
15397            $block = 10; break;
15398          }
15399          else {
15400            $block = 9; break;
15401          }
15402          break;
15403        }
15404        case 9: {
15405          $t36_37 = errors.New('mls: public message signature verification failed');
15406          return [null, $t36_37];
15407          break;
15408        }
15409        case 10: {
15410          $t37_38 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15411          $t38_39 = { $get() { return $t37_38.$get().cipherSuite; }, $set(v) { const obj = $t37_38.$get(); obj.cipherSuite = v; $t37_38.$set(obj); } };
15412          $t39_40 = $t38_39.$get();
15413          $t40_41 = { $get() { return g.$get().epochSecret; }, $set(v) { const obj = g.$get(); obj.epochSecret = v; g.$set(obj); } };
15414          $t41_42 = $t40_41.$get();
15415          $t42_43 = secretLabelMembership.$get();
15416          $t43_44 = CipherSuite$deriveSecret($t39_40, $t41_42, $t42_43);
15417          $t44_45 = $t43_44[0];
15418          $t45_46 = $t43_44[1];
15419          $t46_47 = ($t45_46 !== null);
15420          if ($t46_47) {
15421            $block = 11; break;
15422          }
15423          else {
15424            $block = 12; break;
15425          }
15426          break;
15427        }
15428        case 11: {
15429          return [null, $t45_46];
15430          break;
15431        }
15432        case 12: {
15433          $t47_48 = { $get() { return g.$get().groupContext; }, $set(v) { const obj = g.$get(); obj.groupContext = v; g.$set(obj); } };
15434          $t48_49 = publicMessage$verifyMembershipTag(pubMsg, $t44_45, $t47_48);
15435          if ($t48_49) {
15436            $block = 14; break;
15437          }
15438          else {
15439            $block = 13; break;
15440          }
15441          break;
15442        }
15443        case 13: {
15444          $t49_50 = errors.New('mls: membership tag verification failed');
15445          return [null, $t49_50];
15446          break;
15447        }
15448        case 14: {
15449          return [$t31_32, null];
15450          break;
15451        }
15452      }
15453    }
15454  }
15455  
15456  $rt.types.getType('smesh.lol/web/common/mls.Group')?.methods?.set('verifyPublicMessage', Group$verifyPublicMessage);
15457  export function commit$marshal(c, w) {
15458    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
15459    let $block = 0;
15460    while (true) {
15461      switch ($block) {
15462        case 0: {
15463          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15464          $t0_1.$set(c);
15465          $t1_2 = $t0_1.$get();
15466          $t2_3 = { $get() { return $t1_2.$get().proposals; }, $set(v) { const obj = $t1_2.$get(); obj.proposals = v; $t1_2.$set(obj); } };
15467          $t3_4 = $t2_3.$get();
15468          $t4_5 = $rt.builtin.len($t3_4);
15469          $t5_6 = commit$marshal$1.bind(null, $t0_1);
15470          $t6_7 = Writer$writeVector(w, $t4_5, $t5_6);
15471          $t7_8 = $t0_1.$get();
15472          $t8_9 = { $get() { return $t7_8.$get().path; }, $set(v) { const obj = $t7_8.$get(); obj.path = v; $t7_8.$set(obj); } };
15473          $t9_10 = $t8_9.$get();
15474          $t10_11 = ($t9_10 !== null);
15475          $t11_12 = Writer$writeOptional(w, $t10_11);
15476          $t12_13 = $t0_1.$get();
15477          $t13_14 = { $get() { return $t12_13.$get().path; }, $set(v) { const obj = $t12_13.$get(); obj.path = v; $t12_13.$set(obj); } };
15478          $t14_15 = $t13_14.$get();
15479          $t15_16 = ($t14_15 !== null);
15480          if ($t15_16) {
15481            $block = 1; break;
15482          }
15483          else {
15484            $block = 2; break;
15485          }
15486          break;
15487        }
15488        case 1: {
15489          $t16_17 = $t0_1.$get();
15490          $t17_18 = { $get() { return $t16_17.$get().path; }, $set(v) { const obj = $t16_17.$get(); obj.path = v; $t16_17.$set(obj); } };
15491          $t18_19 = $t17_18.$get();
15492          $t19_20 = updatePath$marshal($t18_19, w);
15493          $block = 2; break;
15494          break;
15495        }
15496        case 2: {
15497          return;
15498          break;
15499        }
15500      }
15501    }
15502  }
15503  
15504  function commit$marshal$1(c, w, i) {
15505    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
15506    $t0_1 = c.$get();
15507    $t1_2 = { $get() { return $t0_1.$get().proposals; }, $set(v) { const obj = $t0_1.$get(); obj.proposals = v; $t0_1.$set(obj); } };
15508    $t2_3 = $t1_2.$get();
15509    $t3_4 = $t2_3.addr(i);
15510    $t4_5 = proposalOrRef$marshal($t3_4, w);
15511    return;
15512  }
15513  
15514  $rt.types.getType('smesh.lol/web/common/mls.commit')?.methods?.set('marshal', commit$marshal);
15515  export function commit$unmarshal(c, r) {
15516    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
15517    let $block = 0;
15518    while (true) {
15519      switch ($block) {
15520        case 0: {
15521          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15522          $t0_1.$set(c);
15523          $t1_2 = $t0_1.$get();
15524          $t1_2.$set($rt.builtin.cloneValue({ proposals: null, path: null }));
15525          $t2_3 = commit$unmarshal$1.bind(null, $t0_1);
15526          $t3_4 = Reader$readVector(r, $t2_3);
15527          $t4_5 = ($t3_4 !== null);
15528          if ($t4_5) {
15529            $block = 1; break;
15530          }
15531          else {
15532            $block = 2; break;
15533          }
15534          break;
15535        }
15536        case 1: {
15537          return $t3_4;
15538          break;
15539        }
15540        case 2: {
15541          $t5_6 = Reader$readOptional(r);
15542          $t6_7 = $t5_6[0];
15543          $t7_8 = $t5_6[1];
15544          if ($t7_8) {
15545            $block = 4; break;
15546          }
15547          else {
15548            $block = 3; break;
15549          }
15550          break;
15551        }
15552        case 3: {
15553          $t8_9 = errUnexpectedEOF.$get();
15554          return $t8_9;
15555          break;
15556        }
15557        case 4: {
15558          if ($t6_7) {
15559            $block = 5; break;
15560          }
15561          else {
15562            $block = 6; break;
15563          }
15564          break;
15565        }
15566        case 5: {
15567          $t9_10 = $t0_1.$get();
15568          $t10_11 = { $value: { leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, nodes: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15569          $t11_12 = { $get() { return $t9_10.$get().path; }, $set(v) { const obj = $t9_10.$get(); obj.path = v; $t9_10.$set(obj); } };
15570          $t11_12.$set($t10_11);
15571          $t12_13 = $t0_1.$get();
15572          $t13_14 = { $get() { return $t12_13.$get().path; }, $set(v) { const obj = $t12_13.$get(); obj.path = v; $t12_13.$set(obj); } };
15573          $t14_15 = $t13_14.$get();
15574          $t15_16 = updatePath$unmarshal($t14_15, r);
15575          $t16_17 = ($t15_16 !== null);
15576          if ($t16_17) {
15577            $block = 7; break;
15578          }
15579          else {
15580            $block = 6; break;
15581          }
15582          break;
15583        }
15584        case 6: {
15585          return null;
15586          break;
15587        }
15588        case 7: {
15589          return $t15_16;
15590          break;
15591        }
15592      }
15593    }
15594  }
15595  
15596  function commit$unmarshal$1(c, r) {
15597    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
15598    let $block = 0;
15599    while (true) {
15600      switch ($block) {
15601        case 0: {
15602          $t0_1 = { $value: { typ: 0, proposal: null, reference: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15603          $t1_2 = proposalOrRef$unmarshal($t0_1, r);
15604          $t2_3 = ($t1_2 !== null);
15605          if ($t2_3) {
15606            $block = 1; break;
15607          }
15608          else {
15609            $block = 2; break;
15610          }
15611          break;
15612        }
15613        case 1: {
15614          return $t1_2;
15615          break;
15616        }
15617        case 2: {
15618          $t3_4 = c.$get();
15619          $t4_5 = c.$get();
15620          $t5_6 = { $get() { return $t4_5.$get().proposals; }, $set(v) { const obj = $t4_5.$get(); obj.proposals = v; $t4_5.$set(obj); } };
15621          $t6_7 = $t5_6.$get();
15622          $t7_8 = $t0_1.$get();
15623          $t8_9 = { $value: $rt.builtin.makeSlice(1, 1, { typ: 0, proposal: null, reference: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
15624          $t9_10 = $t8_9.$get().addr(0);
15625          $t9_10.$set($rt.builtin.cloneValue($t7_8));
15626          $t10_11 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
15627          $t11_12 = $rt.builtin.appendSlice($t6_7, $t10_11);
15628          $t12_13 = { $get() { return $t3_4.$get().proposals; }, $set(v) { const obj = $t3_4.$get(); obj.proposals = v; $t3_4.$set(obj); } };
15629          $t12_13.$set($t11_12);
15630          return null;
15631          break;
15632        }
15633      }
15634    }
15635  }
15636  
15637  $rt.types.getType('smesh.lol/web/common/mls.commit')?.methods?.set('unmarshal', commit$unmarshal);
15638  export function groupInfo$encrypt(info, joinerSecret, pskSecret) {
15639    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27;
15640    let $block = 0;
15641    while (true) {
15642      switch ($block) {
15643        case 0: {
15644          $t0_1 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15645          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
15646          $t2_3 = $t1_2.$get();
15647          $t3_4 = extractWelcomeSecret($t2_3, joinerSecret, pskSecret);
15648          $t4_5 = $t3_4[0];
15649          $t5_6 = $t3_4[1];
15650          $t6_7 = ($t5_6 !== null);
15651          if ($t6_7) {
15652            $block = 1; break;
15653          }
15654          else {
15655            $block = 2; break;
15656          }
15657          break;
15658        }
15659        case 1: {
15660          return [null, $t5_6];
15661          break;
15662        }
15663        case 2: {
15664          $t7_8 = CipherSuite$AEADNonceSize($t2_3);
15665          $t8_9 = ($t7_8 & 0xFFFF);
15666          $t9_10 = CipherSuite$expandWithLabel($t2_3, $t4_5, 'nonce', null, $t8_9);
15667          $t10_11 = $t9_10[0];
15668          $t11_12 = $t9_10[1];
15669          $t12_13 = ($t11_12 !== null);
15670          if ($t12_13) {
15671            $block = 3; break;
15672          }
15673          else {
15674            $block = 4; break;
15675          }
15676          break;
15677        }
15678        case 3: {
15679          return [null, $t11_12];
15680          break;
15681        }
15682        case 4: {
15683          $t13_14 = CipherSuite$AEADKeySize($t2_3);
15684          $t14_15 = ($t13_14 & 0xFFFF);
15685          $t15_16 = CipherSuite$expandWithLabel($t2_3, $t4_5, 'key', null, $t14_15);
15686          $t16_17 = $t15_16[0];
15687          $t17_18 = $t15_16[1];
15688          $t18_19 = ($t17_18 !== null);
15689          if ($t18_19) {
15690            $block = 5; break;
15691          }
15692          else {
15693            $block = 6; break;
15694          }
15695          break;
15696        }
15697        case 5: {
15698          return [null, $t17_18];
15699          break;
15700        }
15701        case 6: {
15702          $t19_20 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupInfo', info);
15703          $t20_21 = marshalRaw($t19_20);
15704          $t21_22 = $t20_21[0];
15705          $t22_23 = $t20_21[1];
15706          $t23_24 = ($t22_23 !== null);
15707          if ($t23_24) {
15708            $block = 7; break;
15709          }
15710          else {
15711            $block = 8; break;
15712          }
15713          break;
15714        }
15715        case 7: {
15716          return [null, $t22_23];
15717          break;
15718        }
15719        case 8: {
15720          $t24_25 = CipherSuite$aeadSeal($t2_3, $t16_17, $t10_11, $t21_22, null);
15721          $t25_26 = $t24_25[0];
15722          $t26_27 = $t24_25[1];
15723          return [$t25_26, $t26_27];
15724          break;
15725        }
15726      }
15727    }
15728  }
15729  
15730  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('encrypt', groupInfo$encrypt);
15731  export function groupInfo$marshal(info, w) {
15732    let $t0_1, $t1_2, $t2_3, $t3_4;
15733    $t0_1 = groupInfo$marshalTBS(info, w);
15734    $t1_2 = { $get() { return info.$get().signature; }, $set(v) { const obj = info.$get(); obj.signature = v; info.$set(obj); } };
15735    $t2_3 = $t1_2.$get();
15736    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
15737    return;
15738  }
15739  
15740  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('marshal', groupInfo$marshal);
15741  export function groupInfo$marshalTBS(info, w) {
15742    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
15743    $t0_1 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15744    $t1_2 = groupContext$marshal($t0_1, w);
15745    $t2_3 = { $get() { return info.$get().extensions; }, $set(v) { const obj = info.$get(); obj.extensions = v; info.$set(obj); } };
15746    $t3_4 = $t2_3.$get();
15747    $t4_5 = marshalExtensionVec(w, $t3_4);
15748    $t5_6 = { $get() { return info.$get().confirmationTag; }, $set(v) { const obj = info.$get(); obj.confirmationTag = v; info.$set(obj); } };
15749    $t6_7 = $t5_6.$get();
15750    $t7_8 = Writer$writeOpaqueVec(w, $t6_7);
15751    $t8_9 = { $get() { return info.$get().signer; }, $set(v) { const obj = info.$get(); obj.signer = v; info.$set(obj); } };
15752    $t9_10 = $t8_9.$get();
15753    $t10_11 = $t9_10;
15754    $t11_12 = Writer$addUint32(w, $t10_11);
15755    return;
15756  }
15757  
15758  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('marshalTBS', groupInfo$marshalTBS);
15759  export function groupInfo$sign(info, signerPriv) {
15760    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
15761    let $block = 0;
15762    while (true) {
15763      switch ($block) {
15764        case 0: {
15765          $t0_1 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15766          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
15767          $t2_3 = $t1_2.$get();
15768          $t3_4 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15769          $t4_5 = groupInfo$marshalTBS(info, $t3_4);
15770          $t5_6 = Writer$bytes($t3_4);
15771          $t6_7 = $t5_6[0];
15772          $t7_8 = $t5_6[1];
15773          $t8_9 = ($t7_8 !== null);
15774          if ($t8_9) {
15775            $block = 1; break;
15776          }
15777          else {
15778            $block = 2; break;
15779          }
15780          break;
15781        }
15782        case 1: {
15783          return $t7_8;
15784          break;
15785        }
15786        case 2: {
15787          $t9_10 = CipherSuite$signWithLabel($t2_3, signerPriv, 'GroupInfoTBS', $t6_7);
15788          $t10_11 = $t9_10[0];
15789          $t11_12 = $t9_10[1];
15790          $t12_13 = ($t11_12 !== null);
15791          if ($t12_13) {
15792            $block = 3; break;
15793          }
15794          else {
15795            $block = 4; break;
15796          }
15797          break;
15798        }
15799        case 3: {
15800          return $t11_12;
15801          break;
15802        }
15803        case 4: {
15804          $t13_14 = { $get() { return info.$get().signature; }, $set(v) { const obj = info.$get(); obj.signature = v; info.$set(obj); } };
15805          $t13_14.$set($t10_11);
15806          return null;
15807          break;
15808        }
15809      }
15810    }
15811  }
15812  
15813  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('sign', groupInfo$sign);
15814  export function groupInfo$unmarshal(info, r) {
15815    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24;
15816    let $block = 0;
15817    while (true) {
15818      switch ($block) {
15819        case 0: {
15820          info.$set($rt.builtin.cloneValue({ groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, extensions: null, confirmationTag: null, signer: 0, signature: null }));
15821          $t0_1 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15822          $t1_2 = groupContext$unmarshal($t0_1, r);
15823          $t2_3 = ($t1_2 !== null);
15824          if ($t2_3) {
15825            $block = 1; break;
15826          }
15827          else {
15828            $block = 2; break;
15829          }
15830          break;
15831        }
15832        case 1: {
15833          return $t1_2;
15834          break;
15835        }
15836        case 2: {
15837          $t3_4 = unmarshalExtensionVec(r);
15838          $t4_5 = $t3_4[0];
15839          $t5_6 = $t3_4[1];
15840          $t6_7 = ($t5_6 !== null);
15841          if ($t6_7) {
15842            $block = 3; break;
15843          }
15844          else {
15845            $block = 4; break;
15846          }
15847          break;
15848        }
15849        case 3: {
15850          return $t5_6;
15851          break;
15852        }
15853        case 4: {
15854          $t7_8 = { $get() { return info.$get().extensions; }, $set(v) { const obj = info.$get(); obj.extensions = v; info.$set(obj); } };
15855          $t7_8.$set($t4_5);
15856          $t8_9 = Reader$readOpaqueVec(r);
15857          $t9_10 = $t8_9[0];
15858          $t10_11 = { $get() { return info.$get().confirmationTag; }, $set(v) { const obj = info.$get(); obj.confirmationTag = v; info.$set(obj); } };
15859          $t10_11.$set($t9_10);
15860          $t11_12 = $t8_9[1];
15861          if ($t11_12) {
15862            $block = 6; break;
15863          }
15864          else {
15865            $block = 5; break;
15866          }
15867          break;
15868        }
15869        case 5: {
15870          $t12_13 = errUnexpectedEOF.$get();
15871          return $t12_13;
15872          break;
15873        }
15874        case 6: {
15875          $t13_14 = Reader$readUint32(r);
15876          $t14_15 = $t13_14[0];
15877          $t15_16 = $t13_14[1];
15878          if ($t15_16) {
15879            $block = 8; break;
15880          }
15881          else {
15882            $block = 7; break;
15883          }
15884          break;
15885        }
15886        case 7: {
15887          $t16_17 = errUnexpectedEOF.$get();
15888          return $t16_17;
15889          break;
15890        }
15891        case 8: {
15892          $t17_18 = $t14_15;
15893          $t18_19 = { $get() { return info.$get().signer; }, $set(v) { const obj = info.$get(); obj.signer = v; info.$set(obj); } };
15894          $t18_19.$set($t17_18);
15895          $t19_20 = Reader$readOpaqueVec(r);
15896          $t20_21 = $t19_20[0];
15897          $t21_22 = { $get() { return info.$get().signature; }, $set(v) { const obj = info.$get(); obj.signature = v; info.$set(obj); } };
15898          $t21_22.$set($t20_21);
15899          $t22_23 = $t19_20[1];
15900          if ($t22_23) {
15901            $block = 10; break;
15902          }
15903          else {
15904            $block = 9; break;
15905          }
15906          break;
15907        }
15908        case 9: {
15909          $t23_24 = errUnexpectedEOF.$get();
15910          return $t23_24;
15911          break;
15912        }
15913        case 10: {
15914          return null;
15915          break;
15916        }
15917      }
15918    }
15919  }
15920  
15921  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('unmarshal', groupInfo$unmarshal);
15922  export function groupInfo$verifyConfirmationTag(info, joinerSecret, pskSecret) {
15923    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
15924    let $block = 0;
15925    while (true) {
15926      switch ($block) {
15927        case 0: {
15928          $t0_1 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15929          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
15930          $t2_3 = $t1_2.$get();
15931          $t3_4 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15932          $t4_5 = groupContext$extractEpochSecret($t3_4, joinerSecret, pskSecret);
15933          $t5_6 = $t4_5[0];
15934          $t6_7 = $t4_5[1];
15935          $t7_8 = ($t6_7 !== null);
15936          if ($t7_8) {
15937            $block = 1; break;
15938          }
15939          else {
15940            $block = 2; break;
15941          }
15942          break;
15943        }
15944        case 1: {
15945          return false;
15946          break;
15947        }
15948        case 2: {
15949          $t8_9 = secretLabelConfirm.$get();
15950          $t9_10 = CipherSuite$deriveSecret($t2_3, $t5_6, $t8_9);
15951          $t10_11 = $t9_10[0];
15952          $t11_12 = $t9_10[1];
15953          $t12_13 = ($t11_12 !== null);
15954          if ($t12_13) {
15955            $block = 3; break;
15956          }
15957          else {
15958            $block = 4; break;
15959          }
15960          break;
15961        }
15962        case 3: {
15963          return false;
15964          break;
15965        }
15966        case 4: {
15967          $t13_14 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15968          $t14_15 = { $get() { return $t13_14.$get().confirmedTranscriptHash; }, $set(v) { const obj = $t13_14.$get(); obj.confirmedTranscriptHash = v; $t13_14.$set(obj); } };
15969          $t15_16 = $t14_15.$get();
15970          $t16_17 = { $get() { return info.$get().confirmationTag; }, $set(v) { const obj = info.$get(); obj.confirmationTag = v; info.$set(obj); } };
15971          $t17_18 = $t16_17.$get();
15972          $t18_19 = CipherSuite$verifyMAC($t2_3, $t10_11, $t15_16, $t17_18);
15973          return $t18_19;
15974          break;
15975        }
15976      }
15977    }
15978  }
15979  
15980  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('verifyConfirmationTag', groupInfo$verifyConfirmationTag);
15981  export function groupInfo$verifySignature(info, signerPub) {
15982    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
15983    let $block = 0;
15984    while (true) {
15985      switch ($block) {
15986        case 0: {
15987          $t0_1 = { $get() { return info.$get().groupContext; }, $set(v) { const obj = info.$get(); obj.groupContext = v; info.$set(obj); } };
15988          $t1_2 = { $get() { return $t0_1.$get().cipherSuite; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuite = v; $t0_1.$set(obj); } };
15989          $t2_3 = $t1_2.$get();
15990          $t3_4 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
15991          $t4_5 = groupInfo$marshalTBS(info, $t3_4);
15992          $t5_6 = Writer$bytes($t3_4);
15993          $t6_7 = $t5_6[0];
15994          $t7_8 = $t5_6[1];
15995          $t8_9 = ($t7_8 !== null);
15996          if ($t8_9) {
15997            $block = 1; break;
15998          }
15999          else {
16000            $block = 2; break;
16001          }
16002          break;
16003        }
16004        case 1: {
16005          return false;
16006          break;
16007        }
16008        case 2: {
16009          $t9_10 = { $get() { return info.$get().signature; }, $set(v) { const obj = info.$get(); obj.signature = v; info.$set(obj); } };
16010          $t10_11 = $t9_10.$get();
16011          $t11_12 = CipherSuite$verifyWithLabel($t2_3, signerPub, 'GroupInfoTBS', $t6_7, $t10_11);
16012          return $t11_12;
16013          break;
16014        }
16015      }
16016    }
16017  }
16018  
16019  $rt.types.getType('smesh.lol/web/common/mls.groupInfo')?.methods?.set('verifySignature', groupInfo$verifySignature);
16020  export function groupSecrets$encrypt(sec, cs, initKey, encryptedGroupInfo) {
16021    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
16022    let $block = 0;
16023    while (true) {
16024      switch ($block) {
16025        case 0: {
16026          $t0_1 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupSecrets', sec);
16027          $t1_2 = marshalRaw($t0_1);
16028          $t2_3 = $t1_2[0];
16029          $t3_4 = $t1_2[1];
16030          $t4_5 = ($t3_4 !== null);
16031          if ($t4_5) {
16032            $block = 1; break;
16033          }
16034          else {
16035            $block = 2; break;
16036          }
16037          break;
16038        }
16039        case 1: {
16040          return [null, $t3_4];
16041          break;
16042        }
16043        case 2: {
16044          $t5_6 = CipherSuite$encryptWithLabel(cs, initKey, 'Welcome', encryptedGroupInfo, $t2_3);
16045          $t6_7 = $t5_6[0];
16046          $t7_8 = $t5_6[1];
16047          $t8_9 = $t5_6[2];
16048          $t9_10 = ($t8_9 !== null);
16049          if ($t9_10) {
16050            $block = 3; break;
16051          }
16052          else {
16053            $block = 4; break;
16054          }
16055          break;
16056        }
16057        case 3: {
16058          return [null, $t8_9];
16059          break;
16060        }
16061        case 4: {
16062          $t10_11 = { $value: { kemOutput: null, ciphertext: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16063          $t11_12 = { $get() { return $t10_11.$get().kemOutput; }, $set(v) { const obj = $t10_11.$get(); obj.kemOutput = v; $t10_11.$set(obj); } };
16064          $t12_13 = { $get() { return $t10_11.$get().ciphertext; }, $set(v) { const obj = $t10_11.$get(); obj.ciphertext = v; $t10_11.$set(obj); } };
16065          $t11_12.$set($t6_7);
16066          $t12_13.$set($t7_8);
16067          return [$t10_11, null];
16068          break;
16069        }
16070      }
16071    }
16072  }
16073  
16074  $rt.types.getType('smesh.lol/web/common/mls.groupSecrets')?.methods?.set('encrypt', groupSecrets$encrypt);
16075  export function groupSecrets$marshal(sec, w) {
16076    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24;
16077    let $block = 0;
16078    while (true) {
16079      switch ($block) {
16080        case 0: {
16081          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16082          $t0_1.$set(sec);
16083          $t1_2 = $t0_1.$get();
16084          $t2_3 = { $get() { return $t1_2.$get().joinerSecret; }, $set(v) { const obj = $t1_2.$get(); obj.joinerSecret = v; $t1_2.$set(obj); } };
16085          $t3_4 = $t2_3.$get();
16086          $t4_5 = Writer$writeOpaqueVec(w, $t3_4);
16087          $t5_6 = $t0_1.$get();
16088          $t6_7 = { $get() { return $t5_6.$get().pathSecret; }, $set(v) { const obj = $t5_6.$get(); obj.pathSecret = v; $t5_6.$set(obj); } };
16089          $t7_8 = $t6_7.$get();
16090          $t8_9 = !$rt.builtin.stringEqual($t7_8, null);
16091          $t9_10 = Writer$writeOptional(w, $t8_9);
16092          $t10_11 = $t0_1.$get();
16093          $t11_12 = { $get() { return $t10_11.$get().pathSecret; }, $set(v) { const obj = $t10_11.$get(); obj.pathSecret = v; $t10_11.$set(obj); } };
16094          $t12_13 = $t11_12.$get();
16095          $t13_14 = !$rt.builtin.stringEqual($t12_13, null);
16096          if ($t13_14) {
16097            $block = 1; break;
16098          }
16099          else {
16100            $block = 2; break;
16101          }
16102          break;
16103        }
16104        case 1: {
16105          $t14_15 = $t0_1.$get();
16106          $t15_16 = { $get() { return $t14_15.$get().pathSecret; }, $set(v) { const obj = $t14_15.$get(); obj.pathSecret = v; $t14_15.$set(obj); } };
16107          $t16_17 = $t15_16.$get();
16108          $t17_18 = Writer$writeOpaqueVec(w, $t16_17);
16109          $block = 2; break;
16110          break;
16111        }
16112        case 2: {
16113          $t18_19 = $t0_1.$get();
16114          $t19_20 = { $get() { return $t18_19.$get().psks; }, $set(v) { const obj = $t18_19.$get(); obj.psks = v; $t18_19.$set(obj); } };
16115          $t20_21 = $t19_20.$get();
16116          $t21_22 = $rt.builtin.len($t20_21);
16117          $t22_23 = groupSecrets$marshal$1.bind(null, $t0_1);
16118          $t23_24 = Writer$writeVector(w, $t21_22, $t22_23);
16119          return;
16120          break;
16121        }
16122      }
16123    }
16124  }
16125  
16126  function groupSecrets$marshal$1(sec, w, i) {
16127    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
16128    $t0_1 = sec.$get();
16129    $t1_2 = { $get() { return $t0_1.$get().psks; }, $set(v) { const obj = $t0_1.$get(); obj.psks = v; $t0_1.$set(obj); } };
16130    $t2_3 = $t1_2.$get();
16131    $t3_4 = $t2_3.addr(i);
16132    $t4_5 = preSharedKeyID$marshal($t3_4, w);
16133    return;
16134  }
16135  
16136  $rt.types.getType('smesh.lol/web/common/mls.groupSecrets')?.methods?.set('marshal', groupSecrets$marshal);
16137  export function groupSecrets$unmarshal(sec, r) {
16138    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
16139    let $block = 0;
16140    while (true) {
16141      switch ($block) {
16142        case 0: {
16143          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16144          $t0_1.$set(sec);
16145          $t1_2 = $t0_1.$get();
16146          $t1_2.$set($rt.builtin.cloneValue({ joinerSecret: null, pathSecret: null, psks: null }));
16147          $t2_3 = $t0_1.$get();
16148          $t3_4 = Reader$readOpaqueVec(r);
16149          $t4_5 = $t3_4[0];
16150          $t5_6 = { $get() { return $t2_3.$get().joinerSecret; }, $set(v) { const obj = $t2_3.$get(); obj.joinerSecret = v; $t2_3.$set(obj); } };
16151          $t5_6.$set($t4_5);
16152          $t6_7 = $t3_4[1];
16153          if ($t6_7) {
16154            $block = 2; break;
16155          }
16156          else {
16157            $block = 1; break;
16158          }
16159          break;
16160        }
16161        case 1: {
16162          $t7_8 = errUnexpectedEOF.$get();
16163          return $t7_8;
16164          break;
16165        }
16166        case 2: {
16167          $t8_9 = Reader$readOptional(r);
16168          $t9_10 = $t8_9[0];
16169          $t10_11 = $t8_9[1];
16170          if ($t10_11) {
16171            $block = 4; break;
16172          }
16173          else {
16174            $block = 3; break;
16175          }
16176          break;
16177        }
16178        case 3: {
16179          $t11_12 = errUnexpectedEOF.$get();
16180          return $t11_12;
16181          break;
16182        }
16183        case 4: {
16184          if ($t9_10) {
16185            $block = 5; break;
16186          }
16187          else {
16188            $block = 6; break;
16189          }
16190          break;
16191        }
16192        case 5: {
16193          $t12_13 = $t0_1.$get();
16194          $t13_14 = Reader$readOpaqueVec(r);
16195          $t14_15 = $t13_14[0];
16196          $t15_16 = { $get() { return $t12_13.$get().pathSecret; }, $set(v) { const obj = $t12_13.$get(); obj.pathSecret = v; $t12_13.$set(obj); } };
16197          $t15_16.$set($t14_15);
16198          $t16_17 = $t13_14[1];
16199          if ($t16_17) {
16200            $block = 6; break;
16201          }
16202          else {
16203            $block = 7; break;
16204          }
16205          break;
16206        }
16207        case 6: {
16208          $t17_18 = groupSecrets$unmarshal$1.bind(null, $t0_1);
16209          $t18_19 = Reader$readVector(r, $t17_18);
16210          return $t18_19;
16211          break;
16212        }
16213        case 7: {
16214          $t19_20 = errUnexpectedEOF.$get();
16215          return $t19_20;
16216          break;
16217        }
16218      }
16219    }
16220  }
16221  
16222  function groupSecrets$unmarshal$1(sec, r) {
16223    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
16224    let $block = 0;
16225    while (true) {
16226      switch ($block) {
16227        case 0: {
16228          $t0_1 = { $value: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16229          $t1_2 = preSharedKeyID$unmarshal($t0_1, r);
16230          $t2_3 = ($t1_2 !== null);
16231          if ($t2_3) {
16232            $block = 1; break;
16233          }
16234          else {
16235            $block = 2; break;
16236          }
16237          break;
16238        }
16239        case 1: {
16240          return $t1_2;
16241          break;
16242        }
16243        case 2: {
16244          $t3_4 = sec.$get();
16245          $t4_5 = sec.$get();
16246          $t5_6 = { $get() { return $t4_5.$get().psks; }, $set(v) { const obj = $t4_5.$get(); obj.psks = v; $t4_5.$set(obj); } };
16247          $t6_7 = $t5_6.$get();
16248          $t7_8 = $t0_1.$get();
16249          $t8_9 = { $value: $rt.builtin.makeSlice(1, 1, { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
16250          $t9_10 = $t8_9.$get().addr(0);
16251          $t9_10.$set($rt.builtin.cloneValue($t7_8));
16252          $t10_11 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
16253          $t11_12 = $rt.builtin.appendSlice($t6_7, $t10_11);
16254          $t12_13 = { $get() { return $t3_4.$get().psks; }, $set(v) { const obj = $t3_4.$get(); obj.psks = v; $t3_4.$set(obj); } };
16255          $t12_13.$set($t11_12);
16256          return null;
16257          break;
16258        }
16259      }
16260    }
16261  }
16262  
16263  $rt.types.getType('smesh.lol/web/common/mls.groupSecrets')?.methods?.set('unmarshal', groupSecrets$unmarshal);
16264  export function groupSecrets$verifySingleReinitOrBranchPSK(sec) {
16265    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
16266    let $block = 0;
16267    while (true) {
16268      switch ($block) {
16269        case 0: {
16270          $t0_1 = { $get() { return sec.$get().psks; }, $set(v) { const obj = sec.$get(); obj.psks = v; sec.$set(obj); } };
16271          $t1_2 = $t0_1.$get();
16272          $t2_3 = $rt.builtin.len($t1_2);
16273          $t3_4 = 0;
16274          $t4_5 = -1;
16275          $block = 1; break;
16276          break;
16277        }
16278        case 1: {
16279          $t5_6 = ($t4_5 + 1);
16280          $t6_7 = ($t5_6 < $t2_3);
16281          if ($t6_7) {
16282            $block = 2; break;
16283          }
16284          else {
16285            $block = 3; break;
16286          }
16287          break;
16288        }
16289        case 2: {
16290          $t7_8 = $t1_2.addr($t5_6);
16291          $t8_9 = $t7_8.$get();
16292          $t9_10 = { $value: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16293          $t9_10.$set($rt.builtin.cloneValue($t8_9));
16294          $t10_11 = { $get() { return $t9_10.$get().pskType; }, $set(v) { const obj = $t9_10.$get(); obj.pskType = v; $t9_10.$set(obj); } };
16295          $t11_12 = $t10_11.$get();
16296          $t12_13 = ($t11_12 !== 2);
16297          if ($t12_13) {
16298            let $phi0 = $t3_4;
16299            let $phi1 = $t5_6;
16300            $t3_4 = $phi0;
16301            $t4_5 = $phi1;
16302            $block = 1; break;
16303          }
16304          else {
16305            $block = 4; break;
16306          }
16307          break;
16308        }
16309        case 3: {
16310          $t13_14 = ($t3_4 <= 1);
16311          return $t13_14;
16312          break;
16313        }
16314        case 4: {
16315          $t14_15 = { $get() { return $t9_10.$get().usage; }, $set(v) { const obj = $t9_10.$get(); obj.usage = v; $t9_10.$set(obj); } };
16316          $t15_16 = $t14_15.$get();
16317          $t16_17 = ($t15_16 === 2);
16318          if ($t16_17) {
16319            $block = 5; break;
16320          }
16321          else {
16322            $block = 6; break;
16323          }
16324          break;
16325        }
16326        case 5: {
16327          $t17_18 = ($t3_4 + 1);
16328          $t3_4 = $t17_18;
16329          $t4_5 = $t5_6;
16330          $block = 1; break;
16331          break;
16332        }
16333        case 6: {
16334          $t18_19 = ($t15_16 === 3);
16335          if ($t18_19) {
16336            $block = 5; break;
16337          }
16338          else {
16339            let $phi0 = $t3_4;
16340            let $phi1 = $t5_6;
16341            $t3_4 = $phi0;
16342            $t4_5 = $phi1;
16343            $block = 1; break;
16344          }
16345          break;
16346        }
16347      }
16348    }
16349  }
16350  
16351  $rt.types.getType('smesh.lol/web/common/mls.groupSecrets')?.methods?.set('verifySingleReinitOrBranchPSK', groupSecrets$verifySingleReinitOrBranchPSK);
16352  export function encryptedGroupSecrets$marshal(sec, w) {
16353    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
16354    $t0_1 = { $get() { return sec.$get().newMember; }, $set(v) { const obj = sec.$get(); obj.newMember = v; sec.$set(obj); } };
16355    $t1_2 = $t0_1.$get();
16356    $t2_3 = $t1_2;
16357    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
16358    $t4_5 = { $get() { return sec.$get().encryptedGroupSecrets; }, $set(v) { const obj = sec.$get(); obj.encryptedGroupSecrets = v; sec.$set(obj); } };
16359    $t5_6 = hpkeCiphertext$marshal($t4_5, w);
16360    return;
16361  }
16362  
16363  $rt.types.getType('smesh.lol/web/common/mls.encryptedGroupSecrets')?.methods?.set('marshal', encryptedGroupSecrets$marshal);
16364  export function encryptedGroupSecrets$unmarshal(sec, r) {
16365    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
16366    let $block = 0;
16367    while (true) {
16368      switch ($block) {
16369        case 0: {
16370          sec.$set($rt.builtin.cloneValue({ newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }));
16371          $t0_1 = Reader$readOpaqueVec(r);
16372          $t1_2 = $t0_1[0];
16373          $t2_3 = { $get() { return sec.$get().newMember; }, $set(v) { const obj = sec.$get(); obj.newMember = v; sec.$set(obj); } };
16374          $t3_4 = $t1_2;
16375          $t2_3.$set($t3_4);
16376          $t4_5 = $t0_1[1];
16377          if ($t4_5) {
16378            $block = 2; break;
16379          }
16380          else {
16381            $block = 1; break;
16382          }
16383          break;
16384        }
16385        case 1: {
16386          $t5_6 = errUnexpectedEOF.$get();
16387          return $t5_6;
16388          break;
16389        }
16390        case 2: {
16391          $t6_7 = { $get() { return sec.$get().encryptedGroupSecrets; }, $set(v) { const obj = sec.$get(); obj.encryptedGroupSecrets = v; sec.$set(obj); } };
16392          $t7_8 = hpkeCiphertext$unmarshal($t6_7, r);
16393          return $t7_8;
16394          break;
16395        }
16396      }
16397    }
16398  }
16399  
16400  $rt.types.getType('smesh.lol/web/common/mls.encryptedGroupSecrets')?.methods?.set('unmarshal', encryptedGroupSecrets$unmarshal);
16401  export function Welcome$Bytes(w) {
16402    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
16403    let $block = 0;
16404    while (true) {
16405      switch ($block) {
16406        case 0: {
16407          $t0_1 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16408          $t1_2 = { $get() { return $t0_1.$get().version; }, $set(v) { const obj = $t0_1.$get(); obj.version = v; $t0_1.$set(obj); } };
16409          $t2_3 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
16410          $t3_4 = { $get() { return $t0_1.$get().welcome; }, $set(v) { const obj = $t0_1.$get(); obj.welcome = v; $t0_1.$set(obj); } };
16411          $t1_2.$set(1);
16412          $t2_3.$set(3);
16413          $t3_4.$set(w);
16414          $t4_5 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t0_1);
16415          $t5_6 = marshalRaw($t4_5);
16416          $t6_7 = $t5_6[0];
16417          $t7_8 = $t5_6[1];
16418          $t8_9 = ($t7_8 !== null);
16419          if ($t8_9) {
16420            $block = 1; break;
16421          }
16422          else {
16423            $block = 2; break;
16424          }
16425          break;
16426        }
16427        case 1: {
16428          $t9_10 = $rt.types.makeInterface('string', 'mls: failed to marshal welcome');
16429          $rt.runtime.panic($t9_10);
16430          break;
16431        }
16432        case 2: {
16433          return $t6_7;
16434          break;
16435        }
16436      }
16437    }
16438  }
16439  
16440  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('Bytes', Welcome$Bytes);
16441  export function Welcome$NewMembers(w) {
16442    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
16443    let $block = 0;
16444    while (true) {
16445      switch ($block) {
16446        case 0: {
16447          $t0_1 = { $get() { return w.$get().secrets; }, $set(v) { const obj = w.$get(); obj.secrets = v; w.$set(obj); } };
16448          $t1_2 = $t0_1.$get();
16449          $t2_3 = $rt.builtin.len($t1_2);
16450          $t3_4 = $rt.builtin.makeSlice($t2_3, $t2_3, null);
16451          $t4_5 = { $get() { return w.$get().secrets; }, $set(v) { const obj = w.$get(); obj.secrets = v; w.$set(obj); } };
16452          $t5_6 = $t4_5.$get();
16453          $t6_7 = $rt.builtin.len($t5_6);
16454          $t7_8 = -1;
16455          $block = 1; break;
16456          break;
16457        }
16458        case 1: {
16459          $t8_9 = ($t7_8 + 1);
16460          $t9_10 = ($t8_9 < $t6_7);
16461          if ($t9_10) {
16462            $block = 2; break;
16463          }
16464          else {
16465            $block = 3; break;
16466          }
16467          break;
16468        }
16469        case 2: {
16470          $t10_11 = $t5_6.addr($t8_9);
16471          $t11_12 = $t10_11.$get();
16472          $t12_13 = { $value: { newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16473          $t12_13.$set($rt.builtin.cloneValue($t11_12));
16474          $t13_14 = { $get() { return $t12_13.$get().newMember; }, $set(v) { const obj = $t12_13.$get(); obj.newMember = v; $t12_13.$set(obj); } };
16475          $t14_15 = $t13_14.$get();
16476          $t15_16 = $t3_4.addr($t8_9);
16477          $t15_16.$set($t14_15);
16478          $t7_8 = $t8_9;
16479          $block = 1; break;
16480          break;
16481        }
16482        case 3: {
16483          return $t3_4;
16484          break;
16485        }
16486      }
16487    }
16488  }
16489  
16490  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('NewMembers', Welcome$NewMembers);
16491  export function Welcome$decryptGroupInfo(w, joinerSecret, pskSecret) {
16492    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28;
16493    let $block = 0;
16494    while (true) {
16495      switch ($block) {
16496        case 0: {
16497          $t0_1 = { $get() { return w.$get().cipherSuite; }, $set(v) { const obj = w.$get(); obj.cipherSuite = v; w.$set(obj); } };
16498          $t1_2 = $t0_1.$get();
16499          $t2_3 = extractWelcomeSecret($t1_2, joinerSecret, pskSecret);
16500          $t3_4 = $t2_3[0];
16501          $t4_5 = $t2_3[1];
16502          $t5_6 = ($t4_5 !== null);
16503          if ($t5_6) {
16504            $block = 1; break;
16505          }
16506          else {
16507            $block = 2; break;
16508          }
16509          break;
16510        }
16511        case 1: {
16512          return [null, $t4_5];
16513          break;
16514        }
16515        case 2: {
16516          $t6_7 = CipherSuite$AEADNonceSize($t1_2);
16517          $t7_8 = ($t6_7 & 0xFFFF);
16518          $t8_9 = CipherSuite$expandWithLabel($t1_2, $t3_4, 'nonce', null, $t7_8);
16519          $t9_10 = $t8_9[0];
16520          $t10_11 = $t8_9[1];
16521          $t11_12 = ($t10_11 !== null);
16522          if ($t11_12) {
16523            $block = 3; break;
16524          }
16525          else {
16526            $block = 4; break;
16527          }
16528          break;
16529        }
16530        case 3: {
16531          return [null, $t10_11];
16532          break;
16533        }
16534        case 4: {
16535          $t12_13 = CipherSuite$AEADKeySize($t1_2);
16536          $t13_14 = ($t12_13 & 0xFFFF);
16537          $t14_15 = CipherSuite$expandWithLabel($t1_2, $t3_4, 'key', null, $t13_14);
16538          $t15_16 = $t14_15[0];
16539          $t16_17 = $t14_15[1];
16540          $t17_18 = ($t16_17 !== null);
16541          if ($t17_18) {
16542            $block = 5; break;
16543          }
16544          else {
16545            $block = 6; break;
16546          }
16547          break;
16548        }
16549        case 5: {
16550          return [null, $t16_17];
16551          break;
16552        }
16553        case 6: {
16554          $t18_19 = { $get() { return w.$get().encryptedGroupInfo; }, $set(v) { const obj = w.$get(); obj.encryptedGroupInfo = v; w.$set(obj); } };
16555          $t19_20 = $t18_19.$get();
16556          $t20_21 = CipherSuite$aeadOpen($t1_2, $t15_16, $t9_10, $t19_20, null);
16557          $t21_22 = $t20_21[0];
16558          $t22_23 = $t20_21[1];
16559          $t23_24 = ($t22_23 !== null);
16560          if ($t23_24) {
16561            $block = 7; break;
16562          }
16563          else {
16564            $block = 8; break;
16565          }
16566          break;
16567        }
16568        case 7: {
16569          return [null, $t22_23];
16570          break;
16571        }
16572        case 8: {
16573          $t24_25 = { $value: { groupContext: { version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }, extensions: null, confirmationTag: null, signer: 0, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16574          $t25_26 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupInfo', $t24_25);
16575          $t26_27 = unmarshalRaw($t21_22, $t25_26);
16576          $t27_28 = ($t26_27 !== null);
16577          if ($t27_28) {
16578            $block = 9; break;
16579          }
16580          else {
16581            $block = 10; break;
16582          }
16583          break;
16584        }
16585        case 9: {
16586          return [null, $t26_27];
16587          break;
16588        }
16589        case 10: {
16590          return [$t24_25, null];
16591          break;
16592        }
16593      }
16594    }
16595  }
16596  
16597  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('decryptGroupInfo', Welcome$decryptGroupInfo);
16598  export function Welcome$decryptGroupSecrets(w, ref, initKeyPriv) {
16599    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
16600    let $block = 0;
16601    while (true) {
16602      switch ($block) {
16603        case 0: {
16604          $t0_1 = { $get() { return w.$get().cipherSuite; }, $set(v) { const obj = w.$get(); obj.cipherSuite = v; w.$set(obj); } };
16605          $t1_2 = $t0_1.$get();
16606          $t2_3 = Welcome$findSecret(w, ref);
16607          $t3_4 = ($t2_3 === null);
16608          if ($t3_4) {
16609            $block = 1; break;
16610          }
16611          else {
16612            $block = 2; break;
16613          }
16614          break;
16615        }
16616        case 1: {
16617          $t4_5 = errGroupSecretsNotFound.$get();
16618          return [null, $t4_5];
16619          break;
16620        }
16621        case 2: {
16622          $t5_6 = { $get() { return w.$get().encryptedGroupInfo; }, $set(v) { const obj = w.$get(); obj.encryptedGroupInfo = v; w.$set(obj); } };
16623          $t6_7 = $t5_6.$get();
16624          $t7_8 = { $get() { return $t2_3.$get().encryptedGroupSecrets; }, $set(v) { const obj = $t2_3.$get(); obj.encryptedGroupSecrets = v; $t2_3.$set(obj); } };
16625          $t8_9 = { $get() { return $t7_8.$get().kemOutput; }, $set(v) { const obj = $t7_8.$get(); obj.kemOutput = v; $t7_8.$set(obj); } };
16626          $t9_10 = $t8_9.$get();
16627          $t10_11 = { $get() { return $t2_3.$get().encryptedGroupSecrets; }, $set(v) { const obj = $t2_3.$get(); obj.encryptedGroupSecrets = v; $t2_3.$set(obj); } };
16628          $t11_12 = { $get() { return $t10_11.$get().ciphertext; }, $set(v) { const obj = $t10_11.$get(); obj.ciphertext = v; $t10_11.$set(obj); } };
16629          $t12_13 = $t11_12.$get();
16630          $t13_14 = CipherSuite$decryptWithLabel($t1_2, initKeyPriv, 'Welcome', $t6_7, $t9_10, $t12_13);
16631          $t14_15 = $t13_14[0];
16632          $t15_16 = $t13_14[1];
16633          $t16_17 = ($t15_16 !== null);
16634          if ($t16_17) {
16635            $block = 3; break;
16636          }
16637          else {
16638            $block = 4; break;
16639          }
16640          break;
16641        }
16642        case 3: {
16643          return [null, $t15_16];
16644          break;
16645        }
16646        case 4: {
16647          $t17_18 = { $value: { joinerSecret: null, pathSecret: null, psks: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16648          $t18_19 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupSecrets', $t17_18);
16649          $t19_20 = unmarshalRaw($t14_15, $t18_19);
16650          $t20_21 = ($t19_20 !== null);
16651          if ($t20_21) {
16652            $block = 5; break;
16653          }
16654          else {
16655            $block = 6; break;
16656          }
16657          break;
16658        }
16659        case 5: {
16660          return [null, $t19_20];
16661          break;
16662        }
16663        case 6: {
16664          return [$t17_18, null];
16665          break;
16666        }
16667      }
16668    }
16669  }
16670  
16671  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('decryptGroupSecrets', Welcome$decryptGroupSecrets);
16672  export function Welcome$findSecret(w, ref) {
16673    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
16674    let $block = 0;
16675    while (true) {
16676      switch ($block) {
16677        case 0: {
16678          $t0_1 = { $get() { return w.$get().secrets; }, $set(v) { const obj = w.$get(); obj.secrets = v; w.$set(obj); } };
16679          $t1_2 = $t0_1.$get();
16680          $t2_3 = $rt.builtin.len($t1_2);
16681          $t3_4 = -1;
16682          $block = 1; break;
16683          break;
16684        }
16685        case 1: {
16686          $t4_5 = ($t3_4 + 1);
16687          $t5_6 = ($t4_5 < $t2_3);
16688          if ($t5_6) {
16689            $block = 2; break;
16690          }
16691          else {
16692            $block = 3; break;
16693          }
16694          break;
16695        }
16696        case 2: {
16697          $t6_7 = $t1_2.addr($t4_5);
16698          $t7_8 = $t6_7.$get();
16699          $t8_9 = { $value: { newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16700          $t8_9.$set($rt.builtin.cloneValue($t7_8));
16701          $t9_10 = { $get() { return $t8_9.$get().newMember; }, $set(v) { const obj = $t8_9.$get(); obj.newMember = v; $t8_9.$set(obj); } };
16702          $t10_11 = $t9_10.$get();
16703          $t11_12 = KeyPackageRef$equal($t10_11, ref);
16704          if ($t11_12) {
16705            $block = 4; break;
16706          }
16707          else {
16708            $t3_4 = $t4_5;
16709            $block = 1; break;
16710          }
16711          break;
16712        }
16713        case 3: {
16714          return null;
16715          break;
16716        }
16717        case 4: {
16718          $t12_13 = { $get() { return w.$get().secrets; }, $set(v) { const obj = w.$get(); obj.secrets = v; w.$set(obj); } };
16719          $t13_14 = $t12_13.$get();
16720          $t14_15 = $t13_14.addr($t4_5);
16721          return $t14_15;
16722          break;
16723        }
16724      }
16725    }
16726  }
16727  
16728  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('findSecret', Welcome$findSecret);
16729  export function Welcome$marshal(w, wr) {
16730    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
16731    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16732    $t0_1.$set(w);
16733    $t1_2 = $t0_1.$get();
16734    $t2_3 = { $get() { return $t1_2.$get().cipherSuite; }, $set(v) { const obj = $t1_2.$get(); obj.cipherSuite = v; $t1_2.$set(obj); } };
16735    $t3_4 = $t2_3.$get();
16736    $t4_5 = $t3_4;
16737    $t5_6 = Writer$addUint16(wr, $t4_5);
16738    $t6_7 = $t0_1.$get();
16739    $t7_8 = { $get() { return $t6_7.$get().secrets; }, $set(v) { const obj = $t6_7.$get(); obj.secrets = v; $t6_7.$set(obj); } };
16740    $t8_9 = $t7_8.$get();
16741    $t9_10 = $rt.builtin.len($t8_9);
16742    $t10_11 = Welcome$marshal$1.bind(null, $t0_1);
16743    $t11_12 = Writer$writeVector(wr, $t9_10, $t10_11);
16744    $t12_13 = $t0_1.$get();
16745    $t13_14 = { $get() { return $t12_13.$get().encryptedGroupInfo; }, $set(v) { const obj = $t12_13.$get(); obj.encryptedGroupInfo = v; $t12_13.$set(obj); } };
16746    $t14_15 = $t13_14.$get();
16747    $t15_16 = Writer$writeOpaqueVec(wr, $t14_15);
16748    return;
16749  }
16750  
16751  function Welcome$marshal$1(w, wr, i) {
16752    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
16753    $t0_1 = w.$get();
16754    $t1_2 = { $get() { return $t0_1.$get().secrets; }, $set(v) { const obj = $t0_1.$get(); obj.secrets = v; $t0_1.$set(obj); } };
16755    $t2_3 = $t1_2.$get();
16756    $t3_4 = $t2_3.addr(i);
16757    $t4_5 = encryptedGroupSecrets$marshal($t3_4, wr);
16758    return;
16759  }
16760  
16761  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('marshal', Welcome$marshal);
16762  export function Welcome$unmarshal(w, r) {
16763    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
16764    let $block = 0;
16765    while (true) {
16766      switch ($block) {
16767        case 0: {
16768          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16769          $t0_1.$set(w);
16770          $t1_2 = $t0_1.$get();
16771          $t1_2.$set($rt.builtin.cloneValue({ cipherSuite: 0, secrets: null, encryptedGroupInfo: null }));
16772          $t2_3 = Reader$readUint16(r);
16773          $t3_4 = $t2_3[0];
16774          $t4_5 = $t2_3[1];
16775          if ($t4_5) {
16776            $block = 2; break;
16777          }
16778          else {
16779            $block = 1; break;
16780          }
16781          break;
16782        }
16783        case 1: {
16784          $t5_6 = errUnexpectedEOF.$get();
16785          return $t5_6;
16786          break;
16787        }
16788        case 2: {
16789          $t6_7 = $t0_1.$get();
16790          $t7_8 = $t3_4;
16791          $t8_9 = { $get() { return $t6_7.$get().cipherSuite; }, $set(v) { const obj = $t6_7.$get(); obj.cipherSuite = v; $t6_7.$set(obj); } };
16792          $t8_9.$set($t7_8);
16793          $t9_10 = Welcome$unmarshal$1.bind(null, $t0_1);
16794          $t10_11 = Reader$readVector(r, $t9_10);
16795          $t11_12 = ($t10_11 !== null);
16796          if ($t11_12) {
16797            $block = 3; break;
16798          }
16799          else {
16800            $block = 4; break;
16801          }
16802          break;
16803        }
16804        case 3: {
16805          return $t10_11;
16806          break;
16807        }
16808        case 4: {
16809          $t12_13 = $t0_1.$get();
16810          $t13_14 = Reader$readOpaqueVec(r);
16811          $t14_15 = $t13_14[0];
16812          $t15_16 = { $get() { return $t12_13.$get().encryptedGroupInfo; }, $set(v) { const obj = $t12_13.$get(); obj.encryptedGroupInfo = v; $t12_13.$set(obj); } };
16813          $t15_16.$set($t14_15);
16814          $t16_17 = $t13_14[1];
16815          if ($t16_17) {
16816            $block = 6; break;
16817          }
16818          else {
16819            $block = 5; break;
16820          }
16821          break;
16822        }
16823        case 5: {
16824          $t17_18 = errUnexpectedEOF.$get();
16825          return $t17_18;
16826          break;
16827        }
16828        case 6: {
16829          return null;
16830          break;
16831        }
16832      }
16833    }
16834  }
16835  
16836  function Welcome$unmarshal$1(w, r) {
16837    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
16838    let $block = 0;
16839    while (true) {
16840      switch ($block) {
16841        case 0: {
16842          $t0_1 = { $value: { newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16843          $t1_2 = encryptedGroupSecrets$unmarshal($t0_1, r);
16844          $t2_3 = ($t1_2 !== null);
16845          if ($t2_3) {
16846            $block = 1; break;
16847          }
16848          else {
16849            $block = 2; break;
16850          }
16851          break;
16852        }
16853        case 1: {
16854          return $t1_2;
16855          break;
16856        }
16857        case 2: {
16858          $t3_4 = w.$get();
16859          $t4_5 = w.$get();
16860          $t5_6 = { $get() { return $t4_5.$get().secrets; }, $set(v) { const obj = $t4_5.$get(); obj.secrets = v; $t4_5.$set(obj); } };
16861          $t6_7 = $t5_6.$get();
16862          $t7_8 = $t0_1.$get();
16863          $t8_9 = { $value: $rt.builtin.makeSlice(1, 1, { newMember: null, encryptedGroupSecrets: { kemOutput: null, ciphertext: null } }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
16864          $t9_10 = $t8_9.$get().addr(0);
16865          $t9_10.$set($rt.builtin.cloneValue($t7_8));
16866          $t10_11 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
16867          $t11_12 = $rt.builtin.appendSlice($t6_7, $t10_11);
16868          $t12_13 = { $get() { return $t3_4.$get().secrets; }, $set(v) { const obj = $t3_4.$get(); obj.secrets = v; $t3_4.$set(obj); } };
16869          $t12_13.$set($t11_12);
16870          return null;
16871          break;
16872        }
16873      }
16874    }
16875  }
16876  
16877  $rt.types.getType('smesh.lol/web/common/mls.Welcome')?.methods?.set('unmarshal', Welcome$unmarshal);
16878  export function KeyPackage$Bytes(pkg) {
16879    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
16880    let $block = 0;
16881    while (true) {
16882      switch ($block) {
16883        case 0: {
16884          $t0_1 = { $value: { version: 0, wireFormat: 0, publicMessage: null, privateMessage: null, welcome: null, groupInfo: null, keyPackage: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16885          $t1_2 = { $get() { return $t0_1.$get().version; }, $set(v) { const obj = $t0_1.$get(); obj.version = v; $t0_1.$set(obj); } };
16886          $t2_3 = { $get() { return $t0_1.$get().wireFormat; }, $set(v) { const obj = $t0_1.$get(); obj.wireFormat = v; $t0_1.$set(obj); } };
16887          $t3_4 = { $get() { return $t0_1.$get().keyPackage; }, $set(v) { const obj = $t0_1.$get(); obj.keyPackage = v; $t0_1.$set(obj); } };
16888          $t1_2.$set(1);
16889          $t2_3.$set(5);
16890          $t3_4.$set(pkg);
16891          $t4_5 = $rt.types.makeInterface('*smesh.lol/web/common/mls.mlsMessage', $t0_1);
16892          $t5_6 = marshalRaw($t4_5);
16893          $t6_7 = $t5_6[0];
16894          $t7_8 = $t5_6[1];
16895          $t8_9 = ($t7_8 !== null);
16896          if ($t8_9) {
16897            $block = 1; break;
16898          }
16899          else {
16900            $block = 2; break;
16901          }
16902          break;
16903        }
16904        case 1: {
16905          $t9_10 = $rt.types.makeInterface('string', 'mls: failed to marshal key package');
16906          $rt.runtime.panic($t9_10);
16907          break;
16908        }
16909        case 2: {
16910          return $t6_7;
16911          break;
16912        }
16913      }
16914    }
16915  }
16916  
16917  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('Bytes', KeyPackage$Bytes);
16918  export function KeyPackage$GenerateRef(pkg) {
16919    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
16920    let $block = 0;
16921    while (true) {
16922      switch ($block) {
16923        case 0: {
16924          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16925          $t1_2 = KeyPackage$marshal(pkg, $t0_1);
16926          $t2_3 = Writer$bytes($t0_1);
16927          $t3_4 = $t2_3[0];
16928          $t4_5 = $t2_3[1];
16929          $t5_6 = ($t4_5 !== null);
16930          if ($t5_6) {
16931            $block = 1; break;
16932          }
16933          else {
16934            $block = 2; break;
16935          }
16936          break;
16937        }
16938        case 1: {
16939          return [null, $t4_5];
16940          break;
16941        }
16942        case 2: {
16943          $t6_7 = { $get() { return pkg.$get().cipherSuite; }, $set(v) { const obj = pkg.$get(); obj.cipherSuite = v; pkg.$set(obj); } };
16944          $t7_8 = $t6_7.$get();
16945          $t8_9 = CipherSuite$refHash($t7_8, 'MLS 1.0 KeyPackage Reference', $t3_4);
16946          $t9_10 = $t8_9[0];
16947          $t10_11 = $t8_9[1];
16948          $t11_12 = ($t10_11 !== null);
16949          if ($t11_12) {
16950            $block = 3; break;
16951          }
16952          else {
16953            $block = 4; break;
16954          }
16955          break;
16956        }
16957        case 3: {
16958          return [null, $t10_11];
16959          break;
16960        }
16961        case 4: {
16962          $t12_13 = $t9_10;
16963          return [$t12_13, null];
16964          break;
16965        }
16966      }
16967    }
16968  }
16969  
16970  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('GenerateRef', KeyPackage$GenerateRef);
16971  export function KeyPackage$RawBytes(pkg) {
16972    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
16973    let $block = 0;
16974    while (true) {
16975      switch ($block) {
16976        case 0: {
16977          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
16978          $t1_2 = KeyPackage$marshal(pkg, $t0_1);
16979          $t2_3 = Writer$bytes($t0_1);
16980          $t3_4 = $t2_3[0];
16981          $t4_5 = $t2_3[1];
16982          $t5_6 = ($t4_5 !== null);
16983          if ($t5_6) {
16984            $block = 1; break;
16985          }
16986          else {
16987            $block = 2; break;
16988          }
16989          break;
16990        }
16991        case 1: {
16992          $t6_7 = $rt.types.makeInterface('string', 'mls: failed to marshal raw key package');
16993          $rt.runtime.panic($t6_7);
16994          break;
16995        }
16996        case 2: {
16997          return $t3_4;
16998          break;
16999        }
17000      }
17001    }
17002  }
17003  
17004  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('RawBytes', KeyPackage$RawBytes);
17005  export function KeyPackage$marshal(pkg, w) {
17006    let $t0_1, $t1_2, $t2_3, $t3_4;
17007    $t0_1 = KeyPackage$marshalTBS(pkg, w);
17008    $t1_2 = { $get() { return pkg.$get().signature; }, $set(v) { const obj = pkg.$get(); obj.signature = v; pkg.$set(obj); } };
17009    $t2_3 = $t1_2.$get();
17010    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
17011    return;
17012  }
17013  
17014  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('marshal', KeyPackage$marshal);
17015  export function KeyPackage$marshalTBS(pkg, w) {
17016    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
17017    $t0_1 = { $get() { return pkg.$get().version; }, $set(v) { const obj = pkg.$get(); obj.version = v; pkg.$set(obj); } };
17018    $t1_2 = $t0_1.$get();
17019    $t2_3 = $t1_2;
17020    $t3_4 = Writer$addUint16(w, $t2_3);
17021    $t4_5 = { $get() { return pkg.$get().cipherSuite; }, $set(v) { const obj = pkg.$get(); obj.cipherSuite = v; pkg.$set(obj); } };
17022    $t5_6 = $t4_5.$get();
17023    $t6_7 = $t5_6;
17024    $t7_8 = Writer$addUint16(w, $t6_7);
17025    $t8_9 = { $get() { return pkg.$get().initKey; }, $set(v) { const obj = pkg.$get(); obj.initKey = v; pkg.$set(obj); } };
17026    $t9_10 = $t8_9.$get();
17027    $t10_11 = $t9_10;
17028    $t11_12 = Writer$writeOpaqueVec(w, $t10_11);
17029    $t12_13 = { $get() { return pkg.$get().leafNode; }, $set(v) { const obj = pkg.$get(); obj.leafNode = v; pkg.$set(obj); } };
17030    $t13_14 = leafNode$marshal($t12_13, w);
17031    $t14_15 = { $get() { return pkg.$get().extensions; }, $set(v) { const obj = pkg.$get(); obj.extensions = v; pkg.$set(obj); } };
17032    $t15_16 = $t14_15.$get();
17033    $t16_17 = marshalExtensionVec(w, $t15_16);
17034    return;
17035  }
17036  
17037  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('marshalTBS', KeyPackage$marshalTBS);
17038  export function KeyPackage$sign(pkg, signerPriv) {
17039    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
17040    let $block = 0;
17041    while (true) {
17042      switch ($block) {
17043        case 0: {
17044          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
17045          $t1_2 = KeyPackage$marshalTBS(pkg, $t0_1);
17046          $t2_3 = Writer$bytes($t0_1);
17047          $t3_4 = $t2_3[0];
17048          $t4_5 = $t2_3[1];
17049          $t5_6 = ($t4_5 !== null);
17050          if ($t5_6) {
17051            $block = 1; break;
17052          }
17053          else {
17054            $block = 2; break;
17055          }
17056          break;
17057        }
17058        case 1: {
17059          return $t4_5;
17060          break;
17061        }
17062        case 2: {
17063          $t6_7 = { $get() { return pkg.$get().cipherSuite; }, $set(v) { const obj = pkg.$get(); obj.cipherSuite = v; pkg.$set(obj); } };
17064          $t7_8 = $t6_7.$get();
17065          $t8_9 = CipherSuite$signWithLabel($t7_8, signerPriv, 'KeyPackageTBS', $t3_4);
17066          $t9_10 = $t8_9[0];
17067          $t10_11 = $t8_9[1];
17068          $t11_12 = ($t10_11 !== null);
17069          if ($t11_12) {
17070            $block = 3; break;
17071          }
17072          else {
17073            $block = 4; break;
17074          }
17075          break;
17076        }
17077        case 3: {
17078          return $t10_11;
17079          break;
17080        }
17081        case 4: {
17082          $t12_13 = { $get() { return pkg.$get().signature; }, $set(v) { const obj = pkg.$get(); obj.signature = v; pkg.$set(obj); } };
17083          $t12_13.$set($t9_10);
17084          return null;
17085          break;
17086        }
17087      }
17088    }
17089  }
17090  
17091  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('sign', KeyPackage$sign);
17092  export function KeyPackage$unmarshal(pkg, r) {
17093    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35;
17094    let $block = 0;
17095    while (true) {
17096      switch ($block) {
17097        case 0: {
17098          pkg.$set($rt.builtin.cloneValue({ version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null }));
17099          $t0_1 = Reader$readUint16(r);
17100          $t1_2 = $t0_1[0];
17101          $t2_3 = $t0_1[1];
17102          if ($t2_3) {
17103            $block = 2; break;
17104          }
17105          else {
17106            $block = 1; break;
17107          }
17108          break;
17109        }
17110        case 1: {
17111          $t3_4 = errUnexpectedEOF.$get();
17112          return $t3_4;
17113          break;
17114        }
17115        case 2: {
17116          $t4_5 = $t1_2;
17117          $t5_6 = { $get() { return pkg.$get().version; }, $set(v) { const obj = pkg.$get(); obj.version = v; pkg.$set(obj); } };
17118          $t5_6.$set($t4_5);
17119          $t6_7 = { $get() { return pkg.$get().version; }, $set(v) { const obj = pkg.$get(); obj.version = v; pkg.$set(obj); } };
17120          $t7_8 = $t6_7.$get();
17121          $t8_9 = ($t7_8 !== 1);
17122          if ($t8_9) {
17123            $block = 3; break;
17124          }
17125          else {
17126            $block = 4; break;
17127          }
17128          break;
17129        }
17130        case 3: {
17131          $t9_10 = errInvalidVersion.$get();
17132          return $t9_10;
17133          break;
17134        }
17135        case 4: {
17136          $t10_11 = Reader$readUint16(r);
17137          $t11_12 = $t10_11[0];
17138          $t12_13 = $t10_11[1];
17139          if ($t12_13) {
17140            $block = 6; break;
17141          }
17142          else {
17143            $block = 5; break;
17144          }
17145          break;
17146        }
17147        case 5: {
17148          $t13_14 = errUnexpectedEOF.$get();
17149          return $t13_14;
17150          break;
17151        }
17152        case 6: {
17153          $t14_15 = $t11_12;
17154          $t15_16 = { $get() { return pkg.$get().cipherSuite; }, $set(v) { const obj = pkg.$get(); obj.cipherSuite = v; pkg.$set(obj); } };
17155          $t15_16.$set($t14_15);
17156          $t16_17 = Reader$readOpaqueVec(r);
17157          $t17_18 = $t16_17[0];
17158          $t18_19 = { $get() { return pkg.$get().initKey; }, $set(v) { const obj = pkg.$get(); obj.initKey = v; pkg.$set(obj); } };
17159          $t19_20 = $t17_18;
17160          $t18_19.$set($t19_20);
17161          $t20_21 = $t16_17[1];
17162          if ($t20_21) {
17163            $block = 8; break;
17164          }
17165          else {
17166            $block = 7; break;
17167          }
17168          break;
17169        }
17170        case 7: {
17171          $t21_22 = errUnexpectedEOF.$get();
17172          return $t21_22;
17173          break;
17174        }
17175        case 8: {
17176          $t22_23 = { $get() { return pkg.$get().leafNode; }, $set(v) { const obj = pkg.$get(); obj.leafNode = v; pkg.$set(obj); } };
17177          $t23_24 = leafNode$unmarshal($t22_23, r);
17178          $t24_25 = ($t23_24 !== null);
17179          if ($t24_25) {
17180            $block = 9; break;
17181          }
17182          else {
17183            $block = 10; break;
17184          }
17185          break;
17186        }
17187        case 9: {
17188          return $t23_24;
17189          break;
17190        }
17191        case 10: {
17192          $t25_26 = unmarshalExtensionVec(r);
17193          $t26_27 = $t25_26[0];
17194          $t27_28 = $t25_26[1];
17195          $t28_29 = ($t27_28 !== null);
17196          if ($t28_29) {
17197            $block = 11; break;
17198          }
17199          else {
17200            $block = 12; break;
17201          }
17202          break;
17203        }
17204        case 11: {
17205          return $t27_28;
17206          break;
17207        }
17208        case 12: {
17209          $t29_30 = { $get() { return pkg.$get().extensions; }, $set(v) { const obj = pkg.$get(); obj.extensions = v; pkg.$set(obj); } };
17210          $t29_30.$set($t26_27);
17211          $t30_31 = Reader$readOpaqueVec(r);
17212          $t31_32 = $t30_31[0];
17213          $t32_33 = { $get() { return pkg.$get().signature; }, $set(v) { const obj = pkg.$get(); obj.signature = v; pkg.$set(obj); } };
17214          $t32_33.$set($t31_32);
17215          $t33_34 = $t30_31[1];
17216          if ($t33_34) {
17217            $block = 14; break;
17218          }
17219          else {
17220            $block = 13; break;
17221          }
17222          break;
17223        }
17224        case 13: {
17225          $t34_35 = errUnexpectedEOF.$get();
17226          return $t34_35;
17227          break;
17228        }
17229        case 14: {
17230          return null;
17231          break;
17232        }
17233      }
17234    }
17235  }
17236  
17237  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('unmarshal', KeyPackage$unmarshal);
17238  export function KeyPackage$verify(pkg, ctx) {
17239    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28;
17240    let $block = 0;
17241    while (true) {
17242      switch ($block) {
17243        case 0: {
17244          $t0_1 = { $get() { return pkg.$get().version; }, $set(v) { const obj = pkg.$get(); obj.version = v; pkg.$set(obj); } };
17245          $t1_2 = $t0_1.$get();
17246          $t2_3 = { $get() { return ctx.$get().version; }, $set(v) { const obj = ctx.$get(); obj.version = v; ctx.$set(obj); } };
17247          $t3_4 = $t2_3.$get();
17248          $t4_5 = ($t1_2 !== $t3_4);
17249          if ($t4_5) {
17250            $block = 1; break;
17251          }
17252          else {
17253            $block = 2; break;
17254          }
17255          break;
17256        }
17257        case 1: {
17258          $t5_6 = errKeyPackageVersionMismatch.$get();
17259          return $t5_6;
17260          break;
17261        }
17262        case 2: {
17263          $t6_7 = { $get() { return pkg.$get().cipherSuite; }, $set(v) { const obj = pkg.$get(); obj.cipherSuite = v; pkg.$set(obj); } };
17264          $t7_8 = $t6_7.$get();
17265          $t8_9 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
17266          $t9_10 = $t8_9.$get();
17267          $t10_11 = ($t7_8 !== $t9_10);
17268          if ($t10_11) {
17269            $block = 3; break;
17270          }
17271          else {
17272            $block = 4; break;
17273          }
17274          break;
17275        }
17276        case 3: {
17277          $t11_12 = errKeyPackageSuiteMismatch.$get();
17278          return $t11_12;
17279          break;
17280        }
17281        case 4: {
17282          $t12_13 = { $get() { return pkg.$get().leafNode; }, $set(v) { const obj = pkg.$get(); obj.leafNode = v; pkg.$set(obj); } };
17283          $t13_14 = { $get() { return $t12_13.$get().leafNodeSource; }, $set(v) { const obj = $t12_13.$get(); obj.leafNodeSource = v; $t12_13.$set(obj); } };
17284          $t14_15 = $t13_14.$get();
17285          $t15_16 = ($t14_15 !== 1);
17286          if ($t15_16) {
17287            $block = 5; break;
17288          }
17289          else {
17290            $block = 6; break;
17291          }
17292          break;
17293        }
17294        case 5: {
17295          $t16_17 = errKeyPackageBadSource.$get();
17296          return $t16_17;
17297          break;
17298        }
17299        case 6: {
17300          $t17_18 = KeyPackage$verifySignature(pkg);
17301          if ($t17_18) {
17302            $block = 8; break;
17303          }
17304          else {
17305            $block = 7; break;
17306          }
17307          break;
17308        }
17309        case 7: {
17310          $t18_19 = errKeyPackageBadSignature.$get();
17311          return $t18_19;
17312          break;
17313        }
17314        case 8: {
17315          $t19_20 = { $get() { return pkg.$get().leafNode; }, $set(v) { const obj = pkg.$get(); obj.leafNode = v; pkg.$set(obj); } };
17316          $t20_21 = { $get() { return $t19_20.$get().encryptionKey; }, $set(v) { const obj = $t19_20.$get(); obj.encryptionKey = v; $t19_20.$set(obj); } };
17317          $t21_22 = $t20_21.$get();
17318          $t22_23 = { $get() { return pkg.$get().initKey; }, $set(v) { const obj = pkg.$get(); obj.initKey = v; pkg.$set(obj); } };
17319          $t23_24 = $t22_23.$get();
17320          $t24_25 = $t21_22;
17321          $t25_26 = $t23_24;
17322          $t26_27 = bytesEqual($t24_25, $t25_26);
17323          if ($t26_27) {
17324            $block = 9; break;
17325          }
17326          else {
17327            $block = 10; break;
17328          }
17329          break;
17330        }
17331        case 9: {
17332          $t27_28 = errKeyPackageKeysMatch.$get();
17333          return $t27_28;
17334          break;
17335        }
17336        case 10: {
17337          return null;
17338          break;
17339        }
17340      }
17341    }
17342  }
17343  
17344  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('verify', KeyPackage$verify);
17345  export function KeyPackage$verifySignature(pkg) {
17346    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
17347    let $block = 0;
17348    while (true) {
17349      switch ($block) {
17350        case 0: {
17351          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
17352          $t1_2 = KeyPackage$marshalTBS(pkg, $t0_1);
17353          $t2_3 = Writer$bytes($t0_1);
17354          $t3_4 = $t2_3[0];
17355          $t4_5 = $t2_3[1];
17356          $t5_6 = ($t4_5 !== null);
17357          if ($t5_6) {
17358            $block = 1; break;
17359          }
17360          else {
17361            $block = 2; break;
17362          }
17363          break;
17364        }
17365        case 1: {
17366          return false;
17367          break;
17368        }
17369        case 2: {
17370          $t6_7 = { $get() { return pkg.$get().cipherSuite; }, $set(v) { const obj = pkg.$get(); obj.cipherSuite = v; pkg.$set(obj); } };
17371          $t7_8 = $t6_7.$get();
17372          $t8_9 = { $get() { return pkg.$get().leafNode; }, $set(v) { const obj = pkg.$get(); obj.leafNode = v; pkg.$set(obj); } };
17373          $t9_10 = { $get() { return $t8_9.$get().signatureKey; }, $set(v) { const obj = $t8_9.$get(); obj.signatureKey = v; $t8_9.$set(obj); } };
17374          $t10_11 = $t9_10.$get();
17375          $t11_12 = { $get() { return pkg.$get().signature; }, $set(v) { const obj = pkg.$get(); obj.signature = v; pkg.$set(obj); } };
17376          $t12_13 = $t11_12.$get();
17377          $t13_14 = CipherSuite$verifyWithLabel($t7_8, $t10_11, 'KeyPackageTBS', $t3_4, $t12_13);
17378          return $t13_14;
17379          break;
17380        }
17381      }
17382    }
17383  }
17384  
17385  $rt.types.getType('smesh.lol/web/common/mls.KeyPackage')?.methods?.set('verifySignature', KeyPackage$verifySignature);
17386  export function KeyPackageRef$equal(ref, other) {
17387    let $t0_1, $t1_2, $t2_3;
17388    $t0_1 = ref;
17389    $t1_2 = other;
17390    $t2_3 = bytesEqual($t0_1, $t1_2);
17391    return $t2_3;
17392  }
17393  
17394  $rt.types.getType('smesh.lol/web/common/mls.KeyPackageRef')?.methods?.set('equal', KeyPackageRef$equal);
17395  export function CipherSuite$AEADKeySize(cs) {
17396    let $t0_1;
17397    $t0_1 = CipherSuite$assertSupported(cs);
17398    return 32;
17399  }
17400  
17401  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('AEADKeySize', CipherSuite$AEADKeySize);
17402  export function CipherSuite$AEADNonceSize(cs) {
17403    let $t0_1;
17404    $t0_1 = CipherSuite$assertSupported(cs);
17405    return 12;
17406  }
17407  
17408  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('AEADNonceSize', CipherSuite$AEADNonceSize);
17409  export function CipherSuite$ExtractSize(cs) {
17410    let $t0_1;
17411    $t0_1 = CipherSuite$assertSupported(cs);
17412    return 32;
17413  }
17414  
17415  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('ExtractSize', CipherSuite$ExtractSize);
17416  export function CipherSuite$HashSize(cs) {
17417    let $t0_1;
17418    $t0_1 = CipherSuite$assertSupported(cs);
17419    return 32;
17420  }
17421  
17422  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('HashSize', CipherSuite$HashSize);
17423  export function CipherSuite$aeadOpen(cs, key, nonce, ciphertext, aad) {
17424    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
17425    let $block = 0;
17426    while (true) {
17427      switch ($block) {
17428        case 0: {
17429          $t0_1 = CipherSuite$assertSupported(cs);
17430          $t1_2 = $rt.builtin.len(key);
17431          $t2_3 = ($t1_2 !== 32);
17432          if ($t2_3) {
17433            $block = 1; break;
17434          }
17435          else {
17436            $block = 2; break;
17437          }
17438          break;
17439        }
17440        case 1: {
17441          $t3_4 = errInvalidKeySize.$get();
17442          return [null, $t3_4];
17443          break;
17444        }
17445        case 2: {
17446          $t4_5 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17447          $t5_6 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17448          $t6_7 = $rt.builtin.sliceSlice($t4_5.$get(), undefined, undefined, undefined);
17449          $t7_8 = $rt.builtin.copy($t6_7, key);
17450          $t8_9 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
17451          $t9_10 = $rt.builtin.copy($t8_9, nonce);
17452          $t10_11 = $t4_5.$get();
17453          $t11_12 = $t5_6.$get();
17454          $t12_13 = smesh$lol$web$common$crypto$chacha20poly1305.Open($t10_11, $t11_12, ciphertext, aad);
17455          $t13_14 = $t12_13[0];
17456          $t14_15 = $t12_13[1];
17457          if ($t14_15) {
17458            $block = 4; break;
17459          }
17460          else {
17461            $block = 3; break;
17462          }
17463          break;
17464        }
17465        case 3: {
17466          $t15_16 = errAEADOpenFailed.$get();
17467          return [null, $t15_16];
17468          break;
17469        }
17470        case 4: {
17471          return [$t13_14, null];
17472          break;
17473        }
17474      }
17475    }
17476  }
17477  
17478  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('aeadOpen', CipherSuite$aeadOpen);
17479  export function CipherSuite$aeadSeal(cs, key, nonce, plaintext, aad) {
17480    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
17481    let $block = 0;
17482    while (true) {
17483      switch ($block) {
17484        case 0: {
17485          $t0_1 = CipherSuite$assertSupported(cs);
17486          $t1_2 = $rt.builtin.len(key);
17487          $t2_3 = ($t1_2 !== 32);
17488          if ($t2_3) {
17489            $block = 1; break;
17490          }
17491          else {
17492            $block = 2; break;
17493          }
17494          break;
17495        }
17496        case 1: {
17497          $t3_4 = errInvalidKeySize.$get();
17498          return [null, $t3_4];
17499          break;
17500        }
17501        case 2: {
17502          $t4_5 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17503          $t5_6 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17504          $t6_7 = $rt.builtin.sliceSlice($t4_5.$get(), undefined, undefined, undefined);
17505          $t7_8 = $rt.builtin.copy($t6_7, key);
17506          $t8_9 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
17507          $t9_10 = $rt.builtin.copy($t8_9, nonce);
17508          $t10_11 = $t4_5.$get();
17509          $t11_12 = $t5_6.$get();
17510          $t12_13 = smesh$lol$web$common$crypto$chacha20poly1305.Seal($t10_11, $t11_12, plaintext, aad);
17511          return [$t12_13, null];
17512          break;
17513        }
17514      }
17515    }
17516  }
17517  
17518  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('aeadSeal', CipherSuite$aeadSeal);
17519  export function CipherSuite$assertSupported(cs) {
17520    let $t0_1, $t1_2;
17521    let $block = 0;
17522    while (true) {
17523      switch ($block) {
17524        case 0: {
17525          $t0_1 = (cs !== 3);
17526          if ($t0_1) {
17527            $block = 1; break;
17528          }
17529          else {
17530            $block = 2; break;
17531          }
17532          break;
17533        }
17534        case 1: {
17535          $t1_2 = $rt.types.makeInterface('string', 'mls: unsupported cipher suite');
17536          $rt.runtime.panic($t1_2);
17537          break;
17538        }
17539        case 2: {
17540          return;
17541          break;
17542        }
17543      }
17544    }
17545  }
17546  
17547  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('assertSupported', CipherSuite$assertSupported);
17548  export function CipherSuite$decryptWithLabel(cs, privateKey, label, context, kemOutput, ciphertext) {
17549    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
17550    let $block = 0;
17551    while (true) {
17552      switch ($block) {
17553        case 0: {
17554          $t0_1 = marshalEncryptContext(label, context);
17555          $t1_2 = $t0_1[0];
17556          $t2_3 = $t0_1[1];
17557          $t3_4 = ($t2_3 !== null);
17558          if ($t3_4) {
17559            $block = 1; break;
17560          }
17561          else {
17562            $block = 2; break;
17563          }
17564          break;
17565        }
17566        case 1: {
17567          return [null, $t2_3];
17568          break;
17569        }
17570        case 2: {
17571          $t4_5 = CipherSuite$kemDecap(cs, kemOutput, privateKey);
17572          $t5_6 = $t4_5[0];
17573          $t6_7 = $t4_5[1];
17574          $t7_8 = ($t6_7 !== null);
17575          if ($t7_8) {
17576            $block = 3; break;
17577          }
17578          else {
17579            $block = 4; break;
17580          }
17581          break;
17582        }
17583        case 3: {
17584          return [null, $t6_7];
17585          break;
17586        }
17587        case 4: {
17588          $t8_9 = hpkeKeySchedule($t5_6, $t1_2);
17589          $t9_10 = $t8_9[0];
17590          $t10_11 = $t8_9[1];
17591          $t11_12 = { $value: { key: null, nonce: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
17592          $t12_13 = { $get() { return $t11_12.$get().key; }, $set(v) { const obj = $t11_12.$get(); obj.key = v; $t11_12.$set(obj); } };
17593          $t13_14 = { $get() { return $t11_12.$get().nonce; }, $set(v) { const obj = $t11_12.$get(); obj.nonce = v; $t11_12.$set(obj); } };
17594          $t12_13.$set($t9_10);
17595          $t13_14.$set($t10_11);
17596          $t14_15 = hpkeOpener$open($t11_12, ciphertext, null);
17597          $t15_16 = $t14_15[0];
17598          $t16_17 = $t14_15[1];
17599          if ($t16_17) {
17600            $block = 6; break;
17601          }
17602          else {
17603            $block = 5; break;
17604          }
17605          break;
17606        }
17607        case 5: {
17608          $t17_18 = errHPKEDecryptFailed.$get();
17609          return [null, $t17_18];
17610          break;
17611        }
17612        case 6: {
17613          return [$t15_16, null];
17614          break;
17615        }
17616      }
17617    }
17618  }
17619  
17620  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('decryptWithLabel', CipherSuite$decryptWithLabel);
17621  export function CipherSuite$deriveEncryptionKeyPair(cs, seed) {
17622    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
17623    $t0_1 = CipherSuite$assertSupported(cs);
17624    $t1_2 = labeledExtractKEM(null, 'dkp_prk', seed);
17625    $t2_3 = labeledExpandKEM($t1_2, 'sk', null, 32);
17626    $t3_4 = smesh$lol$web$common$jsbridge$x25519.ScalarBaseMult($t2_3);
17627    $t4_5 = $t3_4;
17628    $t5_6 = $t2_3;
17629    return [$t4_5, $t5_6, null];
17630  }
17631  
17632  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('deriveEncryptionKeyPair', CipherSuite$deriveEncryptionKeyPair);
17633  export function CipherSuite$deriveSecret(cs, secret, label) {
17634    let $t0_1, $t1_2, $t2_3;
17635    $t0_1 = CipherSuite$expandWithLabel(cs, secret, label, null, 32);
17636    $t1_2 = $t0_1[0];
17637    $t2_3 = $t0_1[1];
17638    return [$t1_2, $t2_3];
17639  }
17640  
17641  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('deriveSecret', CipherSuite$deriveSecret);
17642  export function CipherSuite$encryptWithLabel(cs, publicKey, label, context, plaintext) {
17643    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
17644    let $block = 0;
17645    while (true) {
17646      switch ($block) {
17647        case 0: {
17648          $t0_1 = marshalEncryptContext(label, context);
17649          $t1_2 = $t0_1[0];
17650          $t2_3 = $t0_1[1];
17651          $t3_4 = ($t2_3 !== null);
17652          if ($t3_4) {
17653            $block = 1; break;
17654          }
17655          else {
17656            $block = 2; break;
17657          }
17658          break;
17659        }
17660        case 1: {
17661          return [null, null, $t2_3];
17662          break;
17663        }
17664        case 2: {
17665          $t4_5 = CipherSuite$kemEncap(cs, publicKey);
17666          $t5_6 = $t4_5[0];
17667          $t6_7 = $t4_5[1];
17668          $t7_8 = $t4_5[2];
17669          $t8_9 = ($t7_8 !== null);
17670          if ($t8_9) {
17671            $block = 3; break;
17672          }
17673          else {
17674            $block = 4; break;
17675          }
17676          break;
17677        }
17678        case 3: {
17679          return [null, null, $t7_8];
17680          break;
17681        }
17682        case 4: {
17683          $t9_10 = hpkeKeySchedule($t5_6, $t1_2);
17684          $t10_11 = $t9_10[0];
17685          $t11_12 = $t9_10[1];
17686          $t12_13 = { $value: { key: null, nonce: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
17687          $t13_14 = { $get() { return $t12_13.$get().key; }, $set(v) { const obj = $t12_13.$get(); obj.key = v; $t12_13.$set(obj); } };
17688          $t14_15 = { $get() { return $t12_13.$get().nonce; }, $set(v) { const obj = $t12_13.$get(); obj.nonce = v; $t12_13.$set(obj); } };
17689          $t13_14.$set($t10_11);
17690          $t14_15.$set($t11_12);
17691          $t15_16 = hpkeSealer$seal($t12_13, plaintext, null);
17692          return [$t6_7, $t15_16, null];
17693          break;
17694        }
17695      }
17696    }
17697  }
17698  
17699  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('encryptWithLabel', CipherSuite$encryptWithLabel);
17700  export function CipherSuite$expandWithLabel(cs, secret, label, context, length) {
17701    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
17702    let $block = 0;
17703    while (true) {
17704      switch ($block) {
17705        case 0: {
17706          $t0_1 = CipherSuite$assertSupported(cs);
17707          $t1_2 = $rt.builtin.appendSlice('MLS 1.0 ', label);
17708          $t2_3 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
17709          $t3_4 = Writer$addUint16($t2_3, length);
17710          $t4_5 = Writer$writeOpaqueVec($t2_3, $t1_2);
17711          $t5_6 = Writer$writeOpaqueVec($t2_3, context);
17712          $t6_7 = Writer$bytes($t2_3);
17713          $t7_8 = $t6_7[0];
17714          $t8_9 = $t6_7[1];
17715          $t9_10 = ($t8_9 !== null);
17716          if ($t9_10) {
17717            $block = 1; break;
17718          }
17719          else {
17720            $block = 2; break;
17721          }
17722          break;
17723        }
17724        case 1: {
17725          return [null, $t8_9];
17726          break;
17727        }
17728        case 2: {
17729          $t10_11 = length;
17730          $t11_12 = smesh$lol$web$common$crypto$hkdf.Expand(secret, $t7_8, $t10_11);
17731          return [$t11_12, null];
17732          break;
17733        }
17734      }
17735    }
17736  }
17737  
17738  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('expandWithLabel', CipherSuite$expandWithLabel);
17739  export function CipherSuite$generateEncryptionKeyPair(cs) {
17740    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
17741    $t0_1 = CipherSuite$assertSupported(cs);
17742    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17743    $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, 32, undefined);
17744    $t3_4 = smesh$lol$web$common$jsbridge$subtle.RandomBytes($t2_3);
17745    $t4_5 = smesh$lol$web$common$jsbridge$x25519.ScalarBaseMult($t2_3);
17746    $t5_6 = $t4_5;
17747    $t6_7 = $t2_3;
17748    return [$t5_6, $t6_7, null];
17749  }
17750  
17751  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('generateEncryptionKeyPair', CipherSuite$generateEncryptionKeyPair);
17752  export function CipherSuite$generateSignatureKeyPair(cs) {
17753    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
17754    $t0_1 = CipherSuite$assertSupported(cs);
17755    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17756    $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, 32, undefined);
17757    $t3_4 = smesh$lol$web$common$jsbridge$subtle.RandomBytes($t2_3);
17758    $t4_5 = smesh$lol$web$common$jsbridge$ed25519.NewKeyFromSeed($t2_3);
17759    $t5_6 = $t4_5;
17760    $t6_7 = $t2_3;
17761    return [$t5_6, $t6_7, null];
17762  }
17763  
17764  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('generateSignatureKeyPair', CipherSuite$generateSignatureKeyPair);
17765  export function CipherSuite$hash(cs, data) {
17766    let $t0_1, $t1_2;
17767    $t0_1 = CipherSuite$assertSupported(cs);
17768    $t1_2 = smesh$lol$web$common$jsbridge$schnorr.SHA256Sum(data);
17769    return $t1_2;
17770  }
17771  
17772  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('hash', CipherSuite$hash);
17773  export function CipherSuite$hkdfExpand(cs, prk, info, length) {
17774    let $t0_1, $t1_2;
17775    $t0_1 = CipherSuite$assertSupported(cs);
17776    $t1_2 = smesh$lol$web$common$crypto$hkdf.Expand(prk, info, length);
17777    return $t1_2;
17778  }
17779  
17780  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('hkdfExpand', CipherSuite$hkdfExpand);
17781  export function CipherSuite$hkdfExtract(cs, salt, ikm) {
17782    let $t0_1, $t1_2, $t2_3, $t3_4;
17783    $t0_1 = CipherSuite$assertSupported(cs);
17784    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17785    $t2_3 = smesh$lol$web$common$crypto$hkdf.Extract(salt, ikm);
17786    $t1_2.$set($rt.builtin.cloneValue($t2_3));
17787    $t3_4 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
17788    return $t3_4;
17789  }
17790  
17791  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('hkdfExtract', CipherSuite$hkdfExtract);
17792  export function CipherSuite$kemDecap(cs, enc, skR) {
17793    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
17794    $t0_1 = CipherSuite$assertSupported(cs);
17795    $t1_2 = skR;
17796    $t2_3 = smesh$lol$web$common$jsbridge$x25519.ScalarBaseMult($t1_2);
17797    $t3_4 = skR;
17798    $t4_5 = smesh$lol$web$common$jsbridge$x25519.ScalarMult($t3_4, enc);
17799    $t5_6 = $rt.builtin.len(enc);
17800    $t6_7 = $rt.builtin.len($t2_3);
17801    $t7_8 = ($t5_6 + $t6_7);
17802    $t8_9 = $rt.builtin.makeSlice(0, $t7_8, 0);
17803    $t9_10 = $rt.builtin.appendSlice($t8_9, enc);
17804    $t10_11 = $rt.builtin.appendSlice($t9_10, $t2_3);
17805    $t11_12 = extractAndExpand($t4_5, $t10_11);
17806    return [$t11_12, null];
17807  }
17808  
17809  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('kemDecap', CipherSuite$kemDecap);
17810  export function CipherSuite$kemEncap(cs, pkR) {
17811    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
17812    $t0_1 = CipherSuite$assertSupported(cs);
17813    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17814    $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, 32, undefined);
17815    $t3_4 = smesh$lol$web$common$jsbridge$subtle.RandomBytes($t2_3);
17816    $t4_5 = smesh$lol$web$common$jsbridge$x25519.ScalarBaseMult($t2_3);
17817    $t5_6 = pkR;
17818    $t6_7 = smesh$lol$web$common$jsbridge$x25519.ScalarMult($t2_3, $t5_6);
17819    $t7_8 = pkR;
17820    $t8_9 = $rt.builtin.appendSlice($t4_5, $t7_8);
17821    $t9_10 = extractAndExpand($t6_7, $t8_9);
17822    return [$t9_10, $t4_5, null];
17823  }
17824  
17825  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('kemEncap', CipherSuite$kemEncap);
17826  export function CipherSuite$randomBytes(cs, n) {
17827    let $t0_1, $t1_2;
17828    $t0_1 = $rt.builtin.makeSlice(n, n, 0);
17829    $t1_2 = smesh$lol$web$common$jsbridge$subtle.RandomBytes($t0_1);
17830    return $t0_1;
17831  }
17832  
17833  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('randomBytes', CipherSuite$randomBytes);
17834  export function CipherSuite$refHash(cs, label, value) {
17835    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
17836    let $block = 0;
17837    while (true) {
17838      switch ($block) {
17839        case 0: {
17840          $t0_1 = CipherSuite$assertSupported(cs);
17841          $t1_2 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
17842          $t2_3 = Writer$writeOpaqueVec($t1_2, label);
17843          $t3_4 = Writer$writeOpaqueVec($t1_2, value);
17844          $t4_5 = Writer$bytes($t1_2);
17845          $t5_6 = $t4_5[0];
17846          $t6_7 = $t4_5[1];
17847          $t7_8 = ($t6_7 !== null);
17848          if ($t7_8) {
17849            $block = 1; break;
17850          }
17851          else {
17852            $block = 2; break;
17853          }
17854          break;
17855        }
17856        case 1: {
17857          return [null, $t6_7];
17858          break;
17859        }
17860        case 2: {
17861          $t8_9 = smesh$lol$web$common$jsbridge$schnorr.SHA256Sum($t5_6);
17862          return [$t8_9, null];
17863          break;
17864        }
17865      }
17866    }
17867  }
17868  
17869  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('refHash', CipherSuite$refHash);
17870  export function CipherSuite$signMAC(cs, key, message) {
17871    let $t0_1, $t1_2, $t2_3, $t3_4;
17872    $t0_1 = CipherSuite$assertSupported(cs);
17873    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17874    $t2_3 = smesh$lol$web$common$crypto$hmac.Sum(key, message);
17875    $t1_2.$set($rt.builtin.cloneValue($t2_3));
17876    $t3_4 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
17877    return $t3_4;
17878  }
17879  
17880  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('signMAC', CipherSuite$signMAC);
17881  export function CipherSuite$signWithLabel(cs, signKey, label, content) {
17882    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
17883    let $block = 0;
17884    while (true) {
17885      switch ($block) {
17886        case 0: {
17887          $t0_1 = CipherSuite$assertSupported(cs);
17888          $t1_2 = marshalSignContent(label, content);
17889          $t2_3 = $t1_2[0];
17890          $t3_4 = $t1_2[1];
17891          $t4_5 = ($t3_4 !== null);
17892          if ($t4_5) {
17893            $block = 1; break;
17894          }
17895          else {
17896            $block = 2; break;
17897          }
17898          break;
17899        }
17900        case 1: {
17901          return [null, $t3_4];
17902          break;
17903        }
17904        case 2: {
17905          $t5_6 = signKey;
17906          $t6_7 = smesh$lol$web$common$jsbridge$ed25519.Sign($t5_6, $t2_3);
17907          return [$t6_7, null];
17908          break;
17909        }
17910      }
17911    }
17912  }
17913  
17914  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('signWithLabel', CipherSuite$signWithLabel);
17915  export function CipherSuite$verifyMAC(cs, key, message, tag) {
17916    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
17917    $t0_1 = CipherSuite$assertSupported(cs);
17918    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
17919    $t2_3 = smesh$lol$web$common$crypto$hmac.Sum(key, message);
17920    $t1_2.$set($rt.builtin.cloneValue($t2_3));
17921    $t3_4 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
17922    $t4_5 = hmacEqual(tag, $t3_4);
17923    return $t4_5;
17924  }
17925  
17926  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('verifyMAC', CipherSuite$verifyMAC);
17927  export function CipherSuite$verifyWithLabel(cs, verifKey, label, content, signValue) {
17928    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
17929    let $block = 0;
17930    while (true) {
17931      switch ($block) {
17932        case 0: {
17933          $t0_1 = CipherSuite$assertSupported(cs);
17934          $t1_2 = marshalSignContent(label, content);
17935          $t2_3 = $t1_2[0];
17936          $t3_4 = $t1_2[1];
17937          $t4_5 = ($t3_4 !== null);
17938          if ($t4_5) {
17939            $block = 1; break;
17940          }
17941          else {
17942            $block = 2; break;
17943          }
17944          break;
17945        }
17946        case 1: {
17947          return false;
17948          break;
17949        }
17950        case 2: {
17951          $t5_6 = verifKey;
17952          $t6_7 = smesh$lol$web$common$jsbridge$ed25519.Verify($t5_6, $t2_3, signValue);
17953          return $t6_7;
17954          break;
17955        }
17956      }
17957    }
17958  }
17959  
17960  $rt.types.getType('smesh.lol/web/common/mls.CipherSuite')?.methods?.set('verifyWithLabel', CipherSuite$verifyWithLabel);
17961  export function groupContext$extractEpochSecret(ctx, joinerSecret, pskSecret) {
17962    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
17963    let $block = 0;
17964    while (true) {
17965      switch ($block) {
17966        case 0: {
17967          $t0_1 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
17968          $t1_2 = $t0_1.$get();
17969          $t2_3 = $rt.builtin.stringEqual(pskSecret, null);
17970          if ($t2_3) {
17971            $block = 1; break;
17972          }
17973          else {
17974            $t5_6 = pskSecret;
17975            $block = 2; break;
17976          }
17977          break;
17978        }
17979        case 1: {
17980          $t3_4 = CipherSuite$ExtractSize($t1_2);
17981          $t4_5 = $rt.builtin.makeSlice($t3_4, $t3_4, 0);
17982          $t5_6 = $t4_5;
17983          $block = 2; break;
17984          break;
17985        }
17986        case 2: {
17987          $t6_7 = CipherSuite$hkdfExtract($t1_2, joinerSecret, $t5_6);
17988          $t7_8 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupContext', ctx);
17989          $t8_9 = marshalRaw($t7_8);
17990          $t9_10 = $t8_9[0];
17991          $t10_11 = $t8_9[1];
17992          $t11_12 = ($t10_11 !== null);
17993          if ($t11_12) {
17994            $block = 3; break;
17995          }
17996          else {
17997            $block = 4; break;
17998          }
17999          break;
18000        }
18001        case 3: {
18002          return [null, $t10_11];
18003          break;
18004        }
18005        case 4: {
18006          $t12_13 = CipherSuite$ExtractSize($t1_2);
18007          $t13_14 = ($t12_13 & 0xFFFF);
18008          $t14_15 = CipherSuite$expandWithLabel($t1_2, $t6_7, 'epoch', $t9_10, $t13_14);
18009          $t15_16 = $t14_15[0];
18010          $t16_17 = $t14_15[1];
18011          return [$t15_16, $t16_17];
18012          break;
18013        }
18014      }
18015    }
18016  }
18017  
18018  $rt.types.getType('smesh.lol/web/common/mls.groupContext')?.methods?.set('extractEpochSecret', groupContext$extractEpochSecret);
18019  export function groupContext$extractJoinerSecret(ctx, prevInitSecret, commitSecret) {
18020    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
18021    let $block = 0;
18022    while (true) {
18023      switch ($block) {
18024        case 0: {
18025          $t0_1 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
18026          $t1_2 = $t0_1.$get();
18027          $t2_3 = CipherSuite$hkdfExtract($t1_2, prevInitSecret, commitSecret);
18028          $t3_4 = $rt.types.makeInterface('*smesh.lol/web/common/mls.groupContext', ctx);
18029          $t4_5 = marshalRaw($t3_4);
18030          $t5_6 = $t4_5[0];
18031          $t6_7 = $t4_5[1];
18032          $t7_8 = ($t6_7 !== null);
18033          if ($t7_8) {
18034            $block = 1; break;
18035          }
18036          else {
18037            $block = 2; break;
18038          }
18039          break;
18040        }
18041        case 1: {
18042          return [null, $t6_7];
18043          break;
18044        }
18045        case 2: {
18046          $t8_9 = CipherSuite$ExtractSize($t1_2);
18047          $t9_10 = ($t8_9 & 0xFFFF);
18048          $t10_11 = CipherSuite$expandWithLabel($t1_2, $t2_3, 'joiner', $t5_6, $t9_10);
18049          $t11_12 = $t10_11[0];
18050          $t12_13 = $t10_11[1];
18051          return [$t11_12, $t12_13];
18052          break;
18053        }
18054      }
18055    }
18056  }
18057  
18058  $rt.types.getType('smesh.lol/web/common/mls.groupContext')?.methods?.set('extractJoinerSecret', groupContext$extractJoinerSecret);
18059  export function groupContext$marshal(ctx, w) {
18060    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24;
18061    $t0_1 = { $get() { return ctx.$get().version; }, $set(v) { const obj = ctx.$get(); obj.version = v; ctx.$set(obj); } };
18062    $t1_2 = $t0_1.$get();
18063    $t2_3 = $t1_2;
18064    $t3_4 = Writer$addUint16(w, $t2_3);
18065    $t4_5 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
18066    $t5_6 = $t4_5.$get();
18067    $t6_7 = $t5_6;
18068    $t7_8 = Writer$addUint16(w, $t6_7);
18069    $t8_9 = { $get() { return ctx.$get().groupID; }, $set(v) { const obj = ctx.$get(); obj.groupID = v; ctx.$set(obj); } };
18070    $t9_10 = $t8_9.$get();
18071    $t10_11 = $t9_10;
18072    $t11_12 = Writer$writeOpaqueVec(w, $t10_11);
18073    $t12_13 = { $get() { return ctx.$get().epoch; }, $set(v) { const obj = ctx.$get(); obj.epoch = v; ctx.$set(obj); } };
18074    $t13_14 = $t12_13.$get();
18075    $t14_15 = Writer$addUint64(w, $t13_14);
18076    $t15_16 = { $get() { return ctx.$get().treeHash; }, $set(v) { const obj = ctx.$get(); obj.treeHash = v; ctx.$set(obj); } };
18077    $t16_17 = $t15_16.$get();
18078    $t17_18 = Writer$writeOpaqueVec(w, $t16_17);
18079    $t18_19 = { $get() { return ctx.$get().confirmedTranscriptHash; }, $set(v) { const obj = ctx.$get(); obj.confirmedTranscriptHash = v; ctx.$set(obj); } };
18080    $t19_20 = $t18_19.$get();
18081    $t20_21 = Writer$writeOpaqueVec(w, $t19_20);
18082    $t21_22 = { $get() { return ctx.$get().extensions; }, $set(v) { const obj = ctx.$get(); obj.extensions = v; ctx.$set(obj); } };
18083    $t22_23 = $t21_22.$get();
18084    $t23_24 = marshalExtensionVec(w, $t22_23);
18085    return;
18086  }
18087  
18088  $rt.types.getType('smesh.lol/web/common/mls.groupContext')?.methods?.set('marshal', groupContext$marshal);
18089  export function groupContext$signConfirmationTag(ctx, epochSecret) {
18090    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
18091    let $block = 0;
18092    while (true) {
18093      switch ($block) {
18094        case 0: {
18095          $t0_1 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
18096          $t1_2 = $t0_1.$get();
18097          $t2_3 = secretLabelConfirm.$get();
18098          $t3_4 = CipherSuite$deriveSecret($t1_2, epochSecret, $t2_3);
18099          $t4_5 = $t3_4[0];
18100          $t5_6 = $t3_4[1];
18101          $t6_7 = ($t5_6 !== null);
18102          if ($t6_7) {
18103            $block = 1; break;
18104          }
18105          else {
18106            $block = 2; break;
18107          }
18108          break;
18109        }
18110        case 1: {
18111          return [null, $t5_6];
18112          break;
18113        }
18114        case 2: {
18115          $t7_8 = { $get() { return ctx.$get().confirmedTranscriptHash; }, $set(v) { const obj = ctx.$get(); obj.confirmedTranscriptHash = v; ctx.$set(obj); } };
18116          $t8_9 = $t7_8.$get();
18117          $t9_10 = CipherSuite$signMAC($t1_2, $t4_5, $t8_9);
18118          return [$t9_10, null];
18119          break;
18120        }
18121      }
18122    }
18123  }
18124  
18125  $rt.types.getType('smesh.lol/web/common/mls.groupContext')?.methods?.set('signConfirmationTag', groupContext$signConfirmationTag);
18126  export function groupContext$unmarshal(ctx, r) {
18127    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42;
18128    let $block = 0;
18129    while (true) {
18130      switch ($block) {
18131        case 0: {
18132          ctx.$set($rt.builtin.cloneValue({ version: 0, cipherSuite: 0, groupID: null, epoch: 0n, treeHash: null, confirmedTranscriptHash: null, extensions: null }));
18133          $t0_1 = Reader$readUint16(r);
18134          $t1_2 = $t0_1[0];
18135          $t2_3 = $t0_1[1];
18136          if ($t2_3) {
18137            $block = 2; break;
18138          }
18139          else {
18140            $block = 1; break;
18141          }
18142          break;
18143        }
18144        case 1: {
18145          $t3_4 = errUnexpectedEOF.$get();
18146          return $t3_4;
18147          break;
18148        }
18149        case 2: {
18150          $t4_5 = $t1_2;
18151          $t5_6 = { $get() { return ctx.$get().version; }, $set(v) { const obj = ctx.$get(); obj.version = v; ctx.$set(obj); } };
18152          $t5_6.$set($t4_5);
18153          $t6_7 = { $get() { return ctx.$get().version; }, $set(v) { const obj = ctx.$get(); obj.version = v; ctx.$set(obj); } };
18154          $t7_8 = $t6_7.$get();
18155          $t8_9 = ($t7_8 !== 1);
18156          if ($t8_9) {
18157            $block = 3; break;
18158          }
18159          else {
18160            $block = 4; break;
18161          }
18162          break;
18163        }
18164        case 3: {
18165          $t9_10 = errInvalidVersion.$get();
18166          return $t9_10;
18167          break;
18168        }
18169        case 4: {
18170          $t10_11 = Reader$readUint16(r);
18171          $t11_12 = $t10_11[0];
18172          $t12_13 = $t10_11[1];
18173          if ($t12_13) {
18174            $block = 6; break;
18175          }
18176          else {
18177            $block = 5; break;
18178          }
18179          break;
18180        }
18181        case 5: {
18182          $t13_14 = errUnexpectedEOF.$get();
18183          return $t13_14;
18184          break;
18185        }
18186        case 6: {
18187          $t14_15 = $t11_12;
18188          $t15_16 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
18189          $t15_16.$set($t14_15);
18190          $t16_17 = Reader$readOpaqueVec(r);
18191          $t17_18 = $t16_17[0];
18192          $t18_19 = { $get() { return ctx.$get().groupID; }, $set(v) { const obj = ctx.$get(); obj.groupID = v; ctx.$set(obj); } };
18193          $t19_20 = $t17_18;
18194          $t18_19.$set($t19_20);
18195          $t20_21 = $t16_17[1];
18196          if ($t20_21) {
18197            $block = 8; break;
18198          }
18199          else {
18200            $block = 7; break;
18201          }
18202          break;
18203        }
18204        case 7: {
18205          $t21_22 = errUnexpectedEOF.$get();
18206          return $t21_22;
18207          break;
18208        }
18209        case 8: {
18210          $t22_23 = Reader$readUint64(r);
18211          $t23_24 = $t22_23[0];
18212          $t24_25 = { $get() { return ctx.$get().epoch; }, $set(v) { const obj = ctx.$get(); obj.epoch = v; ctx.$set(obj); } };
18213          $t24_25.$set($t23_24);
18214          $t25_26 = $t22_23[1];
18215          if ($t25_26) {
18216            $block = 10; break;
18217          }
18218          else {
18219            $block = 9; break;
18220          }
18221          break;
18222        }
18223        case 9: {
18224          $t26_27 = errUnexpectedEOF.$get();
18225          return $t26_27;
18226          break;
18227        }
18228        case 10: {
18229          $t27_28 = Reader$readOpaqueVec(r);
18230          $t28_29 = $t27_28[0];
18231          $t29_30 = { $get() { return ctx.$get().treeHash; }, $set(v) { const obj = ctx.$get(); obj.treeHash = v; ctx.$set(obj); } };
18232          $t29_30.$set($t28_29);
18233          $t30_31 = $t27_28[1];
18234          if ($t30_31) {
18235            $block = 12; break;
18236          }
18237          else {
18238            $block = 11; break;
18239          }
18240          break;
18241        }
18242        case 11: {
18243          $t31_32 = errUnexpectedEOF.$get();
18244          return $t31_32;
18245          break;
18246        }
18247        case 12: {
18248          $t32_33 = Reader$readOpaqueVec(r);
18249          $t33_34 = $t32_33[0];
18250          $t34_35 = { $get() { return ctx.$get().confirmedTranscriptHash; }, $set(v) { const obj = ctx.$get(); obj.confirmedTranscriptHash = v; ctx.$set(obj); } };
18251          $t34_35.$set($t33_34);
18252          $t35_36 = $t32_33[1];
18253          if ($t35_36) {
18254            $block = 14; break;
18255          }
18256          else {
18257            $block = 13; break;
18258          }
18259          break;
18260        }
18261        case 13: {
18262          $t36_37 = errUnexpectedEOF.$get();
18263          return $t36_37;
18264          break;
18265        }
18266        case 14: {
18267          $t37_38 = unmarshalExtensionVec(r);
18268          $t38_39 = $t37_38[0];
18269          $t39_40 = $t37_38[1];
18270          $t40_41 = ($t39_40 !== null);
18271          if ($t40_41) {
18272            $block = 15; break;
18273          }
18274          else {
18275            $block = 16; break;
18276          }
18277          break;
18278        }
18279        case 15: {
18280          return $t39_40;
18281          break;
18282        }
18283        case 16: {
18284          $t41_42 = { $get() { return ctx.$get().extensions; }, $set(v) { const obj = ctx.$get(); obj.extensions = v; ctx.$set(obj); } };
18285          $t41_42.$set($t38_39);
18286          return null;
18287          break;
18288        }
18289      }
18290    }
18291  }
18292  
18293  $rt.types.getType('smesh.lol/web/common/mls.groupContext')?.methods?.set('unmarshal', groupContext$unmarshal);
18294  export function confirmedTranscriptHashInput$hashValue(input, cs, interimTranscriptHashBefore) {
18295    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
18296    let $block = 0;
18297    while (true) {
18298      switch ($block) {
18299        case 0: {
18300          $t0_1 = $rt.types.makeInterface('*smesh.lol/web/common/mls.confirmedTranscriptHashInput', input);
18301          $t1_2 = marshalRaw($t0_1);
18302          $t2_3 = $t1_2[0];
18303          $t3_4 = $t1_2[1];
18304          $t4_5 = ($t3_4 !== null);
18305          if ($t4_5) {
18306            $block = 1; break;
18307          }
18308          else {
18309            $block = 2; break;
18310          }
18311          break;
18312        }
18313        case 1: {
18314          return [null, $t3_4];
18315          break;
18316        }
18317        case 2: {
18318          $t5_6 = $rt.builtin.appendSlice(interimTranscriptHashBefore, $t2_3);
18319          $t6_7 = CipherSuite$hash(cs, $t5_6);
18320          return [$t6_7, null];
18321          break;
18322        }
18323      }
18324    }
18325  }
18326  
18327  $rt.types.getType('smesh.lol/web/common/mls.confirmedTranscriptHashInput')?.methods?.set('hashValue', confirmedTranscriptHashInput$hashValue);
18328  export function confirmedTranscriptHashInput$marshal(input, w) {
18329    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
18330    $t0_1 = { $get() { return input.$get().wireFormat; }, $set(v) { const obj = input.$get(); obj.wireFormat = v; input.$set(obj); } };
18331    $t1_2 = $t0_1.$get();
18332    $t2_3 = wireFormat$marshal($t1_2, w);
18333    $t3_4 = { $get() { return input.$get().content; }, $set(v) { const obj = input.$get(); obj.content = v; input.$set(obj); } };
18334    $t4_5 = framedContent$marshal($t3_4, w);
18335    $t5_6 = { $get() { return input.$get().signature; }, $set(v) { const obj = input.$get(); obj.signature = v; input.$set(obj); } };
18336    $t6_7 = $t5_6.$get();
18337    $t7_8 = Writer$writeOpaqueVec(w, $t6_7);
18338    return;
18339  }
18340  
18341  $rt.types.getType('smesh.lol/web/common/mls.confirmedTranscriptHashInput')?.methods?.set('marshal', confirmedTranscriptHashInput$marshal);
18342  export function pskType$marshal(t, w) {
18343    let $t0_1, $t1_2;
18344    $t0_1 = t;
18345    $t1_2 = Writer$addByte(w, $t0_1);
18346    return;
18347  }
18348  
18349  $rt.types.getType('smesh.lol/web/common/mls.pskType')?.methods?.set('marshal', pskType$marshal);
18350  export function pskType$unmarshal(t, r) {
18351    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
18352    let $block = 0;
18353    while (true) {
18354      switch ($block) {
18355        case 0: {
18356          $t0_1 = Reader$readByte(r);
18357          $t1_2 = $t0_1[0];
18358          $t2_3 = $t0_1[1];
18359          if ($t2_3) {
18360            $block = 2; break;
18361          }
18362          else {
18363            $block = 1; break;
18364          }
18365          break;
18366        }
18367        case 1: {
18368          $t3_4 = errUnexpectedEOF.$get();
18369          return $t3_4;
18370          break;
18371        }
18372        case 2: {
18373          $t4_5 = $t1_2;
18374          t.$set($t4_5);
18375          $t5_6 = t.$get();
18376          $t6_7 = ($t5_6 === 1);
18377          if ($t6_7) {
18378            $block = 3; break;
18379          }
18380          else {
18381            $block = 4; break;
18382          }
18383          break;
18384        }
18385        case 3: {
18386          return null;
18387          break;
18388        }
18389        case 4: {
18390          $t7_8 = ($t5_6 === 2);
18391          if ($t7_8) {
18392            $block = 3; break;
18393          }
18394          else {
18395            $block = 5; break;
18396          }
18397          break;
18398        }
18399        case 5: {
18400          $t8_9 = errInvalidPSKType.$get();
18401          return $t8_9;
18402          break;
18403        }
18404      }
18405    }
18406  }
18407  
18408  $rt.types.getType('smesh.lol/web/common/mls.pskType')?.methods?.set('unmarshal', pskType$unmarshal);
18409  export function resumptionPSKUsage$marshal(usage, w) {
18410    let $t0_1, $t1_2;
18411    $t0_1 = usage;
18412    $t1_2 = Writer$addByte(w, $t0_1);
18413    return;
18414  }
18415  
18416  $rt.types.getType('smesh.lol/web/common/mls.resumptionPSKUsage')?.methods?.set('marshal', resumptionPSKUsage$marshal);
18417  export function resumptionPSKUsage$unmarshal(usage, r) {
18418    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
18419    let $block = 0;
18420    while (true) {
18421      switch ($block) {
18422        case 0: {
18423          $t0_1 = Reader$readByte(r);
18424          $t1_2 = $t0_1[0];
18425          $t2_3 = $t0_1[1];
18426          if ($t2_3) {
18427            $block = 2; break;
18428          }
18429          else {
18430            $block = 1; break;
18431          }
18432          break;
18433        }
18434        case 1: {
18435          $t3_4 = errUnexpectedEOF.$get();
18436          return $t3_4;
18437          break;
18438        }
18439        case 2: {
18440          $t4_5 = $t1_2;
18441          usage.$set($t4_5);
18442          $t5_6 = usage.$get();
18443          $t6_7 = ($t5_6 === 1);
18444          if ($t6_7) {
18445            $block = 3; break;
18446          }
18447          else {
18448            $block = 4; break;
18449          }
18450          break;
18451        }
18452        case 3: {
18453          return null;
18454          break;
18455        }
18456        case 4: {
18457          $t7_8 = ($t5_6 === 2);
18458          if ($t7_8) {
18459            $block = 3; break;
18460          }
18461          else {
18462            $block = 5; break;
18463          }
18464          break;
18465        }
18466        case 5: {
18467          $t8_9 = ($t5_6 === 3);
18468          if ($t8_9) {
18469            $block = 3; break;
18470          }
18471          else {
18472            $block = 6; break;
18473          }
18474          break;
18475        }
18476        case 6: {
18477          $t9_10 = errInvalidPSKUsage.$get();
18478          return $t9_10;
18479          break;
18480        }
18481      }
18482    }
18483  }
18484  
18485  $rt.types.getType('smesh.lol/web/common/mls.resumptionPSKUsage')?.methods?.set('unmarshal', resumptionPSKUsage$unmarshal);
18486  export function preSharedKeyID$marshal(id, w) {
18487    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24;
18488    let $block = 0;
18489    while (true) {
18490      switch ($block) {
18491        case 0: {
18492          $t0_1 = { $get() { return id.$get().pskType; }, $set(v) { const obj = id.$get(); obj.pskType = v; id.$set(obj); } };
18493          $t1_2 = $t0_1.$get();
18494          $t2_3 = pskType$marshal($t1_2, w);
18495          $t3_4 = { $get() { return id.$get().pskType; }, $set(v) { const obj = id.$get(); obj.pskType = v; id.$set(obj); } };
18496          $t4_5 = $t3_4.$get();
18497          $t5_6 = ($t4_5 === 1);
18498          if ($t5_6) {
18499            $block = 2; break;
18500          }
18501          else {
18502            $block = 4; break;
18503          }
18504          break;
18505        }
18506        case 1: {
18507          $t6_7 = { $get() { return id.$get().pskNonce; }, $set(v) { const obj = id.$get(); obj.pskNonce = v; id.$set(obj); } };
18508          $t7_8 = $t6_7.$get();
18509          $t8_9 = Writer$writeOpaqueVec(w, $t7_8);
18510          return;
18511          break;
18512        }
18513        case 2: {
18514          $t9_10 = { $get() { return id.$get().pskID; }, $set(v) { const obj = id.$get(); obj.pskID = v; id.$set(obj); } };
18515          $t10_11 = $t9_10.$get();
18516          $t11_12 = Writer$writeOpaqueVec(w, $t10_11);
18517          $block = 1; break;
18518          break;
18519        }
18520        case 3: {
18521          $t12_13 = { $get() { return id.$get().usage; }, $set(v) { const obj = id.$get(); obj.usage = v; id.$set(obj); } };
18522          $t13_14 = $t12_13.$get();
18523          $t14_15 = resumptionPSKUsage$marshal($t13_14, w);
18524          $t15_16 = { $get() { return id.$get().pskGroupID; }, $set(v) { const obj = id.$get(); obj.pskGroupID = v; id.$set(obj); } };
18525          $t16_17 = $t15_16.$get();
18526          $t17_18 = $t16_17;
18527          $t18_19 = Writer$writeOpaqueVec(w, $t17_18);
18528          $t19_20 = { $get() { return id.$get().pskEpoch; }, $set(v) { const obj = id.$get(); obj.pskEpoch = v; id.$set(obj); } };
18529          $t20_21 = $t19_20.$get();
18530          $t21_22 = Writer$addUint64(w, $t20_21);
18531          $block = 1; break;
18532          break;
18533        }
18534        case 4: {
18535          $t22_23 = ($t4_5 === 2);
18536          if ($t22_23) {
18537            $block = 3; break;
18538          }
18539          else {
18540            $block = 5; break;
18541          }
18542          break;
18543        }
18544        case 5: {
18545          $t23_24 = $rt.types.makeInterface('string', 'unreachable');
18546          $rt.runtime.panic($t23_24);
18547          break;
18548        }
18549      }
18550    }
18551  }
18552  
18553  $rt.types.getType('smesh.lol/web/common/mls.preSharedKeyID')?.methods?.set('marshal', preSharedKeyID$marshal);
18554  export function preSharedKeyID$unmarshal(id, r) {
18555    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32;
18556    let $block = 0;
18557    while (true) {
18558      switch ($block) {
18559        case 0: {
18560          id.$set($rt.builtin.cloneValue({ pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null }));
18561          $t0_1 = { $get() { return id.$get().pskType; }, $set(v) { const obj = id.$get(); obj.pskType = v; id.$set(obj); } };
18562          $t1_2 = pskType$unmarshal($t0_1, r);
18563          $t2_3 = ($t1_2 !== null);
18564          if ($t2_3) {
18565            $block = 1; break;
18566          }
18567          else {
18568            $block = 2; break;
18569          }
18570          break;
18571        }
18572        case 1: {
18573          return $t1_2;
18574          break;
18575        }
18576        case 2: {
18577          $t3_4 = { $get() { return id.$get().pskType; }, $set(v) { const obj = id.$get(); obj.pskType = v; id.$set(obj); } };
18578          $t4_5 = $t3_4.$get();
18579          $t5_6 = ($t4_5 === 1);
18580          if ($t5_6) {
18581            $block = 4; break;
18582          }
18583          else {
18584            $block = 6; break;
18585          }
18586          break;
18587        }
18588        case 3: {
18589          $t6_7 = Reader$readOpaqueVec(r);
18590          $t7_8 = $t6_7[0];
18591          $t8_9 = { $get() { return id.$get().pskNonce; }, $set(v) { const obj = id.$get(); obj.pskNonce = v; id.$set(obj); } };
18592          $t8_9.$set($t7_8);
18593          $t9_10 = $t6_7[1];
18594          if ($t9_10) {
18595            $block = 15; break;
18596          }
18597          else {
18598            $block = 14; break;
18599          }
18600          break;
18601        }
18602        case 4: {
18603          $t10_11 = Reader$readOpaqueVec(r);
18604          $t11_12 = $t10_11[0];
18605          $t12_13 = { $get() { return id.$get().pskID; }, $set(v) { const obj = id.$get(); obj.pskID = v; id.$set(obj); } };
18606          $t12_13.$set($t11_12);
18607          $t13_14 = $t10_11[1];
18608          if ($t13_14) {
18609            $block = 3; break;
18610          }
18611          else {
18612            $block = 7; break;
18613          }
18614          break;
18615        }
18616        case 5: {
18617          $t14_15 = { $get() { return id.$get().usage; }, $set(v) { const obj = id.$get(); obj.usage = v; id.$set(obj); } };
18618          $t15_16 = resumptionPSKUsage$unmarshal($t14_15, r);
18619          $t16_17 = ($t15_16 !== null);
18620          if ($t16_17) {
18621            $block = 9; break;
18622          }
18623          else {
18624            $block = 10; break;
18625          }
18626          break;
18627        }
18628        case 6: {
18629          $t17_18 = ($t4_5 === 2);
18630          if ($t17_18) {
18631            $block = 5; break;
18632          }
18633          else {
18634            $block = 8; break;
18635          }
18636          break;
18637        }
18638        case 7: {
18639          $t18_19 = errUnexpectedEOF.$get();
18640          return $t18_19;
18641          break;
18642        }
18643        case 8: {
18644          $t19_20 = $rt.types.makeInterface('string', 'unreachable');
18645          $rt.runtime.panic($t19_20);
18646          break;
18647        }
18648        case 9: {
18649          return $t15_16;
18650          break;
18651        }
18652        case 10: {
18653          $t20_21 = Reader$readOpaqueVec(r);
18654          $t21_22 = $t20_21[0];
18655          $t22_23 = { $get() { return id.$get().pskGroupID; }, $set(v) { const obj = id.$get(); obj.pskGroupID = v; id.$set(obj); } };
18656          $t23_24 = $t21_22;
18657          $t22_23.$set($t23_24);
18658          $t24_25 = $t20_21[1];
18659          if ($t24_25) {
18660            $block = 12; break;
18661          }
18662          else {
18663            $block = 11; break;
18664          }
18665          break;
18666        }
18667        case 11: {
18668          $t25_26 = errUnexpectedEOF.$get();
18669          return $t25_26;
18670          break;
18671        }
18672        case 12: {
18673          $t26_27 = Reader$readUint64(r);
18674          $t27_28 = $t26_27[0];
18675          $t28_29 = { $get() { return id.$get().pskEpoch; }, $set(v) { const obj = id.$get(); obj.pskEpoch = v; id.$set(obj); } };
18676          $t28_29.$set($t27_28);
18677          $t29_30 = $t26_27[1];
18678          if ($t29_30) {
18679            $block = 3; break;
18680          }
18681          else {
18682            $block = 13; break;
18683          }
18684          break;
18685        }
18686        case 13: {
18687          $t30_31 = errUnexpectedEOF.$get();
18688          return $t30_31;
18689          break;
18690        }
18691        case 14: {
18692          $t31_32 = errUnexpectedEOF.$get();
18693          return $t31_32;
18694          break;
18695        }
18696        case 15: {
18697          return null;
18698          break;
18699        }
18700      }
18701    }
18702  }
18703  
18704  $rt.types.getType('smesh.lol/web/common/mls.preSharedKeyID')?.methods?.set('unmarshal', preSharedKeyID$unmarshal);
18705  export function pskLabel$marshal(label, w) {
18706    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
18707    $t0_1 = { $get() { return label.$get().id; }, $set(v) { const obj = label.$get(); obj.id = v; label.$set(obj); } };
18708    $t1_2 = preSharedKeyID$marshal($t0_1, w);
18709    $t2_3 = { $get() { return label.$get().index; }, $set(v) { const obj = label.$get(); obj.index = v; label.$set(obj); } };
18710    $t3_4 = $t2_3.$get();
18711    $t4_5 = Writer$addUint16(w, $t3_4);
18712    $t5_6 = { $get() { return label.$get().count; }, $set(v) { const obj = label.$get(); obj.count = v; label.$set(obj); } };
18713    $t6_7 = $t5_6.$get();
18714    $t7_8 = Writer$addUint16(w, $t6_7);
18715    return;
18716  }
18717  
18718  $rt.types.getType('smesh.lol/web/common/mls.pskLabel')?.methods?.set('marshal', pskLabel$marshal);
18719  export function proposalType$marshal(t, w) {
18720    let $t0_1, $t1_2;
18721    $t0_1 = t;
18722    $t1_2 = Writer$addUint16(w, $t0_1);
18723    return;
18724  }
18725  
18726  $rt.types.getType('smesh.lol/web/common/mls.proposalType')?.methods?.set('marshal', proposalType$marshal);
18727  export function proposalType$unmarshal(t, r) {
18728    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
18729    let $block = 0;
18730    while (true) {
18731      switch ($block) {
18732        case 0: {
18733          $t0_1 = Reader$readUint16(r);
18734          $t1_2 = $t0_1[0];
18735          $t2_3 = $t0_1[1];
18736          if ($t2_3) {
18737            $block = 2; break;
18738          }
18739          else {
18740            $block = 1; break;
18741          }
18742          break;
18743        }
18744        case 1: {
18745          $t3_4 = errUnexpectedEOF.$get();
18746          return $t3_4;
18747          break;
18748        }
18749        case 2: {
18750          $t4_5 = $t1_2;
18751          t.$set($t4_5);
18752          $t5_6 = t.$get();
18753          $t6_7 = ($t5_6 === 1);
18754          if ($t6_7) {
18755            $block = 3; break;
18756          }
18757          else {
18758            $block = 4; break;
18759          }
18760          break;
18761        }
18762        case 3: {
18763          return null;
18764          break;
18765        }
18766        case 4: {
18767          $t7_8 = ($t5_6 === 2);
18768          if ($t7_8) {
18769            $block = 3; break;
18770          }
18771          else {
18772            $block = 5; break;
18773          }
18774          break;
18775        }
18776        case 5: {
18777          $t8_9 = ($t5_6 === 3);
18778          if ($t8_9) {
18779            $block = 3; break;
18780          }
18781          else {
18782            $block = 6; break;
18783          }
18784          break;
18785        }
18786        case 6: {
18787          $t9_10 = ($t5_6 === 4);
18788          if ($t9_10) {
18789            $block = 3; break;
18790          }
18791          else {
18792            $block = 7; break;
18793          }
18794          break;
18795        }
18796        case 7: {
18797          $t10_11 = ($t5_6 === 5);
18798          if ($t10_11) {
18799            $block = 3; break;
18800          }
18801          else {
18802            $block = 8; break;
18803          }
18804          break;
18805        }
18806        case 8: {
18807          $t11_12 = ($t5_6 === 6);
18808          if ($t11_12) {
18809            $block = 3; break;
18810          }
18811          else {
18812            $block = 9; break;
18813          }
18814          break;
18815        }
18816        case 9: {
18817          $t12_13 = ($t5_6 === 7);
18818          if ($t12_13) {
18819            $block = 3; break;
18820          }
18821          else {
18822            $block = 10; break;
18823          }
18824          break;
18825        }
18826        case 10: {
18827          $t13_14 = errInvalidProposalType.$get();
18828          return $t13_14;
18829          break;
18830        }
18831      }
18832    }
18833  }
18834  
18835  $rt.types.getType('smesh.lol/web/common/mls.proposalType')?.methods?.set('unmarshal', proposalType$unmarshal);
18836  export function proposal$marshal(prop, w) {
18837    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
18838    let $block = 0;
18839    while (true) {
18840      switch ($block) {
18841        case 0: {
18842          $t0_1 = { $get() { return prop.$get().proposalType; }, $set(v) { const obj = prop.$get(); obj.proposalType = v; prop.$set(obj); } };
18843          $t1_2 = $t0_1.$get();
18844          $t2_3 = proposalType$marshal($t1_2, w);
18845          $t3_4 = { $get() { return prop.$get().proposalType; }, $set(v) { const obj = prop.$get(); obj.proposalType = v; prop.$set(obj); } };
18846          $t4_5 = $t3_4.$get();
18847          $t5_6 = ($t4_5 === 1);
18848          if ($t5_6) {
18849            $block = 2; break;
18850          }
18851          else {
18852            $block = 4; break;
18853          }
18854          break;
18855        }
18856        case 1: {
18857          return;
18858          break;
18859        }
18860        case 2: {
18861          $t6_7 = { $get() { return prop.$get().add; }, $set(v) { const obj = prop.$get(); obj.add = v; prop.$set(obj); } };
18862          $t7_8 = $t6_7.$get();
18863          $t8_9 = add$marshal($t7_8, w);
18864          $block = 1; break;
18865          break;
18866        }
18867        case 3: {
18868          $t9_10 = { $get() { return prop.$get().update; }, $set(v) { const obj = prop.$get(); obj.update = v; prop.$set(obj); } };
18869          $t10_11 = $t9_10.$get();
18870          $t11_12 = update$marshal($t10_11, w);
18871          $block = 1; break;
18872          break;
18873        }
18874        case 4: {
18875          $t12_13 = ($t4_5 === 2);
18876          if ($t12_13) {
18877            $block = 3; break;
18878          }
18879          else {
18880            $block = 6; break;
18881          }
18882          break;
18883        }
18884        case 5: {
18885          $t13_14 = { $get() { return prop.$get().remove; }, $set(v) { const obj = prop.$get(); obj.remove = v; prop.$set(obj); } };
18886          $t14_15 = $t13_14.$get();
18887          $t15_16 = remove$marshal($t14_15, w);
18888          $block = 1; break;
18889          break;
18890        }
18891        case 6: {
18892          $t16_17 = ($t4_5 === 3);
18893          if ($t16_17) {
18894            $block = 5; break;
18895          }
18896          else {
18897            $block = 8; break;
18898          }
18899          break;
18900        }
18901        case 7: {
18902          $t17_18 = { $get() { return prop.$get().preSharedKey; }, $set(v) { const obj = prop.$get(); obj.preSharedKey = v; prop.$set(obj); } };
18903          $t18_19 = $t17_18.$get();
18904          $t19_20 = preSharedKey$marshal($t18_19, w);
18905          $block = 1; break;
18906          break;
18907        }
18908        case 8: {
18909          $t20_21 = ($t4_5 === 4);
18910          if ($t20_21) {
18911            $block = 7; break;
18912          }
18913          else {
18914            $block = 10; break;
18915          }
18916          break;
18917        }
18918        case 9: {
18919          $t21_22 = { $get() { return prop.$get().reInit; }, $set(v) { const obj = prop.$get(); obj.reInit = v; prop.$set(obj); } };
18920          $t22_23 = $t21_22.$get();
18921          $t23_24 = reInit$marshal($t22_23, w);
18922          $block = 1; break;
18923          break;
18924        }
18925        case 10: {
18926          $t24_25 = ($t4_5 === 5);
18927          if ($t24_25) {
18928            $block = 9; break;
18929          }
18930          else {
18931            $block = 12; break;
18932          }
18933          break;
18934        }
18935        case 11: {
18936          $t25_26 = { $get() { return prop.$get().externalInit; }, $set(v) { const obj = prop.$get(); obj.externalInit = v; prop.$set(obj); } };
18937          $t26_27 = $t25_26.$get();
18938          $t27_28 = externalInit$marshal($t26_27, w);
18939          $block = 1; break;
18940          break;
18941        }
18942        case 12: {
18943          $t28_29 = ($t4_5 === 6);
18944          if ($t28_29) {
18945            $block = 11; break;
18946          }
18947          else {
18948            $block = 14; break;
18949          }
18950          break;
18951        }
18952        case 13: {
18953          $t29_30 = { $get() { return prop.$get().groupContextExtensions; }, $set(v) { const obj = prop.$get(); obj.groupContextExtensions = v; prop.$set(obj); } };
18954          $t30_31 = $t29_30.$get();
18955          $t31_32 = groupContextExtensions$marshal($t30_31, w);
18956          $block = 1; break;
18957          break;
18958        }
18959        case 14: {
18960          $t32_33 = ($t4_5 === 7);
18961          if ($t32_33) {
18962            $block = 13; break;
18963          }
18964          else {
18965            $block = 15; break;
18966          }
18967          break;
18968        }
18969        case 15: {
18970          $t33_34 = $rt.types.makeInterface('string', 'unreachable');
18971          $rt.runtime.panic($t33_34);
18972          break;
18973        }
18974      }
18975    }
18976  }
18977  
18978  $rt.types.getType('smesh.lol/web/common/mls.proposal')?.methods?.set('marshal', proposal$marshal);
18979  export function proposal$unmarshal(prop, r) {
18980    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48;
18981    let $block = 0;
18982    while (true) {
18983      switch ($block) {
18984        case 0: {
18985          prop.$set($rt.builtin.cloneValue({ proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }));
18986          $t0_1 = { $get() { return prop.$get().proposalType; }, $set(v) { const obj = prop.$get(); obj.proposalType = v; prop.$set(obj); } };
18987          $t1_2 = proposalType$unmarshal($t0_1, r);
18988          $t2_3 = ($t1_2 !== null);
18989          if ($t2_3) {
18990            $block = 1; break;
18991          }
18992          else {
18993            $block = 2; break;
18994          }
18995          break;
18996        }
18997        case 1: {
18998          return $t1_2;
18999          break;
19000        }
19001        case 2: {
19002          $t3_4 = { $get() { return prop.$get().proposalType; }, $set(v) { const obj = prop.$get(); obj.proposalType = v; prop.$set(obj); } };
19003          $t4_5 = $t3_4.$get();
19004          $t5_6 = ($t4_5 === 1);
19005          if ($t5_6) {
19006            $block = 3; break;
19007          }
19008          else {
19009            $block = 5; break;
19010          }
19011          break;
19012        }
19013        case 3: {
19014          $t6_7 = { $value: { keyPackage: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19015          $t7_8 = { $get() { return prop.$get().add; }, $set(v) { const obj = prop.$get(); obj.add = v; prop.$set(obj); } };
19016          $t7_8.$set($t6_7);
19017          $t8_9 = { $get() { return prop.$get().add; }, $set(v) { const obj = prop.$get(); obj.add = v; prop.$set(obj); } };
19018          $t9_10 = $t8_9.$get();
19019          $t10_11 = add$unmarshal($t9_10, r);
19020          return $t10_11;
19021          break;
19022        }
19023        case 4: {
19024          $t11_12 = { $value: { leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19025          $t12_13 = { $get() { return prop.$get().update; }, $set(v) { const obj = prop.$get(); obj.update = v; prop.$set(obj); } };
19026          $t12_13.$set($t11_12);
19027          $t13_14 = { $get() { return prop.$get().update; }, $set(v) { const obj = prop.$get(); obj.update = v; prop.$set(obj); } };
19028          $t14_15 = $t13_14.$get();
19029          $t15_16 = update$unmarshal($t14_15, r);
19030          return $t15_16;
19031          break;
19032        }
19033        case 5: {
19034          $t16_17 = ($t4_5 === 2);
19035          if ($t16_17) {
19036            $block = 4; break;
19037          }
19038          else {
19039            $block = 7; break;
19040          }
19041          break;
19042        }
19043        case 6: {
19044          $t17_18 = { $value: { removed: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19045          $t18_19 = { $get() { return prop.$get().remove; }, $set(v) { const obj = prop.$get(); obj.remove = v; prop.$set(obj); } };
19046          $t18_19.$set($t17_18);
19047          $t19_20 = { $get() { return prop.$get().remove; }, $set(v) { const obj = prop.$get(); obj.remove = v; prop.$set(obj); } };
19048          $t20_21 = $t19_20.$get();
19049          $t21_22 = remove$unmarshal($t20_21, r);
19050          return $t21_22;
19051          break;
19052        }
19053        case 7: {
19054          $t22_23 = ($t4_5 === 3);
19055          if ($t22_23) {
19056            $block = 6; break;
19057          }
19058          else {
19059            $block = 9; break;
19060          }
19061          break;
19062        }
19063        case 8: {
19064          $t23_24 = { $value: { psk: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null } }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19065          $t24_25 = { $get() { return prop.$get().preSharedKey; }, $set(v) { const obj = prop.$get(); obj.preSharedKey = v; prop.$set(obj); } };
19066          $t24_25.$set($t23_24);
19067          $t25_26 = { $get() { return prop.$get().preSharedKey; }, $set(v) { const obj = prop.$get(); obj.preSharedKey = v; prop.$set(obj); } };
19068          $t26_27 = $t25_26.$get();
19069          $t27_28 = preSharedKey$unmarshal($t26_27, r);
19070          return $t27_28;
19071          break;
19072        }
19073        case 9: {
19074          $t28_29 = ($t4_5 === 4);
19075          if ($t28_29) {
19076            $block = 8; break;
19077          }
19078          else {
19079            $block = 11; break;
19080          }
19081          break;
19082        }
19083        case 10: {
19084          $t29_30 = { $value: { groupID: null, version: 0, cipherSuite: 0, extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19085          $t30_31 = { $get() { return prop.$get().reInit; }, $set(v) { const obj = prop.$get(); obj.reInit = v; prop.$set(obj); } };
19086          $t30_31.$set($t29_30);
19087          $t31_32 = { $get() { return prop.$get().reInit; }, $set(v) { const obj = prop.$get(); obj.reInit = v; prop.$set(obj); } };
19088          $t32_33 = $t31_32.$get();
19089          $t33_34 = reInit$unmarshal($t32_33, r);
19090          return $t33_34;
19091          break;
19092        }
19093        case 11: {
19094          $t34_35 = ($t4_5 === 5);
19095          if ($t34_35) {
19096            $block = 10; break;
19097          }
19098          else {
19099            $block = 13; break;
19100          }
19101          break;
19102        }
19103        case 12: {
19104          $t35_36 = { $value: { kemOutput: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19105          $t36_37 = { $get() { return prop.$get().externalInit; }, $set(v) { const obj = prop.$get(); obj.externalInit = v; prop.$set(obj); } };
19106          $t36_37.$set($t35_36);
19107          $t37_38 = { $get() { return prop.$get().externalInit; }, $set(v) { const obj = prop.$get(); obj.externalInit = v; prop.$set(obj); } };
19108          $t38_39 = $t37_38.$get();
19109          $t39_40 = externalInit$unmarshal($t38_39, r);
19110          return $t39_40;
19111          break;
19112        }
19113        case 13: {
19114          $t40_41 = ($t4_5 === 6);
19115          if ($t40_41) {
19116            $block = 12; break;
19117          }
19118          else {
19119            $block = 15; break;
19120          }
19121          break;
19122        }
19123        case 14: {
19124          $t41_42 = { $value: { extensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19125          $t42_43 = { $get() { return prop.$get().groupContextExtensions; }, $set(v) { const obj = prop.$get(); obj.groupContextExtensions = v; prop.$set(obj); } };
19126          $t42_43.$set($t41_42);
19127          $t43_44 = { $get() { return prop.$get().groupContextExtensions; }, $set(v) { const obj = prop.$get(); obj.groupContextExtensions = v; prop.$set(obj); } };
19128          $t44_45 = $t43_44.$get();
19129          $t45_46 = groupContextExtensions$unmarshal($t44_45, r);
19130          return $t45_46;
19131          break;
19132        }
19133        case 15: {
19134          $t46_47 = ($t4_5 === 7);
19135          if ($t46_47) {
19136            $block = 14; break;
19137          }
19138          else {
19139            $block = 16; break;
19140          }
19141          break;
19142        }
19143        case 16: {
19144          $t47_48 = $rt.types.makeInterface('string', 'unreachable');
19145          $rt.runtime.panic($t47_48);
19146          break;
19147        }
19148      }
19149    }
19150  }
19151  
19152  $rt.types.getType('smesh.lol/web/common/mls.proposal')?.methods?.set('unmarshal', proposal$unmarshal);
19153  export function add$marshal(a, w) {
19154    let $t0_1, $t1_2;
19155    $t0_1 = { $get() { return a.$get().keyPackage; }, $set(v) { const obj = a.$get(); obj.keyPackage = v; a.$set(obj); } };
19156    $t1_2 = KeyPackage$marshal($t0_1, w);
19157    return;
19158  }
19159  
19160  $rt.types.getType('smesh.lol/web/common/mls.add')?.methods?.set('marshal', add$marshal);
19161  export function add$unmarshal(a, r) {
19162    let $t0_1, $t1_2;
19163    a.$set($rt.builtin.cloneValue({ keyPackage: { version: 0, cipherSuite: 0, initKey: null, leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, extensions: null, signature: null } }));
19164    $t0_1 = { $get() { return a.$get().keyPackage; }, $set(v) { const obj = a.$get(); obj.keyPackage = v; a.$set(obj); } };
19165    $t1_2 = KeyPackage$unmarshal($t0_1, r);
19166    return $t1_2;
19167  }
19168  
19169  $rt.types.getType('smesh.lol/web/common/mls.add')?.methods?.set('unmarshal', add$unmarshal);
19170  export function update$marshal(upd, w) {
19171    let $t0_1, $t1_2;
19172    $t0_1 = { $get() { return upd.$get().leafNode; }, $set(v) { const obj = upd.$get(); obj.leafNode = v; upd.$set(obj); } };
19173    $t1_2 = leafNode$marshal($t0_1, w);
19174    return;
19175  }
19176  
19177  $rt.types.getType('smesh.lol/web/common/mls.update')?.methods?.set('marshal', update$marshal);
19178  export function update$unmarshal(upd, r) {
19179    let $t0_1, $t1_2;
19180    upd.$set($rt.builtin.cloneValue({ leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null } }));
19181    $t0_1 = { $get() { return upd.$get().leafNode; }, $set(v) { const obj = upd.$get(); obj.leafNode = v; upd.$set(obj); } };
19182    $t1_2 = leafNode$unmarshal($t0_1, r);
19183    return $t1_2;
19184  }
19185  
19186  $rt.types.getType('smesh.lol/web/common/mls.update')?.methods?.set('unmarshal', update$unmarshal);
19187  export function remove$marshal(rm, w) {
19188    let $t0_1, $t1_2, $t2_3, $t3_4;
19189    $t0_1 = { $get() { return rm.$get().removed; }, $set(v) { const obj = rm.$get(); obj.removed = v; rm.$set(obj); } };
19190    $t1_2 = $t0_1.$get();
19191    $t2_3 = $t1_2;
19192    $t3_4 = Writer$addUint32(w, $t2_3);
19193    return;
19194  }
19195  
19196  $rt.types.getType('smesh.lol/web/common/mls.remove')?.methods?.set('marshal', remove$marshal);
19197  export function remove$unmarshal(rm, r) {
19198    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
19199    let $block = 0;
19200    while (true) {
19201      switch ($block) {
19202        case 0: {
19203          rm.$set($rt.builtin.cloneValue({ removed: 0 }));
19204          $t0_1 = Reader$readUint32(r);
19205          $t1_2 = $t0_1[0];
19206          $t2_3 = $t0_1[1];
19207          if ($t2_3) {
19208            $block = 2; break;
19209          }
19210          else {
19211            $block = 1; break;
19212          }
19213          break;
19214        }
19215        case 1: {
19216          $t3_4 = errUnexpectedEOF.$get();
19217          return $t3_4;
19218          break;
19219        }
19220        case 2: {
19221          $t4_5 = $t1_2;
19222          $t5_6 = { $get() { return rm.$get().removed; }, $set(v) { const obj = rm.$get(); obj.removed = v; rm.$set(obj); } };
19223          $t5_6.$set($t4_5);
19224          return null;
19225          break;
19226        }
19227      }
19228    }
19229  }
19230  
19231  $rt.types.getType('smesh.lol/web/common/mls.remove')?.methods?.set('unmarshal', remove$unmarshal);
19232  export function preSharedKey$marshal(psk, w) {
19233    let $t0_1, $t1_2;
19234    $t0_1 = { $get() { return psk.$get().psk; }, $set(v) { const obj = psk.$get(); obj.psk = v; psk.$set(obj); } };
19235    $t1_2 = preSharedKeyID$marshal($t0_1, w);
19236    return;
19237  }
19238  
19239  $rt.types.getType('smesh.lol/web/common/mls.preSharedKey')?.methods?.set('marshal', preSharedKey$marshal);
19240  export function preSharedKey$unmarshal(psk, r) {
19241    let $t0_1, $t1_2;
19242    psk.$set($rt.builtin.cloneValue({ psk: { pskType: 0, pskID: null, usage: 0, pskGroupID: null, pskEpoch: 0n, pskNonce: null } }));
19243    $t0_1 = { $get() { return psk.$get().psk; }, $set(v) { const obj = psk.$get(); obj.psk = v; psk.$set(obj); } };
19244    $t1_2 = preSharedKeyID$unmarshal($t0_1, r);
19245    return $t1_2;
19246  }
19247  
19248  $rt.types.getType('smesh.lol/web/common/mls.preSharedKey')?.methods?.set('unmarshal', preSharedKey$unmarshal);
19249  export function reInit$marshal(ri, w) {
19250    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
19251    $t0_1 = { $get() { return ri.$get().groupID; }, $set(v) { const obj = ri.$get(); obj.groupID = v; ri.$set(obj); } };
19252    $t1_2 = $t0_1.$get();
19253    $t2_3 = $t1_2;
19254    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
19255    $t4_5 = { $get() { return ri.$get().version; }, $set(v) { const obj = ri.$get(); obj.version = v; ri.$set(obj); } };
19256    $t5_6 = $t4_5.$get();
19257    $t6_7 = $t5_6;
19258    $t7_8 = Writer$addUint16(w, $t6_7);
19259    $t8_9 = { $get() { return ri.$get().cipherSuite; }, $set(v) { const obj = ri.$get(); obj.cipherSuite = v; ri.$set(obj); } };
19260    $t9_10 = $t8_9.$get();
19261    $t10_11 = $t9_10;
19262    $t11_12 = Writer$addUint16(w, $t10_11);
19263    $t12_13 = { $get() { return ri.$get().extensions; }, $set(v) { const obj = ri.$get(); obj.extensions = v; ri.$set(obj); } };
19264    $t13_14 = $t12_13.$get();
19265    $t14_15 = marshalExtensionVec(w, $t13_14);
19266    return;
19267  }
19268  
19269  $rt.types.getType('smesh.lol/web/common/mls.reInit')?.methods?.set('marshal', reInit$marshal);
19270  export function reInit$unmarshal(ri, r) {
19271    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
19272    let $block = 0;
19273    while (true) {
19274      switch ($block) {
19275        case 0: {
19276          ri.$set($rt.builtin.cloneValue({ groupID: null, version: 0, cipherSuite: 0, extensions: null }));
19277          $t0_1 = Reader$readOpaqueVec(r);
19278          $t1_2 = $t0_1[0];
19279          $t2_3 = { $get() { return ri.$get().groupID; }, $set(v) { const obj = ri.$get(); obj.groupID = v; ri.$set(obj); } };
19280          $t3_4 = $t1_2;
19281          $t2_3.$set($t3_4);
19282          $t4_5 = $t0_1[1];
19283          if ($t4_5) {
19284            $block = 2; break;
19285          }
19286          else {
19287            $block = 1; break;
19288          }
19289          break;
19290        }
19291        case 1: {
19292          $t5_6 = errUnexpectedEOF.$get();
19293          return $t5_6;
19294          break;
19295        }
19296        case 2: {
19297          $t6_7 = Reader$readUint16(r);
19298          $t7_8 = $t6_7[0];
19299          $t8_9 = $t6_7[1];
19300          if ($t8_9) {
19301            $block = 4; break;
19302          }
19303          else {
19304            $block = 3; break;
19305          }
19306          break;
19307        }
19308        case 3: {
19309          $t9_10 = errUnexpectedEOF.$get();
19310          return $t9_10;
19311          break;
19312        }
19313        case 4: {
19314          $t10_11 = $t7_8;
19315          $t11_12 = { $get() { return ri.$get().version; }, $set(v) { const obj = ri.$get(); obj.version = v; ri.$set(obj); } };
19316          $t11_12.$set($t10_11);
19317          $t12_13 = Reader$readUint16(r);
19318          $t13_14 = $t12_13[0];
19319          $t14_15 = $t12_13[1];
19320          if ($t14_15) {
19321            $block = 6; break;
19322          }
19323          else {
19324            $block = 5; break;
19325          }
19326          break;
19327        }
19328        case 5: {
19329          $t15_16 = errUnexpectedEOF.$get();
19330          return $t15_16;
19331          break;
19332        }
19333        case 6: {
19334          $t16_17 = $t13_14;
19335          $t17_18 = { $get() { return ri.$get().cipherSuite; }, $set(v) { const obj = ri.$get(); obj.cipherSuite = v; ri.$set(obj); } };
19336          $t17_18.$set($t16_17);
19337          $t18_19 = unmarshalExtensionVec(r);
19338          $t19_20 = $t18_19[0];
19339          $t20_21 = $t18_19[1];
19340          $t21_22 = ($t20_21 !== null);
19341          if ($t21_22) {
19342            $block = 7; break;
19343          }
19344          else {
19345            $block = 8; break;
19346          }
19347          break;
19348        }
19349        case 7: {
19350          return $t20_21;
19351          break;
19352        }
19353        case 8: {
19354          $t22_23 = { $get() { return ri.$get().extensions; }, $set(v) { const obj = ri.$get(); obj.extensions = v; ri.$set(obj); } };
19355          $t22_23.$set($t19_20);
19356          return null;
19357          break;
19358        }
19359      }
19360    }
19361  }
19362  
19363  $rt.types.getType('smesh.lol/web/common/mls.reInit')?.methods?.set('unmarshal', reInit$unmarshal);
19364  export function externalInit$marshal(ei, w) {
19365    let $t0_1, $t1_2, $t2_3;
19366    $t0_1 = { $get() { return ei.$get().kemOutput; }, $set(v) { const obj = ei.$get(); obj.kemOutput = v; ei.$set(obj); } };
19367    $t1_2 = $t0_1.$get();
19368    $t2_3 = Writer$writeOpaqueVec(w, $t1_2);
19369    return;
19370  }
19371  
19372  $rt.types.getType('smesh.lol/web/common/mls.externalInit')?.methods?.set('marshal', externalInit$marshal);
19373  export function externalInit$unmarshal(ei, r) {
19374    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
19375    let $block = 0;
19376    while (true) {
19377      switch ($block) {
19378        case 0: {
19379          ei.$set($rt.builtin.cloneValue({ kemOutput: null }));
19380          $t0_1 = Reader$readOpaqueVec(r);
19381          $t1_2 = $t0_1[0];
19382          $t2_3 = { $get() { return ei.$get().kemOutput; }, $set(v) { const obj = ei.$get(); obj.kemOutput = v; ei.$set(obj); } };
19383          $t2_3.$set($t1_2);
19384          $t3_4 = $t0_1[1];
19385          if ($t3_4) {
19386            $block = 2; break;
19387          }
19388          else {
19389            $block = 1; break;
19390          }
19391          break;
19392        }
19393        case 1: {
19394          $t4_5 = errUnexpectedEOF.$get();
19395          return $t4_5;
19396          break;
19397        }
19398        case 2: {
19399          return null;
19400          break;
19401        }
19402      }
19403    }
19404  }
19405  
19406  $rt.types.getType('smesh.lol/web/common/mls.externalInit')?.methods?.set('unmarshal', externalInit$unmarshal);
19407  export function groupContextExtensions$marshal(exts, w) {
19408    let $t0_1, $t1_2, $t2_3;
19409    $t0_1 = { $get() { return exts.$get().extensions; }, $set(v) { const obj = exts.$get(); obj.extensions = v; exts.$set(obj); } };
19410    $t1_2 = $t0_1.$get();
19411    $t2_3 = marshalExtensionVec(w, $t1_2);
19412    return;
19413  }
19414  
19415  $rt.types.getType('smesh.lol/web/common/mls.groupContextExtensions')?.methods?.set('marshal', groupContextExtensions$marshal);
19416  export function groupContextExtensions$unmarshal(exts, r) {
19417    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
19418    let $block = 0;
19419    while (true) {
19420      switch ($block) {
19421        case 0: {
19422          exts.$set($rt.builtin.cloneValue({ extensions: null }));
19423          $t0_1 = unmarshalExtensionVec(r);
19424          $t1_2 = $t0_1[0];
19425          $t2_3 = $t0_1[1];
19426          $t3_4 = ($t2_3 !== null);
19427          if ($t3_4) {
19428            $block = 1; break;
19429          }
19430          else {
19431            $block = 2; break;
19432          }
19433          break;
19434        }
19435        case 1: {
19436          return $t2_3;
19437          break;
19438        }
19439        case 2: {
19440          $t4_5 = { $get() { return exts.$get().extensions; }, $set(v) { const obj = exts.$get(); obj.extensions = v; exts.$set(obj); } };
19441          $t4_5.$set($t1_2);
19442          return null;
19443          break;
19444        }
19445      }
19446    }
19447  }
19448  
19449  $rt.types.getType('smesh.lol/web/common/mls.groupContextExtensions')?.methods?.set('unmarshal', groupContextExtensions$unmarshal);
19450  export function proposalOrRefType$marshal(t, w) {
19451    let $t0_1, $t1_2;
19452    $t0_1 = t;
19453    $t1_2 = Writer$addByte(w, $t0_1);
19454    return;
19455  }
19456  
19457  $rt.types.getType('smesh.lol/web/common/mls.proposalOrRefType')?.methods?.set('marshal', proposalOrRefType$marshal);
19458  export function proposalOrRefType$unmarshal(t, r) {
19459    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
19460    let $block = 0;
19461    while (true) {
19462      switch ($block) {
19463        case 0: {
19464          $t0_1 = Reader$readByte(r);
19465          $t1_2 = $t0_1[0];
19466          $t2_3 = $t0_1[1];
19467          if ($t2_3) {
19468            $block = 2; break;
19469          }
19470          else {
19471            $block = 1; break;
19472          }
19473          break;
19474        }
19475        case 1: {
19476          $t3_4 = errUnexpectedEOF.$get();
19477          return $t3_4;
19478          break;
19479        }
19480        case 2: {
19481          $t4_5 = $t1_2;
19482          t.$set($t4_5);
19483          $t5_6 = t.$get();
19484          $t6_7 = ($t5_6 === 1);
19485          if ($t6_7) {
19486            $block = 3; break;
19487          }
19488          else {
19489            $block = 4; break;
19490          }
19491          break;
19492        }
19493        case 3: {
19494          return null;
19495          break;
19496        }
19497        case 4: {
19498          $t7_8 = ($t5_6 === 2);
19499          if ($t7_8) {
19500            $block = 3; break;
19501          }
19502          else {
19503            $block = 5; break;
19504          }
19505          break;
19506        }
19507        case 5: {
19508          $t8_9 = errInvalidProposalOrRefType.$get();
19509          return $t8_9;
19510          break;
19511        }
19512      }
19513    }
19514  }
19515  
19516  $rt.types.getType('smesh.lol/web/common/mls.proposalOrRefType')?.methods?.set('unmarshal', proposalOrRefType$unmarshal);
19517  export function proposalRef$equal(ref, other) {
19518    let $t0_1, $t1_2, $t2_3;
19519    $t0_1 = ref;
19520    $t1_2 = other;
19521    $t2_3 = bytesEqual($t0_1, $t1_2);
19522    return $t2_3;
19523  }
19524  
19525  $rt.types.getType('smesh.lol/web/common/mls.proposalRef')?.methods?.set('equal', proposalRef$equal);
19526  export function proposalOrRef$marshal(por, w) {
19527    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
19528    let $block = 0;
19529    while (true) {
19530      switch ($block) {
19531        case 0: {
19532          $t0_1 = { $get() { return por.$get().typ; }, $set(v) { const obj = por.$get(); obj.typ = v; por.$set(obj); } };
19533          $t1_2 = $t0_1.$get();
19534          $t2_3 = proposalOrRefType$marshal($t1_2, w);
19535          $t3_4 = { $get() { return por.$get().typ; }, $set(v) { const obj = por.$get(); obj.typ = v; por.$set(obj); } };
19536          $t4_5 = $t3_4.$get();
19537          $t5_6 = ($t4_5 === 1);
19538          if ($t5_6) {
19539            $block = 2; break;
19540          }
19541          else {
19542            $block = 4; break;
19543          }
19544          break;
19545        }
19546        case 1: {
19547          return;
19548          break;
19549        }
19550        case 2: {
19551          $t6_7 = { $get() { return por.$get().proposal; }, $set(v) { const obj = por.$get(); obj.proposal = v; por.$set(obj); } };
19552          $t7_8 = $t6_7.$get();
19553          $t8_9 = proposal$marshal($t7_8, w);
19554          $block = 1; break;
19555          break;
19556        }
19557        case 3: {
19558          $t9_10 = { $get() { return por.$get().reference; }, $set(v) { const obj = por.$get(); obj.reference = v; por.$set(obj); } };
19559          $t10_11 = $t9_10.$get();
19560          $t11_12 = $t10_11;
19561          $t12_13 = Writer$writeOpaqueVec(w, $t11_12);
19562          $block = 1; break;
19563          break;
19564        }
19565        case 4: {
19566          $t13_14 = ($t4_5 === 2);
19567          if ($t13_14) {
19568            $block = 3; break;
19569          }
19570          else {
19571            $block = 5; break;
19572          }
19573          break;
19574        }
19575        case 5: {
19576          $t14_15 = $rt.types.makeInterface('string', 'unreachable');
19577          $rt.runtime.panic($t14_15);
19578          break;
19579        }
19580      }
19581    }
19582  }
19583  
19584  $rt.types.getType('smesh.lol/web/common/mls.proposalOrRef')?.methods?.set('marshal', proposalOrRef$marshal);
19585  export function proposalOrRef$unmarshal(por, r) {
19586    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
19587    let $block = 0;
19588    while (true) {
19589      switch ($block) {
19590        case 0: {
19591          por.$set($rt.builtin.cloneValue({ typ: 0, proposal: null, reference: null }));
19592          $t0_1 = { $get() { return por.$get().typ; }, $set(v) { const obj = por.$get(); obj.typ = v; por.$set(obj); } };
19593          $t1_2 = proposalOrRefType$unmarshal($t0_1, r);
19594          $t2_3 = ($t1_2 !== null);
19595          if ($t2_3) {
19596            $block = 1; break;
19597          }
19598          else {
19599            $block = 2; break;
19600          }
19601          break;
19602        }
19603        case 1: {
19604          return $t1_2;
19605          break;
19606        }
19607        case 2: {
19608          $t3_4 = { $get() { return por.$get().typ; }, $set(v) { const obj = por.$get(); obj.typ = v; por.$set(obj); } };
19609          $t4_5 = $t3_4.$get();
19610          $t5_6 = ($t4_5 === 1);
19611          if ($t5_6) {
19612            $block = 3; break;
19613          }
19614          else {
19615            $block = 5; break;
19616          }
19617          break;
19618        }
19619        case 3: {
19620          $t6_7 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19621          $t7_8 = { $get() { return por.$get().proposal; }, $set(v) { const obj = por.$get(); obj.proposal = v; por.$set(obj); } };
19622          $t7_8.$set($t6_7);
19623          $t8_9 = { $get() { return por.$get().proposal; }, $set(v) { const obj = por.$get(); obj.proposal = v; por.$set(obj); } };
19624          $t9_10 = $t8_9.$get();
19625          $t10_11 = proposal$unmarshal($t9_10, r);
19626          return $t10_11;
19627          break;
19628        }
19629        case 4: {
19630          $t11_12 = Reader$readOpaqueVec(r);
19631          $t12_13 = $t11_12[0];
19632          $t13_14 = { $get() { return por.$get().reference; }, $set(v) { const obj = por.$get(); obj.reference = v; por.$set(obj); } };
19633          $t14_15 = $t12_13;
19634          $t13_14.$set($t14_15);
19635          $t15_16 = $t11_12[1];
19636          if ($t15_16) {
19637            $block = 8; break;
19638          }
19639          else {
19640            $block = 7; break;
19641          }
19642          break;
19643        }
19644        case 5: {
19645          $t16_17 = ($t4_5 === 2);
19646          if ($t16_17) {
19647            $block = 4; break;
19648          }
19649          else {
19650            $block = 6; break;
19651          }
19652          break;
19653        }
19654        case 6: {
19655          $t17_18 = $rt.types.makeInterface('string', 'unreachable');
19656          $rt.runtime.panic($t17_18);
19657          break;
19658        }
19659        case 7: {
19660          $t18_19 = errUnexpectedEOF.$get();
19661          return $t18_19;
19662          break;
19663        }
19664        case 8: {
19665          return null;
19666          break;
19667        }
19668      }
19669    }
19670  }
19671  
19672  $rt.types.getType('smesh.lol/web/common/mls.proposalOrRef')?.methods?.set('unmarshal', proposalOrRef$unmarshal);
19673  export function secretTree$deriveChildren(tree, cs, x) {
19674    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
19675    let $block = 0;
19676    while (true) {
19677      switch ($block) {
19678        case 0: {
19679          $t0_1 = nodeIndex$children(x);
19680          $t1_2 = $t0_1[0];
19681          $t2_3 = $t0_1[1];
19682          $t3_4 = $t0_1[2];
19683          if ($t3_4) {
19684            $block = 2; break;
19685          }
19686          else {
19687            $block = 1; break;
19688          }
19689          break;
19690        }
19691        case 1: {
19692          return null;
19693          break;
19694        }
19695        case 2: {
19696          $t4_5 = secretTree$get(tree, x);
19697          $t5_6 = CipherSuite$ExtractSize(cs);
19698          $t6_7 = ($t5_6 & 0xFFFF);
19699          $t7_8 = CipherSuite$expandWithLabel(cs, $t4_5, 'tree', 'left', $t6_7);
19700          $t8_9 = $t7_8[0];
19701          $t9_10 = $t7_8[1];
19702          $t10_11 = ($t9_10 !== null);
19703          if ($t10_11) {
19704            $block = 3; break;
19705          }
19706          else {
19707            $block = 4; break;
19708          }
19709          break;
19710        }
19711        case 3: {
19712          return $t9_10;
19713          break;
19714        }
19715        case 4: {
19716          $t11_12 = CipherSuite$expandWithLabel(cs, $t4_5, 'tree', 'right', $t6_7);
19717          $t12_13 = $t11_12[0];
19718          $t13_14 = $t11_12[1];
19719          $t14_15 = ($t13_14 !== null);
19720          if ($t14_15) {
19721            $block = 5; break;
19722          }
19723          else {
19724            $block = 6; break;
19725          }
19726          break;
19727        }
19728        case 5: {
19729          return $t13_14;
19730          break;
19731        }
19732        case 6: {
19733          $t15_16 = secretTree$set(tree, $t1_2, $t8_9);
19734          $t16_17 = secretTree$set(tree, $t2_3, $t12_13);
19735          $t17_18 = secretTree$deriveChildren(tree, cs, $t1_2);
19736          $t18_19 = ($t17_18 !== null);
19737          if ($t18_19) {
19738            $block = 7; break;
19739          }
19740          else {
19741            $block = 8; break;
19742          }
19743          break;
19744        }
19745        case 7: {
19746          return $t17_18;
19747          break;
19748        }
19749        case 8: {
19750          $t19_20 = secretTree$deriveChildren(tree, cs, $t2_3);
19751          return $t19_20;
19752          break;
19753        }
19754      }
19755    }
19756  }
19757  
19758  $rt.types.getType('smesh.lol/web/common/mls.secretTree')?.methods?.set('deriveChildren', secretTree$deriveChildren);
19759  export function secretTree$deriveRatchetRoot(tree, cs, ni, label) {
19760    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
19761    $t0_1 = CipherSuite$ExtractSize(cs);
19762    $t1_2 = ($t0_1 & 0xFFFF);
19763    $t2_3 = secretTree$get(tree, ni);
19764    $t3_4 = label;
19765    $t4_5 = CipherSuite$expandWithLabel(cs, $t2_3, $t3_4, null, $t1_2);
19766    $t5_6 = $t4_5[0];
19767    $t6_7 = $t4_5[1];
19768    $t7_8 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19769    $t8_9 = { $get() { return $t7_8.$get().secret; }, $set(v) { const obj = $t7_8.$get(); obj.secret = v; $t7_8.$set(obj); } };
19770    $t9_10 = { $get() { return $t7_8.$get().generation; }, $set(v) { const obj = $t7_8.$get(); obj.generation = v; $t7_8.$set(obj); } };
19771    $t8_9.$set($t5_6);
19772    $t9_10.$set(0);
19773    $t10_11 = $t7_8.$get();
19774    return [$t10_11, $t6_7];
19775  }
19776  
19777  $rt.types.getType('smesh.lol/web/common/mls.secretTree')?.methods?.set('deriveRatchetRoot', secretTree$deriveRatchetRoot);
19778  export function secretTree$get(tree, ni) {
19779    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
19780    let $block = 0;
19781    while (true) {
19782      switch ($block) {
19783        case 0: {
19784          $t0_1 = ni;
19785          $t1_2 = tree.addr($t0_1);
19786          $t2_3 = $t1_2.$get();
19787          $t3_4 = $rt.builtin.stringEqual($t2_3, null);
19788          if ($t3_4) {
19789            $block = 1; break;
19790          }
19791          else {
19792            $block = 2; break;
19793          }
19794          break;
19795        }
19796        case 1: {
19797          $t4_5 = $rt.types.makeInterface('string', 'empty node in secret tree');
19798          $rt.runtime.panic($t4_5);
19799          break;
19800        }
19801        case 2: {
19802          return $t2_3;
19803          break;
19804        }
19805      }
19806    }
19807  }
19808  
19809  $rt.types.getType('smesh.lol/web/common/mls.secretTree')?.methods?.set('get', secretTree$get);
19810  export function secretTree$set(tree, ni, secret) {
19811    let $t0_1, $t1_2;
19812    $t0_1 = ni;
19813    $t1_2 = tree.addr($t0_1);
19814    $t1_2.$set(secret);
19815    return;
19816  }
19817  
19818  $rt.types.getType('smesh.lol/web/common/mls.secretTree')?.methods?.set('set', secretTree$set);
19819  export function ratchetSecret$deriveKey(secret, cs) {
19820    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
19821    $t0_1 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19822    $t0_1.$set($rt.builtin.cloneValue(secret));
19823    $t1_2 = { $get() { return $t0_1.$get().secret; }, $set(v) { const obj = $t0_1.$get(); obj.secret = v; $t0_1.$set(obj); } };
19824    $t2_3 = $t1_2.$get();
19825    $t3_4 = { $get() { return $t0_1.$get().generation; }, $set(v) { const obj = $t0_1.$get(); obj.generation = v; $t0_1.$set(obj); } };
19826    $t4_5 = $t3_4.$get();
19827    $t5_6 = CipherSuite$AEADKeySize(cs);
19828    $t6_7 = ($t5_6 & 0xFFFF);
19829    $t7_8 = deriveTreeSecret(cs, $t2_3, 'key', $t4_5, $t6_7);
19830    $t8_9 = $t7_8[0];
19831    $t9_10 = $t7_8[1];
19832    return [$t8_9, $t9_10];
19833  }
19834  
19835  $rt.types.getType('smesh.lol/web/common/mls.ratchetSecret')?.methods?.set('deriveKey', ratchetSecret$deriveKey);
19836  export function ratchetSecret$deriveNext(secret, cs) {
19837    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
19838    $t0_1 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19839    $t0_1.$set($rt.builtin.cloneValue(secret));
19840    $t1_2 = CipherSuite$ExtractSize(cs);
19841    $t2_3 = ($t1_2 & 0xFFFF);
19842    $t3_4 = { $get() { return $t0_1.$get().secret; }, $set(v) { const obj = $t0_1.$get(); obj.secret = v; $t0_1.$set(obj); } };
19843    $t4_5 = $t3_4.$get();
19844    $t5_6 = { $get() { return $t0_1.$get().generation; }, $set(v) { const obj = $t0_1.$get(); obj.generation = v; $t0_1.$set(obj); } };
19845    $t6_7 = $t5_6.$get();
19846    $t7_8 = deriveTreeSecret(cs, $t4_5, 'secret', $t6_7, $t2_3);
19847    $t8_9 = $t7_8[0];
19848    $t9_10 = $t7_8[1];
19849    $t10_11 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19850    $t11_12 = { $get() { return $t10_11.$get().secret; }, $set(v) { const obj = $t10_11.$get(); obj.secret = v; $t10_11.$set(obj); } };
19851    $t12_13 = { $get() { return $t10_11.$get().generation; }, $set(v) { const obj = $t10_11.$get(); obj.generation = v; $t10_11.$set(obj); } };
19852    $t13_14 = { $get() { return $t0_1.$get().generation; }, $set(v) { const obj = $t0_1.$get(); obj.generation = v; $t0_1.$set(obj); } };
19853    $t14_15 = $t13_14.$get();
19854    $t15_16 = (($t14_15 + 1) >>> 0);
19855    $t11_12.$set($t8_9);
19856    $t12_13.$set($t15_16);
19857    $t16_17 = $t10_11.$get();
19858    return [$t16_17, $t9_10];
19859  }
19860  
19861  $rt.types.getType('smesh.lol/web/common/mls.ratchetSecret')?.methods?.set('deriveNext', ratchetSecret$deriveNext);
19862  export function ratchetSecret$deriveNonce(secret, cs) {
19863    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
19864    $t0_1 = { $value: { secret: null, generation: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19865    $t0_1.$set($rt.builtin.cloneValue(secret));
19866    $t1_2 = { $get() { return $t0_1.$get().secret; }, $set(v) { const obj = $t0_1.$get(); obj.secret = v; $t0_1.$set(obj); } };
19867    $t2_3 = $t1_2.$get();
19868    $t3_4 = { $get() { return $t0_1.$get().generation; }, $set(v) { const obj = $t0_1.$get(); obj.generation = v; $t0_1.$set(obj); } };
19869    $t4_5 = $t3_4.$get();
19870    $t5_6 = CipherSuite$AEADNonceSize(cs);
19871    $t6_7 = ($t5_6 & 0xFFFF);
19872    $t7_8 = deriveTreeSecret(cs, $t2_3, 'nonce', $t4_5, $t6_7);
19873    $t8_9 = $t7_8[0];
19874    $t9_10 = $t7_8[1];
19875    return [$t8_9, $t9_10];
19876  }
19877  
19878  $rt.types.getType('smesh.lol/web/common/mls.ratchetSecret')?.methods?.set('deriveNonce', ratchetSecret$deriveNonce);
19879  export function parentNode$computeParentHash(node, cs, originalSiblingTreeHash) {
19880    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
19881    let $block = 0;
19882    while (true) {
19883      switch ($block) {
19884        case 0: {
19885          $t0_1 = { $get() { return node.$get().encryptionKey; }, $set(v) { const obj = node.$get(); obj.encryptionKey = v; node.$set(obj); } };
19886          $t1_2 = $t0_1.$get();
19887          $t2_3 = { $get() { return node.$get().parentHash; }, $set(v) { const obj = node.$get(); obj.parentHash = v; node.$set(obj); } };
19888          $t3_4 = $t2_3.$get();
19889          $t4_5 = marshalParentHashInput($t1_2, $t3_4, originalSiblingTreeHash);
19890          $t5_6 = $t4_5[0];
19891          $t6_7 = $t4_5[1];
19892          $t7_8 = ($t6_7 !== null);
19893          if ($t7_8) {
19894            $block = 1; break;
19895          }
19896          else {
19897            $block = 2; break;
19898          }
19899          break;
19900        }
19901        case 1: {
19902          return [null, $t6_7];
19903          break;
19904        }
19905        case 2: {
19906          $t8_9 = CipherSuite$hash(cs, $t5_6);
19907          return [$t8_9, null];
19908          break;
19909        }
19910      }
19911    }
19912  }
19913  
19914  $rt.types.getType('smesh.lol/web/common/mls.parentNode')?.methods?.set('computeParentHash', parentNode$computeParentHash);
19915  export function parentNode$marshal(node, w) {
19916    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
19917    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19918    $t0_1.$set(node);
19919    $t1_2 = $t0_1.$get();
19920    $t2_3 = { $get() { return $t1_2.$get().encryptionKey; }, $set(v) { const obj = $t1_2.$get(); obj.encryptionKey = v; $t1_2.$set(obj); } };
19921    $t3_4 = $t2_3.$get();
19922    $t4_5 = $t3_4;
19923    $t5_6 = Writer$writeOpaqueVec(w, $t4_5);
19924    $t6_7 = $t0_1.$get();
19925    $t7_8 = { $get() { return $t6_7.$get().parentHash; }, $set(v) { const obj = $t6_7.$get(); obj.parentHash = v; $t6_7.$set(obj); } };
19926    $t8_9 = $t7_8.$get();
19927    $t9_10 = Writer$writeOpaqueVec(w, $t8_9);
19928    $t10_11 = $t0_1.$get();
19929    $t11_12 = { $get() { return $t10_11.$get().unmergedLeaves; }, $set(v) { const obj = $t10_11.$get(); obj.unmergedLeaves = v; $t10_11.$set(obj); } };
19930    $t12_13 = $t11_12.$get();
19931    $t13_14 = $rt.builtin.len($t12_13);
19932    $t14_15 = parentNode$marshal$1.bind(null, $t0_1);
19933    $t15_16 = Writer$writeVector(w, $t13_14, $t14_15);
19934    return;
19935  }
19936  
19937  function parentNode$marshal$1(node, w, i) {
19938    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
19939    $t0_1 = node.$get();
19940    $t1_2 = { $get() { return $t0_1.$get().unmergedLeaves; }, $set(v) { const obj = $t0_1.$get(); obj.unmergedLeaves = v; $t0_1.$set(obj); } };
19941    $t2_3 = $t1_2.$get();
19942    $t3_4 = $t2_3.addr(i);
19943    $t4_5 = $t3_4.$get();
19944    $t5_6 = $t4_5;
19945    $t6_7 = Writer$addUint32(w, $t5_6);
19946    return;
19947  }
19948  
19949  $rt.types.getType('smesh.lol/web/common/mls.parentNode')?.methods?.set('marshal', parentNode$marshal);
19950  export function parentNode$unmarshal(node, r) {
19951    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
19952    let $block = 0;
19953    while (true) {
19954      switch ($block) {
19955        case 0: {
19956          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
19957          $t0_1.$set(node);
19958          $t1_2 = $t0_1.$get();
19959          $t1_2.$set($rt.builtin.cloneValue({ encryptionKey: null, parentHash: null, unmergedLeaves: null }));
19960          $t2_3 = $t0_1.$get();
19961          $t3_4 = Reader$readOpaqueVec(r);
19962          $t4_5 = $t3_4[0];
19963          $t5_6 = { $get() { return $t2_3.$get().encryptionKey; }, $set(v) { const obj = $t2_3.$get(); obj.encryptionKey = v; $t2_3.$set(obj); } };
19964          $t6_7 = $t4_5;
19965          $t5_6.$set($t6_7);
19966          $t7_8 = $t3_4[1];
19967          if ($t7_8) {
19968            $block = 2; break;
19969          }
19970          else {
19971            $block = 1; break;
19972          }
19973          break;
19974        }
19975        case 1: {
19976          $t8_9 = errUnexpectedEOF.$get();
19977          return $t8_9;
19978          break;
19979        }
19980        case 2: {
19981          $t9_10 = $t0_1.$get();
19982          $t10_11 = Reader$readOpaqueVec(r);
19983          $t11_12 = $t10_11[0];
19984          $t12_13 = { $get() { return $t9_10.$get().parentHash; }, $set(v) { const obj = $t9_10.$get(); obj.parentHash = v; $t9_10.$set(obj); } };
19985          $t12_13.$set($t11_12);
19986          $t13_14 = $t10_11[1];
19987          if ($t13_14) {
19988            $block = 4; break;
19989          }
19990          else {
19991            $block = 3; break;
19992          }
19993          break;
19994        }
19995        case 3: {
19996          $t14_15 = errUnexpectedEOF.$get();
19997          return $t14_15;
19998          break;
19999        }
20000        case 4: {
20001          $t15_16 = parentNode$unmarshal$1.bind(null, $t0_1);
20002          $t16_17 = Reader$readVector(r, $t15_16);
20003          return $t16_17;
20004          break;
20005        }
20006      }
20007    }
20008  }
20009  
20010  function parentNode$unmarshal$1(node, r) {
20011    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20012    let $block = 0;
20013    while (true) {
20014      switch ($block) {
20015        case 0: {
20016          $t0_1 = Reader$readUint32(r);
20017          $t1_2 = $t0_1[0];
20018          $t2_3 = $t0_1[1];
20019          if ($t2_3) {
20020            $block = 2; break;
20021          }
20022          else {
20023            $block = 1; break;
20024          }
20025          break;
20026        }
20027        case 1: {
20028          $t3_4 = errUnexpectedEOF.$get();
20029          return $t3_4;
20030          break;
20031        }
20032        case 2: {
20033          $t4_5 = node.$get();
20034          $t5_6 = node.$get();
20035          $t6_7 = { $get() { return $t5_6.$get().unmergedLeaves; }, $set(v) { const obj = $t5_6.$get(); obj.unmergedLeaves = v; $t5_6.$set(obj); } };
20036          $t7_8 = $t6_7.$get();
20037          $t8_9 = $t1_2;
20038          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
20039          $t10_11 = $t9_10.$get().addr(0);
20040          $t10_11.$set($t8_9);
20041          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
20042          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
20043          $t13_14 = { $get() { return $t4_5.$get().unmergedLeaves; }, $set(v) { const obj = $t4_5.$get(); obj.unmergedLeaves = v; $t4_5.$set(obj); } };
20044          $t13_14.$set($t12_13);
20045          return null;
20046          break;
20047        }
20048      }
20049    }
20050  }
20051  
20052  $rt.types.getType('smesh.lol/web/common/mls.parentNode')?.methods?.set('unmarshal', parentNode$unmarshal);
20053  export function leafNodeSource$marshal(src, w) {
20054    let $t0_1, $t1_2;
20055    $t0_1 = src;
20056    $t1_2 = Writer$addByte(w, $t0_1);
20057    return;
20058  }
20059  
20060  $rt.types.getType('smesh.lol/web/common/mls.leafNodeSource')?.methods?.set('marshal', leafNodeSource$marshal);
20061  export function leafNodeSource$unmarshal(src, r) {
20062    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
20063    let $block = 0;
20064    while (true) {
20065      switch ($block) {
20066        case 0: {
20067          $t0_1 = Reader$readByte(r);
20068          $t1_2 = $t0_1[0];
20069          $t2_3 = $t0_1[1];
20070          if ($t2_3) {
20071            $block = 2; break;
20072          }
20073          else {
20074            $block = 1; break;
20075          }
20076          break;
20077        }
20078        case 1: {
20079          $t3_4 = errUnexpectedEOF.$get();
20080          return $t3_4;
20081          break;
20082        }
20083        case 2: {
20084          $t4_5 = $t1_2;
20085          src.$set($t4_5);
20086          $t5_6 = src.$get();
20087          $t6_7 = ($t5_6 === 1);
20088          if ($t6_7) {
20089            $block = 3; break;
20090          }
20091          else {
20092            $block = 4; break;
20093          }
20094          break;
20095        }
20096        case 3: {
20097          return null;
20098          break;
20099        }
20100        case 4: {
20101          $t7_8 = ($t5_6 === 2);
20102          if ($t7_8) {
20103            $block = 3; break;
20104          }
20105          else {
20106            $block = 5; break;
20107          }
20108          break;
20109        }
20110        case 5: {
20111          $t8_9 = ($t5_6 === 3);
20112          if ($t8_9) {
20113            $block = 3; break;
20114          }
20115          else {
20116            $block = 6; break;
20117          }
20118          break;
20119        }
20120        case 6: {
20121          $t9_10 = errInvalidLeafNodeSource.$get();
20122          return $t9_10;
20123          break;
20124        }
20125      }
20126    }
20127  }
20128  
20129  $rt.types.getType('smesh.lol/web/common/mls.leafNodeSource')?.methods?.set('unmarshal', leafNodeSource$unmarshal);
20130  export function capabilities$marshal(caps, w) {
20131    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31;
20132    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
20133    $t0_1.$set(caps);
20134    $t1_2 = $t0_1.$get();
20135    $t2_3 = { $get() { return $t1_2.$get().versions; }, $set(v) { const obj = $t1_2.$get(); obj.versions = v; $t1_2.$set(obj); } };
20136    $t3_4 = $t2_3.$get();
20137    $t4_5 = $rt.builtin.len($t3_4);
20138    $t5_6 = capabilities$marshal$1.bind(null, $t0_1);
20139    $t6_7 = Writer$writeVector(w, $t4_5, $t5_6);
20140    $t7_8 = $t0_1.$get();
20141    $t8_9 = { $get() { return $t7_8.$get().cipherSuites; }, $set(v) { const obj = $t7_8.$get(); obj.cipherSuites = v; $t7_8.$set(obj); } };
20142    $t9_10 = $t8_9.$get();
20143    $t10_11 = $rt.builtin.len($t9_10);
20144    $t11_12 = capabilities$marshal$2.bind(null, $t0_1);
20145    $t12_13 = Writer$writeVector(w, $t10_11, $t11_12);
20146    $t13_14 = $t0_1.$get();
20147    $t14_15 = { $get() { return $t13_14.$get().extensions; }, $set(v) { const obj = $t13_14.$get(); obj.extensions = v; $t13_14.$set(obj); } };
20148    $t15_16 = $t14_15.$get();
20149    $t16_17 = $rt.builtin.len($t15_16);
20150    $t17_18 = capabilities$marshal$3.bind(null, $t0_1);
20151    $t18_19 = Writer$writeVector(w, $t16_17, $t17_18);
20152    $t19_20 = $t0_1.$get();
20153    $t20_21 = { $get() { return $t19_20.$get().proposals; }, $set(v) { const obj = $t19_20.$get(); obj.proposals = v; $t19_20.$set(obj); } };
20154    $t21_22 = $t20_21.$get();
20155    $t22_23 = $rt.builtin.len($t21_22);
20156    $t23_24 = capabilities$marshal$4.bind(null, $t0_1);
20157    $t24_25 = Writer$writeVector(w, $t22_23, $t23_24);
20158    $t25_26 = $t0_1.$get();
20159    $t26_27 = { $get() { return $t25_26.$get().credentials; }, $set(v) { const obj = $t25_26.$get(); obj.credentials = v; $t25_26.$set(obj); } };
20160    $t27_28 = $t26_27.$get();
20161    $t28_29 = $rt.builtin.len($t27_28);
20162    $t29_30 = capabilities$marshal$5.bind(null, $t0_1);
20163    $t30_31 = Writer$writeVector(w, $t28_29, $t29_30);
20164    return;
20165  }
20166  
20167  function capabilities$marshal$1(caps, w, i) {
20168    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
20169    $t0_1 = caps.$get();
20170    $t1_2 = { $get() { return $t0_1.$get().versions; }, $set(v) { const obj = $t0_1.$get(); obj.versions = v; $t0_1.$set(obj); } };
20171    $t2_3 = $t1_2.$get();
20172    $t3_4 = $t2_3.addr(i);
20173    $t4_5 = $t3_4.$get();
20174    $t5_6 = $t4_5;
20175    $t6_7 = Writer$addUint16(w, $t5_6);
20176    return;
20177  }
20178  
20179  function capabilities$marshal$2(caps, w, i) {
20180    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
20181    $t0_1 = caps.$get();
20182    $t1_2 = { $get() { return $t0_1.$get().cipherSuites; }, $set(v) { const obj = $t0_1.$get(); obj.cipherSuites = v; $t0_1.$set(obj); } };
20183    $t2_3 = $t1_2.$get();
20184    $t3_4 = $t2_3.addr(i);
20185    $t4_5 = $t3_4.$get();
20186    $t5_6 = $t4_5;
20187    $t6_7 = Writer$addUint16(w, $t5_6);
20188    return;
20189  }
20190  
20191  function capabilities$marshal$3(caps, w, i) {
20192    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
20193    $t0_1 = caps.$get();
20194    $t1_2 = { $get() { return $t0_1.$get().extensions; }, $set(v) { const obj = $t0_1.$get(); obj.extensions = v; $t0_1.$set(obj); } };
20195    $t2_3 = $t1_2.$get();
20196    $t3_4 = $t2_3.addr(i);
20197    $t4_5 = $t3_4.$get();
20198    $t5_6 = $t4_5;
20199    $t6_7 = Writer$addUint16(w, $t5_6);
20200    return;
20201  }
20202  
20203  function capabilities$marshal$4(caps, w, i) {
20204    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
20205    $t0_1 = caps.$get();
20206    $t1_2 = { $get() { return $t0_1.$get().proposals; }, $set(v) { const obj = $t0_1.$get(); obj.proposals = v; $t0_1.$set(obj); } };
20207    $t2_3 = $t1_2.$get();
20208    $t3_4 = $t2_3.addr(i);
20209    $t4_5 = $t3_4.$get();
20210    $t5_6 = $t4_5;
20211    $t6_7 = Writer$addUint16(w, $t5_6);
20212    return;
20213  }
20214  
20215  function capabilities$marshal$5(caps, w, i) {
20216    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
20217    $t0_1 = caps.$get();
20218    $t1_2 = { $get() { return $t0_1.$get().credentials; }, $set(v) { const obj = $t0_1.$get(); obj.credentials = v; $t0_1.$set(obj); } };
20219    $t2_3 = $t1_2.$get();
20220    $t3_4 = $t2_3.addr(i);
20221    $t4_5 = $t3_4.$get();
20222    $t5_6 = $t4_5;
20223    $t6_7 = Writer$addUint16(w, $t5_6);
20224    return;
20225  }
20226  
20227  $rt.types.getType('smesh.lol/web/common/mls.capabilities')?.methods?.set('marshal', capabilities$marshal);
20228  export function capabilities$unmarshal(caps, r) {
20229    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
20230    let $block = 0;
20231    while (true) {
20232      switch ($block) {
20233        case 0: {
20234          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
20235          $t0_1.$set(caps);
20236          $t1_2 = $t0_1.$get();
20237          $t1_2.$set($rt.builtin.cloneValue({ versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }));
20238          $t2_3 = capabilities$unmarshal$1.bind(null, $t0_1);
20239          $t3_4 = Reader$readVector(r, $t2_3);
20240          $t4_5 = ($t3_4 !== null);
20241          if ($t4_5) {
20242            $block = 1; break;
20243          }
20244          else {
20245            $block = 2; break;
20246          }
20247          break;
20248        }
20249        case 1: {
20250          return $t3_4;
20251          break;
20252        }
20253        case 2: {
20254          $t5_6 = capabilities$unmarshal$2.bind(null, $t0_1);
20255          $t6_7 = Reader$readVector(r, $t5_6);
20256          $t7_8 = ($t6_7 !== null);
20257          if ($t7_8) {
20258            $block = 3; break;
20259          }
20260          else {
20261            $block = 4; break;
20262          }
20263          break;
20264        }
20265        case 3: {
20266          return $t6_7;
20267          break;
20268        }
20269        case 4: {
20270          $t8_9 = capabilities$unmarshal$3.bind(null, $t0_1);
20271          $t9_10 = Reader$readVector(r, $t8_9);
20272          $t10_11 = ($t9_10 !== null);
20273          if ($t10_11) {
20274            $block = 5; break;
20275          }
20276          else {
20277            $block = 6; break;
20278          }
20279          break;
20280        }
20281        case 5: {
20282          return $t9_10;
20283          break;
20284        }
20285        case 6: {
20286          $t11_12 = capabilities$unmarshal$4.bind(null, $t0_1);
20287          $t12_13 = Reader$readVector(r, $t11_12);
20288          $t13_14 = ($t12_13 !== null);
20289          if ($t13_14) {
20290            $block = 7; break;
20291          }
20292          else {
20293            $block = 8; break;
20294          }
20295          break;
20296        }
20297        case 7: {
20298          return $t12_13;
20299          break;
20300        }
20301        case 8: {
20302          $t14_15 = capabilities$unmarshal$5.bind(null, $t0_1);
20303          $t15_16 = Reader$readVector(r, $t14_15);
20304          return $t15_16;
20305          break;
20306        }
20307      }
20308    }
20309  }
20310  
20311  function capabilities$unmarshal$1(caps, r) {
20312    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20313    let $block = 0;
20314    while (true) {
20315      switch ($block) {
20316        case 0: {
20317          $t0_1 = Reader$readUint16(r);
20318          $t1_2 = $t0_1[0];
20319          $t2_3 = $t0_1[1];
20320          if ($t2_3) {
20321            $block = 2; break;
20322          }
20323          else {
20324            $block = 1; break;
20325          }
20326          break;
20327        }
20328        case 1: {
20329          $t3_4 = errUnexpectedEOF.$get();
20330          return $t3_4;
20331          break;
20332        }
20333        case 2: {
20334          $t4_5 = caps.$get();
20335          $t5_6 = caps.$get();
20336          $t6_7 = { $get() { return $t5_6.$get().versions; }, $set(v) { const obj = $t5_6.$get(); obj.versions = v; $t5_6.$set(obj); } };
20337          $t7_8 = $t6_7.$get();
20338          $t8_9 = $t1_2;
20339          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
20340          $t10_11 = $t9_10.$get().addr(0);
20341          $t10_11.$set($t8_9);
20342          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
20343          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
20344          $t13_14 = { $get() { return $t4_5.$get().versions; }, $set(v) { const obj = $t4_5.$get(); obj.versions = v; $t4_5.$set(obj); } };
20345          $t13_14.$set($t12_13);
20346          return null;
20347          break;
20348        }
20349      }
20350    }
20351  }
20352  
20353  function capabilities$unmarshal$2(caps, r) {
20354    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20355    let $block = 0;
20356    while (true) {
20357      switch ($block) {
20358        case 0: {
20359          $t0_1 = Reader$readUint16(r);
20360          $t1_2 = $t0_1[0];
20361          $t2_3 = $t0_1[1];
20362          if ($t2_3) {
20363            $block = 2; break;
20364          }
20365          else {
20366            $block = 1; break;
20367          }
20368          break;
20369        }
20370        case 1: {
20371          $t3_4 = errUnexpectedEOF.$get();
20372          return $t3_4;
20373          break;
20374        }
20375        case 2: {
20376          $t4_5 = caps.$get();
20377          $t5_6 = caps.$get();
20378          $t6_7 = { $get() { return $t5_6.$get().cipherSuites; }, $set(v) { const obj = $t5_6.$get(); obj.cipherSuites = v; $t5_6.$set(obj); } };
20379          $t7_8 = $t6_7.$get();
20380          $t8_9 = $t1_2;
20381          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
20382          $t10_11 = $t9_10.$get().addr(0);
20383          $t10_11.$set($t8_9);
20384          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
20385          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
20386          $t13_14 = { $get() { return $t4_5.$get().cipherSuites; }, $set(v) { const obj = $t4_5.$get(); obj.cipherSuites = v; $t4_5.$set(obj); } };
20387          $t13_14.$set($t12_13);
20388          return null;
20389          break;
20390        }
20391      }
20392    }
20393  }
20394  
20395  function capabilities$unmarshal$3(caps, r) {
20396    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20397    let $block = 0;
20398    while (true) {
20399      switch ($block) {
20400        case 0: {
20401          $t0_1 = Reader$readUint16(r);
20402          $t1_2 = $t0_1[0];
20403          $t2_3 = $t0_1[1];
20404          if ($t2_3) {
20405            $block = 2; break;
20406          }
20407          else {
20408            $block = 1; break;
20409          }
20410          break;
20411        }
20412        case 1: {
20413          $t3_4 = errUnexpectedEOF.$get();
20414          return $t3_4;
20415          break;
20416        }
20417        case 2: {
20418          $t4_5 = caps.$get();
20419          $t5_6 = caps.$get();
20420          $t6_7 = { $get() { return $t5_6.$get().extensions; }, $set(v) { const obj = $t5_6.$get(); obj.extensions = v; $t5_6.$set(obj); } };
20421          $t7_8 = $t6_7.$get();
20422          $t8_9 = $t1_2;
20423          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
20424          $t10_11 = $t9_10.$get().addr(0);
20425          $t10_11.$set($t8_9);
20426          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
20427          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
20428          $t13_14 = { $get() { return $t4_5.$get().extensions; }, $set(v) { const obj = $t4_5.$get(); obj.extensions = v; $t4_5.$set(obj); } };
20429          $t13_14.$set($t12_13);
20430          return null;
20431          break;
20432        }
20433      }
20434    }
20435  }
20436  
20437  function capabilities$unmarshal$4(caps, r) {
20438    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20439    let $block = 0;
20440    while (true) {
20441      switch ($block) {
20442        case 0: {
20443          $t0_1 = Reader$readUint16(r);
20444          $t1_2 = $t0_1[0];
20445          $t2_3 = $t0_1[1];
20446          if ($t2_3) {
20447            $block = 2; break;
20448          }
20449          else {
20450            $block = 1; break;
20451          }
20452          break;
20453        }
20454        case 1: {
20455          $t3_4 = errUnexpectedEOF.$get();
20456          return $t3_4;
20457          break;
20458        }
20459        case 2: {
20460          $t4_5 = caps.$get();
20461          $t5_6 = caps.$get();
20462          $t6_7 = { $get() { return $t5_6.$get().proposals; }, $set(v) { const obj = $t5_6.$get(); obj.proposals = v; $t5_6.$set(obj); } };
20463          $t7_8 = $t6_7.$get();
20464          $t8_9 = $t1_2;
20465          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
20466          $t10_11 = $t9_10.$get().addr(0);
20467          $t10_11.$set($t8_9);
20468          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
20469          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
20470          $t13_14 = { $get() { return $t4_5.$get().proposals; }, $set(v) { const obj = $t4_5.$get(); obj.proposals = v; $t4_5.$set(obj); } };
20471          $t13_14.$set($t12_13);
20472          return null;
20473          break;
20474        }
20475      }
20476    }
20477  }
20478  
20479  function capabilities$unmarshal$5(caps, r) {
20480    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20481    let $block = 0;
20482    while (true) {
20483      switch ($block) {
20484        case 0: {
20485          $t0_1 = Reader$readUint16(r);
20486          $t1_2 = $t0_1[0];
20487          $t2_3 = $t0_1[1];
20488          if ($t2_3) {
20489            $block = 2; break;
20490          }
20491          else {
20492            $block = 1; break;
20493          }
20494          break;
20495        }
20496        case 1: {
20497          $t3_4 = errUnexpectedEOF.$get();
20498          return $t3_4;
20499          break;
20500        }
20501        case 2: {
20502          $t4_5 = caps.$get();
20503          $t5_6 = caps.$get();
20504          $t6_7 = { $get() { return $t5_6.$get().credentials; }, $set(v) { const obj = $t5_6.$get(); obj.credentials = v; $t5_6.$set(obj); } };
20505          $t7_8 = $t6_7.$get();
20506          $t8_9 = $t1_2;
20507          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
20508          $t10_11 = $t9_10.$get().addr(0);
20509          $t10_11.$set($t8_9);
20510          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
20511          $t12_13 = $rt.builtin.appendSlice($t7_8, $t11_12);
20512          $t13_14 = { $get() { return $t4_5.$get().credentials; }, $set(v) { const obj = $t4_5.$get(); obj.credentials = v; $t4_5.$set(obj); } };
20513          $t13_14.$set($t12_13);
20514          return null;
20515          break;
20516        }
20517      }
20518    }
20519  }
20520  
20521  $rt.types.getType('smesh.lol/web/common/mls.capabilities')?.methods?.set('unmarshal', capabilities$unmarshal);
20522  export function lifetime$marshal(lt, w) {
20523    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
20524    $t0_1 = { $get() { return lt.$get().notBefore; }, $set(v) { const obj = lt.$get(); obj.notBefore = v; lt.$set(obj); } };
20525    $t1_2 = $t0_1.$get();
20526    $t2_3 = Writer$addUint64(w, $t1_2);
20527    $t3_4 = { $get() { return lt.$get().notAfter; }, $set(v) { const obj = lt.$get(); obj.notAfter = v; lt.$set(obj); } };
20528    $t4_5 = $t3_4.$get();
20529    $t5_6 = Writer$addUint64(w, $t4_5);
20530    return;
20531  }
20532  
20533  $rt.types.getType('smesh.lol/web/common/mls.lifetime')?.methods?.set('marshal', lifetime$marshal);
20534  export function lifetime$unmarshal(lt, r) {
20535    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
20536    let $block = 0;
20537    while (true) {
20538      switch ($block) {
20539        case 0: {
20540          lt.$set($rt.builtin.cloneValue({ notBefore: 0n, notAfter: 0n }));
20541          $t0_1 = Reader$readUint64(r);
20542          $t1_2 = $t0_1[0];
20543          $t2_3 = { $get() { return lt.$get().notBefore; }, $set(v) { const obj = lt.$get(); obj.notBefore = v; lt.$set(obj); } };
20544          $t2_3.$set($t1_2);
20545          $t3_4 = $t0_1[1];
20546          if ($t3_4) {
20547            $block = 2; break;
20548          }
20549          else {
20550            $block = 1; break;
20551          }
20552          break;
20553        }
20554        case 1: {
20555          $t4_5 = errUnexpectedEOF.$get();
20556          return $t4_5;
20557          break;
20558        }
20559        case 2: {
20560          $t5_6 = Reader$readUint64(r);
20561          $t6_7 = $t5_6[0];
20562          $t7_8 = { $get() { return lt.$get().notAfter; }, $set(v) { const obj = lt.$get(); obj.notAfter = v; lt.$set(obj); } };
20563          $t7_8.$set($t6_7);
20564          $t8_9 = $t5_6[1];
20565          if ($t8_9) {
20566            $block = 4; break;
20567          }
20568          else {
20569            $block = 3; break;
20570          }
20571          break;
20572        }
20573        case 3: {
20574          $t9_10 = errUnexpectedEOF.$get();
20575          return $t9_10;
20576          break;
20577        }
20578        case 4: {
20579          return null;
20580          break;
20581        }
20582      }
20583    }
20584  }
20585  
20586  $rt.types.getType('smesh.lol/web/common/mls.lifetime')?.methods?.set('unmarshal', lifetime$unmarshal);
20587  export function lifetime$verifyAt(lt, nowUnix) {
20588    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
20589    let $block = 0;
20590    while (true) {
20591      switch ($block) {
20592        case 0: {
20593          $t0_1 = { $get() { return lt.$get().notBefore; }, $set(v) { const obj = lt.$get(); obj.notBefore = v; lt.$set(obj); } };
20594          $t1_2 = $t0_1.$get();
20595          $t2_3 = BigInt.asIntN(64, BigInt($t1_2));
20596          $t3_4 = { $get() { return lt.$get().notAfter; }, $set(v) { const obj = lt.$get(); obj.notAfter = v; lt.$set(obj); } };
20597          $t4_5 = $t3_4.$get();
20598          $t5_6 = BigInt.asIntN(64, BigInt($t4_5));
20599          $t6_7 = BigInt.asIntN(64, $t5_6 - $t2_3);
20600          $t7_8 = ($t6_7 <= 0n);
20601          if ($t7_8) {
20602            $block = 1; break;
20603          }
20604          else {
20605            $block = 3; break;
20606          }
20607          break;
20608        }
20609        case 1: {
20610          return false;
20611          break;
20612        }
20613        case 2: {
20614          $t8_9 = (nowUnix > $t2_3);
20615          if ($t8_9) {
20616            $block = 4; break;
20617          }
20618          else {
20619            $t11_12 = false;
20620            $block = 5; break;
20621          }
20622          break;
20623        }
20624        case 3: {
20625          $t9_10 = ($t6_7 > 7776000n);
20626          if ($t9_10) {
20627            $block = 1; break;
20628          }
20629          else {
20630            $block = 2; break;
20631          }
20632          break;
20633        }
20634        case 4: {
20635          $t10_11 = ($t5_6 > nowUnix);
20636          $t11_12 = $t10_11;
20637          $block = 5; break;
20638          break;
20639        }
20640        case 5: {
20641          return $t11_12;
20642          break;
20643        }
20644      }
20645    }
20646  }
20647  
20648  $rt.types.getType('smesh.lol/web/common/mls.lifetime')?.methods?.set('verifyAt', lifetime$verifyAt);
20649  export function leafNode$marshal(node, w) {
20650    let $t0_1, $t1_2, $t2_3, $t3_4;
20651    $t0_1 = leafNode$marshalBase(node, w);
20652    $t1_2 = { $get() { return node.$get().signature; }, $set(v) { const obj = node.$get(); obj.signature = v; node.$set(obj); } };
20653    $t2_3 = $t1_2.$get();
20654    $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
20655    return;
20656  }
20657  
20658  $rt.types.getType('smesh.lol/web/common/mls.leafNode')?.methods?.set('marshal', leafNode$marshal);
20659  export function leafNode$marshalBase(node, w) {
20660    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28;
20661    let $block = 0;
20662    while (true) {
20663      switch ($block) {
20664        case 0: {
20665          $t0_1 = { $get() { return node.$get().encryptionKey; }, $set(v) { const obj = node.$get(); obj.encryptionKey = v; node.$set(obj); } };
20666          $t1_2 = $t0_1.$get();
20667          $t2_3 = $t1_2;
20668          $t3_4 = Writer$writeOpaqueVec(w, $t2_3);
20669          $t4_5 = { $get() { return node.$get().signatureKey; }, $set(v) { const obj = node.$get(); obj.signatureKey = v; node.$set(obj); } };
20670          $t5_6 = $t4_5.$get();
20671          $t6_7 = $t5_6;
20672          $t7_8 = Writer$writeOpaqueVec(w, $t6_7);
20673          $t8_9 = { $get() { return node.$get().credential; }, $set(v) { const obj = node.$get(); obj.credential = v; node.$set(obj); } };
20674          $t9_10 = Credential$marshal($t8_9, w);
20675          $t10_11 = { $get() { return node.$get().capabilities; }, $set(v) { const obj = node.$get(); obj.capabilities = v; node.$set(obj); } };
20676          $t11_12 = capabilities$marshal($t10_11, w);
20677          $t12_13 = { $get() { return node.$get().leafNodeSource; }, $set(v) { const obj = node.$get(); obj.leafNodeSource = v; node.$set(obj); } };
20678          $t13_14 = $t12_13.$get();
20679          $t14_15 = leafNodeSource$marshal($t13_14, w);
20680          $t15_16 = { $get() { return node.$get().leafNodeSource; }, $set(v) { const obj = node.$get(); obj.leafNodeSource = v; node.$set(obj); } };
20681          $t16_17 = $t15_16.$get();
20682          $t17_18 = ($t16_17 === 1);
20683          if ($t17_18) {
20684            $block = 2; break;
20685          }
20686          else {
20687            $block = 4; break;
20688          }
20689          break;
20690        }
20691        case 1: {
20692          $t18_19 = { $get() { return node.$get().extensions; }, $set(v) { const obj = node.$get(); obj.extensions = v; node.$set(obj); } };
20693          $t19_20 = $t18_19.$get();
20694          $t20_21 = marshalExtensionVec(w, $t19_20);
20695          return;
20696          break;
20697        }
20698        case 2: {
20699          $t21_22 = { $get() { return node.$get().lifetime; }, $set(v) { const obj = node.$get(); obj.lifetime = v; node.$set(obj); } };
20700          $t22_23 = $t21_22.$get();
20701          $t23_24 = lifetime$marshal($t22_23, w);
20702          $block = 1; break;
20703          break;
20704        }
20705        case 3: {
20706          $t24_25 = { $get() { return node.$get().parentHash; }, $set(v) { const obj = node.$get(); obj.parentHash = v; node.$set(obj); } };
20707          $t25_26 = $t24_25.$get();
20708          $t26_27 = Writer$writeOpaqueVec(w, $t25_26);
20709          $block = 1; break;
20710          break;
20711        }
20712        case 4: {
20713          $t27_28 = ($t16_17 === 3);
20714          if ($t27_28) {
20715            $block = 3; break;
20716          }
20717          else {
20718            $block = 1; break;
20719          }
20720          break;
20721        }
20722      }
20723    }
20724  }
20725  
20726  $rt.types.getType('smesh.lol/web/common/mls.leafNode')?.methods?.set('marshalBase', leafNode$marshalBase);
20727  export function leafNode$sign(node, cs, groupID, li, signerPriv) {
20728    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
20729    let $block = 0;
20730    while (true) {
20731      switch ($block) {
20732        case 0: {
20733          $t0_1 = { $value: { node: null, groupID: null, leafIndex: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
20734          $t1_2 = { $get() { return $t0_1.$get().node; }, $set(v) { const obj = $t0_1.$get(); obj.node = v; $t0_1.$set(obj); } };
20735          $t2_3 = { $get() { return $t0_1.$get().groupID; }, $set(v) { const obj = $t0_1.$get(); obj.groupID = v; $t0_1.$set(obj); } };
20736          $t3_4 = { $get() { return $t0_1.$get().leafIndex; }, $set(v) { const obj = $t0_1.$get(); obj.leafIndex = v; $t0_1.$set(obj); } };
20737          $t1_2.$set(node);
20738          $t2_3.$set(groupID);
20739          $t3_4.$set(li);
20740          $t4_5 = $rt.types.makeInterface('*smesh.lol/web/common/mls.leafNodeTBS', $t0_1);
20741          $t5_6 = marshalRaw($t4_5);
20742          $t6_7 = $t5_6[0];
20743          $t7_8 = $t5_6[1];
20744          $t8_9 = ($t7_8 !== null);
20745          if ($t8_9) {
20746            $block = 1; break;
20747          }
20748          else {
20749            $block = 2; break;
20750          }
20751          break;
20752        }
20753        case 1: {
20754          return $t7_8;
20755          break;
20756        }
20757        case 2: {
20758          $t9_10 = CipherSuite$signWithLabel(cs, signerPriv, 'LeafNodeTBS', $t6_7);
20759          $t10_11 = $t9_10[0];
20760          $t11_12 = $t9_10[1];
20761          $t12_13 = ($t11_12 !== null);
20762          if ($t12_13) {
20763            $block = 3; break;
20764          }
20765          else {
20766            $block = 4; break;
20767          }
20768          break;
20769        }
20770        case 3: {
20771          return $t11_12;
20772          break;
20773        }
20774        case 4: {
20775          $t13_14 = { $get() { return node.$get().signature; }, $set(v) { const obj = node.$get(); obj.signature = v; node.$set(obj); } };
20776          $t13_14.$set($t10_11);
20777          return null;
20778          break;
20779        }
20780      }
20781    }
20782  }
20783  
20784  $rt.types.getType('smesh.lol/web/common/mls.leafNode')?.methods?.set('sign', leafNode$sign);
20785  export function leafNode$unmarshal(node, r) {
20786    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47;
20787    let $block = 0;
20788    while (true) {
20789      switch ($block) {
20790        case 0: {
20791          node.$set($rt.builtin.cloneValue({ encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }));
20792          $t0_1 = Reader$readOpaqueVec(r);
20793          $t1_2 = $t0_1[0];
20794          $t2_3 = { $get() { return node.$get().encryptionKey; }, $set(v) { const obj = node.$get(); obj.encryptionKey = v; node.$set(obj); } };
20795          $t3_4 = $t1_2;
20796          $t2_3.$set($t3_4);
20797          $t4_5 = $t0_1[1];
20798          if ($t4_5) {
20799            $block = 2; break;
20800          }
20801          else {
20802            $block = 1; break;
20803          }
20804          break;
20805        }
20806        case 1: {
20807          $t5_6 = errUnexpectedEOF.$get();
20808          return $t5_6;
20809          break;
20810        }
20811        case 2: {
20812          $t6_7 = Reader$readOpaqueVec(r);
20813          $t7_8 = $t6_7[0];
20814          $t8_9 = { $get() { return node.$get().signatureKey; }, $set(v) { const obj = node.$get(); obj.signatureKey = v; node.$set(obj); } };
20815          $t9_10 = $t7_8;
20816          $t8_9.$set($t9_10);
20817          $t10_11 = $t6_7[1];
20818          if ($t10_11) {
20819            $block = 4; break;
20820          }
20821          else {
20822            $block = 3; break;
20823          }
20824          break;
20825        }
20826        case 3: {
20827          $t11_12 = errUnexpectedEOF.$get();
20828          return $t11_12;
20829          break;
20830        }
20831        case 4: {
20832          $t12_13 = { $get() { return node.$get().credential; }, $set(v) { const obj = node.$get(); obj.credential = v; node.$set(obj); } };
20833          $t13_14 = Credential$unmarshal($t12_13, r);
20834          $t14_15 = ($t13_14 !== null);
20835          if ($t14_15) {
20836            $block = 5; break;
20837          }
20838          else {
20839            $block = 6; break;
20840          }
20841          break;
20842        }
20843        case 5: {
20844          return $t13_14;
20845          break;
20846        }
20847        case 6: {
20848          $t15_16 = { $get() { return node.$get().capabilities; }, $set(v) { const obj = node.$get(); obj.capabilities = v; node.$set(obj); } };
20849          $t16_17 = capabilities$unmarshal($t15_16, r);
20850          $t17_18 = ($t16_17 !== null);
20851          if ($t17_18) {
20852            $block = 7; break;
20853          }
20854          else {
20855            $block = 8; break;
20856          }
20857          break;
20858        }
20859        case 7: {
20860          return $t16_17;
20861          break;
20862        }
20863        case 8: {
20864          $t18_19 = { $get() { return node.$get().leafNodeSource; }, $set(v) { const obj = node.$get(); obj.leafNodeSource = v; node.$set(obj); } };
20865          $t19_20 = leafNodeSource$unmarshal($t18_19, r);
20866          $t20_21 = ($t19_20 !== null);
20867          if ($t20_21) {
20868            $block = 9; break;
20869          }
20870          else {
20871            $block = 10; break;
20872          }
20873          break;
20874        }
20875        case 9: {
20876          return $t19_20;
20877          break;
20878        }
20879        case 10: {
20880          $t21_22 = { $get() { return node.$get().leafNodeSource; }, $set(v) { const obj = node.$get(); obj.leafNodeSource = v; node.$set(obj); } };
20881          $t22_23 = $t21_22.$get();
20882          $t23_24 = ($t22_23 === 1);
20883          if ($t23_24) {
20884            $block = 12; break;
20885          }
20886          else {
20887            $block = 14; break;
20888          }
20889          break;
20890        }
20891        case 11: {
20892          $t25_26 = ($t24_25 !== null);
20893          if ($t25_26) {
20894            $block = 16; break;
20895          }
20896          else {
20897            $block = 17; break;
20898          }
20899          break;
20900        }
20901        case 12: {
20902          $t26_27 = { $value: { notBefore: 0n, notAfter: 0n }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
20903          $t27_28 = { $get() { return node.$get().lifetime; }, $set(v) { const obj = node.$get(); obj.lifetime = v; node.$set(obj); } };
20904          $t27_28.$set($t26_27);
20905          $t28_29 = { $get() { return node.$get().lifetime; }, $set(v) { const obj = node.$get(); obj.lifetime = v; node.$set(obj); } };
20906          $t29_30 = $t28_29.$get();
20907          $t30_31 = lifetime$unmarshal($t29_30, r);
20908          $t24_25 = $t30_31;
20909          $block = 11; break;
20910          break;
20911        }
20912        case 13: {
20913          $t31_32 = Reader$readOpaqueVec(r);
20914          $t32_33 = $t31_32[0];
20915          $t33_34 = { $get() { return node.$get().parentHash; }, $set(v) { const obj = node.$get(); obj.parentHash = v; node.$set(obj); } };
20916          $t33_34.$set($t32_33);
20917          $t34_35 = $t31_32[1];
20918          if ($t34_35) {
20919            $t24_25 = null;
20920            $block = 11; break;
20921          }
20922          else {
20923            $block = 15; break;
20924          }
20925          break;
20926        }
20927        case 14: {
20928          $t35_36 = ($t22_23 === 3);
20929          if ($t35_36) {
20930            $block = 13; break;
20931          }
20932          else {
20933            $t24_25 = null;
20934            $block = 11; break;
20935          }
20936          break;
20937        }
20938        case 15: {
20939          $t36_37 = errUnexpectedEOF.$get();
20940          $t24_25 = $t36_37;
20941          $block = 11; break;
20942          break;
20943        }
20944        case 16: {
20945          return $t24_25;
20946          break;
20947        }
20948        case 17: {
20949          $t37_38 = unmarshalExtensionVec(r);
20950          $t38_39 = $t37_38[0];
20951          $t39_40 = $t37_38[1];
20952          $t40_41 = ($t39_40 !== null);
20953          if ($t40_41) {
20954            $block = 18; break;
20955          }
20956          else {
20957            $block = 19; break;
20958          }
20959          break;
20960        }
20961        case 18: {
20962          return $t39_40;
20963          break;
20964        }
20965        case 19: {
20966          $t41_42 = { $get() { return node.$get().extensions; }, $set(v) { const obj = node.$get(); obj.extensions = v; node.$set(obj); } };
20967          $t41_42.$set($t38_39);
20968          $t42_43 = Reader$readOpaqueVec(r);
20969          $t43_44 = $t42_43[0];
20970          $t44_45 = { $get() { return node.$get().signature; }, $set(v) { const obj = node.$get(); obj.signature = v; node.$set(obj); } };
20971          $t44_45.$set($t43_44);
20972          $t45_46 = $t42_43[1];
20973          if ($t45_46) {
20974            $block = 21; break;
20975          }
20976          else {
20977            $block = 20; break;
20978          }
20979          break;
20980        }
20981        case 20: {
20982          $t46_47 = errUnexpectedEOF.$get();
20983          return $t46_47;
20984          break;
20985        }
20986        case 21: {
20987          return null;
20988          break;
20989        }
20990      }
20991    }
20992  }
20993  
20994  $rt.types.getType('smesh.lol/web/common/mls.leafNode')?.methods?.set('unmarshal', leafNode$unmarshal);
20995  export function leafNode$verify(ln, opts) {
20996    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62;
20997    let $block = 0;
20998    while (true) {
20999      switch ($block) {
21000        case 0: {
21001          $t0_1 = { $get() { return opts.$get().cipherSuite; }, $set(v) { const obj = opts.$get(); obj.cipherSuite = v; opts.$set(obj); } };
21002          $t1_2 = $t0_1.$get();
21003          $t2_3 = { $get() { return opts.$get().groupID; }, $set(v) { const obj = opts.$get(); obj.groupID = v; opts.$set(obj); } };
21004          $t3_4 = $t2_3.$get();
21005          $t4_5 = { $get() { return opts.$get().leafIndex; }, $set(v) { const obj = opts.$get(); obj.leafIndex = v; opts.$set(obj); } };
21006          $t5_6 = $t4_5.$get();
21007          $t6_7 = leafNode$verifySignature(ln, $t1_2, $t3_4, $t5_6);
21008          if ($t6_7) {
21009            $block = 2; break;
21010          }
21011          else {
21012            $block = 1; break;
21013          }
21014          break;
21015        }
21016        case 1: {
21017          $t7_8 = errors.New('mls: leaf node signature verification failed');
21018          return $t7_8;
21019          break;
21020        }
21021        case 2: {
21022          $t8_9 = { $get() { return opts.$get().supportedCreds; }, $set(v) { const obj = opts.$get(); obj.supportedCreds = v; opts.$set(obj); } };
21023          $t9_10 = $t8_9.$get();
21024          $t10_11 = { $get() { return ln.$get().credential; }, $set(v) { const obj = ln.$get(); obj.credential = v; ln.$set(obj); } };
21025          $t11_12 = { $get() { return $t10_11.$get().credentialType; }, $set(v) { const obj = $t10_11.$get(); obj.credentialType = v; $t10_11.$set(obj); } };
21026          $t12_13 = $t11_12.$get();
21027          $t13_14 = $rt.builtin.mapLookup($t9_10, $t12_13).value;
21028          if ($t13_14) {
21029            $block = 4; break;
21030          }
21031          else {
21032            $block = 3; break;
21033          }
21034          break;
21035        }
21036        case 3: {
21037          $t14_15 = errors.New('mls: credential type not supported by all members');
21038          return $t14_15;
21039          break;
21040        }
21041        case 4: {
21042          $t15_16 = { $get() { return ln.$get().lifetime; }, $set(v) { const obj = ln.$get(); obj.lifetime = v; ln.$set(obj); } };
21043          $t16_17 = $t15_16.$get();
21044          $t17_18 = ($t16_17 !== null);
21045          if ($t17_18) {
21046            $block = 7; break;
21047          }
21048          else {
21049            $block = 6; break;
21050          }
21051          break;
21052        }
21053        case 5: {
21054          $t18_19 = { $get() { return ln.$get().lifetime; }, $set(v) { const obj = ln.$get(); obj.lifetime = v; ln.$set(obj); } };
21055          $t19_20 = $t18_19.$get();
21056          $t20_21 = { $get() { return opts.$get().nowUnix; }, $set(v) { const obj = opts.$get(); obj.nowUnix = v; opts.$set(obj); } };
21057          $t21_22 = $t20_21.$get();
21058          $t22_23 = lifetime$verifyAt($t19_20, $t21_22);
21059          if ($t22_23) {
21060            $block = 6; break;
21061          }
21062          else {
21063            $block = 8; break;
21064          }
21065          break;
21066        }
21067        case 6: {
21068          $t23_24 = $rt.builtin.makeMap('int');
21069          $t24_25 = { $get() { return ln.$get().capabilities; }, $set(v) { const obj = ln.$get(); obj.capabilities = v; ln.$set(obj); } };
21070          $t25_26 = { $get() { return $t24_25.$get().extensions; }, $set(v) { const obj = $t24_25.$get(); obj.extensions = v; $t24_25.$set(obj); } };
21071          $t26_27 = $t25_26.$get();
21072          $t27_28 = $rt.builtin.len($t26_27);
21073          $t32_33 = -1;
21074          $block = 9; break;
21075          break;
21076        }
21077        case 7: {
21078          $t28_29 = { $get() { return opts.$get().nowUnix; }, $set(v) { const obj = opts.$get(); obj.nowUnix = v; opts.$set(obj); } };
21079          $t29_30 = $t28_29.$get();
21080          $t30_31 = ($t29_30 !== 0n);
21081          if ($t30_31) {
21082            $block = 5; break;
21083          }
21084          else {
21085            $block = 6; break;
21086          }
21087          break;
21088        }
21089        case 8: {
21090          $t31_32 = errors.New('mls: lifetime verification failed');
21091          return $t31_32;
21092          break;
21093        }
21094        case 9: {
21095          $t33_34 = ($t32_33 + 1);
21096          $t34_35 = ($t33_34 < $t27_28);
21097          if ($t34_35) {
21098            $block = 10; break;
21099          }
21100          else {
21101            $block = 11; break;
21102          }
21103          break;
21104        }
21105        case 10: {
21106          $t35_36 = $t26_27.addr($t33_34);
21107          $t36_37 = $t35_36.$get();
21108          $rt.builtin.mapUpdate($t23_24, $t36_37, true);
21109          $t32_33 = $t33_34;
21110          $block = 9; break;
21111          break;
21112        }
21113        case 11: {
21114          $t37_38 = { $get() { return ln.$get().extensions; }, $set(v) { const obj = ln.$get(); obj.extensions = v; ln.$set(obj); } };
21115          $t38_39 = $t37_38.$get();
21116          $t39_40 = $rt.builtin.len($t38_39);
21117          $t40_41 = -1;
21118          $block = 12; break;
21119          break;
21120        }
21121        case 12: {
21122          $t41_42 = ($t40_41 + 1);
21123          $t42_43 = ($t41_42 < $t39_40);
21124          if ($t42_43) {
21125            $block = 13; break;
21126          }
21127          else {
21128            $block = 14; break;
21129          }
21130          break;
21131        }
21132        case 13: {
21133          $t43_44 = $t38_39.addr($t41_42);
21134          $t44_45 = $t43_44.$get();
21135          $t45_46 = { $value: { extensionType: 0, extensionData: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21136          $t45_46.$set($rt.builtin.cloneValue($t44_45));
21137          $t46_47 = { $get() { return $t45_46.$get().extensionType; }, $set(v) { const obj = $t45_46.$get(); obj.extensionType = v; $t45_46.$set(obj); } };
21138          $t47_48 = $t46_47.$get();
21139          $t48_49 = $rt.builtin.mapLookup($t23_24, $t47_48).value;
21140          if ($t48_49) {
21141            $t40_41 = $t41_42;
21142            $block = 12; break;
21143          }
21144          else {
21145            $block = 15; break;
21146          }
21147          break;
21148        }
21149        case 14: {
21150          $t49_50 = { $get() { return opts.$get().signatureKeys; }, $set(v) { const obj = opts.$get(); obj.signatureKeys = v; opts.$set(obj); } };
21151          $t50_51 = $t49_50.$get();
21152          $t51_52 = { $get() { return ln.$get().signatureKey; }, $set(v) { const obj = ln.$get(); obj.signatureKey = v; ln.$set(obj); } };
21153          $t52_53 = $t51_52.$get();
21154          $t53_54 = $rt.builtin.mapLookup($t50_51, $t52_53).value;
21155          if ($t53_54) {
21156            $block = 16; break;
21157          }
21158          else {
21159            $block = 17; break;
21160          }
21161          break;
21162        }
21163        case 15: {
21164          $t54_55 = errors.New('mls: extension type not supported by leaf node');
21165          return $t54_55;
21166          break;
21167        }
21168        case 16: {
21169          $t55_56 = errors.New('mls: duplicate signature key');
21170          return $t55_56;
21171          break;
21172        }
21173        case 17: {
21174          $t56_57 = { $get() { return opts.$get().encryptionKeys; }, $set(v) { const obj = opts.$get(); obj.encryptionKeys = v; opts.$set(obj); } };
21175          $t57_58 = $t56_57.$get();
21176          $t58_59 = { $get() { return ln.$get().encryptionKey; }, $set(v) { const obj = ln.$get(); obj.encryptionKey = v; ln.$set(obj); } };
21177          $t59_60 = $t58_59.$get();
21178          $t60_61 = $rt.builtin.mapLookup($t57_58, $t59_60).value;
21179          if ($t60_61) {
21180            $block = 18; break;
21181          }
21182          else {
21183            $block = 19; break;
21184          }
21185          break;
21186        }
21187        case 18: {
21188          $t61_62 = errors.New('mls: duplicate encryption key');
21189          return $t61_62;
21190          break;
21191        }
21192        case 19: {
21193          return null;
21194          break;
21195        }
21196      }
21197    }
21198  }
21199  
21200  $rt.types.getType('smesh.lol/web/common/mls.leafNode')?.methods?.set('verify', leafNode$verify);
21201  export function leafNode$verifySignature(node, cs, groupID, li) {
21202    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
21203    let $block = 0;
21204    while (true) {
21205      switch ($block) {
21206        case 0: {
21207          $t0_1 = { $value: { node: null, groupID: null, leafIndex: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21208          $t1_2 = { $get() { return $t0_1.$get().node; }, $set(v) { const obj = $t0_1.$get(); obj.node = v; $t0_1.$set(obj); } };
21209          $t2_3 = { $get() { return $t0_1.$get().groupID; }, $set(v) { const obj = $t0_1.$get(); obj.groupID = v; $t0_1.$set(obj); } };
21210          $t3_4 = { $get() { return $t0_1.$get().leafIndex; }, $set(v) { const obj = $t0_1.$get(); obj.leafIndex = v; $t0_1.$set(obj); } };
21211          $t1_2.$set(node);
21212          $t2_3.$set(groupID);
21213          $t3_4.$set(li);
21214          $t4_5 = $rt.types.makeInterface('*smesh.lol/web/common/mls.leafNodeTBS', $t0_1);
21215          $t5_6 = marshalRaw($t4_5);
21216          $t6_7 = $t5_6[0];
21217          $t7_8 = $t5_6[1];
21218          $t8_9 = ($t7_8 !== null);
21219          if ($t8_9) {
21220            $block = 1; break;
21221          }
21222          else {
21223            $block = 2; break;
21224          }
21225          break;
21226        }
21227        case 1: {
21228          return false;
21229          break;
21230        }
21231        case 2: {
21232          $t9_10 = { $get() { return node.$get().signatureKey; }, $set(v) { const obj = node.$get(); obj.signatureKey = v; node.$set(obj); } };
21233          $t10_11 = $t9_10.$get();
21234          $t11_12 = { $get() { return node.$get().signature; }, $set(v) { const obj = node.$get(); obj.signature = v; node.$set(obj); } };
21235          $t12_13 = $t11_12.$get();
21236          $t13_14 = CipherSuite$verifyWithLabel(cs, $t10_11, 'LeafNodeTBS', $t6_7, $t12_13);
21237          return $t13_14;
21238          break;
21239        }
21240      }
21241    }
21242  }
21243  
21244  $rt.types.getType('smesh.lol/web/common/mls.leafNode')?.methods?.set('verifySignature', leafNode$verifySignature);
21245  export function leafNodeTBS$marshal(tbs, w) {
21246    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
21247    let $block = 0;
21248    while (true) {
21249      switch ($block) {
21250        case 0: {
21251          $t0_1 = { $get() { return tbs.$get().node; }, $set(v) { const obj = tbs.$get(); obj.node = v; tbs.$set(obj); } };
21252          $t1_2 = $t0_1.$get();
21253          $t2_3 = leafNode$marshalBase($t1_2, w);
21254          $t3_4 = { $get() { return tbs.$get().node; }, $set(v) { const obj = tbs.$get(); obj.node = v; tbs.$set(obj); } };
21255          $t4_5 = $t3_4.$get();
21256          $t5_6 = { $get() { return $t4_5.$get().leafNodeSource; }, $set(v) { const obj = $t4_5.$get(); obj.leafNodeSource = v; $t4_5.$set(obj); } };
21257          $t6_7 = $t5_6.$get();
21258          $t7_8 = ($t6_7 === 2);
21259          if ($t7_8) {
21260            $block = 2; break;
21261          }
21262          else {
21263            $block = 3; break;
21264          }
21265          break;
21266        }
21267        case 1: {
21268          return;
21269          break;
21270        }
21271        case 2: {
21272          $t8_9 = { $get() { return tbs.$get().groupID; }, $set(v) { const obj = tbs.$get(); obj.groupID = v; tbs.$set(obj); } };
21273          $t9_10 = $t8_9.$get();
21274          $t10_11 = $t9_10;
21275          $t11_12 = Writer$writeOpaqueVec(w, $t10_11);
21276          $t12_13 = { $get() { return tbs.$get().leafIndex; }, $set(v) { const obj = tbs.$get(); obj.leafIndex = v; tbs.$set(obj); } };
21277          $t13_14 = $t12_13.$get();
21278          $t14_15 = $t13_14;
21279          $t15_16 = Writer$addUint32(w, $t14_15);
21280          $block = 1; break;
21281          break;
21282        }
21283        case 3: {
21284          $t16_17 = ($t6_7 === 3);
21285          if ($t16_17) {
21286            $block = 2; break;
21287          }
21288          else {
21289            $block = 1; break;
21290          }
21291          break;
21292        }
21293      }
21294    }
21295  }
21296  
21297  $rt.types.getType('smesh.lol/web/common/mls.leafNodeTBS')?.methods?.set('marshal', leafNodeTBS$marshal);
21298  export function updatePathNode$marshal(node, w) {
21299    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
21300    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21301    $t0_1.$set(node);
21302    $t1_2 = $t0_1.$get();
21303    $t2_3 = { $get() { return $t1_2.$get().encryptionKey; }, $set(v) { const obj = $t1_2.$get(); obj.encryptionKey = v; $t1_2.$set(obj); } };
21304    $t3_4 = $t2_3.$get();
21305    $t4_5 = $t3_4;
21306    $t5_6 = Writer$writeOpaqueVec(w, $t4_5);
21307    $t6_7 = $t0_1.$get();
21308    $t7_8 = { $get() { return $t6_7.$get().encryptedPathSecret; }, $set(v) { const obj = $t6_7.$get(); obj.encryptedPathSecret = v; $t6_7.$set(obj); } };
21309    $t8_9 = $t7_8.$get();
21310    $t9_10 = $rt.builtin.len($t8_9);
21311    $t10_11 = updatePathNode$marshal$1.bind(null, $t0_1);
21312    $t11_12 = Writer$writeVector(w, $t9_10, $t10_11);
21313    return;
21314  }
21315  
21316  function updatePathNode$marshal$1(node, w, i) {
21317    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
21318    $t0_1 = node.$get();
21319    $t1_2 = { $get() { return $t0_1.$get().encryptedPathSecret; }, $set(v) { const obj = $t0_1.$get(); obj.encryptedPathSecret = v; $t0_1.$set(obj); } };
21320    $t2_3 = $t1_2.$get();
21321    $t3_4 = $t2_3.addr(i);
21322    $t4_5 = hpkeCiphertext$marshal($t3_4, w);
21323    return;
21324  }
21325  
21326  $rt.types.getType('smesh.lol/web/common/mls.updatePathNode')?.methods?.set('marshal', updatePathNode$marshal);
21327  export function updatePathNode$unmarshal(node, r) {
21328    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
21329    let $block = 0;
21330    while (true) {
21331      switch ($block) {
21332        case 0: {
21333          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21334          $t0_1.$set(node);
21335          $t1_2 = $t0_1.$get();
21336          $t1_2.$set($rt.builtin.cloneValue({ encryptionKey: null, encryptedPathSecret: null }));
21337          $t2_3 = $t0_1.$get();
21338          $t3_4 = Reader$readOpaqueVec(r);
21339          $t4_5 = $t3_4[0];
21340          $t5_6 = { $get() { return $t2_3.$get().encryptionKey; }, $set(v) { const obj = $t2_3.$get(); obj.encryptionKey = v; $t2_3.$set(obj); } };
21341          $t6_7 = $t4_5;
21342          $t5_6.$set($t6_7);
21343          $t7_8 = $t3_4[1];
21344          if ($t7_8) {
21345            $block = 2; break;
21346          }
21347          else {
21348            $block = 1; break;
21349          }
21350          break;
21351        }
21352        case 1: {
21353          $t8_9 = errUnexpectedEOF.$get();
21354          return $t8_9;
21355          break;
21356        }
21357        case 2: {
21358          $t9_10 = updatePathNode$unmarshal$1.bind(null, $t0_1);
21359          $t10_11 = Reader$readVector(r, $t9_10);
21360          return $t10_11;
21361          break;
21362        }
21363      }
21364    }
21365  }
21366  
21367  function updatePathNode$unmarshal$1(node, r) {
21368    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
21369    let $block = 0;
21370    while (true) {
21371      switch ($block) {
21372        case 0: {
21373          $t0_1 = { $value: { kemOutput: null, ciphertext: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21374          $t1_2 = hpkeCiphertext$unmarshal($t0_1, r);
21375          $t2_3 = ($t1_2 !== null);
21376          if ($t2_3) {
21377            $block = 1; break;
21378          }
21379          else {
21380            $block = 2; break;
21381          }
21382          break;
21383        }
21384        case 1: {
21385          return $t1_2;
21386          break;
21387        }
21388        case 2: {
21389          $t3_4 = node.$get();
21390          $t4_5 = node.$get();
21391          $t5_6 = { $get() { return $t4_5.$get().encryptedPathSecret; }, $set(v) { const obj = $t4_5.$get(); obj.encryptedPathSecret = v; $t4_5.$set(obj); } };
21392          $t6_7 = $t5_6.$get();
21393          $t7_8 = $t0_1.$get();
21394          $t8_9 = { $value: $rt.builtin.makeSlice(1, 1, { kemOutput: null, ciphertext: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
21395          $t9_10 = $t8_9.$get().addr(0);
21396          $t9_10.$set($rt.builtin.cloneValue($t7_8));
21397          $t10_11 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
21398          $t11_12 = $rt.builtin.appendSlice($t6_7, $t10_11);
21399          $t12_13 = { $get() { return $t3_4.$get().encryptedPathSecret; }, $set(v) { const obj = $t3_4.$get(); obj.encryptedPathSecret = v; $t3_4.$set(obj); } };
21400          $t12_13.$set($t11_12);
21401          return null;
21402          break;
21403        }
21404      }
21405    }
21406  }
21407  
21408  $rt.types.getType('smesh.lol/web/common/mls.updatePathNode')?.methods?.set('unmarshal', updatePathNode$unmarshal);
21409  export function updatePath$marshal(up, w) {
21410    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
21411    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21412    $t0_1.$set(up);
21413    $t1_2 = $t0_1.$get();
21414    $t2_3 = { $get() { return $t1_2.$get().leafNode; }, $set(v) { const obj = $t1_2.$get(); obj.leafNode = v; $t1_2.$set(obj); } };
21415    $t3_4 = leafNode$marshal($t2_3, w);
21416    $t4_5 = $t0_1.$get();
21417    $t5_6 = { $get() { return $t4_5.$get().nodes; }, $set(v) { const obj = $t4_5.$get(); obj.nodes = v; $t4_5.$set(obj); } };
21418    $t6_7 = $t5_6.$get();
21419    $t7_8 = $rt.builtin.len($t6_7);
21420    $t8_9 = updatePath$marshal$1.bind(null, $t0_1);
21421    $t9_10 = Writer$writeVector(w, $t7_8, $t8_9);
21422    return;
21423  }
21424  
21425  function updatePath$marshal$1(up, w, i) {
21426    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
21427    $t0_1 = up.$get();
21428    $t1_2 = { $get() { return $t0_1.$get().nodes; }, $set(v) { const obj = $t0_1.$get(); obj.nodes = v; $t0_1.$set(obj); } };
21429    $t2_3 = $t1_2.$get();
21430    $t3_4 = $t2_3.addr(i);
21431    $t4_5 = updatePathNode$marshal($t3_4, w);
21432    return;
21433  }
21434  
21435  $rt.types.getType('smesh.lol/web/common/mls.updatePath')?.methods?.set('marshal', updatePath$marshal);
21436  export function updatePath$unmarshal(up, r) {
21437    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
21438    let $block = 0;
21439    while (true) {
21440      switch ($block) {
21441        case 0: {
21442          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21443          $t0_1.$set(up);
21444          $t1_2 = $t0_1.$get();
21445          $t1_2.$set($rt.builtin.cloneValue({ leafNode: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, nodes: null }));
21446          $t2_3 = $t0_1.$get();
21447          $t3_4 = { $get() { return $t2_3.$get().leafNode; }, $set(v) { const obj = $t2_3.$get(); obj.leafNode = v; $t2_3.$set(obj); } };
21448          $t4_5 = leafNode$unmarshal($t3_4, r);
21449          $t5_6 = ($t4_5 !== null);
21450          if ($t5_6) {
21451            $block = 1; break;
21452          }
21453          else {
21454            $block = 2; break;
21455          }
21456          break;
21457        }
21458        case 1: {
21459          return $t4_5;
21460          break;
21461        }
21462        case 2: {
21463          $t6_7 = updatePath$unmarshal$1.bind(null, $t0_1);
21464          $t7_8 = Reader$readVector(r, $t6_7);
21465          return $t7_8;
21466          break;
21467        }
21468      }
21469    }
21470  }
21471  
21472  function updatePath$unmarshal$1(up, r) {
21473    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
21474    let $block = 0;
21475    while (true) {
21476      switch ($block) {
21477        case 0: {
21478          $t0_1 = { $value: { encryptionKey: null, encryptedPathSecret: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21479          $t1_2 = updatePathNode$unmarshal($t0_1, r);
21480          $t2_3 = ($t1_2 !== null);
21481          if ($t2_3) {
21482            $block = 1; break;
21483          }
21484          else {
21485            $block = 2; break;
21486          }
21487          break;
21488        }
21489        case 1: {
21490          return $t1_2;
21491          break;
21492        }
21493        case 2: {
21494          $t3_4 = up.$get();
21495          $t4_5 = up.$get();
21496          $t5_6 = { $get() { return $t4_5.$get().nodes; }, $set(v) { const obj = $t4_5.$get(); obj.nodes = v; $t4_5.$set(obj); } };
21497          $t6_7 = $t5_6.$get();
21498          $t7_8 = $t0_1.$get();
21499          $t8_9 = { $value: $rt.builtin.makeSlice(1, 1, { encryptionKey: null, encryptedPathSecret: null }), $get() { return this.$value; }, $set(v) { this.$value = v; } };
21500          $t9_10 = $t8_9.$get().addr(0);
21501          $t9_10.$set($rt.builtin.cloneValue($t7_8));
21502          $t10_11 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
21503          $t11_12 = $rt.builtin.appendSlice($t6_7, $t10_11);
21504          $t12_13 = { $get() { return $t3_4.$get().nodes; }, $set(v) { const obj = $t3_4.$get(); obj.nodes = v; $t3_4.$set(obj); } };
21505          $t12_13.$set($t11_12);
21506          return null;
21507          break;
21508        }
21509      }
21510    }
21511  }
21512  
21513  $rt.types.getType('smesh.lol/web/common/mls.updatePath')?.methods?.set('unmarshal', updatePath$unmarshal);
21514  export function nodeType$marshal(t, w) {
21515    let $t0_1, $t1_2;
21516    $t0_1 = t;
21517    $t1_2 = Writer$addByte(w, $t0_1);
21518    return;
21519  }
21520  
21521  $rt.types.getType('smesh.lol/web/common/mls.nodeType')?.methods?.set('marshal', nodeType$marshal);
21522  export function nodeType$unmarshal(t, r) {
21523    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
21524    let $block = 0;
21525    while (true) {
21526      switch ($block) {
21527        case 0: {
21528          $t0_1 = Reader$readByte(r);
21529          $t1_2 = $t0_1[0];
21530          $t2_3 = $t0_1[1];
21531          if ($t2_3) {
21532            $block = 2; break;
21533          }
21534          else {
21535            $block = 1; break;
21536          }
21537          break;
21538        }
21539        case 1: {
21540          $t3_4 = errUnexpectedEOF.$get();
21541          return $t3_4;
21542          break;
21543        }
21544        case 2: {
21545          $t4_5 = $t1_2;
21546          t.$set($t4_5);
21547          $t5_6 = t.$get();
21548          $t6_7 = ($t5_6 === 1);
21549          if ($t6_7) {
21550            $block = 3; break;
21551          }
21552          else {
21553            $block = 4; break;
21554          }
21555          break;
21556        }
21557        case 3: {
21558          return null;
21559          break;
21560        }
21561        case 4: {
21562          $t7_8 = ($t5_6 === 2);
21563          if ($t7_8) {
21564            $block = 3; break;
21565          }
21566          else {
21567            $block = 5; break;
21568          }
21569          break;
21570        }
21571        case 5: {
21572          $t8_9 = errInvalidNodeType.$get();
21573          return $t8_9;
21574          break;
21575        }
21576      }
21577    }
21578  }
21579  
21580  $rt.types.getType('smesh.lol/web/common/mls.nodeType')?.methods?.set('unmarshal', nodeType$unmarshal);
21581  export function node$encryptionKey(n) {
21582    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
21583    let $block = 0;
21584    while (true) {
21585      switch ($block) {
21586        case 0: {
21587          $t0_1 = { $get() { return n.$get().nodeType; }, $set(v) { const obj = n.$get(); obj.nodeType = v; n.$set(obj); } };
21588          $t1_2 = $t0_1.$get();
21589          $t2_3 = ($t1_2 === 1);
21590          if ($t2_3) {
21591            $block = 1; break;
21592          }
21593          else {
21594            $block = 3; break;
21595          }
21596          break;
21597        }
21598        case 1: {
21599          $t3_4 = { $get() { return n.$get().leafNode; }, $set(v) { const obj = n.$get(); obj.leafNode = v; n.$set(obj); } };
21600          $t4_5 = $t3_4.$get();
21601          $t5_6 = { $get() { return $t4_5.$get().encryptionKey; }, $set(v) { const obj = $t4_5.$get(); obj.encryptionKey = v; $t4_5.$set(obj); } };
21602          $t6_7 = $t5_6.$get();
21603          return $t6_7;
21604          break;
21605        }
21606        case 2: {
21607          $t7_8 = { $get() { return n.$get().parentNode; }, $set(v) { const obj = n.$get(); obj.parentNode = v; n.$set(obj); } };
21608          $t8_9 = $t7_8.$get();
21609          $t9_10 = { $get() { return $t8_9.$get().encryptionKey; }, $set(v) { const obj = $t8_9.$get(); obj.encryptionKey = v; $t8_9.$set(obj); } };
21610          $t10_11 = $t9_10.$get();
21611          return $t10_11;
21612          break;
21613        }
21614        case 3: {
21615          $t11_12 = ($t1_2 === 2);
21616          if ($t11_12) {
21617            $block = 2; break;
21618          }
21619          else {
21620            $block = 4; break;
21621          }
21622          break;
21623        }
21624        case 4: {
21625          $t12_13 = $rt.types.makeInterface('string', 'unreachable');
21626          $rt.runtime.panic($t12_13);
21627          break;
21628        }
21629      }
21630    }
21631  }
21632  
21633  $rt.types.getType('smesh.lol/web/common/mls.node')?.methods?.set('encryptionKey', node$encryptionKey);
21634  export function node$marshal(n, w) {
21635    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
21636    let $block = 0;
21637    while (true) {
21638      switch ($block) {
21639        case 0: {
21640          $t0_1 = { $get() { return n.$get().nodeType; }, $set(v) { const obj = n.$get(); obj.nodeType = v; n.$set(obj); } };
21641          $t1_2 = $t0_1.$get();
21642          $t2_3 = nodeType$marshal($t1_2, w);
21643          $t3_4 = { $get() { return n.$get().nodeType; }, $set(v) { const obj = n.$get(); obj.nodeType = v; n.$set(obj); } };
21644          $t4_5 = $t3_4.$get();
21645          $t5_6 = ($t4_5 === 1);
21646          if ($t5_6) {
21647            $block = 2; break;
21648          }
21649          else {
21650            $block = 4; break;
21651          }
21652          break;
21653        }
21654        case 1: {
21655          return;
21656          break;
21657        }
21658        case 2: {
21659          $t6_7 = { $get() { return n.$get().leafNode; }, $set(v) { const obj = n.$get(); obj.leafNode = v; n.$set(obj); } };
21660          $t7_8 = $t6_7.$get();
21661          $t8_9 = leafNode$marshal($t7_8, w);
21662          $block = 1; break;
21663          break;
21664        }
21665        case 3: {
21666          $t9_10 = { $get() { return n.$get().parentNode; }, $set(v) { const obj = n.$get(); obj.parentNode = v; n.$set(obj); } };
21667          $t10_11 = $t9_10.$get();
21668          $t11_12 = parentNode$marshal($t10_11, w);
21669          $block = 1; break;
21670          break;
21671        }
21672        case 4: {
21673          $t12_13 = ($t4_5 === 2);
21674          if ($t12_13) {
21675            $block = 3; break;
21676          }
21677          else {
21678            $block = 5; break;
21679          }
21680          break;
21681        }
21682        case 5: {
21683          $t13_14 = $rt.types.makeInterface('string', 'unreachable');
21684          $rt.runtime.panic($t13_14);
21685          break;
21686        }
21687      }
21688    }
21689  }
21690  
21691  $rt.types.getType('smesh.lol/web/common/mls.node')?.methods?.set('marshal', node$marshal);
21692  export function node$unmarshal(n, r) {
21693    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
21694    let $block = 0;
21695    while (true) {
21696      switch ($block) {
21697        case 0: {
21698          n.$set($rt.builtin.cloneValue({ nodeType: 0, leafNode: null, parentNode: null }));
21699          $t0_1 = { $get() { return n.$get().nodeType; }, $set(v) { const obj = n.$get(); obj.nodeType = v; n.$set(obj); } };
21700          $t1_2 = nodeType$unmarshal($t0_1, r);
21701          $t2_3 = ($t1_2 !== null);
21702          if ($t2_3) {
21703            $block = 1; break;
21704          }
21705          else {
21706            $block = 2; break;
21707          }
21708          break;
21709        }
21710        case 1: {
21711          return $t1_2;
21712          break;
21713        }
21714        case 2: {
21715          $t3_4 = { $get() { return n.$get().nodeType; }, $set(v) { const obj = n.$get(); obj.nodeType = v; n.$set(obj); } };
21716          $t4_5 = $t3_4.$get();
21717          $t5_6 = ($t4_5 === 1);
21718          if ($t5_6) {
21719            $block = 3; break;
21720          }
21721          else {
21722            $block = 5; break;
21723          }
21724          break;
21725        }
21726        case 3: {
21727          $t6_7 = { $value: { encryptionKey: null, signatureKey: null, credential: { credentialType: 0, identity: null, certificates: null }, capabilities: { versions: null, cipherSuites: null, extensions: null, proposals: null, credentials: null }, leafNodeSource: 0, lifetime: null, parentHash: null, extensions: null, signature: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21728          $t7_8 = { $get() { return n.$get().leafNode; }, $set(v) { const obj = n.$get(); obj.leafNode = v; n.$set(obj); } };
21729          $t7_8.$set($t6_7);
21730          $t8_9 = { $get() { return n.$get().leafNode; }, $set(v) { const obj = n.$get(); obj.leafNode = v; n.$set(obj); } };
21731          $t9_10 = $t8_9.$get();
21732          $t10_11 = leafNode$unmarshal($t9_10, r);
21733          return $t10_11;
21734          break;
21735        }
21736        case 4: {
21737          $t11_12 = { $value: { encryptionKey: null, parentHash: null, unmergedLeaves: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21738          $t12_13 = { $get() { return n.$get().parentNode; }, $set(v) { const obj = n.$get(); obj.parentNode = v; n.$set(obj); } };
21739          $t12_13.$set($t11_12);
21740          $t13_14 = { $get() { return n.$get().parentNode; }, $set(v) { const obj = n.$get(); obj.parentNode = v; n.$set(obj); } };
21741          $t14_15 = $t13_14.$get();
21742          $t15_16 = parentNode$unmarshal($t14_15, r);
21743          return $t15_16;
21744          break;
21745        }
21746        case 5: {
21747          $t16_17 = ($t4_5 === 2);
21748          if ($t16_17) {
21749            $block = 4; break;
21750          }
21751          else {
21752            $block = 6; break;
21753          }
21754          break;
21755        }
21756        case 6: {
21757          $t17_18 = $rt.types.makeInterface('string', 'unreachable');
21758          $rt.runtime.panic($t17_18);
21759          break;
21760        }
21761      }
21762    }
21763  }
21764  
21765  $rt.types.getType('smesh.lol/web/common/mls.node')?.methods?.set('unmarshal', node$unmarshal);
21766  export function ratchetTree$computeLeafTreeHash(tree, cs, x, exclude) {
21767    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
21768    let $block = 0;
21769    while (true) {
21770      switch ($block) {
21771        case 0: {
21772          $t0_1 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21773          $t1_2 = nodeIndex$leafIndex(x);
21774          $t2_3 = $t1_2[0];
21775          $t3_4 = $t1_2[1];
21776          $t4_5 = $t2_3;
21777          $t5_6 = Writer$addUint32($t0_1, $t4_5);
21778          $t6_7 = ratchetTree$get(tree, x);
21779          $t7_8 = $rt.builtin.mapLookup(exclude, $t2_3).value;
21780          if ($t7_8) {
21781            $block = 1; break;
21782          }
21783          else {
21784            $t8_9 = $t6_7;
21785            $block = 2; break;
21786          }
21787          break;
21788        }
21789        case 1: {
21790          $t8_9 = null;
21791          $block = 2; break;
21792          break;
21793        }
21794        case 2: {
21795          $t9_10 = ($t8_9 !== null);
21796          $t10_11 = Writer$writeOptional($t0_1, $t9_10);
21797          $t11_12 = ($t8_9 !== null);
21798          if ($t11_12) {
21799            $block = 3; break;
21800          }
21801          else {
21802            $block = 4; break;
21803          }
21804          break;
21805        }
21806        case 3: {
21807          $t12_13 = { $get() { return $t8_9.$get().leafNode; }, $set(v) { const obj = $t8_9.$get(); obj.leafNode = v; $t8_9.$set(obj); } };
21808          $t13_14 = $t12_13.$get();
21809          $t14_15 = leafNode$marshal($t13_14, $t0_1);
21810          $block = 4; break;
21811          break;
21812        }
21813        case 4: {
21814          $t15_16 = Writer$bytes($t0_1);
21815          $t16_17 = $t15_16[0];
21816          $t17_18 = $t15_16[1];
21817          $t18_19 = ($t17_18 !== null);
21818          if ($t18_19) {
21819            $block = 5; break;
21820          }
21821          else {
21822            $block = 6; break;
21823          }
21824          break;
21825        }
21826        case 5: {
21827          return [null, $t17_18];
21828          break;
21829        }
21830        case 6: {
21831          $t19_20 = CipherSuite$hash(cs, $t16_17);
21832          return [$t19_20, null];
21833          break;
21834        }
21835      }
21836    }
21837  }
21838  
21839  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('computeLeafTreeHash', ratchetTree$computeLeafTreeHash);
21840  export function ratchetTree$computeParentTreeHash(tree, cs, x, n, exclude) {
21841    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68;
21842    let $block = 0;
21843    while (true) {
21844      switch ($block) {
21845        case 0: {
21846          $t0_1 = nodeIndex$children(x);
21847          $t1_2 = $t0_1[0];
21848          $t2_3 = $t0_1[1];
21849          $t3_4 = $t0_1[2];
21850          if ($t3_4) {
21851            $block = 2; break;
21852          }
21853          else {
21854            $block = 1; break;
21855          }
21856          break;
21857        }
21858        case 1: {
21859          $t4_5 = errUnexpectedEOF.$get();
21860          return [null, $t4_5];
21861          break;
21862        }
21863        case 2: {
21864          $t5_6 = ratchetTree$computeTreeHash(tree, cs, $t1_2, n, exclude);
21865          $t6_7 = $t5_6[0];
21866          $t7_8 = $t5_6[1];
21867          $t8_9 = ($t7_8 !== null);
21868          if ($t8_9) {
21869            $block = 3; break;
21870          }
21871          else {
21872            $block = 4; break;
21873          }
21874          break;
21875        }
21876        case 3: {
21877          return [null, $t7_8];
21878          break;
21879        }
21880        case 4: {
21881          $t9_10 = ratchetTree$computeTreeHash(tree, cs, $t2_3, n, exclude);
21882          $t10_11 = $t9_10[0];
21883          $t11_12 = $t9_10[1];
21884          $t12_13 = ($t11_12 !== null);
21885          if ($t12_13) {
21886            $block = 5; break;
21887          }
21888          else {
21889            $block = 6; break;
21890          }
21891          break;
21892        }
21893        case 5: {
21894          return [null, $t11_12];
21895          break;
21896        }
21897        case 6: {
21898          $t13_14 = { $value: { buf: null, err: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21899          $t14_15 = ratchetTree$get(tree, x);
21900          $t15_16 = ($t14_15 !== null);
21901          if ($t15_16) {
21902            $block = 9; break;
21903          }
21904          else {
21905            $block = 8; break;
21906          }
21907          break;
21908        }
21909        case 7: {
21910          $t16_17 = { $get() { return $t14_15.$get().parentNode; }, $set(v) { const obj = $t14_15.$get(); obj.parentNode = v; $t14_15.$set(obj); } };
21911          $t17_18 = $t16_17.$get();
21912          $t18_19 = ($t17_18 !== null);
21913          if ($t18_19) {
21914            $block = 11; break;
21915          }
21916          else {
21917            $block = 8; break;
21918          }
21919          break;
21920        }
21921        case 8: {
21922          $t19_20 = ($t14_15 !== null);
21923          $t20_21 = Writer$writeOptional($t13_14, $t19_20);
21924          $t21_22 = ($t14_15 !== null);
21925          if ($t21_22) {
21926            $block = 18; break;
21927          }
21928          else {
21929            $block = 19; break;
21930          }
21931          break;
21932        }
21933        case 9: {
21934          $t22_23 = $rt.builtin.len(exclude);
21935          $t23_24 = ($t22_23 > 0);
21936          if ($t23_24) {
21937            $block = 7; break;
21938          }
21939          else {
21940            $block = 8; break;
21941          }
21942          break;
21943        }
21944        case 10: {
21945          $t24_25 = { $get() { return $t17_18.$get().unmergedLeaves; }, $set(v) { const obj = $t17_18.$get(); obj.unmergedLeaves = v; $t17_18.$set(obj); } };
21946          $t25_26 = $t24_25.$get();
21947          $t26_27 = $rt.builtin.len($t25_26);
21948          $t27_28 = $rt.builtin.makeSlice(0, $t26_27, 0);
21949          $t28_29 = { $get() { return $t17_18.$get().unmergedLeaves; }, $set(v) { const obj = $t17_18.$get(); obj.unmergedLeaves = v; $t17_18.$set(obj); } };
21950          $t29_30 = $t28_29.$get();
21951          $t30_31 = $rt.builtin.len($t29_30);
21952          $t35_36 = $t27_28;
21953          $t36_37 = -1;
21954          $block = 12; break;
21955          break;
21956        }
21957        case 11: {
21958          $t31_32 = { $get() { return $t17_18.$get().unmergedLeaves; }, $set(v) { const obj = $t17_18.$get(); obj.unmergedLeaves = v; $t17_18.$set(obj); } };
21959          $t32_33 = $t31_32.$get();
21960          $t33_34 = $rt.builtin.len($t32_33);
21961          $t34_35 = ($t33_34 > 0);
21962          if ($t34_35) {
21963            $block = 10; break;
21964          }
21965          else {
21966            $block = 8; break;
21967          }
21968          break;
21969        }
21970        case 12: {
21971          $t37_38 = ($t36_37 + 1);
21972          $t38_39 = ($t37_38 < $t30_31);
21973          if ($t38_39) {
21974            $block = 13; break;
21975          }
21976          else {
21977            $block = 14; break;
21978          }
21979          break;
21980        }
21981        case 13: {
21982          $t39_40 = $t29_30.addr($t37_38);
21983          $t40_41 = $t39_40.$get();
21984          $t41_42 = $rt.builtin.mapLookup(exclude, $t40_41).value;
21985          if ($t41_42) {
21986            let $phi0 = $t35_36;
21987            let $phi1 = $t37_38;
21988            $t35_36 = $phi0;
21989            $t36_37 = $phi1;
21990            $block = 12; break;
21991          }
21992          else {
21993            $block = 15; break;
21994          }
21995          break;
21996        }
21997        case 14: {
21998          $t42_43 = { $value: { encryptionKey: null, parentHash: null, unmergedLeaves: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
21999          $t43_44 = $t17_18.$get();
22000          $t42_43.$set($rt.builtin.cloneValue($t43_44));
22001          $t44_45 = { $get() { return $t42_43.$get().unmergedLeaves; }, $set(v) { const obj = $t42_43.$get(); obj.unmergedLeaves = v; $t42_43.$set(obj); } };
22002          $t44_45.$set($t35_36);
22003          $t45_46 = Writer$writeOptional($t13_14, true);
22004          $t46_47 = parentNode$marshal($t42_43, $t13_14);
22005          $t47_48 = Writer$writeOpaqueVec($t13_14, $t6_7);
22006          $t48_49 = Writer$writeOpaqueVec($t13_14, $t10_11);
22007          $t49_50 = Writer$bytes($t13_14);
22008          $t50_51 = $t49_50[0];
22009          $t51_52 = $t49_50[1];
22010          $t52_53 = ($t51_52 !== null);
22011          if ($t52_53) {
22012            $block = 16; break;
22013          }
22014          else {
22015            $block = 17; break;
22016          }
22017          break;
22018        }
22019        case 15: {
22020          $t53_54 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
22021          $t54_55 = $t53_54.$get().addr(0);
22022          $t54_55.$set($t40_41);
22023          $t55_56 = $rt.builtin.sliceSlice($t53_54.$get(), undefined, undefined, undefined);
22024          $t56_57 = $rt.builtin.appendSlice($t35_36, $t55_56);
22025          $t35_36 = $t56_57;
22026          $t36_37 = $t37_38;
22027          $block = 12; break;
22028          break;
22029        }
22030        case 16: {
22031          return [null, $t51_52];
22032          break;
22033        }
22034        case 17: {
22035          $t57_58 = CipherSuite$hash(cs, $t50_51);
22036          return [$t57_58, null];
22037          break;
22038        }
22039        case 18: {
22040          $t58_59 = { $get() { return $t14_15.$get().parentNode; }, $set(v) { const obj = $t14_15.$get(); obj.parentNode = v; $t14_15.$set(obj); } };
22041          $t59_60 = $t58_59.$get();
22042          $t60_61 = parentNode$marshal($t59_60, $t13_14);
22043          $block = 19; break;
22044          break;
22045        }
22046        case 19: {
22047          $t61_62 = Writer$writeOpaqueVec($t13_14, $t6_7);
22048          $t62_63 = Writer$writeOpaqueVec($t13_14, $t10_11);
22049          $t63_64 = Writer$bytes($t13_14);
22050          $t64_65 = $t63_64[0];
22051          $t65_66 = $t63_64[1];
22052          $t66_67 = ($t65_66 !== null);
22053          if ($t66_67) {
22054            $block = 20; break;
22055          }
22056          else {
22057            $block = 21; break;
22058          }
22059          break;
22060        }
22061        case 20: {
22062          return [null, $t65_66];
22063          break;
22064        }
22065        case 21: {
22066          $t67_68 = CipherSuite$hash(cs, $t64_65);
22067          return [$t67_68, null];
22068          break;
22069        }
22070      }
22071    }
22072  }
22073  
22074  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('computeParentTreeHash', ratchetTree$computeParentTreeHash);
22075  export function ratchetTree$computeRootTreeHash(tree, cs) {
22076    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
22077    $t0_1 = ratchetTree$numLeaves(tree);
22078    $t1_2 = numLeaves$root($t0_1);
22079    $t2_3 = ratchetTree$computeTreeHash(tree, cs, $t1_2, $t0_1, null);
22080    $t3_4 = $t2_3[0];
22081    $t4_5 = $t2_3[1];
22082    return [$t3_4, $t4_5];
22083  }
22084  
22085  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('computeRootTreeHash', ratchetTree$computeRootTreeHash);
22086  export function ratchetTree$computeTreeHash(tree, cs, x, n, exclude) {
22087    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
22088    let $block = 0;
22089    while (true) {
22090      switch ($block) {
22091        case 0: {
22092          $t0_1 = nodeIndex$isLeaf(x);
22093          if ($t0_1) {
22094            $block = 1; break;
22095          }
22096          else {
22097            $block = 2; break;
22098          }
22099          break;
22100        }
22101        case 1: {
22102          $t1_2 = ratchetTree$computeLeafTreeHash(tree, cs, x, exclude);
22103          $t2_3 = $t1_2[0];
22104          $t3_4 = $t1_2[1];
22105          return [$t2_3, $t3_4];
22106          break;
22107        }
22108        case 2: {
22109          $t4_5 = ratchetTree$computeParentTreeHash(tree, cs, x, n, exclude);
22110          $t5_6 = $t4_5[0];
22111          $t6_7 = $t4_5[1];
22112          return [$t5_6, $t6_7];
22113          break;
22114        }
22115      }
22116    }
22117  }
22118  
22119  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('computeTreeHash', ratchetTree$computeTreeHash);
22120  export function ratchetTree$copy(tree) {
22121    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
22122    let $block = 0;
22123    while (true) {
22124      switch ($block) {
22125        case 0: {
22126          $t0_1 = $rt.builtin.len(tree);
22127          $t1_2 = $rt.builtin.makeSlice($t0_1, $t0_1, null);
22128          $t2_3 = $rt.builtin.len(tree);
22129          $t3_4 = -1;
22130          $block = 1; break;
22131          break;
22132        }
22133        case 1: {
22134          $t4_5 = ($t3_4 + 1);
22135          $t5_6 = ($t4_5 < $t2_3);
22136          if ($t5_6) {
22137            $block = 2; break;
22138          }
22139          else {
22140            $block = 3; break;
22141          }
22142          break;
22143        }
22144        case 2: {
22145          $t6_7 = tree.addr($t4_5);
22146          $t7_8 = $t6_7.$get();
22147          $t8_9 = $t1_2.addr($t4_5);
22148          $t8_9.$set($t7_8);
22149          $t3_4 = $t4_5;
22150          $block = 1; break;
22151          break;
22152        }
22153        case 3: {
22154          return $t1_2;
22155          break;
22156        }
22157      }
22158    }
22159  }
22160  
22161  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('copy', ratchetTree$copy);
22162  export function ratchetTree$decryptPathSecrets(tree, cs, ctx, senderLI, recipientLI, path, privTree) {
22163    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98;
22164    let $block = 0;
22165    while (true) {
22166      switch ($block) {
22167        case 0: {
22168          $t0_1 = leafIndex$nodeIndex(senderLI);
22169          $t1_2 = leafIndex$nodeIndex(recipientLI);
22170          $t2_3 = ratchetTree$filteredDirectPath(tree, $t0_1);
22171          $t3_4 = { $get() { return path.$get().nodes; }, $set(v) { const obj = path.$get(); obj.nodes = v; path.$set(obj); } };
22172          $t4_5 = $t3_4.$get();
22173          $t5_6 = $rt.builtin.len($t4_5);
22174          $t6_7 = $rt.builtin.len($t2_3);
22175          $t7_8 = ($t5_6 !== $t6_7);
22176          if ($t7_8) {
22177            $block = 1; break;
22178          }
22179          else {
22180            $block = 2; break;
22181          }
22182          break;
22183        }
22184        case 1: {
22185          $t8_9 = errors.New('mls: invalid update path length');
22186          return [null, $t8_9];
22187          break;
22188        }
22189        case 2: {
22190          $t9_10 = commonAncestor($t0_1, $t1_2);
22191          $t10_11 = $rt.builtin.len($t2_3);
22192          $t11_12 = -1;
22193          $block = 3; break;
22194          break;
22195        }
22196        case 3: {
22197          $t12_13 = ($t11_12 + 1);
22198          $t13_14 = ($t12_13 < $t10_11);
22199          if ($t13_14) {
22200            $block = 4; break;
22201          }
22202          else {
22203            $t17_18 = -1;
22204            $block = 5; break;
22205          }
22206          break;
22207        }
22208        case 4: {
22209          $t14_15 = $t2_3.addr($t12_13);
22210          $t15_16 = $t14_15.$get();
22211          $t16_17 = ($t15_16 === $t9_10);
22212          if ($t16_17) {
22213            $block = 6; break;
22214          }
22215          else {
22216            $t11_12 = $t12_13;
22217            $block = 3; break;
22218          }
22219          break;
22220        }
22221        case 5: {
22222          $t18_19 = ($t17_18 < 0);
22223          if ($t18_19) {
22224            $block = 7; break;
22225          }
22226          else {
22227            $block = 8; break;
22228          }
22229          break;
22230        }
22231        case 6: {
22232          $t17_18 = $t12_13;
22233          $block = 5; break;
22234          break;
22235        }
22236        case 7: {
22237          $t19_20 = errors.New('mls: cannot find recipient ancestor');
22238          return [null, $t19_20];
22239          break;
22240        }
22241        case 8: {
22242          $t20_21 = { $value: { encryptionKey: null, encryptedPathSecret: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
22243          $t21_22 = { $get() { return path.$get().nodes; }, $set(v) { const obj = path.$get(); obj.nodes = v; path.$set(obj); } };
22244          $t22_23 = $t21_22.$get();
22245          $t23_24 = $t22_23.addr($t17_18);
22246          $t24_25 = $t23_24.$get();
22247          $t20_21.$set($rt.builtin.cloneValue($t24_25));
22248          $t25_26 = commonAncestor($t0_1, $t1_2);
22249          $t26_27 = ($t1_2 < $t0_1);
22250          if ($t26_27) {
22251            $block = 9; break;
22252          }
22253          else {
22254            $block = 11; break;
22255          }
22256          break;
22257        }
22258        case 9: {
22259          $t27_28 = nodeIndex$left($t25_26);
22260          $t28_29 = $t27_28[0];
22261          $t29_30 = $t27_28[1];
22262          $t30_31 = $t28_29;
22263          $t31_32 = $t29_30;
22264          $block = 10; break;
22265          break;
22266        }
22267        case 10: {
22268          if ($t31_32) {
22269            $block = 13; break;
22270          }
22271          else {
22272            $block = 12; break;
22273          }
22274          break;
22275        }
22276        case 11: {
22277          $t32_33 = nodeIndex$right($t25_26);
22278          $t33_34 = $t32_33[0];
22279          $t34_35 = $t32_33[1];
22280          $t30_31 = $t33_34;
22281          $t31_32 = $t34_35;
22282          $block = 10; break;
22283          break;
22284        }
22285        case 12: {
22286          $t35_36 = $rt.types.makeInterface('string', 'unreachable');
22287          $rt.runtime.panic($t35_36);
22288          break;
22289        }
22290        case 13: {
22291          $t36_37 = ratchetTree$resolve(tree, $t30_31);
22292          $t37_38 = { $get() { return $t20_21.$get().encryptedPathSecret; }, $set(v) { const obj = $t20_21.$get(); obj.encryptedPathSecret = v; $t20_21.$set(obj); } };
22293          $t38_39 = $t37_38.$get();
22294          $t39_40 = $rt.builtin.len($t38_39);
22295          $t40_41 = $rt.builtin.len($t36_37);
22296          $t41_42 = ($t39_40 !== $t40_41);
22297          if ($t41_42) {
22298            $block = 14; break;
22299          }
22300          else {
22301            $block = 15; break;
22302          }
22303          break;
22304        }
22305        case 14: {
22306          $t42_43 = errors.New('mls: invalid encrypted path secret length');
22307          return [null, $t42_43];
22308          break;
22309        }
22310        case 15: {
22311          $t43_44 = $rt.builtin.len($t36_37);
22312          $t44_45 = -1;
22313          $block = 16; break;
22314          break;
22315        }
22316        case 16: {
22317          $t45_46 = ($t44_45 + 1);
22318          $t46_47 = ($t45_46 < $t43_44);
22319          if ($t46_47) {
22320            $block = 17; break;
22321          }
22322          else {
22323            $t53_54 = null;
22324            $t54_55 = -1;
22325            $block = 18; break;
22326          }
22327          break;
22328        }
22329        case 17: {
22330          $t47_48 = $t36_37.addr($t45_46);
22331          $t48_49 = $t47_48.$get();
22332          $t49_50 = $t48_49;
22333          $t50_51 = privTree.addr($t49_50);
22334          $t51_52 = $t50_51.$get();
22335          $t52_53 = !$rt.builtin.stringEqual($t51_52, null);
22336          if ($t52_53) {
22337            $block = 19; break;
22338          }
22339          else {
22340            $t44_45 = $t45_46;
22341            $block = 16; break;
22342          }
22343          break;
22344        }
22345        case 18: {
22346          $t55_56 = $rt.builtin.stringEqual($t53_54, null);
22347          if ($t55_56) {
22348            $block = 20; break;
22349          }
22350          else {
22351            $block = 21; break;
22352          }
22353          break;
22354        }
22355        case 19: {
22356          $t53_54 = $t51_52;
22357          $t54_55 = $t45_46;
22358          $block = 18; break;
22359          break;
22360        }
22361        case 20: {
22362          $t56_57 = errors.New('mls: no private key found');
22363          return [null, $t56_57];
22364          break;
22365        }
22366        case 21: {
22367          $t57_58 = { $get() { return $t20_21.$get().encryptedPathSecret; }, $set(v) { const obj = $t20_21.$get(); obj.encryptedPathSecret = v; $t20_21.$set(obj); } };
22368          $t58_59 = $t57_58.$get();
22369          $t59_60 = $t58_59.addr($t54_55);
22370          $t60_61 = $t59_60.$get();
22371          $t61_62 = decryptPathSecret(cs, $t53_54, ctx, $t60_61);
22372          $t62_63 = $t61_62[0];
22373          $t63_64 = $t61_62[1];
22374          $t64_65 = ($t63_64 !== null);
22375          if ($t64_65) {
22376            $block = 22; break;
22377          }
22378          else {
22379            $block = 23; break;
22380          }
22381          break;
22382        }
22383        case 22: {
22384          return [null, $t63_64];
22385          break;
22386        }
22387        case 23: {
22388          $t65_66 = ratchetTree$get(tree, $t9_10);
22389          $t66_67 = node$encryptionKey($t65_66);
22390          $t67_68 = nodePrivFromPathSecret(cs, $t62_63, $t66_67);
22391          $t68_69 = $t67_68[0];
22392          $t69_70 = $t67_68[1];
22393          $t70_71 = ($t69_70 !== null);
22394          if ($t70_71) {
22395            $block = 24; break;
22396          }
22397          else {
22398            $block = 25; break;
22399          }
22400          break;
22401        }
22402        case 24: {
22403          return [null, $t69_70];
22404          break;
22405        }
22406        case 25: {
22407          $t71_72 = $t9_10;
22408          $t72_73 = privTree.addr($t71_72);
22409          $t72_73.$set($t68_69);
22410          $t73_74 = ($t17_18 + 1);
22411          $t74_75 = $rt.builtin.sliceSlice($t2_3, $t73_74, undefined, undefined);
22412          $t75_76 = $rt.builtin.len($t74_75);
22413          $t76_77 = $t62_63;
22414          $t77_78 = -1;
22415          $block = 26; break;
22416          break;
22417        }
22418        case 26: {
22419          $t78_79 = ($t77_78 + 1);
22420          $t79_80 = ($t78_79 < $t75_76);
22421          if ($t79_80) {
22422            $block = 27; break;
22423          }
22424          else {
22425            $block = 28; break;
22426          }
22427          break;
22428        }
22429        case 27: {
22430          $t80_81 = $t74_75.addr($t78_79);
22431          $t81_82 = $t80_81.$get();
22432          $t82_83 = CipherSuite$deriveSecret(cs, $t76_77, 'path');
22433          $t83_84 = $t82_83[0];
22434          $t84_85 = $t82_83[1];
22435          $t85_86 = ($t84_85 !== null);
22436          if ($t85_86) {
22437            $block = 29; break;
22438          }
22439          else {
22440            $block = 30; break;
22441          }
22442          break;
22443        }
22444        case 28: {
22445          $t86_87 = CipherSuite$deriveSecret(cs, $t76_77, 'path');
22446          $t87_88 = $t86_87[0];
22447          $t88_89 = $t86_87[1];
22448          $t89_90 = ($t88_89 !== null);
22449          if ($t89_90) {
22450            $block = 33; break;
22451          }
22452          else {
22453            $block = 34; break;
22454          }
22455          break;
22456        }
22457        case 29: {
22458          return [null, $t84_85];
22459          break;
22460        }
22461        case 30: {
22462          $t90_91 = ratchetTree$get(tree, $t81_82);
22463          $t91_92 = node$encryptionKey($t90_91);
22464          $t92_93 = nodePrivFromPathSecret(cs, $t83_84, $t91_92);
22465          $t93_94 = $t92_93[0];
22466          $t94_95 = $t92_93[1];
22467          $t95_96 = ($t94_95 !== null);
22468          if ($t95_96) {
22469            $block = 31; break;
22470          }
22471          else {
22472            $block = 32; break;
22473          }
22474          break;
22475        }
22476        case 31: {
22477          return [null, $t94_95];
22478          break;
22479        }
22480        case 32: {
22481          $t96_97 = $t81_82;
22482          $t97_98 = privTree.addr($t96_97);
22483          $t97_98.$set($t93_94);
22484          $t76_77 = $t83_84;
22485          $t77_78 = $t78_79;
22486          $block = 26; break;
22487          break;
22488        }
22489        case 33: {
22490          return [null, $t88_89];
22491          break;
22492        }
22493        case 34: {
22494          return [$t87_88, null];
22495          break;
22496        }
22497      }
22498    }
22499  }
22500  
22501  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('decryptPathSecrets', ratchetTree$decryptPathSecrets);
22502  export function ratchetTree$filteredDirectPath(tree, x) {
22503    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
22504    let $block = 0;
22505    while (true) {
22506      switch ($block) {
22507        case 0: {
22508          $t0_1 = ratchetTree$numLeaves(tree);
22509          $t1_2 = x;
22510          $t2_3 = null;
22511          $block = 1; break;
22512          break;
22513        }
22514        case 1: {
22515          $t3_4 = numLeaves$parent($t0_1, $t1_2);
22516          $t4_5 = $t3_4[0];
22517          $t5_6 = $t3_4[1];
22518          if ($t5_6) {
22519            $block = 3; break;
22520          }
22521          else {
22522            $block = 2; break;
22523          }
22524          break;
22525        }
22526        case 2: {
22527          return $t2_3;
22528          break;
22529        }
22530        case 3: {
22531          $t6_7 = numLeaves$sibling($t0_1, $t1_2);
22532          $t7_8 = $t6_7[0];
22533          $t8_9 = $t6_7[1];
22534          if ($t8_9) {
22535            $block = 5; break;
22536          }
22537          else {
22538            $block = 4; break;
22539          }
22540          break;
22541        }
22542        case 4: {
22543          $t9_10 = $rt.types.makeInterface('string', 'unreachable');
22544          $rt.runtime.panic($t9_10);
22545          break;
22546        }
22547        case 5: {
22548          $t10_11 = ratchetTree$resolve(tree, $t7_8);
22549          $t11_12 = $rt.builtin.len($t10_11);
22550          $t12_13 = ($t11_12 > 0);
22551          if ($t12_13) {
22552            $block = 6; break;
22553          }
22554          else {
22555            $t17_18 = $t2_3;
22556            $block = 7; break;
22557          }
22558          break;
22559        }
22560        case 6: {
22561          $t13_14 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
22562          $t14_15 = $t13_14.$get().addr(0);
22563          $t14_15.$set($t4_5);
22564          $t15_16 = $rt.builtin.sliceSlice($t13_14.$get(), undefined, undefined, undefined);
22565          $t16_17 = $rt.builtin.appendSlice($t2_3, $t15_16);
22566          $t17_18 = $t16_17;
22567          $block = 7; break;
22568          break;
22569        }
22570        case 7: {
22571          $t1_2 = $t4_5;
22572          $t2_3 = $t17_18;
22573          $block = 1; break;
22574          break;
22575        }
22576      }
22577    }
22578  }
22579  
22580  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('filteredDirectPath', ratchetTree$filteredDirectPath);
22581  export function ratchetTree$findLeaf(tree, ln) {
22582    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26;
22583    let $block = 0;
22584    while (true) {
22585      switch ($block) {
22586        case 0: {
22587          $t0_1 = 0;
22588          $block = 1; break;
22589          break;
22590        }
22591        case 1: {
22592          $t1_2 = ratchetTree$numLeaves(tree);
22593          $t2_3 = $t1_2;
22594          $t3_4 = ($t0_1 < $t2_3);
22595          if ($t3_4) {
22596            $block = 2; break;
22597          }
22598          else {
22599            $block = 4; break;
22600          }
22601          break;
22602        }
22603        case 2: {
22604          $t4_5 = ratchetTree$getLeaf(tree, $t0_1);
22605          $t5_6 = ($t4_5 === null);
22606          if ($t5_6) {
22607            $block = 3; break;
22608          }
22609          else {
22610            $block = 5; break;
22611          }
22612          break;
22613        }
22614        case 3: {
22615          $t6_7 = (($t0_1 + 1) >>> 0);
22616          $t0_1 = $t6_7;
22617          $block = 1; break;
22618          break;
22619        }
22620        case 4: {
22621          return [0, false];
22622          break;
22623        }
22624        case 5: {
22625          $t7_8 = { $get() { return $t4_5.$get().encryptionKey; }, $set(v) { const obj = $t4_5.$get(); obj.encryptionKey = v; $t4_5.$set(obj); } };
22626          $t8_9 = $t7_8.$get();
22627          $t9_10 = { $get() { return ln.$get().encryptionKey; }, $set(v) { const obj = ln.$get(); obj.encryptionKey = v; ln.$set(obj); } };
22628          $t10_11 = $t9_10.$get();
22629          $t11_12 = $t8_9;
22630          $t12_13 = $t10_11;
22631          $t13_14 = bytesEqual($t11_12, $t12_13);
22632          if ($t13_14) {
22633            $block = 6; break;
22634          }
22635          else {
22636            $block = 3; break;
22637          }
22638          break;
22639        }
22640        case 6: {
22641          $t14_15 = $rt.types.makeInterface('*smesh.lol/web/common/mls.leafNode', ln);
22642          $t15_16 = marshalRaw($t14_15);
22643          $t16_17 = $t15_16[0];
22644          $t17_18 = $t15_16[1];
22645          $t18_19 = $rt.types.makeInterface('*smesh.lol/web/common/mls.leafNode', $t4_5);
22646          $t19_20 = marshalRaw($t18_19);
22647          $t20_21 = $t19_20[0];
22648          $t21_22 = $t19_20[1];
22649          $t22_23 = ($t17_18 === null);
22650          if ($t22_23) {
22651            $block = 9; break;
22652          }
22653          else {
22654            $t24_25 = false;
22655            $block = 8; break;
22656          }
22657          break;
22658        }
22659        case 7: {
22660          $t23_24 = bytesEqual($t16_17, $t20_21);
22661          $t24_25 = $t23_24;
22662          $block = 8; break;
22663          break;
22664        }
22665        case 8: {
22666          return [$t0_1, $t24_25];
22667          break;
22668        }
22669        case 9: {
22670          $t25_26 = ($t21_22 === null);
22671          if ($t25_26) {
22672            $block = 7; break;
22673          }
22674          else {
22675            $t24_25 = false;
22676            $block = 8; break;
22677          }
22678          break;
22679        }
22680      }
22681    }
22682  }
22683  
22684  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('findLeaf', ratchetTree$findLeaf);
22685  export function ratchetTree$findParentHash(tree, nodeIndices, ph) {
22686    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22;
22687    let $block = 0;
22688    while (true) {
22689      switch ($block) {
22690        case 0: {
22691          $t0_1 = $rt.builtin.len(nodeIndices);
22692          $t1_2 = -1;
22693          $block = 1; break;
22694          break;
22695        }
22696        case 1: {
22697          $t2_3 = ($t1_2 + 1);
22698          $t3_4 = ($t2_3 < $t0_1);
22699          if ($t3_4) {
22700            $block = 2; break;
22701          }
22702          else {
22703            $block = 3; break;
22704          }
22705          break;
22706        }
22707        case 2: {
22708          $t4_5 = nodeIndices.addr($t2_3);
22709          $t5_6 = $t4_5.$get();
22710          $t6_7 = ratchetTree$get(tree, $t5_6);
22711          $t7_8 = ($t6_7 === null);
22712          if ($t7_8) {
22713            $t1_2 = $t2_3;
22714            $block = 1; break;
22715          }
22716          else {
22717            $block = 4; break;
22718          }
22719          break;
22720        }
22721        case 3: {
22722          return false;
22723          break;
22724        }
22725        case 4: {
22726          $t8_9 = { $get() { return $t6_7.$get().nodeType; }, $set(v) { const obj = $t6_7.$get(); obj.nodeType = v; $t6_7.$set(obj); } };
22727          $t9_10 = $t8_9.$get();
22728          $t10_11 = ($t9_10 === 1);
22729          if ($t10_11) {
22730            $block = 6; break;
22731          }
22732          else {
22733            $block = 8; break;
22734          }
22735          break;
22736        }
22737        case 5: {
22738          $t12_13 = bytesEqual($t11_12, ph);
22739          if ($t12_13) {
22740            $block = 9; break;
22741          }
22742          else {
22743            $t1_2 = $t2_3;
22744            $block = 1; break;
22745          }
22746          break;
22747        }
22748        case 6: {
22749          $t13_14 = { $get() { return $t6_7.$get().leafNode; }, $set(v) { const obj = $t6_7.$get(); obj.leafNode = v; $t6_7.$set(obj); } };
22750          $t14_15 = $t13_14.$get();
22751          $t15_16 = { $get() { return $t14_15.$get().parentHash; }, $set(v) { const obj = $t14_15.$get(); obj.parentHash = v; $t14_15.$set(obj); } };
22752          $t16_17 = $t15_16.$get();
22753          $t11_12 = $t16_17;
22754          $block = 5; break;
22755          break;
22756        }
22757        case 7: {
22758          $t17_18 = { $get() { return $t6_7.$get().parentNode; }, $set(v) { const obj = $t6_7.$get(); obj.parentNode = v; $t6_7.$set(obj); } };
22759          $t18_19 = $t17_18.$get();
22760          $t19_20 = { $get() { return $t18_19.$get().parentHash; }, $set(v) { const obj = $t18_19.$get(); obj.parentHash = v; $t18_19.$set(obj); } };
22761          $t20_21 = $t19_20.$get();
22762          $t11_12 = $t20_21;
22763          $block = 5; break;
22764          break;
22765        }
22766        case 8: {
22767          $t21_22 = ($t9_10 === 2);
22768          if ($t21_22) {
22769            $block = 7; break;
22770          }
22771          else {
22772            $t11_12 = null;
22773            $block = 5; break;
22774          }
22775          break;
22776        }
22777        case 9: {
22778          return true;
22779          break;
22780        }
22781      }
22782    }
22783  }
22784  
22785  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('findParentHash', ratchetTree$findParentHash);
22786  export function ratchetTree$get(tree, i) {
22787    let $t0_1, $t1_2, $t2_3;
22788    $t0_1 = i;
22789    $t1_2 = tree.addr($t0_1);
22790    $t2_3 = $t1_2.$get();
22791    return $t2_3;
22792  }
22793  
22794  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('get', ratchetTree$get);
22795  export function ratchetTree$getLeaf(tree, li) {
22796    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
22797    let $block = 0;
22798    while (true) {
22799      switch ($block) {
22800        case 0: {
22801          $t0_1 = leafIndex$nodeIndex(li);
22802          $t1_2 = ratchetTree$get(tree, $t0_1);
22803          $t2_3 = ($t1_2 === null);
22804          if ($t2_3) {
22805            $block = 1; break;
22806          }
22807          else {
22808            $block = 2; break;
22809          }
22810          break;
22811        }
22812        case 1: {
22813          return null;
22814          break;
22815        }
22816        case 2: {
22817          $t3_4 = { $get() { return $t1_2.$get().leafNode; }, $set(v) { const obj = $t1_2.$get(); obj.leafNode = v; $t1_2.$set(obj); } };
22818          $t4_5 = $t3_4.$get();
22819          return $t4_5;
22820          break;
22821        }
22822      }
22823    }
22824  }
22825  
22826  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('getLeaf', ratchetTree$getLeaf);
22827  export function ratchetTree$keys(tree) {
22828    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
22829    let $block = 0;
22830    while (true) {
22831      switch ($block) {
22832        case 0: {
22833          $t0_1 = $rt.builtin.makeMap('string');
22834          $t1_2 = $rt.builtin.makeMap('string');
22835          $t2_3 = 0;
22836          $block = 1; break;
22837          break;
22838        }
22839        case 1: {
22840          $t3_4 = ratchetTree$numLeaves(tree);
22841          $t4_5 = $t3_4;
22842          $t5_6 = ($t2_3 < $t4_5);
22843          if ($t5_6) {
22844            $block = 2; break;
22845          }
22846          else {
22847            $block = 4; break;
22848          }
22849          break;
22850        }
22851        case 2: {
22852          $t6_7 = ratchetTree$getLeaf(tree, $t2_3);
22853          $t7_8 = ($t6_7 === null);
22854          if ($t7_8) {
22855            $block = 3; break;
22856          }
22857          else {
22858            $block = 5; break;
22859          }
22860          break;
22861        }
22862        case 3: {
22863          $t8_9 = (($t2_3 + 1) >>> 0);
22864          $t2_3 = $t8_9;
22865          $block = 1; break;
22866          break;
22867        }
22868        case 4: {
22869          return [$t0_1, $t1_2];
22870          break;
22871        }
22872        case 5: {
22873          $t9_10 = { $get() { return $t6_7.$get().signatureKey; }, $set(v) { const obj = $t6_7.$get(); obj.signatureKey = v; $t6_7.$set(obj); } };
22874          $t10_11 = $t9_10.$get();
22875          $rt.builtin.mapUpdate($t0_1, $t10_11, true);
22876          $t11_12 = { $get() { return $t6_7.$get().encryptionKey; }, $set(v) { const obj = $t6_7.$get(); obj.encryptionKey = v; $t6_7.$set(obj); } };
22877          $t12_13 = $t11_12.$get();
22878          $rt.builtin.mapUpdate($t1_2, $t12_13, true);
22879          $block = 3; break;
22880          break;
22881        }
22882      }
22883    }
22884  }
22885  
22886  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('keys', ratchetTree$keys);
22887  export function ratchetTree$marshal(tree, w) {
22888    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16;
22889    let $block = 0;
22890    while (true) {
22891      switch ($block) {
22892        case 0: {
22893          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
22894          $t0_1.$set(tree);
22895          $t1_2 = $t0_1.$get();
22896          $t2_3 = $rt.builtin.len($t1_2);
22897          $t9_10 = $t2_3;
22898          $block = 3; break;
22899          break;
22900        }
22901        case 1: {
22902          $t3_4 = ($t9_10 - 1);
22903          $t9_10 = $t3_4;
22904          $block = 3; break;
22905          break;
22906        }
22907        case 2: {
22908          $t4_5 = $t0_1.$get();
22909          $t5_6 = $rt.builtin.sliceSlice($t4_5, undefined, $t9_10, undefined);
22910          $t6_7 = $rt.builtin.len($t5_6);
22911          $t7_8 = ratchetTree$marshal$1.bind(null, $t0_1);
22912          $t8_9 = Writer$writeVector(w, $t6_7, $t7_8);
22913          return;
22914          break;
22915        }
22916        case 3: {
22917          $t10_11 = ($t9_10 > 0);
22918          if ($t10_11) {
22919            $block = 4; break;
22920          }
22921          else {
22922            $block = 2; break;
22923          }
22924          break;
22925        }
22926        case 4: {
22927          $t11_12 = $t0_1.$get();
22928          $t12_13 = ($t9_10 - 1);
22929          $t13_14 = $t11_12.addr($t12_13);
22930          $t14_15 = $t13_14.$get();
22931          $t15_16 = ($t14_15 === null);
22932          if ($t15_16) {
22933            $block = 1; break;
22934          }
22935          else {
22936            $block = 2; break;
22937          }
22938          break;
22939        }
22940      }
22941    }
22942  }
22943  
22944  function ratchetTree$marshal$1(tree, w, i) {
22945    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
22946    let $block = 0;
22947    while (true) {
22948      switch ($block) {
22949        case 0: {
22950          $t0_1 = tree.$get();
22951          $t1_2 = $t0_1.addr(i);
22952          $t2_3 = $t1_2.$get();
22953          $t3_4 = ($t2_3 !== null);
22954          $t4_5 = Writer$writeOptional(w, $t3_4);
22955          $t5_6 = ($t2_3 !== null);
22956          if ($t5_6) {
22957            $block = 1; break;
22958          }
22959          else {
22960            $block = 2; break;
22961          }
22962          break;
22963        }
22964        case 1: {
22965          $t6_7 = node$marshal($t2_3, w);
22966          $block = 2; break;
22967          break;
22968        }
22969        case 2: {
22970          return;
22971          break;
22972        }
22973      }
22974    }
22975  }
22976  
22977  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('marshal', ratchetTree$marshal);
22978  export function ratchetTree$mergeUpdatePath(tree, cs, senderLI, path) {
22979    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79;
22980    let $block = 0;
22981    while (true) {
22982      switch ($block) {
22983        case 0: {
22984          $t0_1 = leafIndex$nodeIndex(senderLI);
22985          $t1_2 = ratchetTree$numLeaves(tree);
22986          $t2_3 = numLeaves$directPath($t1_2, $t0_1);
22987          $t3_4 = $rt.builtin.len($t2_3);
22988          $t4_5 = -1;
22989          $block = 1; break;
22990          break;
22991        }
22992        case 1: {
22993          $t5_6 = ($t4_5 + 1);
22994          $t6_7 = ($t5_6 < $t3_4);
22995          if ($t6_7) {
22996            $block = 2; break;
22997          }
22998          else {
22999            $block = 3; break;
23000          }
23001          break;
23002        }
23003        case 2: {
23004          $t7_8 = $t2_3.addr($t5_6);
23005          $t8_9 = $t7_8.$get();
23006          $t9_10 = ratchetTree$set(tree, $t8_9, null);
23007          $t4_5 = $t5_6;
23008          $block = 1; break;
23009          break;
23010        }
23011        case 3: {
23012          $t10_11 = ratchetTree$filteredDirectPath(tree, $t0_1);
23013          $t11_12 = $rt.builtin.len($t10_11);
23014          $t12_13 = { $get() { return path.$get().nodes; }, $set(v) { const obj = path.$get(); obj.nodes = v; path.$set(obj); } };
23015          $t13_14 = $t12_13.$get();
23016          $t14_15 = $rt.builtin.len($t13_14);
23017          $t15_16 = ($t11_12 !== $t14_15);
23018          if ($t15_16) {
23019            $block = 4; break;
23020          }
23021          else {
23022            $block = 5; break;
23023          }
23024          break;
23025        }
23026        case 4: {
23027          $t16_17 = errors.New('mls: update path length mismatch');
23028          return $t16_17;
23029          break;
23030        }
23031        case 5: {
23032          $t17_18 = $rt.builtin.len($t10_11);
23033          $t18_19 = -1;
23034          $block = 6; break;
23035          break;
23036        }
23037        case 6: {
23038          $t19_20 = ($t18_19 + 1);
23039          $t20_21 = ($t19_20 < $t17_18);
23040          if ($t20_21) {
23041            $block = 7; break;
23042          }
23043          else {
23044            $block = 8; break;
23045          }
23046          break;
23047        }
23048        case 7: {
23049          $t21_22 = $t10_11.addr($t19_20);
23050          $t22_23 = $t21_22.$get();
23051          $t23_24 = { $value: { nodeType: 0, leafNode: null, parentNode: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
23052          $t24_25 = { $get() { return $t23_24.$get().nodeType; }, $set(v) { const obj = $t23_24.$get(); obj.nodeType = v; $t23_24.$set(obj); } };
23053          $t25_26 = { $get() { return $t23_24.$get().parentNode; }, $set(v) { const obj = $t23_24.$get(); obj.parentNode = v; $t23_24.$set(obj); } };
23054          $t26_27 = { $value: { encryptionKey: null, parentHash: null, unmergedLeaves: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
23055          $t27_28 = { $get() { return $t26_27.$get().encryptionKey; }, $set(v) { const obj = $t26_27.$get(); obj.encryptionKey = v; $t26_27.$set(obj); } };
23056          $t28_29 = { $get() { return path.$get().nodes; }, $set(v) { const obj = path.$get(); obj.nodes = v; path.$set(obj); } };
23057          $t29_30 = $t28_29.$get();
23058          $t30_31 = $t29_30.addr($t19_20);
23059          $t31_32 = { $get() { return $t30_31.$get().encryptionKey; }, $set(v) { const obj = $t30_31.$get(); obj.encryptionKey = v; $t30_31.$set(obj); } };
23060          $t32_33 = $t31_32.$get();
23061          $t27_28.$set($t32_33);
23062          $t24_25.$set(2);
23063          $t25_26.$set($t26_27);
23064          $t33_34 = ratchetTree$set(tree, $t22_23, $t23_24);
23065          $t18_19 = $t19_20;
23066          $block = 6; break;
23067          break;
23068        }
23069        case 8: {
23070          $t34_35 = $rt.builtin.len($t10_11);
23071          $t35_36 = ($t34_35 - 1);
23072          $t36_37 = null;
23073          $t37_38 = $t35_36;
23074          $block = 9; break;
23075          break;
23076        }
23077        case 9: {
23078          $t38_39 = ($t37_38 >= 0);
23079          if ($t38_39) {
23080            $block = 10; break;
23081          }
23082          else {
23083            $block = 11; break;
23084          }
23085          break;
23086        }
23087        case 10: {
23088          $t39_40 = $t10_11.addr($t37_38);
23089          $t40_41 = $t39_40.$get();
23090          $t41_42 = ratchetTree$get(tree, $t40_41);
23091          $t42_43 = { $get() { return $t41_42.$get().parentNode; }, $set(v) { const obj = $t41_42.$get(); obj.parentNode = v; $t41_42.$set(obj); } };
23092          $t43_44 = $t42_43.$get();
23093          $t44_45 = nodeIndex$children($t40_41);
23094          $t45_46 = $t44_45[0];
23095          $t46_47 = $t44_45[1];
23096          $t47_48 = $t44_45[2];
23097          if ($t47_48) {
23098            $block = 13; break;
23099          }
23100          else {
23101            $block = 12; break;
23102          }
23103          break;
23104        }
23105        case 11: {
23106          $t48_49 = { $get() { return path.$get().leafNode; }, $set(v) { const obj = path.$get(); obj.leafNode = v; path.$set(obj); } };
23107          $t49_50 = { $get() { return $t48_49.$get().parentHash; }, $set(v) { const obj = $t48_49.$get(); obj.parentHash = v; $t48_49.$set(obj); } };
23108          $t50_51 = $t49_50.$get();
23109          $t51_52 = bytesEqual($t50_51, $t36_37);
23110          if ($t51_52) {
23111            $block = 26; break;
23112          }
23113          else {
23114            $block = 25; break;
23115          }
23116          break;
23117        }
23118        case 12: {
23119          $t52_53 = $rt.types.makeInterface('string', 'unreachable');
23120          $rt.runtime.panic($t52_53);
23121          break;
23122        }
23123        case 13: {
23124          $t53_54 = $rt.builtin.len($t2_3);
23125          $t54_55 = -1;
23126          $block = 14; break;
23127          break;
23128        }
23129        case 14: {
23130          $t55_56 = ($t54_55 + 1);
23131          $t56_57 = ($t55_56 < $t53_54);
23132          if ($t56_57) {
23133            $block = 15; break;
23134          }
23135          else {
23136            $t60_61 = false;
23137            $block = 16; break;
23138          }
23139          break;
23140        }
23141        case 15: {
23142          $t57_58 = $t2_3.addr($t55_56);
23143          $t58_59 = $t57_58.$get();
23144          $t59_60 = ($t58_59 === $t45_46);
23145          if ($t59_60) {
23146            $block = 17; break;
23147          }
23148          else {
23149            $t54_55 = $t55_56;
23150            $block = 14; break;
23151          }
23152          break;
23153        }
23154        case 16: {
23155          $t61_62 = ($t45_46 === $t0_1);
23156          if ($t61_62) {
23157            $block = 18; break;
23158          }
23159          else {
23160            $block = 20; break;
23161          }
23162          break;
23163        }
23164        case 17: {
23165          $t60_61 = true;
23166          $block = 16; break;
23167          break;
23168        }
23169        case 18: {
23170          $t62_63 = $t46_47;
23171          $block = 19; break;
23172          break;
23173        }
23174        case 19: {
23175          $t63_64 = ratchetTree$computeTreeHash(tree, cs, $t62_63, $t1_2, null);
23176          $t64_65 = $t63_64[0];
23177          $t65_66 = $t63_64[1];
23178          $t66_67 = ($t65_66 !== null);
23179          if ($t66_67) {
23180            $block = 21; break;
23181          }
23182          else {
23183            $block = 22; break;
23184          }
23185          break;
23186        }
23187        case 20: {
23188          if ($t60_61) {
23189            $block = 18; break;
23190          }
23191          else {
23192            $t62_63 = $t45_46;
23193            $block = 19; break;
23194          }
23195          break;
23196        }
23197        case 21: {
23198          return $t65_66;
23199          break;
23200        }
23201        case 22: {
23202          $t67_68 = { $get() { return $t43_44.$get().parentHash; }, $set(v) { const obj = $t43_44.$get(); obj.parentHash = v; $t43_44.$set(obj); } };
23203          $t67_68.$set($t36_37);
23204          $t68_69 = parentNode$computeParentHash($t43_44, cs, $t64_65);
23205          $t69_70 = $t68_69[0];
23206          $t70_71 = $t68_69[1];
23207          $t71_72 = ($t70_71 !== null);
23208          if ($t71_72) {
23209            $block = 23; break;
23210          }
23211          else {
23212            $block = 24; break;
23213          }
23214          break;
23215        }
23216        case 23: {
23217          return $t70_71;
23218          break;
23219        }
23220        case 24: {
23221          $t72_73 = ($t37_38 - 1);
23222          $t36_37 = $t69_70;
23223          $t37_38 = $t72_73;
23224          $block = 9; break;
23225          break;
23226        }
23227        case 25: {
23228          $t73_74 = errors.New('mls: parent hash mismatch for update path leaf node');
23229          return $t73_74;
23230          break;
23231        }
23232        case 26: {
23233          $t74_75 = { $value: { nodeType: 0, leafNode: null, parentNode: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
23234          $t75_76 = { $get() { return $t74_75.$get().nodeType; }, $set(v) { const obj = $t74_75.$get(); obj.nodeType = v; $t74_75.$set(obj); } };
23235          $t76_77 = { $get() { return $t74_75.$get().leafNode; }, $set(v) { const obj = $t74_75.$get(); obj.leafNode = v; $t74_75.$set(obj); } };
23236          $t77_78 = { $get() { return path.$get().leafNode; }, $set(v) { const obj = path.$get(); obj.leafNode = v; path.$set(obj); } };
23237          $t75_76.$set(1);
23238          $t76_77.$set($t77_78);
23239          $t78_79 = ratchetTree$set(tree, $t0_1, $t74_75);
23240          return null;
23241          break;
23242        }
23243      }
23244    }
23245  }
23246  
23247  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('mergeUpdatePath', ratchetTree$mergeUpdatePath);
23248  export function ratchetTree$numLeaves(tree) {
23249    let $t0_1, $t1_2, $t2_3;
23250    $t0_1 = $rt.builtin.len(tree);
23251    $t1_2 = $t0_1;
23252    $t2_3 = numLeavesFromWidth($t1_2);
23253    return $t2_3;
23254  }
23255  
23256  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('numLeaves', ratchetTree$numLeaves);
23257  export function ratchetTree$resolve(tree, x) {
23258    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32;
23259    let $block = 0;
23260    while (true) {
23261      switch ($block) {
23262        case 0: {
23263          $t0_1 = ratchetTree$get(tree, x);
23264          $t1_2 = ($t0_1 === null);
23265          if ($t1_2) {
23266            $block = 1; break;
23267          }
23268          else {
23269            $block = 2; break;
23270          }
23271          break;
23272        }
23273        case 1: {
23274          $t2_3 = nodeIndex$children(x);
23275          $t3_4 = $t2_3[0];
23276          $t4_5 = $t2_3[1];
23277          $t5_6 = $t2_3[2];
23278          if ($t5_6) {
23279            $block = 4; break;
23280          }
23281          else {
23282            $block = 3; break;
23283          }
23284          break;
23285        }
23286        case 2: {
23287          $t6_7 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
23288          $t7_8 = $t6_7.$get().addr(0);
23289          $t7_8.$set(x);
23290          $t8_9 = $rt.builtin.sliceSlice($t6_7.$get(), undefined, undefined, undefined);
23291          $t9_10 = { $get() { return $t0_1.$get().nodeType; }, $set(v) { const obj = $t0_1.$get(); obj.nodeType = v; $t0_1.$set(obj); } };
23292          $t10_11 = $t9_10.$get();
23293          $t11_12 = ($t10_11 === 2);
23294          if ($t11_12) {
23295            $block = 5; break;
23296          }
23297          else {
23298            $t20_21 = $t8_9;
23299            $block = 6; break;
23300          }
23301          break;
23302        }
23303        case 3: {
23304          return null;
23305          break;
23306        }
23307        case 4: {
23308          $t12_13 = ratchetTree$resolve(tree, $t3_4);
23309          $t13_14 = ratchetTree$resolve(tree, $t4_5);
23310          $t14_15 = $rt.builtin.appendSlice($t12_13, $t13_14);
23311          return $t14_15;
23312          break;
23313        }
23314        case 5: {
23315          $t15_16 = { $get() { return $t0_1.$get().parentNode; }, $set(v) { const obj = $t0_1.$get(); obj.parentNode = v; $t0_1.$set(obj); } };
23316          $t16_17 = $t15_16.$get();
23317          $t17_18 = { $get() { return $t16_17.$get().unmergedLeaves; }, $set(v) { const obj = $t16_17.$get(); obj.unmergedLeaves = v; $t16_17.$set(obj); } };
23318          $t18_19 = $t17_18.$get();
23319          $t19_20 = $rt.builtin.len($t18_19);
23320          $t21_22 = $t8_9;
23321          $t22_23 = -1;
23322          $block = 7; break;
23323          break;
23324        }
23325        case 6: {
23326          return $t20_21;
23327          break;
23328        }
23329        case 7: {
23330          $t23_24 = ($t22_23 + 1);
23331          $t24_25 = ($t23_24 < $t19_20);
23332          if ($t24_25) {
23333            $block = 8; break;
23334          }
23335          else {
23336            $t20_21 = $t21_22;
23337            $block = 6; break;
23338          }
23339          break;
23340        }
23341        case 8: {
23342          $t25_26 = $t18_19.addr($t23_24);
23343          $t26_27 = $t25_26.$get();
23344          $t27_28 = leafIndex$nodeIndex($t26_27);
23345          $t28_29 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
23346          $t29_30 = $t28_29.$get().addr(0);
23347          $t29_30.$set($t27_28);
23348          $t30_31 = $rt.builtin.sliceSlice($t28_29.$get(), undefined, undefined, undefined);
23349          $t31_32 = $rt.builtin.appendSlice($t21_22, $t30_31);
23350          $t21_22 = $t31_32;
23351          $t22_23 = $t23_24;
23352          $block = 7; break;
23353          break;
23354        }
23355      }
23356    }
23357  }
23358  
23359  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('resolve', ratchetTree$resolve);
23360  export function ratchetTree$set(tree, i, nd) {
23361    let $t0_1, $t1_2;
23362    $t0_1 = i;
23363    $t1_2 = tree.addr($t0_1);
23364    $t1_2.$set(nd);
23365    return;
23366  }
23367  
23368  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('set', ratchetTree$set);
23369  export function ratchetTree$supportedCreds(tree) {
23370    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29;
23371    let $block = 0;
23372    while (true) {
23373      switch ($block) {
23374        case 0: {
23375          $t0_1 = $rt.builtin.makeMap('int');
23376          $t1_2 = 0;
23377          $t2_3 = 0;
23378          $block = 1; break;
23379          break;
23380        }
23381        case 1: {
23382          $t3_4 = ratchetTree$numLeaves(tree);
23383          $t4_5 = $t3_4;
23384          $t5_6 = ($t2_3 < $t4_5);
23385          if ($t5_6) {
23386            $block = 2; break;
23387          }
23388          else {
23389            $block = 4; break;
23390          }
23391          break;
23392        }
23393        case 2: {
23394          $t6_7 = ratchetTree$getLeaf(tree, $t2_3);
23395          $t7_8 = ($t6_7 === null);
23396          if ($t7_8) {
23397            $t8_9 = $t1_2;
23398            $block = 3; break;
23399          }
23400          else {
23401            $block = 5; break;
23402          }
23403          break;
23404        }
23405        case 3: {
23406          $t9_10 = (($t2_3 + 1) >>> 0);
23407          $t1_2 = $t8_9;
23408          $t2_3 = $t9_10;
23409          $block = 1; break;
23410          break;
23411        }
23412        case 4: {
23413          $t10_11 = $rt.builtin.makeMap('int');
23414          $t11_12 = { $entries: [...$t0_1.entries()], $pos: 0, next() { if (this.$pos >= this.$entries.length) return [false, null, null]; const [k, v] = this.$entries[this.$pos++]; return [true, k, v]; } };
23415          $block = 8; break;
23416          break;
23417        }
23418        case 5: {
23419          $t12_13 = ($t1_2 + 1);
23420          $t13_14 = { $get() { return $t6_7.$get().capabilities; }, $set(v) { const obj = $t6_7.$get(); obj.capabilities = v; $t6_7.$set(obj); } };
23421          $t14_15 = { $get() { return $t13_14.$get().credentials; }, $set(v) { const obj = $t13_14.$get(); obj.credentials = v; $t13_14.$set(obj); } };
23422          $t15_16 = $t14_15.$get();
23423          $t16_17 = $rt.builtin.len($t15_16);
23424          $t17_18 = -1;
23425          $block = 6; break;
23426          break;
23427        }
23428        case 6: {
23429          $t18_19 = ($t17_18 + 1);
23430          $t19_20 = ($t18_19 < $t16_17);
23431          if ($t19_20) {
23432            $block = 7; break;
23433          }
23434          else {
23435            $t8_9 = $t12_13;
23436            $block = 3; break;
23437          }
23438          break;
23439        }
23440        case 7: {
23441          $t20_21 = $t15_16.addr($t18_19);
23442          $t21_22 = $t20_21.$get();
23443          $t22_23 = $rt.builtin.mapLookup($t0_1, $t21_22).value;
23444          $t23_24 = ($t22_23 + 1);
23445          $rt.builtin.mapUpdate($t0_1, $t21_22, $t23_24);
23446          $t17_18 = $t18_19;
23447          $block = 6; break;
23448          break;
23449        }
23450        case 8: {
23451          $t24_25 = $t11_12.next();
23452          $t25_26 = $t24_25[0];
23453          if ($t25_26) {
23454            $block = 9; break;
23455          }
23456          else {
23457            $block = 10; break;
23458          }
23459          break;
23460        }
23461        case 9: {
23462          $t26_27 = $t24_25[1];
23463          $t27_28 = $t24_25[2];
23464          $t28_29 = ($t27_28 === $t1_2);
23465          if ($t28_29) {
23466            $block = 11; break;
23467          }
23468          else {
23469            $block = 8; break;
23470          }
23471          break;
23472        }
23473        case 10: {
23474          return $t10_11;
23475          break;
23476        }
23477        case 11: {
23478          $rt.builtin.mapUpdate($t10_11, $t26_27, true);
23479          $block = 8; break;
23480          break;
23481        }
23482      }
23483    }
23484  }
23485  
23486  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('supportedCreds', ratchetTree$supportedCreds);
23487  export function ratchetTree$update(tree, li, ln) {
23488    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
23489    let $block = 0;
23490    while (true) {
23491      switch ($block) {
23492        case 0: {
23493          $t0_1 = leafIndex$nodeIndex(li);
23494          $t1_2 = { $value: { nodeType: 0, leafNode: null, parentNode: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
23495          $t2_3 = { $get() { return $t1_2.$get().nodeType; }, $set(v) { const obj = $t1_2.$get(); obj.nodeType = v; $t1_2.$set(obj); } };
23496          $t3_4 = { $get() { return $t1_2.$get().leafNode; }, $set(v) { const obj = $t1_2.$get(); obj.leafNode = v; $t1_2.$set(obj); } };
23497          $t2_3.$set(1);
23498          $t3_4.$set(ln);
23499          $t4_5 = ratchetTree$set(tree, $t0_1, $t1_2);
23500          $t5_6 = ratchetTree$numLeaves(tree);
23501          $t6_7 = $t0_1;
23502          $block = 1; break;
23503          break;
23504        }
23505        case 1: {
23506          $t7_8 = numLeaves$parent($t5_6, $t6_7);
23507          $t8_9 = $t7_8[0];
23508          $t9_10 = $t7_8[1];
23509          if ($t9_10) {
23510            $block = 3; break;
23511          }
23512          else {
23513            $block = 2; break;
23514          }
23515          break;
23516        }
23517        case 2: {
23518          return;
23519          break;
23520        }
23521        case 3: {
23522          $t10_11 = ratchetTree$set(tree, $t8_9, null);
23523          $t6_7 = $t8_9;
23524          $block = 1; break;
23525          break;
23526        }
23527      }
23528    }
23529  }
23530  
23531  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('update', ratchetTree$update);
23532  export function ratchetTree$verifyIntegrity(tree, ctx, nowUnix) {
23533    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82;
23534    let $block = 0;
23535    while (true) {
23536      switch ($block) {
23537        case 0: {
23538          $t0_1 = { $get() { return ctx.$get().cipherSuite; }, $set(v) { const obj = ctx.$get(); obj.cipherSuite = v; ctx.$set(obj); } };
23539          $t1_2 = $t0_1.$get();
23540          $t2_3 = ratchetTree$numLeaves(tree);
23541          $t3_4 = ratchetTree$computeRootTreeHash(tree, $t1_2);
23542          $t4_5 = $t3_4[0];
23543          $t5_6 = $t3_4[1];
23544          $t6_7 = ($t5_6 !== null);
23545          if ($t6_7) {
23546            $block = 1; break;
23547          }
23548          else {
23549            $block = 2; break;
23550          }
23551          break;
23552        }
23553        case 1: {
23554          return $t5_6;
23555          break;
23556        }
23557        case 2: {
23558          $t7_8 = { $get() { return ctx.$get().treeHash; }, $set(v) { const obj = ctx.$get(); obj.treeHash = v; ctx.$set(obj); } };
23559          $t8_9 = $t7_8.$get();
23560          $t9_10 = bytesEqual($t4_5, $t8_9);
23561          if ($t9_10) {
23562            $block = 4; break;
23563          }
23564          else {
23565            $block = 3; break;
23566          }
23567          break;
23568        }
23569        case 3: {
23570          $t10_11 = errors.New('mls: tree hash verification failed');
23571          return $t10_11;
23572          break;
23573        }
23574        case 4: {
23575          $t11_12 = ratchetTree$verifyParentHashes(tree, $t1_2);
23576          if ($t11_12) {
23577            $block = 6; break;
23578          }
23579          else {
23580            $block = 5; break;
23581          }
23582          break;
23583        }
23584        case 5: {
23585          $t12_13 = errors.New('mls: parent hash verification failed');
23586          return $t12_13;
23587          break;
23588        }
23589        case 6: {
23590          $t13_14 = ratchetTree$supportedCreds(tree);
23591          $t14_15 = $rt.builtin.makeMap('string');
23592          $t15_16 = $rt.builtin.makeMap('string');
23593          $t16_17 = 0;
23594          $block = 7; break;
23595          break;
23596        }
23597        case 7: {
23598          $t17_18 = $t2_3;
23599          $t18_19 = ($t16_17 < $t17_18);
23600          if ($t18_19) {
23601            $block = 8; break;
23602          }
23603          else {
23604            $block = 10; break;
23605          }
23606          break;
23607        }
23608        case 8: {
23609          $t19_20 = ratchetTree$getLeaf(tree, $t16_17);
23610          $t20_21 = ($t19_20 === null);
23611          if ($t20_21) {
23612            $block = 9; break;
23613          }
23614          else {
23615            $block = 11; break;
23616          }
23617          break;
23618        }
23619        case 9: {
23620          $t21_22 = (($t16_17 + 1) >>> 0);
23621          $t16_17 = $t21_22;
23622          $block = 7; break;
23623          break;
23624        }
23625        case 10: {
23626          $t22_23 = $rt.builtin.len(tree);
23627          $t39_40 = -1;
23628          $block = 14; break;
23629          break;
23630        }
23631        case 11: {
23632          $t23_24 = { $value: { cipherSuite: 0, groupID: null, leafIndex: 0, supportedCreds: null, signatureKeys: null, encryptionKeys: null, nowUnix: 0n }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
23633          $t24_25 = { $get() { return $t23_24.$get().cipherSuite; }, $set(v) { const obj = $t23_24.$get(); obj.cipherSuite = v; $t23_24.$set(obj); } };
23634          $t25_26 = { $get() { return $t23_24.$get().groupID; }, $set(v) { const obj = $t23_24.$get(); obj.groupID = v; $t23_24.$set(obj); } };
23635          $t26_27 = { $get() { return ctx.$get().groupID; }, $set(v) { const obj = ctx.$get(); obj.groupID = v; ctx.$set(obj); } };
23636          $t27_28 = $t26_27.$get();
23637          $t28_29 = { $get() { return $t23_24.$get().leafIndex; }, $set(v) { const obj = $t23_24.$get(); obj.leafIndex = v; $t23_24.$set(obj); } };
23638          $t29_30 = { $get() { return $t23_24.$get().supportedCreds; }, $set(v) { const obj = $t23_24.$get(); obj.supportedCreds = v; $t23_24.$set(obj); } };
23639          $t30_31 = { $get() { return $t23_24.$get().signatureKeys; }, $set(v) { const obj = $t23_24.$get(); obj.signatureKeys = v; $t23_24.$set(obj); } };
23640          $t31_32 = { $get() { return $t23_24.$get().encryptionKeys; }, $set(v) { const obj = $t23_24.$get(); obj.encryptionKeys = v; $t23_24.$set(obj); } };
23641          $t32_33 = { $get() { return $t23_24.$get().nowUnix; }, $set(v) { const obj = $t23_24.$get(); obj.nowUnix = v; $t23_24.$set(obj); } };
23642          $t24_25.$set($t1_2);
23643          $t25_26.$set($t27_28);
23644          $t28_29.$set($t16_17);
23645          $t29_30.$set($t13_14);
23646          $t30_31.$set($t14_15);
23647          $t31_32.$set($t15_16);
23648          $t32_33.$set(nowUnix);
23649          $t33_34 = leafNode$verify($t19_20, $t23_24);
23650          $t34_35 = ($t33_34 !== null);
23651          if ($t34_35) {
23652            $block = 12; break;
23653          }
23654          else {
23655            $block = 13; break;
23656          }
23657          break;
23658        }
23659        case 12: {
23660          return $t33_34;
23661          break;
23662        }
23663        case 13: {
23664          $t35_36 = { $get() { return $t19_20.$get().signatureKey; }, $set(v) { const obj = $t19_20.$get(); obj.signatureKey = v; $t19_20.$set(obj); } };
23665          $t36_37 = $t35_36.$get();
23666          $rt.builtin.mapUpdate($t14_15, $t36_37, true);
23667          $t37_38 = { $get() { return $t19_20.$get().encryptionKey; }, $set(v) { const obj = $t19_20.$get(); obj.encryptionKey = v; $t19_20.$set(obj); } };
23668          $t38_39 = $t37_38.$get();
23669          $rt.builtin.mapUpdate($t15_16, $t38_39, true);
23670          $block = 9; break;
23671          break;
23672        }
23673        case 14: {
23674          $t40_41 = ($t39_40 + 1);
23675          $t41_42 = ($t40_41 < $t22_23);
23676          if ($t41_42) {
23677            $block = 15; break;
23678          }
23679          else {
23680            $block = 16; break;
23681          }
23682          break;
23683        }
23684        case 15: {
23685          $t42_43 = tree.addr($t40_41);
23686          $t43_44 = $t42_43.$get();
23687          $t44_45 = ($t43_44 === null);
23688          if ($t44_45) {
23689            $t39_40 = $t40_41;
23690            $block = 14; break;
23691          }
23692          else {
23693            $block = 18; break;
23694          }
23695          break;
23696        }
23697        case 16: {
23698          return null;
23699          break;
23700        }
23701        case 17: {
23702          $t45_46 = ($t40_41 >>> 0);
23703          $t46_47 = { $get() { return $t43_44.$get().parentNode; }, $set(v) { const obj = $t43_44.$get(); obj.parentNode = v; $t43_44.$set(obj); } };
23704          $t47_48 = $t46_47.$get();
23705          $t48_49 = { $get() { return $t47_48.$get().unmergedLeaves; }, $set(v) { const obj = $t47_48.$get(); obj.unmergedLeaves = v; $t47_48.$set(obj); } };
23706          $t49_50 = $t48_49.$get();
23707          $t50_51 = $rt.builtin.len($t49_50);
23708          $t54_55 = -1;
23709          $block = 19; break;
23710          break;
23711        }
23712        case 18: {
23713          $t51_52 = { $get() { return $t43_44.$get().nodeType; }, $set(v) { const obj = $t43_44.$get(); obj.nodeType = v; $t43_44.$set(obj); } };
23714          $t52_53 = $t51_52.$get();
23715          $t53_54 = ($t52_53 !== 2);
23716          if ($t53_54) {
23717            $t39_40 = $t40_41;
23718            $block = 14; break;
23719          }
23720          else {
23721            $block = 17; break;
23722          }
23723          break;
23724        }
23725        case 19: {
23726          $t55_56 = ($t54_55 + 1);
23727          $t56_57 = ($t55_56 < $t50_51);
23728          if ($t56_57) {
23729            $block = 20; break;
23730          }
23731          else {
23732            $block = 21; break;
23733          }
23734          break;
23735        }
23736        case 20: {
23737          $t57_58 = $t49_50.addr($t55_56);
23738          $t58_59 = $t57_58.$get();
23739          $t59_60 = leafIndex$nodeIndex($t58_59);
23740          $t65_66 = $t59_60;
23741          $block = 22; break;
23742          break;
23743        }
23744        case 21: {
23745          $t60_61 = { $get() { return $t43_44.$get().parentNode; }, $set(v) { const obj = $t43_44.$get(); obj.parentNode = v; $t43_44.$set(obj); } };
23746          $t61_62 = $t60_61.$get();
23747          $t62_63 = { $get() { return $t61_62.$get().encryptionKey; }, $set(v) { const obj = $t61_62.$get(); obj.encryptionKey = v; $t61_62.$set(obj); } };
23748          $t63_64 = $t62_63.$get();
23749          $t64_65 = $rt.builtin.mapLookup($t15_16, $t63_64).value;
23750          if ($t64_65) {
23751            $block = 28; break;
23752          }
23753          else {
23754            $block = 29; break;
23755          }
23756          break;
23757        }
23758        case 22: {
23759          $t66_67 = numLeaves$parent($t2_3, $t65_66);
23760          $t67_68 = $t66_67[0];
23761          $t68_69 = $t66_67[1];
23762          if ($t68_69) {
23763            $block = 24; break;
23764          }
23765          else {
23766            $block = 23; break;
23767          }
23768          break;
23769        }
23770        case 23: {
23771          $t69_70 = errors.New('mls: unmerged leaf not descendant of parent');
23772          return $t69_70;
23773          break;
23774        }
23775        case 24: {
23776          $t70_71 = ($t67_68 === $t45_46);
23777          if ($t70_71) {
23778            $t54_55 = $t55_56;
23779            $block = 19; break;
23780          }
23781          else {
23782            $block = 25; break;
23783          }
23784          break;
23785        }
23786        case 25: {
23787          $t71_72 = ratchetTree$get(tree, $t67_68);
23788          $t72_73 = ($t71_72 !== null);
23789          if ($t72_73) {
23790            $block = 27; break;
23791          }
23792          else {
23793            $t65_66 = $t67_68;
23794            $block = 22; break;
23795          }
23796          break;
23797        }
23798        case 26: {
23799          $t73_74 = errors.New('mls: intermediate node missing unmerged leaf');
23800          return $t73_74;
23801          break;
23802        }
23803        case 27: {
23804          $t74_75 = { $get() { return $t71_72.$get().parentNode; }, $set(v) { const obj = $t71_72.$get(); obj.parentNode = v; $t71_72.$set(obj); } };
23805          $t75_76 = $t74_75.$get();
23806          $t76_77 = hasUnmergedLeaf($t75_76, $t58_59);
23807          if ($t76_77) {
23808            $t65_66 = $t67_68;
23809            $block = 22; break;
23810          }
23811          else {
23812            $block = 26; break;
23813          }
23814          break;
23815        }
23816        case 28: {
23817          $t77_78 = errors.New('mls: duplicate encryption key in tree');
23818          return $t77_78;
23819          break;
23820        }
23821        case 29: {
23822          $t78_79 = { $get() { return $t43_44.$get().parentNode; }, $set(v) { const obj = $t43_44.$get(); obj.parentNode = v; $t43_44.$set(obj); } };
23823          $t79_80 = $t78_79.$get();
23824          $t80_81 = { $get() { return $t79_80.$get().encryptionKey; }, $set(v) { const obj = $t79_80.$get(); obj.encryptionKey = v; $t79_80.$set(obj); } };
23825          $t81_82 = $t80_81.$get();
23826          $rt.builtin.mapUpdate($t15_16, $t81_82, true);
23827          $t39_40 = $t40_41;
23828          $block = 14; break;
23829          break;
23830        }
23831      }
23832    }
23833  }
23834  
23835  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('verifyIntegrity', ratchetTree$verifyIntegrity);
23836  export function ratchetTree$verifyParentHashes(tree, cs) {
23837    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45;
23838    let $block = 0;
23839    while (true) {
23840      switch ($block) {
23841        case 0: {
23842          $t0_1 = ratchetTree$numLeaves(tree);
23843          $t1_2 = $rt.builtin.len(tree);
23844          $t2_3 = -1;
23845          $block = 1; break;
23846          break;
23847        }
23848        case 1: {
23849          $t3_4 = ($t2_3 + 1);
23850          $t4_5 = ($t3_4 < $t1_2);
23851          if ($t4_5) {
23852            $block = 2; break;
23853          }
23854          else {
23855            $block = 3; break;
23856          }
23857          break;
23858        }
23859        case 2: {
23860          $t5_6 = tree.addr($t3_4);
23861          $t6_7 = $t5_6.$get();
23862          $t7_8 = ($t6_7 === null);
23863          if ($t7_8) {
23864            $t2_3 = $t3_4;
23865            $block = 1; break;
23866          }
23867          else {
23868            $block = 4; break;
23869          }
23870          break;
23871        }
23872        case 3: {
23873          return true;
23874          break;
23875        }
23876        case 4: {
23877          $t8_9 = ($t3_4 >>> 0);
23878          $t9_10 = nodeIndex$children($t8_9);
23879          $t10_11 = $t9_10[0];
23880          $t11_12 = $t9_10[1];
23881          $t12_13 = $t9_10[2];
23882          if ($t12_13) {
23883            $block = 5; break;
23884          }
23885          else {
23886            $t2_3 = $t3_4;
23887            $block = 1; break;
23888          }
23889          break;
23890        }
23891        case 5: {
23892          $t13_14 = { $get() { return $t6_7.$get().parentNode; }, $set(v) { const obj = $t6_7.$get(); obj.parentNode = v; $t6_7.$set(obj); } };
23893          $t14_15 = $t13_14.$get();
23894          $t15_16 = $rt.builtin.makeMap('int');
23895          $t16_17 = { $get() { return $t14_15.$get().unmergedLeaves; }, $set(v) { const obj = $t14_15.$get(); obj.unmergedLeaves = v; $t14_15.$set(obj); } };
23896          $t17_18 = $t16_17.$get();
23897          $t18_19 = $rt.builtin.len($t17_18);
23898          $t19_20 = -1;
23899          $block = 6; break;
23900          break;
23901        }
23902        case 6: {
23903          $t20_21 = ($t19_20 + 1);
23904          $t21_22 = ($t20_21 < $t18_19);
23905          if ($t21_22) {
23906            $block = 7; break;
23907          }
23908          else {
23909            $block = 8; break;
23910          }
23911          break;
23912        }
23913        case 7: {
23914          $t22_23 = $t17_18.addr($t20_21);
23915          $t23_24 = $t22_23.$get();
23916          $rt.builtin.mapUpdate($t15_16, $t23_24, true);
23917          $t19_20 = $t20_21;
23918          $block = 6; break;
23919          break;
23920        }
23921        case 8: {
23922          $t24_25 = ratchetTree$computeTreeHash(tree, cs, $t10_11, $t0_1, $t15_16);
23923          $t25_26 = $t24_25[0];
23924          $t26_27 = $t24_25[1];
23925          $t27_28 = ($t26_27 !== null);
23926          if ($t27_28) {
23927            $block = 9; break;
23928          }
23929          else {
23930            $block = 10; break;
23931          }
23932          break;
23933        }
23934        case 9: {
23935          return false;
23936          break;
23937        }
23938        case 10: {
23939          $t28_29 = ratchetTree$computeTreeHash(tree, cs, $t11_12, $t0_1, $t15_16);
23940          $t29_30 = $t28_29[0];
23941          $t30_31 = $t28_29[1];
23942          $t31_32 = ($t30_31 !== null);
23943          if ($t31_32) {
23944            $block = 11; break;
23945          }
23946          else {
23947            $block = 12; break;
23948          }
23949          break;
23950        }
23951        case 11: {
23952          return false;
23953          break;
23954        }
23955        case 12: {
23956          $t32_33 = parentNode$computeParentHash($t14_15, cs, $t29_30);
23957          $t33_34 = $t32_33[0];
23958          $t34_35 = $t32_33[1];
23959          $t35_36 = ($t34_35 !== null);
23960          if ($t35_36) {
23961            $block = 13; break;
23962          }
23963          else {
23964            $block = 14; break;
23965          }
23966          break;
23967        }
23968        case 13: {
23969          return false;
23970          break;
23971        }
23972        case 14: {
23973          $t36_37 = parentNode$computeParentHash($t14_15, cs, $t25_26);
23974          $t37_38 = $t36_37[0];
23975          $t38_39 = $t36_37[1];
23976          $t39_40 = ($t38_39 !== null);
23977          if ($t39_40) {
23978            $block = 15; break;
23979          }
23980          else {
23981            $block = 16; break;
23982          }
23983          break;
23984        }
23985        case 15: {
23986          return false;
23987          break;
23988        }
23989        case 16: {
23990          $t40_41 = ratchetTree$resolve(tree, $t10_11);
23991          $t41_42 = ratchetTree$findParentHash(tree, $t40_41, $t33_34);
23992          $t42_43 = ratchetTree$resolve(tree, $t11_12);
23993          $t43_44 = ratchetTree$findParentHash(tree, $t42_43, $t37_38);
23994          $t44_45 = ($t41_42 === $t43_44);
23995          if ($t44_45) {
23996            $block = 17; break;
23997          }
23998          else {
23999            $t2_3 = $t3_4;
24000            $block = 1; break;
24001          }
24002          break;
24003        }
24004        case 17: {
24005          return false;
24006          break;
24007        }
24008      }
24009    }
24010  }
24011  
24012  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('verifyParentHashes', ratchetTree$verifyParentHashes);
24013  export function ratchetTree$add(tree, ln) {
24014    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49;
24015    let $block = 0;
24016    while (true) {
24017      switch ($block) {
24018        case 0: {
24019          $t0_1 = 0;
24020          $block = 1; break;
24021          break;
24022        }
24023        case 1: {
24024          $t1_2 = leafIndex$nodeIndex($t0_1);
24025          $t2_3 = $t1_2;
24026          $t3_4 = tree.$get();
24027          $t4_5 = $rt.builtin.len($t3_4);
24028          $t5_6 = ($t2_3 >= $t4_5);
24029          if ($t5_6) {
24030            $t6_7 = false;
24031            $block = 2; break;
24032          }
24033          else {
24034            $block = 3; break;
24035          }
24036          break;
24037        }
24038        case 2: {
24039          if ($t6_7) {
24040            $block = 7; break;
24041          }
24042          else {
24043            $block = 6; break;
24044          }
24045          break;
24046        }
24047        case 3: {
24048          $t7_8 = tree.$get();
24049          $t8_9 = ratchetTree$get($t7_8, $t1_2);
24050          $t9_10 = ($t8_9 === null);
24051          if ($t9_10) {
24052            $block = 4; break;
24053          }
24054          else {
24055            $block = 5; break;
24056          }
24057          break;
24058        }
24059        case 4: {
24060          $t6_7 = true;
24061          $block = 2; break;
24062          break;
24063        }
24064        case 5: {
24065          $t10_11 = (($t0_1 + 1) >>> 0);
24066          $t0_1 = $t10_11;
24067          $block = 1; break;
24068          break;
24069        }
24070        case 6: {
24071          $t11_12 = tree.$get();
24072          $t12_13 = $rt.builtin.len($t11_12);
24073          $t13_14 = ($t12_13 + 1);
24074          $t14_15 = ($t13_14 * 2);
24075          $t15_16 = ($t14_15 - 1);
24076          $block = 9; break;
24077          break;
24078        }
24079        case 7: {
24080          $t16_17 = tree.$get();
24081          $t17_18 = ratchetTree$numLeaves($t16_17);
24082          $t26_27 = $t1_2;
24083          $block = 10; break;
24084          break;
24085        }
24086        case 8: {
24087          $t18_19 = tree.$get();
24088          $t19_20 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24089          $t20_21 = $t19_20.$get().addr(0);
24090          $t20_21.$set(null);
24091          $t21_22 = $rt.builtin.sliceSlice($t19_20.$get(), undefined, undefined, undefined);
24092          $t22_23 = $rt.builtin.appendSlice($t18_19, $t21_22);
24093          tree.$set($t22_23);
24094          $block = 9; break;
24095          break;
24096        }
24097        case 9: {
24098          $t23_24 = tree.$get();
24099          $t24_25 = $rt.builtin.len($t23_24);
24100          $t25_26 = ($t24_25 < $t15_16);
24101          if ($t25_26) {
24102            $block = 8; break;
24103          }
24104          else {
24105            $block = 7; break;
24106          }
24107          break;
24108        }
24109        case 10: {
24110          $t27_28 = numLeaves$parent($t17_18, $t26_27);
24111          $t28_29 = $t27_28[0];
24112          $t29_30 = $t27_28[1];
24113          if ($t29_30) {
24114            $block = 12; break;
24115          }
24116          else {
24117            $block = 11; break;
24118          }
24119          break;
24120        }
24121        case 11: {
24122          $t30_31 = tree.$get();
24123          $t31_32 = { $value: { nodeType: 0, leafNode: null, parentNode: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
24124          $t32_33 = { $get() { return $t31_32.$get().nodeType; }, $set(v) { const obj = $t31_32.$get(); obj.nodeType = v; $t31_32.$set(obj); } };
24125          $t33_34 = { $get() { return $t31_32.$get().leafNode; }, $set(v) { const obj = $t31_32.$get(); obj.leafNode = v; $t31_32.$set(obj); } };
24126          $t32_33.$set(1);
24127          $t33_34.$set(ln);
24128          $t34_35 = ratchetTree$set($t30_31, $t1_2, $t31_32);
24129          return;
24130          break;
24131        }
24132        case 12: {
24133          $t35_36 = tree.$get();
24134          $t36_37 = ratchetTree$get($t35_36, $t28_29);
24135          $t37_38 = ($t36_37 !== null);
24136          if ($t37_38) {
24137            $block = 13; break;
24138          }
24139          else {
24140            $t26_27 = $t28_29;
24141            $block = 10; break;
24142          }
24143          break;
24144        }
24145        case 13: {
24146          $t38_39 = { $get() { return $t36_37.$get().parentNode; }, $set(v) { const obj = $t36_37.$get(); obj.parentNode = v; $t36_37.$set(obj); } };
24147          $t39_40 = $t38_39.$get();
24148          $t40_41 = { $get() { return $t36_37.$get().parentNode; }, $set(v) { const obj = $t36_37.$get(); obj.parentNode = v; $t36_37.$set(obj); } };
24149          $t41_42 = $t40_41.$get();
24150          $t42_43 = { $get() { return $t41_42.$get().unmergedLeaves; }, $set(v) { const obj = $t41_42.$get(); obj.unmergedLeaves = v; $t41_42.$set(obj); } };
24151          $t43_44 = $t42_43.$get();
24152          $t44_45 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24153          $t45_46 = $t44_45.$get().addr(0);
24154          $t45_46.$set($t0_1);
24155          $t46_47 = $rt.builtin.sliceSlice($t44_45.$get(), undefined, undefined, undefined);
24156          $t47_48 = $rt.builtin.appendSlice($t43_44, $t46_47);
24157          $t48_49 = { $get() { return $t39_40.$get().unmergedLeaves; }, $set(v) { const obj = $t39_40.$get(); obj.unmergedLeaves = v; $t39_40.$set(obj); } };
24158          $t48_49.$set($t47_48);
24159          $t26_27 = $t28_29;
24160          $block = 10; break;
24161          break;
24162        }
24163      }
24164    }
24165  }
24166  
24167  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('add', ratchetTree$add);
24168  export function ratchetTree$apply(tree, proposals, senders) {
24169    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47;
24170    let $block = 0;
24171    while (true) {
24172      switch ($block) {
24173        case 0: {
24174          $t0_1 = $rt.builtin.len(proposals);
24175          $t1_2 = -1;
24176          $block = 1; break;
24177          break;
24178        }
24179        case 1: {
24180          $t2_3 = ($t1_2 + 1);
24181          $t3_4 = ($t2_3 < $t0_1);
24182          if ($t3_4) {
24183            $block = 2; break;
24184          }
24185          else {
24186            $block = 3; break;
24187          }
24188          break;
24189        }
24190        case 2: {
24191          $t4_5 = proposals.addr($t2_3);
24192          $t5_6 = $t4_5.$get();
24193          $t6_7 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
24194          $t6_7.$set($rt.builtin.cloneValue($t5_6));
24195          $t7_8 = { $get() { return $t6_7.$get().proposalType; }, $set(v) { const obj = $t6_7.$get(); obj.proposalType = v; $t6_7.$set(obj); } };
24196          $t8_9 = $t7_8.$get();
24197          $t9_10 = ($t8_9 === 2);
24198          if ($t9_10) {
24199            $block = 4; break;
24200          }
24201          else {
24202            $t1_2 = $t2_3;
24203            $block = 1; break;
24204          }
24205          break;
24206        }
24207        case 3: {
24208          $t10_11 = $rt.builtin.len(proposals);
24209          $t18_19 = -1;
24210          $block = 5; break;
24211          break;
24212        }
24213        case 4: {
24214          $t11_12 = tree.$get();
24215          $t12_13 = senders.addr($t2_3);
24216          $t13_14 = $t12_13.$get();
24217          $t14_15 = { $get() { return $t6_7.$get().update; }, $set(v) { const obj = $t6_7.$get(); obj.update = v; $t6_7.$set(obj); } };
24218          $t15_16 = $t14_15.$get();
24219          $t16_17 = { $get() { return $t15_16.$get().leafNode; }, $set(v) { const obj = $t15_16.$get(); obj.leafNode = v; $t15_16.$set(obj); } };
24220          $t17_18 = ratchetTree$update($t11_12, $t13_14, $t16_17);
24221          $t1_2 = $t2_3;
24222          $block = 1; break;
24223          break;
24224        }
24225        case 5: {
24226          $t19_20 = ($t18_19 + 1);
24227          $t20_21 = ($t19_20 < $t10_11);
24228          if ($t20_21) {
24229            $block = 6; break;
24230          }
24231          else {
24232            $block = 7; break;
24233          }
24234          break;
24235        }
24236        case 6: {
24237          $t21_22 = proposals.addr($t19_20);
24238          $t22_23 = $t21_22.$get();
24239          $t23_24 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
24240          $t23_24.$set($rt.builtin.cloneValue($t22_23));
24241          $t24_25 = { $get() { return $t23_24.$get().proposalType; }, $set(v) { const obj = $t23_24.$get(); obj.proposalType = v; $t23_24.$set(obj); } };
24242          $t25_26 = $t24_25.$get();
24243          $t26_27 = ($t25_26 === 3);
24244          if ($t26_27) {
24245            $block = 8; break;
24246          }
24247          else {
24248            $t18_19 = $t19_20;
24249            $block = 5; break;
24250          }
24251          break;
24252        }
24253        case 7: {
24254          $t27_28 = $rt.builtin.len(proposals);
24255          $t33_34 = -1;
24256          $block = 9; break;
24257          break;
24258        }
24259        case 8: {
24260          $t28_29 = { $get() { return $t23_24.$get().remove; }, $set(v) { const obj = $t23_24.$get(); obj.remove = v; $t23_24.$set(obj); } };
24261          $t29_30 = $t28_29.$get();
24262          $t30_31 = { $get() { return $t29_30.$get().removed; }, $set(v) { const obj = $t29_30.$get(); obj.removed = v; $t29_30.$set(obj); } };
24263          $t31_32 = $t30_31.$get();
24264          $t32_33 = ratchetTree$remove(tree, $t31_32);
24265          $t18_19 = $t19_20;
24266          $block = 5; break;
24267          break;
24268        }
24269        case 9: {
24270          $t34_35 = ($t33_34 + 1);
24271          $t35_36 = ($t34_35 < $t27_28);
24272          if ($t35_36) {
24273            $block = 10; break;
24274          }
24275          else {
24276            $block = 11; break;
24277          }
24278          break;
24279        }
24280        case 10: {
24281          $t36_37 = proposals.addr($t34_35);
24282          $t37_38 = $t36_37.$get();
24283          $t38_39 = { $value: { proposalType: 0, add: null, update: null, remove: null, preSharedKey: null, reInit: null, externalInit: null, groupContextExtensions: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
24284          $t38_39.$set($rt.builtin.cloneValue($t37_38));
24285          $t39_40 = { $get() { return $t38_39.$get().proposalType; }, $set(v) { const obj = $t38_39.$get(); obj.proposalType = v; $t38_39.$set(obj); } };
24286          $t40_41 = $t39_40.$get();
24287          $t41_42 = ($t40_41 === 1);
24288          if ($t41_42) {
24289            $block = 12; break;
24290          }
24291          else {
24292            $t33_34 = $t34_35;
24293            $block = 9; break;
24294          }
24295          break;
24296        }
24297        case 11: {
24298          return;
24299          break;
24300        }
24301        case 12: {
24302          $t42_43 = { $get() { return $t38_39.$get().add; }, $set(v) { const obj = $t38_39.$get(); obj.add = v; $t38_39.$set(obj); } };
24303          $t43_44 = $t42_43.$get();
24304          $t44_45 = { $get() { return $t43_44.$get().keyPackage; }, $set(v) { const obj = $t43_44.$get(); obj.keyPackage = v; $t43_44.$set(obj); } };
24305          $t45_46 = { $get() { return $t44_45.$get().leafNode; }, $set(v) { const obj = $t44_45.$get(); obj.leafNode = v; $t44_45.$set(obj); } };
24306          $t46_47 = ratchetTree$add(tree, $t45_46);
24307          $t33_34 = $t34_35;
24308          $block = 9; break;
24309          break;
24310        }
24311      }
24312    }
24313  }
24314  
24315  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('apply', ratchetTree$apply);
24316  export function ratchetTree$remove(tree, li) {
24317    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33;
24318    let $block = 0;
24319    while (true) {
24320      switch ($block) {
24321        case 0: {
24322          $t0_1 = leafIndex$nodeIndex(li);
24323          $t1_2 = tree.$get();
24324          $t2_3 = ratchetTree$numLeaves($t1_2);
24325          $t3_4 = $t0_1;
24326          $block = 1; break;
24327          break;
24328        }
24329        case 1: {
24330          $t4_5 = tree.$get();
24331          $t5_6 = ratchetTree$set($t4_5, $t3_4, null);
24332          $t6_7 = numLeaves$parent($t2_3, $t3_4);
24333          $t7_8 = $t6_7[0];
24334          $t8_9 = $t6_7[1];
24335          if ($t8_9) {
24336            $t3_4 = $t7_8;
24337            $block = 1; break;
24338          }
24339          else {
24340            $block = 2; break;
24341          }
24342          break;
24343        }
24344        case 2: {
24345          $t9_10 = (($t2_3 - 1) >>> 0);
24346          $t10_11 = $t9_10;
24347          $t11_12 = tree.$get();
24348          $t12_13 = $rt.builtin.len($t11_12);
24349          $t13_14 = ($t12_13 + 1);
24350          $t14_15 = $t10_11;
24351          $t15_16 = $t13_14;
24352          $block = 3; break;
24353          break;
24354        }
24355        case 3: {
24356          $t16_17 = leafIndex$nodeIndex($t14_15);
24357          $t17_18 = tree.$get();
24358          $t18_19 = ratchetTree$get($t17_18, $t16_17);
24359          $t19_20 = ($t18_19 !== null);
24360          if ($t19_20) {
24361            $block = 4; break;
24362          }
24363          else {
24364            $block = 5; break;
24365          }
24366          break;
24367        }
24368        case 4: {
24369          $t20_21 = tree.$get();
24370          $t21_22 = $rt.builtin.len($t20_21);
24371          $t22_23 = ($t21_22 + 1);
24372          $t23_24 = ($t15_16 < $t22_23);
24373          if ($t23_24) {
24374            $block = 10; break;
24375          }
24376          else {
24377            $block = 11; break;
24378          }
24379          break;
24380        }
24381        case 5: {
24382          $t24_25 = $t16_17;
24383          $t25_26 = isPowerOf2($t24_25);
24384          if ($t25_26) {
24385            $block = 6; break;
24386          }
24387          else {
24388            $t27_28 = $t15_16;
24389            $block = 7; break;
24390          }
24391          break;
24392        }
24393        case 6: {
24394          $t26_27 = $t16_17;
24395          $t27_28 = $t26_27;
24396          $block = 7; break;
24397          break;
24398        }
24399        case 7: {
24400          $t28_29 = ($t14_15 === 0);
24401          if ($t28_29) {
24402            $block = 8; break;
24403          }
24404          else {
24405            $block = 9; break;
24406          }
24407          break;
24408        }
24409        case 8: {
24410          tree.$set(null);
24411          return;
24412          break;
24413        }
24414        case 9: {
24415          $t29_30 = (($t14_15 - 1) >>> 0);
24416          $t14_15 = $t29_30;
24417          $t15_16 = $t27_28;
24418          $block = 3; break;
24419          break;
24420        }
24421        case 10: {
24422          $t30_31 = tree.$get();
24423          $t31_32 = ($t15_16 - 1);
24424          $t32_33 = $rt.builtin.sliceSlice($t30_31, undefined, $t31_32, undefined);
24425          tree.$set($t32_33);
24426          $block = 11; break;
24427          break;
24428        }
24429        case 11: {
24430          return;
24431          break;
24432        }
24433      }
24434    }
24435  }
24436  
24437  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('remove', ratchetTree$remove);
24438  export function ratchetTree$unmarshal(tree, r) {
24439    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
24440    let $block = 0;
24441    while (true) {
24442      switch ($block) {
24443        case 0: {
24444          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
24445          $t0_1.$set(tree);
24446          $t1_2 = $t0_1.$get();
24447          $t2_3 = { $value: $rt.builtin.makeSlice(0, 0, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24448          $t3_4 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, undefined, undefined);
24449          $t1_2.$set($t3_4);
24450          $t4_5 = ratchetTree$unmarshal$1.bind(null, $t0_1);
24451          $t5_6 = Reader$readVector(r, $t4_5);
24452          $t6_7 = ($t5_6 !== null);
24453          if ($t6_7) {
24454            $block = 1; break;
24455          }
24456          else {
24457            $block = 4; break;
24458          }
24459          break;
24460        }
24461        case 1: {
24462          return $t5_6;
24463          break;
24464        }
24465        case 2: {
24466          $t7_8 = $t0_1.$get();
24467          $t8_9 = $t0_1.$get();
24468          $t9_10 = $t8_9.$get();
24469          $t10_11 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24470          $t11_12 = $t10_11.$get().addr(0);
24471          $t11_12.$set(null);
24472          $t12_13 = $rt.builtin.sliceSlice($t10_11.$get(), undefined, undefined, undefined);
24473          $t13_14 = $rt.builtin.appendSlice($t9_10, $t12_13);
24474          $t7_8.$set($t13_14);
24475          $block = 4; break;
24476          break;
24477        }
24478        case 3: {
24479          return null;
24480          break;
24481        }
24482        case 4: {
24483          $t14_15 = $t0_1.$get();
24484          $t15_16 = $t14_15.$get();
24485          $t16_17 = $rt.builtin.len($t15_16);
24486          $t17_18 = ($t16_17 + 1);
24487          $t18_19 = $t17_18;
24488          $t19_20 = isPowerOf2($t18_19);
24489          if ($t19_20) {
24490            $block = 3; break;
24491          }
24492          else {
24493            $block = 2; break;
24494          }
24495          break;
24496        }
24497      }
24498    }
24499  }
24500  
24501  function ratchetTree$unmarshal$1(tree, r) {
24502    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
24503    let $block = 0;
24504    while (true) {
24505      switch ($block) {
24506        case 0: {
24507          $t0_1 = Reader$readOptional(r);
24508          $t1_2 = $t0_1[0];
24509          $t2_3 = $t0_1[1];
24510          if ($t2_3) {
24511            $block = 2; break;
24512          }
24513          else {
24514            $block = 1; break;
24515          }
24516          break;
24517        }
24518        case 1: {
24519          $t3_4 = errUnexpectedEOF.$get();
24520          return $t3_4;
24521          break;
24522        }
24523        case 2: {
24524          if ($t1_2) {
24525            $block = 3; break;
24526          }
24527          else {
24528            $block = 5; break;
24529          }
24530          break;
24531        }
24532        case 3: {
24533          $t4_5 = { $value: { nodeType: 0, leafNode: null, parentNode: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
24534          $t5_6 = node$unmarshal($t4_5, r);
24535          $t6_7 = ($t5_6 !== null);
24536          if ($t6_7) {
24537            $block = 6; break;
24538          }
24539          else {
24540            $block = 7; break;
24541          }
24542          break;
24543        }
24544        case 4: {
24545          return null;
24546          break;
24547        }
24548        case 5: {
24549          $t7_8 = tree.$get();
24550          $t8_9 = tree.$get();
24551          $t9_10 = $t8_9.$get();
24552          $t10_11 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24553          $t11_12 = $t10_11.$get().addr(0);
24554          $t11_12.$set(null);
24555          $t12_13 = $rt.builtin.sliceSlice($t10_11.$get(), undefined, undefined, undefined);
24556          $t13_14 = $rt.builtin.appendSlice($t9_10, $t12_13);
24557          $t7_8.$set($t13_14);
24558          $block = 4; break;
24559          break;
24560        }
24561        case 6: {
24562          return $t5_6;
24563          break;
24564        }
24565        case 7: {
24566          $t14_15 = tree.$get();
24567          $t15_16 = tree.$get();
24568          $t16_17 = $t15_16.$get();
24569          $t17_18 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24570          $t18_19 = $t17_18.$get().addr(0);
24571          $t18_19.$set($t4_5);
24572          $t19_20 = $rt.builtin.sliceSlice($t17_18.$get(), undefined, undefined, undefined);
24573          $t20_21 = $rt.builtin.appendSlice($t16_17, $t19_20);
24574          $t14_15.$set($t20_21);
24575          $block = 4; break;
24576          break;
24577        }
24578      }
24579    }
24580  }
24581  
24582  $rt.types.getType('smesh.lol/web/common/mls.ratchetTree')?.methods?.set('unmarshal', ratchetTree$unmarshal);
24583  export function numLeaves$copath(n, x) {
24584    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25;
24585    let $block = 0;
24586    while (true) {
24587      switch ($block) {
24588        case 0: {
24589          $t0_1 = numLeaves$directPath(n, x);
24590          $t1_2 = $rt.builtin.len($t0_1);
24591          $t2_3 = ($t1_2 === 0);
24592          if ($t2_3) {
24593            $block = 1; break;
24594          }
24595          else {
24596            $block = 2; break;
24597          }
24598          break;
24599        }
24600        case 1: {
24601          return null;
24602          break;
24603        }
24604        case 2: {
24605          $t3_4 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24606          $t4_5 = $t3_4.$get().addr(0);
24607          $t4_5.$set(x);
24608          $t5_6 = $rt.builtin.sliceSlice($t3_4.$get(), undefined, undefined, undefined);
24609          $t6_7 = $rt.builtin.appendSlice($t5_6, $t0_1);
24610          $t7_8 = $rt.builtin.len($t6_7);
24611          $t8_9 = ($t7_8 - 1);
24612          $t9_10 = $rt.builtin.sliceSlice($t6_7, undefined, $t8_9, undefined);
24613          $t10_11 = $rt.builtin.len($t9_10);
24614          $t11_12 = null;
24615          $t12_13 = -1;
24616          $block = 3; break;
24617          break;
24618        }
24619        case 3: {
24620          $t13_14 = ($t12_13 + 1);
24621          $t14_15 = ($t13_14 < $t10_11);
24622          if ($t14_15) {
24623            $block = 4; break;
24624          }
24625          else {
24626            $block = 5; break;
24627          }
24628          break;
24629        }
24630        case 4: {
24631          $t15_16 = $t9_10.addr($t13_14);
24632          $t16_17 = $t15_16.$get();
24633          $t17_18 = numLeaves$sibling(n, $t16_17);
24634          $t18_19 = $t17_18[0];
24635          $t19_20 = $t17_18[1];
24636          if ($t19_20) {
24637            $block = 7; break;
24638          }
24639          else {
24640            $block = 6; break;
24641          }
24642          break;
24643        }
24644        case 5: {
24645          return $t11_12;
24646          break;
24647        }
24648        case 6: {
24649          $t20_21 = $rt.types.makeInterface('string', 'unreachable');
24650          $rt.runtime.panic($t20_21);
24651          break;
24652        }
24653        case 7: {
24654          $t21_22 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24655          $t22_23 = $t21_22.$get().addr(0);
24656          $t22_23.$set($t18_19);
24657          $t23_24 = $rt.builtin.sliceSlice($t21_22.$get(), undefined, undefined, undefined);
24658          $t24_25 = $rt.builtin.appendSlice($t11_12, $t23_24);
24659          $t11_12 = $t24_25;
24660          $t12_13 = $t13_14;
24661          $block = 3; break;
24662          break;
24663        }
24664      }
24665    }
24666  }
24667  
24668  $rt.types.getType('smesh.lol/web/common/mls.numLeaves')?.methods?.set('copath', numLeaves$copath);
24669  export function numLeaves$directPath(n, x) {
24670    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
24671    let $block = 0;
24672    while (true) {
24673      switch ($block) {
24674        case 0: {
24675          $t0_1 = x;
24676          $t1_2 = null;
24677          $block = 1; break;
24678          break;
24679        }
24680        case 1: {
24681          $t2_3 = numLeaves$parent(n, $t0_1);
24682          $t3_4 = $t2_3[0];
24683          $t4_5 = $t2_3[1];
24684          if ($t4_5) {
24685            $block = 3; break;
24686          }
24687          else {
24688            $block = 2; break;
24689          }
24690          break;
24691        }
24692        case 2: {
24693          return $t1_2;
24694          break;
24695        }
24696        case 3: {
24697          $t5_6 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
24698          $t6_7 = $t5_6.$get().addr(0);
24699          $t6_7.$set($t3_4);
24700          $t7_8 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
24701          $t8_9 = $rt.builtin.appendSlice($t1_2, $t7_8);
24702          $t0_1 = $t3_4;
24703          $t1_2 = $t8_9;
24704          $block = 1; break;
24705          break;
24706        }
24707      }
24708    }
24709  }
24710  
24711  $rt.types.getType('smesh.lol/web/common/mls.numLeaves')?.methods?.set('directPath', numLeaves$directPath);
24712  export function numLeaves$parent(n, x) {
24713    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
24714    let $block = 0;
24715    while (true) {
24716      switch ($block) {
24717        case 0: {
24718          $t0_1 = numLeaves$root(n);
24719          $t1_2 = (x === $t0_1);
24720          if ($t1_2) {
24721            $block = 1; break;
24722          }
24723          else {
24724            $block = 2; break;
24725          }
24726          break;
24727        }
24728        case 1: {
24729          return [0, false];
24730          break;
24731        }
24732        case 2: {
24733          $t2_3 = nodeIndex$level(x);
24734          $t3_4 = ($t2_3 >>> 0);
24735          $t4_5 = (($t3_4 + 1) >>> 0);
24736          $t5_6 = (x >>> $t4_5);
24737          $t6_7 = (($t5_6 & 1) >>> 0);
24738          $t7_8 = ((1 << $t3_4) >>> 0);
24739          $t8_9 = ((x + $t7_8) >>> 0);
24740          $t9_10 = (($t3_4 + 1) >>> 0);
24741          $t10_11 = (($t6_7 << $t9_10) >>> 0);
24742          $t11_12 = (($t8_9 ^ $t10_11) >>> 0);
24743          return [$t11_12, true];
24744          break;
24745        }
24746      }
24747    }
24748  }
24749  
24750  $rt.types.getType('smesh.lol/web/common/mls.numLeaves')?.methods?.set('parent', numLeaves$parent);
24751  export function numLeaves$root(n) {
24752    let $t0_1, $t1_2, $t2_3, $t3_4;
24753    $t0_1 = numLeaves$width(n);
24754    $t1_2 = log2($t0_1);
24755    $t2_3 = ((1 << $t1_2) >>> 0);
24756    $t3_4 = (($t2_3 - 1) >>> 0);
24757    return $t3_4;
24758  }
24759  
24760  $rt.types.getType('smesh.lol/web/common/mls.numLeaves')?.methods?.set('root', numLeaves$root);
24761  export function numLeaves$sibling(n, x) {
24762    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
24763    let $block = 0;
24764    while (true) {
24765      switch ($block) {
24766        case 0: {
24767          $t0_1 = numLeaves$parent(n, x);
24768          $t1_2 = $t0_1[0];
24769          $t2_3 = $t0_1[1];
24770          if ($t2_3) {
24771            $block = 2; break;
24772          }
24773          else {
24774            $block = 1; break;
24775          }
24776          break;
24777        }
24778        case 1: {
24779          return [0, false];
24780          break;
24781        }
24782        case 2: {
24783          $t3_4 = (x < $t1_2);
24784          if ($t3_4) {
24785            $block = 3; break;
24786          }
24787          else {
24788            $block = 4; break;
24789          }
24790          break;
24791        }
24792        case 3: {
24793          $t4_5 = nodeIndex$right($t1_2);
24794          $t5_6 = $t4_5[0];
24795          $t6_7 = $t4_5[1];
24796          return [$t5_6, $t6_7];
24797          break;
24798        }
24799        case 4: {
24800          $t7_8 = nodeIndex$left($t1_2);
24801          $t8_9 = $t7_8[0];
24802          $t9_10 = $t7_8[1];
24803          return [$t8_9, $t9_10];
24804          break;
24805        }
24806      }
24807    }
24808  }
24809  
24810  $rt.types.getType('smesh.lol/web/common/mls.numLeaves')?.methods?.set('sibling', numLeaves$sibling);
24811  export function numLeaves$width(n) {
24812    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
24813    let $block = 0;
24814    while (true) {
24815      switch ($block) {
24816        case 0: {
24817          $t0_1 = (n === 0);
24818          if ($t0_1) {
24819            $block = 1; break;
24820          }
24821          else {
24822            $block = 2; break;
24823          }
24824          break;
24825        }
24826        case 1: {
24827          return 0;
24828          break;
24829        }
24830        case 2: {
24831          $t1_2 = n;
24832          $t2_3 = (($t1_2 - 1) >>> 0);
24833          $t3_4 = (Math.imul(2, $t2_3) >>> 0);
24834          $t4_5 = (($t3_4 + 1) >>> 0);
24835          return $t4_5;
24836          break;
24837        }
24838      }
24839    }
24840  }
24841  
24842  $rt.types.getType('smesh.lol/web/common/mls.numLeaves')?.methods?.set('width', numLeaves$width);
24843  export function nodeIndex$children(x) {
24844    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
24845    let $block = 0;
24846    while (true) {
24847      switch ($block) {
24848        case 0: {
24849          $t0_1 = nodeIndex$left(x);
24850          $t1_2 = $t0_1[0];
24851          $t2_3 = $t0_1[1];
24852          if ($t2_3) {
24853            $block = 2; break;
24854          }
24855          else {
24856            $block = 1; break;
24857          }
24858          break;
24859        }
24860        case 1: {
24861          return [0, 0, false];
24862          break;
24863        }
24864        case 2: {
24865          $t3_4 = nodeIndex$right(x);
24866          $t4_5 = $t3_4[0];
24867          $t5_6 = $t3_4[1];
24868          return [$t1_2, $t4_5, true];
24869          break;
24870        }
24871      }
24872    }
24873  }
24874  
24875  $rt.types.getType('smesh.lol/web/common/mls.nodeIndex')?.methods?.set('children', nodeIndex$children);
24876  export function nodeIndex$isLeaf(x) {
24877    let $t0_1, $t1_2;
24878    $t0_1 = ((x % 2) >>> 0);
24879    $t1_2 = ($t0_1 === 0);
24880    return $t1_2;
24881  }
24882  
24883  $rt.types.getType('smesh.lol/web/common/mls.nodeIndex')?.methods?.set('isLeaf', nodeIndex$isLeaf);
24884  export function nodeIndex$leafIndex(x) {
24885    let $t0_1, $t1_2, $t2_3;
24886    let $block = 0;
24887    while (true) {
24888      switch ($block) {
24889        case 0: {
24890          $t0_1 = nodeIndex$isLeaf(x);
24891          if ($t0_1) {
24892            $block = 2; break;
24893          }
24894          else {
24895            $block = 1; break;
24896          }
24897          break;
24898        }
24899        case 1: {
24900          return [0, false];
24901          break;
24902        }
24903        case 2: {
24904          $t1_2 = x;
24905          $t2_3 = ($t1_2 >>> 1);
24906          return [$t2_3, true];
24907          break;
24908        }
24909      }
24910    }
24911  }
24912  
24913  $rt.types.getType('smesh.lol/web/common/mls.nodeIndex')?.methods?.set('leafIndex', nodeIndex$leafIndex);
24914  export function nodeIndex$left(x) {
24915    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
24916    let $block = 0;
24917    while (true) {
24918      switch ($block) {
24919        case 0: {
24920          $t0_1 = nodeIndex$level(x);
24921          $t1_2 = ($t0_1 === 0);
24922          if ($t1_2) {
24923            $block = 1; break;
24924          }
24925          else {
24926            $block = 2; break;
24927          }
24928          break;
24929        }
24930        case 1: {
24931          return [0, false];
24932          break;
24933        }
24934        case 2: {
24935          $t2_3 = ($t0_1 >>> 0);
24936          $t3_4 = (($t2_3 - 1) >>> 0);
24937          $t4_5 = ((1 << $t3_4) >>> 0);
24938          $t5_6 = ((x ^ $t4_5) >>> 0);
24939          return [$t5_6, true];
24940          break;
24941        }
24942      }
24943    }
24944  }
24945  
24946  $rt.types.getType('smesh.lol/web/common/mls.nodeIndex')?.methods?.set('left', nodeIndex$left);
24947  export function nodeIndex$level(x) {
24948    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
24949    let $block = 0;
24950    while (true) {
24951      switch ($block) {
24952        case 0: {
24953          $t0_1 = ((x & 1) >>> 0);
24954          $t1_2 = ($t0_1 === 0);
24955          if ($t1_2) {
24956            $block = 1; break;
24957          }
24958          else {
24959            $block = 2; break;
24960          }
24961          break;
24962        }
24963        case 1: {
24964          return 0;
24965          break;
24966        }
24967        case 2: {
24968          $t3_4 = 0;
24969          $block = 5; break;
24970          break;
24971        }
24972        case 3: {
24973          $t2_3 = (($t3_4 + 1) >>> 0);
24974          $t3_4 = $t2_3;
24975          $block = 5; break;
24976          break;
24977        }
24978        case 4: {
24979          return $t3_4;
24980          break;
24981        }
24982        case 5: {
24983          $t4_5 = (x >>> $t3_4);
24984          $t5_6 = (($t4_5 & 1) >>> 0);
24985          $t6_7 = ($t5_6 === 1);
24986          if ($t6_7) {
24987            $block = 3; break;
24988          }
24989          else {
24990            $block = 4; break;
24991          }
24992          break;
24993        }
24994      }
24995    }
24996  }
24997  
24998  $rt.types.getType('smesh.lol/web/common/mls.nodeIndex')?.methods?.set('level', nodeIndex$level);
24999  export function nodeIndex$right(x) {
25000    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
25001    let $block = 0;
25002    while (true) {
25003      switch ($block) {
25004        case 0: {
25005          $t0_1 = nodeIndex$level(x);
25006          $t1_2 = ($t0_1 === 0);
25007          if ($t1_2) {
25008            $block = 1; break;
25009          }
25010          else {
25011            $block = 2; break;
25012          }
25013          break;
25014        }
25015        case 1: {
25016          return [0, false];
25017          break;
25018        }
25019        case 2: {
25020          $t2_3 = ($t0_1 >>> 0);
25021          $t3_4 = (($t2_3 - 1) >>> 0);
25022          $t4_5 = ((3 << $t3_4) >>> 0);
25023          $t5_6 = ((x ^ $t4_5) >>> 0);
25024          return [$t5_6, true];
25025          break;
25026        }
25027      }
25028    }
25029  }
25030  
25031  $rt.types.getType('smesh.lol/web/common/mls.nodeIndex')?.methods?.set('right', nodeIndex$right);
25032  export function leafIndex$nodeIndex(li) {
25033    let $t0_1, $t1_2;
25034    $t0_1 = (Math.imul(2, li) >>> 0);
25035    $t1_2 = $t0_1;
25036    return $t1_2;
25037  }
25038  
25039  $rt.types.getType('smesh.lol/web/common/mls.leafIndex')?.methods?.set('nodeIndex', leafIndex$nodeIndex);
25040  export function Credential$marshal(cred, w) {
25041    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22;
25042    let $block = 0;
25043    while (true) {
25044      switch ($block) {
25045        case 0: {
25046          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
25047          $t0_1.$set(cred);
25048          $t1_2 = $t0_1.$get();
25049          $t2_3 = { $get() { return $t1_2.$get().credentialType; }, $set(v) { const obj = $t1_2.$get(); obj.credentialType = v; $t1_2.$set(obj); } };
25050          $t3_4 = $t2_3.$get();
25051          $t4_5 = $t3_4;
25052          $t5_6 = Writer$addUint16(w, $t4_5);
25053          $t6_7 = $t0_1.$get();
25054          $t7_8 = { $get() { return $t6_7.$get().credentialType; }, $set(v) { const obj = $t6_7.$get(); obj.credentialType = v; $t6_7.$set(obj); } };
25055          $t8_9 = $t7_8.$get();
25056          $t9_10 = ($t8_9 === 1);
25057          if ($t9_10) {
25058            $block = 2; break;
25059          }
25060          else {
25061            $block = 4; break;
25062          }
25063          break;
25064        }
25065        case 1: {
25066          return;
25067          break;
25068        }
25069        case 2: {
25070          $t10_11 = $t0_1.$get();
25071          $t11_12 = { $get() { return $t10_11.$get().identity; }, $set(v) { const obj = $t10_11.$get(); obj.identity = v; $t10_11.$set(obj); } };
25072          $t12_13 = $t11_12.$get();
25073          $t13_14 = Writer$writeOpaqueVec(w, $t12_13);
25074          $block = 1; break;
25075          break;
25076        }
25077        case 3: {
25078          $t14_15 = $t0_1.$get();
25079          $t15_16 = { $get() { return $t14_15.$get().certificates; }, $set(v) { const obj = $t14_15.$get(); obj.certificates = v; $t14_15.$set(obj); } };
25080          $t16_17 = $t15_16.$get();
25081          $t17_18 = $rt.builtin.len($t16_17);
25082          $t18_19 = Credential$marshal$1.bind(null, $t0_1);
25083          $t19_20 = Writer$writeVector(w, $t17_18, $t18_19);
25084          $block = 1; break;
25085          break;
25086        }
25087        case 4: {
25088          $t20_21 = ($t8_9 === 2);
25089          if ($t20_21) {
25090            $block = 3; break;
25091          }
25092          else {
25093            $block = 5; break;
25094          }
25095          break;
25096        }
25097        case 5: {
25098          $t21_22 = $rt.types.makeInterface('string', 'unreachable');
25099          $rt.runtime.panic($t21_22);
25100          break;
25101        }
25102      }
25103    }
25104  }
25105  
25106  function Credential$marshal$1(cred, w, i) {
25107    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
25108    $t0_1 = cred.$get();
25109    $t1_2 = { $get() { return $t0_1.$get().certificates; }, $set(v) { const obj = $t0_1.$get(); obj.certificates = v; $t0_1.$set(obj); } };
25110    $t2_3 = $t1_2.$get();
25111    $t3_4 = $t2_3.addr(i);
25112    $t4_5 = $t3_4.$get();
25113    $t5_6 = Writer$writeOpaqueVec(w, $t4_5);
25114    return;
25115  }
25116  
25117  $rt.types.getType('smesh.lol/web/common/mls.Credential')?.methods?.set('marshal', Credential$marshal);
25118  export function Credential$unmarshal(cred, r) {
25119    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
25120    let $block = 0;
25121    while (true) {
25122      switch ($block) {
25123        case 0: {
25124          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
25125          $t0_1.$set(cred);
25126          $t1_2 = $t0_1.$get();
25127          $t1_2.$set($rt.builtin.cloneValue({ credentialType: 0, identity: null, certificates: null }));
25128          $t2_3 = Reader$readUint16(r);
25129          $t3_4 = $t2_3[0];
25130          $t4_5 = $t2_3[1];
25131          if ($t4_5) {
25132            $block = 2; break;
25133          }
25134          else {
25135            $block = 1; break;
25136          }
25137          break;
25138        }
25139        case 1: {
25140          $t5_6 = errUnexpectedEOF.$get();
25141          return $t5_6;
25142          break;
25143        }
25144        case 2: {
25145          $t6_7 = $t0_1.$get();
25146          $t7_8 = $t3_4;
25147          $t8_9 = { $get() { return $t6_7.$get().credentialType; }, $set(v) { const obj = $t6_7.$get(); obj.credentialType = v; $t6_7.$set(obj); } };
25148          $t8_9.$set($t7_8);
25149          $t9_10 = $t0_1.$get();
25150          $t10_11 = { $get() { return $t9_10.$get().credentialType; }, $set(v) { const obj = $t9_10.$get(); obj.credentialType = v; $t9_10.$set(obj); } };
25151          $t11_12 = $t10_11.$get();
25152          $t12_13 = ($t11_12 === 1);
25153          if ($t12_13) {
25154            $block = 3; break;
25155          }
25156          else {
25157            $block = 5; break;
25158          }
25159          break;
25160        }
25161        case 3: {
25162          $t13_14 = $t0_1.$get();
25163          $t14_15 = Reader$readOpaqueVec(r);
25164          $t15_16 = $t14_15[0];
25165          $t16_17 = { $get() { return $t13_14.$get().identity; }, $set(v) { const obj = $t13_14.$get(); obj.identity = v; $t13_14.$set(obj); } };
25166          $t16_17.$set($t15_16);
25167          $t17_18 = $t14_15[1];
25168          if ($t17_18) {
25169            $block = 7; break;
25170          }
25171          else {
25172            $block = 6; break;
25173          }
25174          break;
25175        }
25176        case 4: {
25177          $t18_19 = Credential$unmarshal$1.bind(null, $t0_1);
25178          $t19_20 = Reader$readVector(r, $t18_19);
25179          return $t19_20;
25180          break;
25181        }
25182        case 5: {
25183          $t20_21 = ($t11_12 === 2);
25184          if ($t20_21) {
25185            $block = 4; break;
25186          }
25187          else {
25188            $block = 8; break;
25189          }
25190          break;
25191        }
25192        case 6: {
25193          $t21_22 = errUnexpectedEOF.$get();
25194          return $t21_22;
25195          break;
25196        }
25197        case 7: {
25198          return null;
25199          break;
25200        }
25201        case 8: {
25202          $t22_23 = errInvalidCredentialType.$get();
25203          return $t22_23;
25204          break;
25205        }
25206      }
25207    }
25208  }
25209  
25210  function Credential$unmarshal$1(cred, r) {
25211    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
25212    let $block = 0;
25213    while (true) {
25214      switch ($block) {
25215        case 0: {
25216          $t0_1 = Reader$readOpaqueVec(r);
25217          $t1_2 = $t0_1[0];
25218          $t2_3 = $t0_1[1];
25219          if ($t2_3) {
25220            $block = 2; break;
25221          }
25222          else {
25223            $block = 1; break;
25224          }
25225          break;
25226        }
25227        case 1: {
25228          $t3_4 = errUnexpectedEOF.$get();
25229          return $t3_4;
25230          break;
25231        }
25232        case 2: {
25233          $t4_5 = cred.$get();
25234          $t5_6 = cred.$get();
25235          $t6_7 = { $get() { return $t5_6.$get().certificates; }, $set(v) { const obj = $t5_6.$get(); obj.certificates = v; $t5_6.$set(obj); } };
25236          $t7_8 = $t6_7.$get();
25237          $t8_9 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
25238          $t9_10 = $t8_9.$get().addr(0);
25239          $t9_10.$set($t1_2);
25240          $t10_11 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
25241          $t11_12 = $rt.builtin.appendSlice($t7_8, $t10_11);
25242          $t12_13 = { $get() { return $t4_5.$get().certificates; }, $set(v) { const obj = $t4_5.$get(); obj.certificates = v; $t4_5.$set(obj); } };
25243          $t12_13.$set($t11_12);
25244          return null;
25245          break;
25246        }
25247      }
25248    }
25249  }
25250  
25251  $rt.types.getType('smesh.lol/web/common/mls.Credential')?.methods?.set('unmarshal', Credential$unmarshal);
25252  export function hpkeCiphertext$marshal(hc, w) {
25253    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
25254    $t0_1 = { $get() { return hc.$get().kemOutput; }, $set(v) { const obj = hc.$get(); obj.kemOutput = v; hc.$set(obj); } };
25255    $t1_2 = $t0_1.$get();
25256    $t2_3 = Writer$writeOpaqueVec(w, $t1_2);
25257    $t3_4 = { $get() { return hc.$get().ciphertext; }, $set(v) { const obj = hc.$get(); obj.ciphertext = v; hc.$set(obj); } };
25258    $t4_5 = $t3_4.$get();
25259    $t5_6 = Writer$writeOpaqueVec(w, $t4_5);
25260    return;
25261  }
25262  
25263  $rt.types.getType('smesh.lol/web/common/mls.hpkeCiphertext')?.methods?.set('marshal', hpkeCiphertext$marshal);
25264  export function hpkeCiphertext$unmarshal(hc, r) {
25265    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
25266    let $block = 0;
25267    while (true) {
25268      switch ($block) {
25269        case 0: {
25270          hc.$set($rt.builtin.cloneValue({ kemOutput: null, ciphertext: null }));
25271          $t0_1 = Reader$readOpaqueVec(r);
25272          $t1_2 = $t0_1[0];
25273          $t2_3 = { $get() { return hc.$get().kemOutput; }, $set(v) { const obj = hc.$get(); obj.kemOutput = v; hc.$set(obj); } };
25274          $t2_3.$set($t1_2);
25275          $t3_4 = $t0_1[1];
25276          if ($t3_4) {
25277            $block = 2; break;
25278          }
25279          else {
25280            $block = 1; break;
25281          }
25282          break;
25283        }
25284        case 1: {
25285          $t4_5 = errUnexpectedEOF.$get();
25286          return $t4_5;
25287          break;
25288        }
25289        case 2: {
25290          $t5_6 = Reader$readOpaqueVec(r);
25291          $t6_7 = $t5_6[0];
25292          $t7_8 = { $get() { return hc.$get().ciphertext; }, $set(v) { const obj = hc.$get(); obj.ciphertext = v; hc.$set(obj); } };
25293          $t7_8.$set($t6_7);
25294          $t8_9 = $t5_6[1];
25295          if ($t8_9) {
25296            $block = 4; break;
25297          }
25298          else {
25299            $block = 3; break;
25300          }
25301          break;
25302        }
25303        case 3: {
25304          $t9_10 = errUnexpectedEOF.$get();
25305          return $t9_10;
25306          break;
25307        }
25308        case 4: {
25309          return null;
25310          break;
25311        }
25312      }
25313    }
25314  }
25315  
25316  $rt.types.getType('smesh.lol/web/common/mls.hpkeCiphertext')?.methods?.set('unmarshal', hpkeCiphertext$unmarshal);
25317