Hex Artifact Content
Not logged in

Artifact 03a512ed177aed5713c885af982bd9c84d916bde:


0000: 5c 20 6e 65 74 32 6f 20 63 6c 61 73 73 65 73 0a  \ net2o classes.
0010: 0a 5c 20 43 6f 70 79 72 69 67 68 74 20 28 43 29  .\ Copyright (C)
0020: 20 32 30 31 35 20 20 20 42 65 72 6e 64 20 50 61   2015   Bernd Pa
0030: 79 73 61 6e 0a 0a 5c 20 54 68 69 73 20 70 72 6f  ysan..\ This pro
0040: 67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66  gram is free sof
0050: 74 77 61 72 65 3a 20 79 6f 75 20 63 61 6e 20 72  tware: you can r
0060: 65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61  edistribute it a
0070: 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 5c 20 69  nd/or modify.\ i
0080: 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d  t under the term
0090: 73 20 6f 66 20 74 68 65 20 47 4e 55 20 41 66 66  s of the GNU Aff
00a0: 65 72 6f 20 47 65 6e 65 72 61 6c 20 50 75 62 6c  ero General Publ
00b0: 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75  ic License as pu
00c0: 62 6c 69 73 68 65 64 20 62 79 0a 5c 20 74 68 65  blished by.\ the
00d0: 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46   Free Software F
00e0: 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68 65  oundation, eithe
00f0: 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20 74  r version 3 of t
0100: 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a 5c  he License, or.\
0110: 20 28 61 74 20 79 6f 75 72 20 6f 70 74 69 6f 6e   (at your option
0120: 29 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73  ) any later vers
0130: 69 6f 6e 2e 0a 0a 5c 20 54 68 69 73 20 70 72 6f  ion...\ This pro
0140: 67 72 61 6d 20 69 73 20 64 69 73 74 72 69 62 75  gram is distribu
0150: 74 65 64 20 69 6e 20 74 68 65 20 68 6f 70 65 20  ted in the hope 
0160: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
0170: 75 73 65 66 75 6c 2c 0a 5c 20 62 75 74 20 57 49  useful,.\ but WI
0180: 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e  THOUT ANY WARRAN
0190: 54 59 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e  TY; without even
01a0: 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72   the implied war
01b0: 72 61 6e 74 79 20 6f 66 0a 5c 20 4d 45 52 43 48  ranty of.\ MERCH
01c0: 41 4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49  ANTABILITY or FI
01d0: 54 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54  TNESS FOR A PART
01e0: 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20  ICULAR PURPOSE. 
01f0: 20 53 65 65 20 74 68 65 0a 5c 20 47 4e 55 20 41   See the.\ GNU A
0200: 66 66 65 72 6f 20 47 65 6e 65 72 61 6c 20 50 75  ffero General Pu
0210: 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72  blic License for
0220: 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a   more details...
0230: 5c 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76  \ You should hav
0240: 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f 70  e received a cop
0250: 79 20 6f 66 20 74 68 65 20 47 4e 55 20 41 66 66  y of the GNU Aff
0260: 65 72 6f 20 47 65 6e 65 72 61 6c 20 50 75 62 6c  ero General Publ
0270: 69 63 20 4c 69 63 65 6e 73 65 0a 5c 20 61 6c 6f  ic License.\ alo
0280: 6e 67 20 77 69 74 68 20 74 68 69 73 20 70 72 6f  ng with this pro
0290: 67 72 61 6d 2e 20 20 49 66 20 6e 6f 74 2c 20 73  gram.  If not, s
02a0: 65 65 20 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 67  ee <http://www.g
02b0: 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f  nu.org/licenses/
02c0: 3e 2e 0a 0a 5c 20 6a 6f 62 20 63 6f 6e 74 65 78  >...\ job contex
02d0: 74 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20  t structure and 
02e0: 73 75 62 63 6c 61 73 73 65 73 0a 0a 63 75 72 72  subclasses..curr
02f0: 65 6e 74 2d 6f 0a 0a 56 61 72 69 61 62 6c 65 20  ent-o..Variable 
0300: 63 6f 6e 74 65 78 74 73 20 5c 47 20 63 6f 6e 74  contexts \G cont
0310: 61 69 6e 73 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64  ains all command
0320: 20 6f 62 6a 65 63 74 73 0a 0a 30 20 56 61 6c 75   objects..0 Valu
0330: 65 20 6d 79 2d 6b 65 79 2d 64 65 66 61 75 6c 74  e my-key-default
0340: 20 5c 47 20 64 65 66 61 75 6c 74 20 6f 77 6e 20   \G default own 
0350: 6b 65 79 0a 0a 6f 62 6a 65 63 74 20 63 6c 61 73  key..object clas
0360: 73 0a 20 20 20 20 66 69 65 6c 64 3a 20 74 6f 6b  s.    field: tok
0370: 65 6e 2d 74 61 62 6c 65 0a 20 20 20 20 76 61 6c  en-table.    val
0380: 75 65 3a 20 70 61 72 65 6e 74 0a 20 20 20 20 76  ue: parent.    v
0390: 61 6c 75 65 3a 20 6d 79 2d 6b 65 79 20 20 20 20  alue: my-key    
03a0: 20 20 20 20 5c 20 6b 65 79 20 75 73 65 64 20 66      \ key used f
03b0: 6f 72 20 74 68 69 73 20 63 6f 6e 74 65 78 74 0a  or this context.
03c0: 20 20 20 20 66 69 65 6c 64 3a 20 72 65 71 3f 0a      field: req?.
03d0: 20 20 20 20 66 69 65 6c 64 3a 20 63 2d 73 74 61      field: c-sta
03e0: 74 65 20 5c 20 73 74 61 74 65 20 66 6f 72 20 63  te \ state for c
03f0: 68 65 63 6b 73 20 77 68 65 74 68 65 72 20 65 76  hecks whether ev
0400: 65 72 79 74 68 69 6e 67 20 69 73 20 74 68 65 72  erything is ther
0410: 65 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 74 61  e.    method sta
0420: 72 74 2d 72 65 71 0a 20 20 20 20 6d 65 74 68 6f  rt-req.    metho
0430: 64 20 6e 65 73 74 2d 73 69 67 20 5c 20 63 68 65  d nest-sig \ che
0440: 63 6b 20 73 69 67 20 66 69 72 73 74 20 61 6e 64  ck sig first and
0450: 20 74 68 65 6e 20 6e 65 73 74 0a 65 6e 64 2d 63   then nest.end-c
0460: 6c 61 73 73 20 63 6d 64 2d 63 6c 61 73 73 20 5c  lass cmd-class \
0470: 20 63 6f 6d 6d 61 6e 64 20 69 6e 74 65 72 70 72   command interpr
0480: 65 74 65 72 0a 27 20 6e 6f 6f 70 20 63 6d 64 2d  eter.' noop cmd-
0490: 63 6c 61 73 73 20 74 6f 20 73 74 61 72 74 2d 72  class to start-r
04a0: 65 71 0a 3a 6e 6f 6e 61 6d 65 20 28 20 61 64 64  eq.:noname ( add
04b0: 72 20 75 20 2d 2d 20 66 6c 61 67 20 29 20 32 64  r u -- flag ) 2d
04c0: 72 6f 70 20 2d 31 20 3b 20 63 6d 64 2d 63 6c 61  rop -1 ; cmd-cla
04d0: 73 73 20 74 6f 20 6e 65 73 74 2d 73 69 67 0a 0a  ss to nest-sig..
04e0: 56 61 72 69 61 62 6c 65 20 63 6d 64 2d 74 61 62  Variable cmd-tab
04f0: 6c 65 0a 56 61 72 69 61 62 6c 65 20 72 65 70 6c  le.Variable repl
0500: 79 2d 74 61 62 6c 65 0a 56 61 72 69 61 62 6c 65  y-table.Variable
0510: 20 6c 6f 67 2d 74 61 62 6c 65 0a 56 61 72 69 61   log-table.Varia
0520: 62 6c 65 20 73 65 74 75 70 2d 74 61 62 6c 65 0a  ble setup-table.
0530: 56 61 72 69 61 62 6c 65 20 63 6f 6e 6e 65 63 74  Variable connect
0540: 2d 74 61 62 6c 65 0a 56 61 72 69 61 62 6c 65 20  -table.Variable 
0550: 61 63 6b 2d 74 61 62 6c 65 0a 56 61 72 69 61 62  ack-table.Variab
0560: 6c 65 20 6d 73 67 69 6e 67 2d 74 61 62 6c 65 0a  le msging-table.
0570: 56 61 72 69 61 62 6c 65 20 6d 73 67 2d 74 61 62  Variable msg-tab
0580: 6c 65 0a 56 61 72 69 61 62 6c 65 20 74 65 72 6d  le.Variable term
0590: 2d 74 61 62 6c 65 0a 56 61 72 69 61 62 6c 65 20  -table.Variable 
05a0: 61 64 64 72 65 73 73 2d 74 61 62 6c 65 0a 56 61  address-table.Va
05b0: 72 69 61 62 6c 65 20 63 6f 6e 74 65 78 74 2d 74  riable context-t
05c0: 61 62 6c 65 0a 56 61 72 69 61 62 6c 65 20 6b 65  able.Variable ke
05d0: 79 2d 65 6e 74 72 79 2d 74 61 62 6c 65 0a 56 61  y-entry-table.Va
05e0: 72 69 61 62 6c 65 20 76 61 75 6c 74 2d 74 61 62  riable vault-tab
05f0: 6c 65 0a 56 61 72 69 61 62 6c 65 20 70 61 79 2d  le.Variable pay-
0600: 74 61 62 6c 65 0a 56 61 72 69 61 62 6c 65 20 67  table.Variable g
0610: 72 6f 75 70 2d 74 61 62 6c 65 0a 0a 56 6f 63 61  roup-table..Voca
0620: 62 75 6c 61 72 79 20 6d 61 70 63 0a 0a 61 6c 73  bulary mapc..als
0630: 6f 20 6d 61 70 63 20 64 65 66 69 6e 69 74 69 6f  o mapc definitio
0640: 6e 73 0a 0a 63 6d 64 2d 63 6c 61 73 73 20 63 6c  ns..cmd-class cl
0650: 61 73 73 0a 20 20 20 20 36 34 76 61 6c 75 65 3a  ass.    64value:
0660: 20 64 65 73 74 2d 76 61 64 64 72 0a 20 20 20 20   dest-vaddr.    
0670: 76 61 6c 75 65 3a 20 64 65 73 74 2d 73 69 7a 65  value: dest-size
0680: 0a 20 20 20 20 76 61 6c 75 65 3a 20 64 65 73 74  .    value: dest
0690: 2d 72 61 64 64 72 0a 20 20 20 20 24 76 61 6c 75  -raddr.    $valu
06a0: 65 3a 20 64 65 73 74 2d 69 76 73 24 0a 20 20 20  e: dest-ivs$.   
06b0: 20 76 61 6c 75 65 3a 20 64 65 73 74 2d 69 76 73   value: dest-ivs
06c0: 67 65 6e 0a 20 20 20 20 73 63 76 61 6c 75 65 3a  gen.    scvalue:
06d0: 20 64 65 73 74 2d 69 76 73 6c 61 73 74 67 65 6e   dest-ivslastgen
06e0: 0a 20 20 20 20 73 63 76 61 6c 75 65 3a 20 64 65  .    scvalue: de
06f0: 73 74 2d 72 65 71 20 20 20 5c 20 2d 2f 2d 20 20  st-req   \ -/-  
0700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0710: 20 20 74 72 75 65 20 69 66 20 6f 6e 67 6f 69 6e    true if ongoin
0720: 67 20 72 65 71 75 65 73 74 0a 20 20 20 20 24 76  g request.    $v
0730: 61 6c 75 65 3a 20 64 65 73 74 2d 69 76 73 72 65  alue: dest-ivsre
0740: 73 74 24 0a 20 20 20 20 76 61 6c 75 65 3a 20 64  st$.    value: d
0750: 65 73 74 2d 74 69 6d 65 73 74 61 6d 70 73 0a 20  est-timestamps. 
0760: 20 20 20 76 61 6c 75 65 3a 20 64 65 73 74 2d 72     value: dest-r
0770: 65 70 6c 69 65 73 0a 20 20 20 20 5c 20 20 20 20  eplies.    \    
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
0790: 65 6e 64 65 72 3a 20 20 20 20 20 20 20 20 20 20  ender:          
07a0: 20 20 20 20 20 20 72 65 63 65 69 76 65 72 3a 0a        receiver:.
07b0: 20 20 20 20 76 61 6c 75 65 3a 20 64 65 73 74 2d      value: dest-
07c0: 74 6f 70 20 20 20 5c 20 2d 2f 2d 20 20 20 20 20  top   \ -/-     
07d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
07e0: 65 6e 64 65 72 20 72 65 61 64 20 75 70 20 74 6f  ender read up to
07f0: 20 68 65 72 65 0a 20 20 20 20 76 61 6c 75 65 3a   here.    value:
0800: 20 64 65 73 74 2d 68 65 61 64 20 20 5c 20 72 65   dest-head  \ re
0810: 61 64 20 75 70 20 74 6f 20 68 65 72 65 20 20 20  ad up to here   
0820: 20 20 20 20 20 72 65 63 65 69 76 65 64 20 73 6f       received so
0830: 6d 65 0a 20 20 20 20 76 61 6c 75 65 3a 20 64 65  me.    value: de
0840: 73 74 2d 74 61 69 6c 20 20 5c 20 73 65 6e 64 20  st-tail  \ send 
0850: 66 72 6f 6d 20 68 65 72 65 20 20 20 20 20 20 20  from here       
0860: 20 20 72 65 63 65 69 76 65 64 20 61 6c 6c 0a 20    received all. 
0870: 20 20 20 76 61 6c 75 65 3a 20 64 65 73 74 2d 62     value: dest-b
0880: 61 63 6b 20 20 5c 20 66 6c 75 73 68 65 64 20 6f  ack  \ flushed o
0890: 6e 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6c  n destination fl
08a0: 75 73 68 65 64 0a 20 20 20 20 66 69 65 6c 64 3a  ushed.    field:
08b0: 20 64 65 73 74 2d 65 6e 64 20 20 20 5c 20 2d 2f   dest-end   \ -/
08c0: 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -               
08d0: 20 20 20 20 20 74 72 75 65 20 69 66 20 6c 61 73       true if las
08e0: 74 20 63 68 75 6e 6b 0a 20 20 20 20 66 69 65 6c  t chunk.    fiel
08f0: 64 3a 20 64 6f 2d 73 6c 75 72 70 0a 20 20 20 20  d: do-slurp.    
0900: 6d 65 74 68 6f 64 20 66 72 65 65 2d 64 61 74 61  method free-data
0910: 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 67 65  .    method rege
0920: 6e 2d 69 76 73 0a 20 20 20 20 6d 65 74 68 6f 64  n-ivs.    method
0930: 20 68 61 6e 64 6c 65 0a 20 20 20 20 6d 65 74 68   handle.    meth
0940: 6f 64 20 72 65 77 69 6e 64 2d 74 69 6d 65 73 74  od rewind-timest
0950: 61 6d 70 73 0a 20 20 20 20 6d 65 74 68 6f 64 20  amps.    method 
0960: 72 65 77 69 6e 64 2d 70 61 72 74 69 61 6c 0a 65  rewind-partial.e
0970: 6e 64 2d 63 6c 61 73 73 20 63 6f 64 65 2d 63 6c  nd-class code-cl
0980: 61 73 73 0a 27 20 64 72 6f 70 20 20 63 6f 64 65  ass.' drop  code
0990: 2d 63 6c 61 73 73 20 74 6f 20 72 65 67 65 6e 2d  -class to regen-
09a0: 69 76 73 0a 27 20 6e 6f 6f 70 20 20 63 6f 64 65  ivs.' noop  code
09b0: 2d 63 6c 61 73 73 20 74 6f 20 72 65 77 69 6e 64  -class to rewind
09c0: 2d 74 69 6d 65 73 74 61 6d 70 73 0a 27 20 32 64  -timestamps.' 2d
09d0: 72 6f 70 20 63 6f 64 65 2d 63 6c 61 73 73 20 74  rop code-class t
09e0: 6f 20 72 65 77 69 6e 64 2d 70 61 72 74 69 61 6c  o rewind-partial
09f0: 0a 0a 63 6f 64 65 2d 63 6c 61 73 73 20 63 6c 61  ..code-class cla
0a00: 73 73 0a 20 20 20 20 66 69 65 6c 64 3a 20 64 61  ss.    field: da
0a10: 74 61 2d 72 65 73 65 6e 64 23 20 5c 20 72 65 73  ta-resend# \ res
0a20: 65 6e 64 20 74 6f 6b 65 6e 73 3b 20 6f 6e 6c 79  end tokens; only
0a30: 20 66 6f 72 20 64 61 74 61 0a 20 20 20 20 76 61   for data.    va
0a40: 6c 75 65 3a 20 73 65 6e 64 2d 61 63 6b 23 0a 65  lue: send-ack#.e
0a50: 6e 64 2d 63 6c 61 73 73 20 64 61 74 61 2d 63 6c  nd-class data-cl
0a60: 61 73 73 0a 0a 63 6f 64 65 2d 63 6c 61 73 73 20  ass..code-class 
0a70: 63 6c 61 73 73 0a 20 20 20 20 66 69 65 6c 64 3a  class.    field:
0a80: 20 64 61 74 61 2d 61 63 6b 62 69 74 73 0a 20 20   data-ackbits.  
0a90: 20 20 66 69 65 6c 64 3a 20 64 61 74 61 2d 61 63    field: data-ac
0aa0: 6b 62 69 74 73 2d 62 75 66 0a 20 20 20 20 66 69  kbits-buf.    fi
0ab0: 65 6c 64 3a 20 64 61 74 61 2d 61 63 6b 23 20 20  eld: data-ack#  
0ac0: 20 20 20 5c 20 66 75 6c 6c 79 20 61 63 6b 65 64     \ fully acked
0ad0: 20 62 75 72 73 74 73 0a 20 20 20 20 66 69 65 6c   bursts.    fiel
0ae0: 64 3a 20 61 63 6b 2d 62 69 74 23 20 20 20 20 20  d: ack-bit#     
0af0: 20 5c 20 61 63 74 75 61 6c 20 61 63 6b 20 62 69   \ actual ack bi
0b00: 74 0a 20 20 20 20 66 69 65 6c 64 3a 20 64 61 74  t.    field: dat
0b10: 61 2d 72 65 73 65 6e 64 23 2d 62 75 66 0a 20 20  a-resend#-buf.  
0b20: 20 20 73 63 76 61 6c 75 65 3a 20 61 63 6b 2d 61    scvalue: ack-a
0b30: 64 76 61 6e 63 65 3f 20 20 5c 20 61 63 6b 20 69  dvance?  \ ack i
0b40: 73 20 61 64 76 61 6e 63 69 6e 67 20 73 74 61 74  s advancing stat
0b50: 65 0a 65 6e 64 2d 63 6c 61 73 73 20 72 63 6f 64  e.end-class rcod
0b60: 65 2d 63 6c 61 73 73 0a 0a 72 63 6f 64 65 2d 63  e-class..rcode-c
0b70: 6c 61 73 73 20 63 6c 61 73 73 0a 20 20 20 20 76  lass class.    v
0b80: 61 6c 75 65 3a 20 72 65 63 2d 61 63 6b 23 0a 65  alue: rec-ack#.e
0b90: 6e 64 2d 63 6c 61 73 73 20 72 64 61 74 61 2d 63  nd-class rdata-c
0ba0: 6c 61 73 73 0a 0a 70 72 65 76 69 6f 75 73 20 64  lass..previous d
0bb0: 65 66 69 6e 69 74 69 6f 6e 73 0a 0a 63 6d 64 2d  efinitions..cmd-
0bc0: 63 6c 61 73 73 20 63 6c 61 73 73 0a 20 20 20 20  class class.    
0bd0: 66 69 65 6c 64 3a 20 74 69 6d 69 6e 67 2d 73 74  field: timing-st
0be0: 61 74 0a 20 20 20 20 66 69 65 6c 64 3a 20 74 72  at.    field: tr
0bf0: 61 63 6b 2d 74 69 6d 69 6e 67 0a 20 20 20 20 66  ack-timing.    f
0c00: 69 65 6c 64 3a 20 66 6c 79 62 75 72 73 74 0a 20  ield: flyburst. 
0c10: 20 20 20 66 69 65 6c 64 3a 20 66 6c 79 62 75 72     field: flybur
0c20: 73 74 73 0a 20 20 20 20 66 69 65 6c 64 3a 20 74  sts.    field: t
0c30: 69 6d 65 6f 75 74 73 0a 20 20 20 20 66 69 65 6c  imeouts.    fiel
0c40: 64 3a 20 77 69 6e 64 6f 77 2d 73 69 7a 65 20 5c  d: window-size \
0c50: 20 70 61 63 6b 65 74 73 20 69 6e 20 66 6c 69 67   packets in flig
0c60: 68 74 0a 20 20 20 20 36 34 66 69 65 6c 64 3a 20  ht.    64field: 
0c70: 72 74 64 65 6c 61 79 20 5c 20 6e 73 0a 20 20 20  rtdelay \ ns.   
0c80: 20 36 34 66 69 65 6c 64 3a 20 6c 61 73 74 2d 74   64field: last-t
0c90: 69 6d 65 0a 20 20 20 20 36 34 66 69 65 6c 64 3a  ime.    64field:
0ca0: 20 6c 61 73 74 61 63 6b 20 5c 20 6e 73 0a 20 20   lastack \ ns.  
0cb0: 20 20 36 34 66 69 65 6c 64 3a 20 72 65 63 76 2d    64field: recv-
0cc0: 74 69 63 6b 0a 20 20 20 20 36 34 66 69 65 6c 64  tick.    64field
0cd0: 3a 20 6e 73 2f 62 75 72 73 74 0a 20 20 20 20 36  : ns/burst.    6
0ce0: 34 66 69 65 6c 64 3a 20 6c 61 73 74 2d 6e 73 2f  4field: last-ns/
0cf0: 62 75 72 73 74 0a 20 20 20 20 36 34 66 69 65 6c  burst.    64fiel
0d00: 64 3a 20 62 61 6e 64 77 69 64 74 68 2d 74 69 63  d: bandwidth-tic
0d10: 6b 20 5c 20 6e 73 0a 20 20 20 20 36 34 66 69 65  k \ ns.    64fie
0d20: 6c 64 3a 20 6e 65 78 74 2d 74 69 63 6b 20 5c 20  ld: next-tick \ 
0d30: 6e 73 0a 20 20 20 20 36 34 66 69 65 6c 64 3a 20  ns.    64field: 
0d40: 65 78 74 72 61 2d 6e 73 0a 20 20 20 20 36 34 66  extra-ns.    64f
0d50: 69 65 6c 64 3a 20 73 6c 61 63 6b 67 72 6f 77 0a  ield: slackgrow.
0d60: 20 20 20 20 36 34 66 69 65 6c 64 3a 20 73 6c 61      64field: sla
0d70: 63 6b 67 72 6f 77 27 0a 20 20 20 20 36 34 66 69  ckgrow'.    64fi
0d80: 65 6c 64 3a 20 6c 61 73 74 73 6c 61 63 6b 0a 20  eld: lastslack. 
0d90: 20 20 20 36 34 66 69 65 6c 64 3a 20 6d 69 6e 2d     64field: min-
0da0: 73 6c 61 63 6b 0a 20 20 20 20 36 34 66 69 65 6c  slack.    64fiel
0db0: 64 3a 20 6d 61 78 2d 73 6c 61 63 6b 0a 20 20 20  d: max-slack.   
0dc0: 20 36 34 66 69 65 6c 64 3a 20 74 69 6d 65 2d 6f   64field: time-o
0dd0: 66 66 73 65 74 20 20 5c 20 6d 61 6b 65 20 74 69  ffset  \ make ti
0de0: 6d 65 73 74 61 6d 70 73 20 73 6d 61 6c 6c 65 72  mestamps smaller
0df0: 0a 20 20 20 20 36 34 66 69 65 6c 64 3a 20 6c 61  .    64field: la
0e00: 73 74 64 65 6c 74 61 74 0a 65 6e 64 2d 63 6c 61  stdeltat.end-cla
0e10: 73 73 20 61 63 6b 2d 63 6c 61 73 73 0a 0a 63 6d  ss ack-class..cm
0e20: 64 2d 63 6c 61 73 73 20 63 6c 61 73 73 0a 20 20  d-class class.  
0e30: 20 20 66 69 65 6c 64 3a 20 70 65 65 72 73 5b 5d    field: peers[]
0e40: 0a 20 20 20 20 66 69 65 6c 64 3a 20 73 69 6c 65  .    field: sile
0e50: 6e 74 2d 6c 61 73 74 23 0a 65 6e 64 2d 63 6c 61  nt-last#.end-cla
0e60: 73 73 20 6d 73 67 69 6e 67 2d 63 6c 61 73 73 0a  ss msging-class.
0e70: 0a 63 6d 64 2d 63 6c 61 73 73 20 63 6c 61 73 73  .cmd-class class
0e80: 7b 20 6d 73 67 0a 20 20 20 20 24 76 61 6c 75 65  { msg.    $value
0e90: 3a 20 69 64 24 0a 20 20 20 20 6d 65 74 68 6f 64  : id$.    method
0ea0: 20 73 74 61 72 74 0a 20 20 20 20 6d 65 74 68 6f   start.    metho
0eb0: 64 20 74 61 67 0a 20 20 20 20 6d 65 74 68 6f 64  d tag.    method
0ec0: 20 63 68 61 69 6e 0a 20 20 20 20 6d 65 74 68 6f   chain.    metho
0ed0: 64 20 73 69 67 6e 61 6c 0a 20 20 20 20 6d 65 74  d signal.    met
0ee0: 68 6f 64 20 72 65 0a 20 20 20 20 6d 65 74 68 6f  hod re.    metho
0ef0: 64 20 74 65 78 74 0a 20 20 20 20 6d 65 74 68 6f  d text.    metho
0f00: 64 20 6f 62 6a 65 63 74 0a 20 20 20 20 6d 65 74  d object.    met
0f10: 68 6f 64 20 69 64 0a 20 20 20 20 6d 65 74 68 6f  hod id.    metho
0f20: 64 20 61 63 74 69 6f 6e 0a 20 20 20 20 6d 65 74  d action.    met
0f30: 68 6f 64 20 63 6f 6f 72 64 0a 20 20 20 20 6d 65  hod coord.    me
0f40: 74 68 6f 64 20 6f 74 72 69 66 79 0a 20 20 20 20  thod otrify.    
0f50: 6d 65 74 68 6f 64 20 70 61 79 6d 65 6e 74 0a 20  method payment. 
0f60: 20 20 20 6d 65 74 68 6f 64 20 75 72 6c 0a 20 20     method url.  
0f70: 20 20 6d 65 74 68 6f 64 20 6c 69 6b 65 0a 20 20    method like.  
0f80: 20 20 6d 65 74 68 6f 64 20 61 77 61 79 0a 20 20    method away.  
0f90: 20 20 6d 65 74 68 6f 64 20 65 6e 64 0a 20 20 20    method end.   
0fa0: 20 6d 65 74 68 6f 64 20 64 69 73 70 6c 61 79 20   method display 
0fb0: 20 20 5c 20 64 69 73 70 6c 61 79 20 6f 6e 65 20    \ display one 
0fc0: 6d 65 73 73 61 67 65 0a 20 20 20 20 6d 65 74 68  message.    meth
0fd0: 6f 64 20 72 65 64 69 73 70 6c 61 79 20 5c 20 64  od redisplay \ d
0fe0: 69 73 70 6c 61 79 20 66 75 6c 6c 20 73 65 74 0a  isplay full set.
0ff0: 7d 63 6c 61 73 73 0a 0a 63 6d 64 2d 63 6c 61 73  }class..cmd-clas
1000: 73 20 63 6c 61 73 73 7b 20 70 61 79 0a 20 20 20  s class{ pay.   
1010: 20 66 69 65 6c 64 3a 20 73 6f 75 72 63 65 73 5b   field: sources[
1020: 5d 20 20 20 20 5c 20 61 6c 6c 20 74 68 65 20 73  ]    \ all the s
1030: 6f 75 72 63 65 73 20 73 74 6f 72 65 64 20 68 65  ources stored he
1040: 72 65 2c 20 61 6e 20 61 72 72 61 79 0a 20 20 20  re, an array.   
1050: 20 66 69 65 6c 64 3a 20 73 69 6e 6b 73 5b 5d 20   field: sinks[] 
1060: 20 20 20 20 20 5c 20 61 6c 6c 20 74 68 65 20 73       \ all the s
1070: 69 67 6e 61 74 75 72 65 73 20 73 74 6f 72 65 64  ignatures stored
1080: 20 68 65 72 65 2c 20 61 6e 20 61 72 72 61 79 0a   here, an array.
1090: 20 20 20 20 66 69 65 6c 64 3a 20 61 73 73 65 74      field: asset
10a0: 73 5b 5d 20 20 20 20 20 5c 20 61 6c 6c 20 73 65  s[]     \ all se
10b0: 6c 65 63 74 65 64 20 61 73 73 65 74 73 20 28 61  lected assets (a
10c0: 72 72 61 79 20 5b 61 73 73 65 74 2c 61 6d 6f 75  rray [asset,amou
10d0: 6e 74 5d 2a 29 0a 20 20 20 20 66 69 65 6c 64 3a  nt]*).    field:
10e0: 20 62 61 6c 61 6e 63 65 73 5b 5d 20 20 20 5c 20   balances[]   \ 
10f0: 61 6c 6c 20 62 61 6c 61 6e 63 65 73 20 28 61 6d  all balances (am
1100: 6f 75 6e 74 5b 61 73 73 65 74 5d 29 0a 20 20 20  ount[asset]).   
1110: 20 76 61 6c 75 65 3a 20 63 75 72 72 65 6e 74 2d   value: current-
1120: 70 6b 0a 20 20 20 20 76 61 6c 75 65 3a 20 63 75  pk.    value: cu
1130: 72 72 65 6e 74 2d 61 73 73 65 74 0a 20 20 20 20  rrent-asset.    
1140: 6d 65 74 68 6f 64 20 6c 61 73 74 2d 63 6f 6e 74  method last-cont
1150: 72 61 63 74 0a 20 20 20 20 6d 65 74 68 6f 64 20  ract.    method 
1160: 73 6f 75 72 63 65 0a 20 20 20 20 6d 65 74 68 6f  source.    metho
1170: 64 20 73 69 6e 6b 0a 20 20 20 20 6d 65 74 68 6f  d sink.    metho
1180: 64 20 61 73 73 65 74 0a 20 20 20 20 6d 65 74 68  d asset.    meth
1190: 6f 64 20 6f 62 6c 69 67 61 74 69 6f 6e 0a 20 20  od obligation.  
11a0: 20 20 6d 65 74 68 6f 64 20 61 6d 6f 75 6e 74 0a    method amount.
11b0: 20 20 20 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 65      method comme
11c0: 6e 74 0a 20 20 20 20 6d 65 74 68 6f 64 20 23 73  nt.    method #s
11d0: 6f 75 72 63 65 0a 20 20 20 20 6d 65 74 68 6f 64  ource.    method
11e0: 20 62 61 6c 61 6e 63 65 0a 20 20 20 20 6d 65 74   balance.    met
11f0: 68 6f 64 20 66 69 6e 61 6c 69 7a 65 0a 7d 63 6c  hod finalize.}cl
1200: 61 73 73 0a 0a 62 65 67 69 6e 2d 73 74 72 75 63  ass..begin-struc
1210: 74 75 72 65 20 77 61 6c 6c 65 74 0a 20 20 20 20  ture wallet.    
1220: 66 69 65 6c 64 3a 20 63 6f 6e 74 72 61 63 74 23  field: contract#
1230: 0a 20 20 20 20 66 69 65 6c 64 3a 20 61 73 73 65  .    field: asse
1240: 74 73 5b 5d 0a 20 20 20 20 66 69 65 6c 64 3a 20  ts[].    field: 
1250: 61 6d 6f 75 6e 74 73 5b 5d 0a 20 20 20 20 66 69  amounts[].    fi
1260: 65 6c 64 3a 20 24 63 6f 6d 6d 65 6e 74 73 5b 5d  eld: $comments[]
1270: 0a 20 20 20 20 66 69 65 6c 64 3a 20 24 73 69 67  .    field: $sig
1280: 0a 65 6e 64 2d 73 74 72 75 63 74 75 72 65 0a 0a  .end-structure..
1290: 5c 20 6f 62 6a 65 63 74 2f 72 65 66 65 72 65 6e  \ object/referen
12a0: 63 65 20 74 79 70 65 73 0a 0a 73 63 6f 70 65 7b  ce types..scope{
12b0: 20 6d 73 67 0a 30 0a 65 6e 75 6d 20 69 6d 61 67   msg.0.enum imag
12c0: 65 23 0a 65 6e 75 6d 20 74 68 75 6d 62 6e 61 69  e#.enum thumbnai
12d0: 6c 23 0a 65 6e 75 6d 20 70 61 74 63 68 23 0a 65  l#.enum patch#.e
12e0: 6e 75 6d 20 73 6e 61 70 73 68 6f 74 23 0a 65 6e  num snapshot#.en
12f0: 75 6d 20 6d 65 73 73 61 67 65 23 0a 65 6e 75 6d  um message#.enum
1300: 20 70 6f 73 74 69 6e 67 23 20 20 20 5c 20 64 76   posting#   \ dv
1310: 63 73 20 70 72 6f 6a 65 63 74 2c 20 70 6f 73 74  cs project, post
1320: 69 6e 67 0a 65 6e 75 6d 20 66 69 6c 65 73 23 20  ing.enum files# 
1330: 20 20 20 20 5c 20 64 76 63 73 20 70 72 6f 6a 65      \ dvcs proje
1340: 63 74 2c 20 66 69 6c 65 73 0a 65 6e 75 6d 20 63  ct, files.enum c
1350: 68 61 74 6c 6f 67 23 20 20 20 5c 20 63 68 61 74  hatlog#   \ chat
1360: 6c 6f 67 20 6f 66 20 69 6e 73 74 61 6e 74 20 6d  log of instant m
1370: 65 73 73 61 67 65 73 0a 65 6e 75 6d 20 74 69 6d  essages.enum tim
1380: 65 6c 69 6e 65 23 20 20 5c 20 63 68 61 74 6c 6f  eline#  \ chatlo
1390: 67 20 6f 66 20 70 6f 73 74 69 6e 67 73 0a 65 6e  g of postings.en
13a0: 75 6d 20 6c 6f 67 67 72 6f 75 70 73 23 20 5c 20  um loggroups# \ 
13b0: 6c 6f 67 73 20 6f 66 20 6c 6f 67 73 0a 64 72 6f  logs of logs.dro
13c0: 70 0a 7d 73 63 6f 70 65 0a 0a 73 63 6f 70 65 3a  p.}scope..scope:
13d0: 20 69 6e 76 69 74 0a 30 0a 65 6e 75 6d 20 6e 6f   invit.0.enum no
13e0: 6e 65 23 0a 65 6e 75 6d 20 70 65 6e 64 23 0a 65  ne#.enum pend#.e
13f0: 6e 75 6d 20 71 72 23 0a 64 72 6f 70 0a 7d 73 63  num qr#.drop.}sc
1400: 6f 70 65 0a 0a 63 6d 64 2d 63 6c 61 73 73 20 63  ope..cmd-class c
1410: 6c 61 73 73 0a 20 20 20 20 5c 20 63 61 6c 6c 62  lass.    \ callb
1420: 61 63 6b 73 0a 20 20 20 20 64 65 66 65 72 3a 20  acks.    defer: 
1430: 74 69 6d 65 6f 75 74 2d 78 74 20 20 20 20 5c 20  timeout-xt    \ 
1440: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 69 6d  callback for tim
1450: 65 6f 75 74 0a 20 20 20 20 64 65 66 65 72 3a 20  eout.    defer: 
1460: 73 65 74 69 70 2d 78 74 20 20 20 20 20 20 5c 20  setip-xt      \ 
1470: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 73 65 74  callback for set
1480: 2d 69 70 0a 20 20 20 20 64 65 66 65 72 3a 20 61  -ip.    defer: a
1490: 63 6b 2d 78 74 20 20 20 20 20 20 20 20 5c 20 63  ck-xt        \ c
14a0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 63 6b 6e  allback for ackn
14b0: 6f 77 6c 65 64 67 65 0a 20 20 20 20 64 65 66 65  owledge.    defe
14c0: 72 3a 20 70 75 6e 63 68 2d 64 6f 6e 65 2d 78 74  r: punch-done-xt
14d0: 20 5c 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20   \ callback for 
14e0: 4e 41 54 20 74 72 61 76 65 72 73 61 6c 20 6f 6b  NAT traversal ok
14f0: 0a 20 20 20 20 64 65 66 65 72 3a 20 73 79 6e 63  .    defer: sync
1500: 2d 64 6f 6e 65 2d 78 74 20 20 5c 20 63 61 6c 6c  -done-xt  \ call
1510: 62 61 63 6b 20 66 6f 72 20 73 79 6e 63 20 64 6f  back for sync do
1520: 6e 65 0a 20 20 20 20 64 65 66 65 72 3a 20 73 79  ne.    defer: sy
1530: 6e 63 2d 6e 6f 6e 65 2d 78 74 20 20 5c 20 63 61  nc-none-xt  \ ca
1540: 6c 6c 62 61 63 6b 20 66 6f 72 20 73 79 6e 63 20  llback for sync 
1550: 6e 6f 74 20 6e 65 65 64 65 64 0a 20 20 20 20 5c  not needed.    \
1560: 20 6d 61 70 73 20 66 6f 72 20 64 61 74 61 20 61   maps for data a
1570: 6e 64 20 63 6f 64 65 20 74 72 61 6e 73 66 65 72  nd code transfer
1580: 0a 20 20 20 20 30 20 2b 66 69 65 6c 64 20 73 74  .    0 +field st
1590: 61 72 74 2d 6d 61 70 73 0a 20 20 20 20 76 61 6c  art-maps.    val
15a0: 75 65 3a 20 63 6f 64 65 2d 6d 61 70 0a 20 20 20  ue: code-map.   
15b0: 20 76 61 6c 75 65 3a 20 63 6f 64 65 2d 72 6d 61   value: code-rma
15c0: 70 0a 20 20 20 20 76 61 6c 75 65 3a 20 64 61 74  p.    value: dat
15d0: 61 2d 6d 61 70 0a 20 20 20 20 76 61 6c 75 65 3a  a-map.    value:
15e0: 20 64 61 74 61 2d 72 6d 61 70 0a 20 20 20 20 30   data-rmap.    0
15f0: 20 2b 66 69 65 6c 64 20 65 6e 64 2d 6d 61 70 73   +field end-maps
1600: 0a 20 20 20 20 5c 20 73 74 72 69 6e 67 73 0a 20  .    \ strings. 
1610: 20 20 20 30 20 2b 66 69 65 6c 64 20 73 74 61 72     0 +field star
1620: 74 2d 73 74 72 69 6e 67 73 0a 20 20 20 20 66 69  t-strings.    fi
1630: 65 6c 64 3a 20 72 65 73 65 6e 64 30 0a 20 20 20  eld: resend0.   
1640: 20 66 69 65 6c 64 3a 20 64 61 74 61 2d 72 65 73   field: data-res
1650: 65 6e 64 0a 20 20 20 20 66 69 65 6c 64 3a 20 70  end.    field: p
1660: 75 62 6b 65 79 20 20 20 20 20 20 20 20 5c 20 6f  ubkey        \ o
1670: 74 68 65 72 20 73 69 64 65 20 6f 66 66 69 63 69  ther side offici
1680: 61 6c 20 70 75 62 6b 65 79 0a 20 20 20 20 66 69  al pubkey.    fi
1690: 65 6c 64 3a 20 70 75 6e 63 68 2d 61 64 64 72 73  eld: punch-addrs
16a0: 0a 20 20 20 20 66 69 65 6c 64 3a 20 72 71 64 2d  .    field: rqd-
16b0: 78 74 73 20 20 20 20 20 20 20 5c 20 63 61 6c 6c  xts       \ call
16c0: 62 61 63 6b 73 20 66 6f 72 20 72 65 71 75 65 73  backs for reques
16d0: 74 20 64 6f 6e 65 20 28 61 72 72 61 79 29 0a 20  t done (array). 
16e0: 20 20 20 66 69 65 6c 64 3a 20 6d 79 2d 65 72 72     field: my-err
16f0: 6f 72 2d 69 64 0a 20 20 20 20 66 69 65 6c 64 3a  or-id.    field:
1700: 20 62 65 61 63 6f 6e 2d 68 61 73 68 0a 20 20 20   beacon-hash.   
1710: 20 30 20 2b 66 69 65 6c 64 20 65 6e 64 2d 73 74   0 +field end-st
1720: 72 69 6e 67 73 0a 20 20 20 20 66 69 65 6c 64 3a  rings.    field:
1730: 20 72 65 71 75 65 73 74 2d 67 65 6e 20 20 20 5c   request-gen   \
1740: 20 70 72 65 2d 67 65 6e 65 72 61 74 65 64 20 72   pre-generated r
1750: 65 71 75 65 73 74 20 6e 75 6d 62 65 72 0a 20 20  equest number.  
1760: 20 20 66 69 65 6c 64 3a 20 70 65 72 6d 2d 6d 61    field: perm-ma
1770: 73 6b 0a 20 20 20 20 5c 20 73 65 63 72 65 74 73  sk.    \ secrets
1780: 0a 20 20 20 20 30 20 2b 66 69 65 6c 64 20 73 74  .    0 +field st
1790: 61 72 74 2d 73 65 63 72 65 74 73 0a 20 20 20 20  art-secrets.    
17a0: 66 69 65 6c 64 3a 20 63 72 79 70 74 6f 2d 6b 65  field: crypto-ke
17b0: 79 0a 20 20 20 20 66 69 65 6c 64 3a 20 64 65 73  y.    field: des
17c0: 74 2d 30 6b 65 79 20 20 20 20 20 5c 20 6b 65 79  t-0key     \ key
17d0: 20 66 6f 72 20 73 74 61 74 65 6c 65 73 73 20 63   for stateless c
17e0: 6f 6e 6e 65 63 74 69 6f 6e 73 0a 20 20 20 20 30  onnections.    0
17f0: 20 2b 66 69 65 6c 64 20 65 6e 64 2d 73 65 63 72   +field end-secr
1800: 65 74 73 0a 20 20 20 20 5c 20 73 65 6d 61 70 68  ets.    \ semaph
1810: 6f 72 65 73 0a 20 20 20 20 30 20 2b 66 69 65 6c  ores.    0 +fiel
1820: 64 20 73 74 61 72 74 2d 73 65 6d 61 73 0a 20 20  d start-semas.  
1830: 20 20 31 20 70 74 68 72 65 61 64 2d 6d 75 74 65    1 pthread-mute
1840: 78 65 73 20 2b 66 69 65 6c 64 20 66 69 6c 65 73  xes +field files
1850: 74 61 74 65 2d 73 65 6d 61 0a 20 20 20 20 31 20  tate-sema.    1 
1860: 70 74 68 72 65 61 64 2d 6d 75 74 65 78 65 73 20  pthread-mutexes 
1870: 2b 66 69 65 6c 64 20 63 6f 64 65 2d 73 65 6d 61  +field code-sema
1880: 0a 20 20 20 20 30 20 2b 66 69 65 6c 64 20 65 6e  .    0 +field en
1890: 64 2d 73 65 6d 61 73 0a 20 20 20 20 5c 20 63 6f  d-semas.    \ co
18a0: 6e 74 65 78 74 73 20 66 6f 72 20 73 75 62 63 6c  ntexts for subcl
18b0: 61 73 73 65 73 0a 20 20 20 20 66 69 65 6c 64 3a  asses.    field:
18c0: 20 6e 65 78 74 2d 63 6f 6e 74 65 78 74 20 20 5c   next-context  \
18d0: 20 6c 69 6e 6b 20 66 69 65 6c 64 20 74 6f 20 63   link field to c
18e0: 6f 6e 6e 65 63 74 20 61 6c 6c 20 63 6f 6e 74 65  onnect all conte
18f0: 78 74 73 0a 20 20 20 20 66 69 65 6c 64 3a 20 6c  xts.    field: l
1900: 6f 67 2d 63 6f 6e 74 65 78 74 0a 20 20 20 20 66  og-context.    f
1910: 69 65 6c 64 3a 20 61 63 6b 2d 63 6f 6e 74 65 78  ield: ack-contex
1920: 74 0a 20 20 20 20 66 69 65 6c 64 3a 20 6d 73 67  t.    field: msg
1930: 69 6e 67 2d 63 6f 6e 74 65 78 74 0a 20 20 20 20  ing-context.    
1940: 66 69 65 6c 64 3a 20 6d 73 67 2d 63 6f 6e 74 65  field: msg-conte
1950: 78 74 0a 20 20 20 20 66 69 65 6c 64 3a 20 66 69  xt.    field: fi
1960: 6c 65 2d 73 74 61 74 65 20 20 20 20 5c 20 66 69  le-state    \ fi
1970: 6c 65 73 0a 20 20 20 20 5c 20 72 65 73 74 20 6f  les.    \ rest o
1980: 66 20 73 74 61 74 65 0a 20 20 20 20 66 69 65 6c  f state.    fiel
1990: 64 3a 20 63 6f 64 65 62 75 66 23 0a 20 20 20 20  d: codebuf#.    
19a0: 66 69 65 6c 64 3a 20 63 6f 6e 74 65 78 74 23 0a  field: context#.
19b0: 20 20 20 20 66 69 65 6c 64 3a 20 77 61 69 74 2d      field: wait-
19c0: 74 61 73 6b 0a 20 20 20 20 76 61 6c 75 65 3a 20  task.    value: 
19d0: 6d 61 78 2d 74 69 6d 65 6f 75 74 73 20 5c 20 69  max-timeouts \ i
19e0: 6e 69 74 69 61 6c 69 7a 65 64 20 77 69 74 68 20  nitialized with 
19f0: 74 69 6d 65 6f 75 74 73 23 0a 20 20 20 20 24 31  timeouts#.    $1
1a00: 30 20 2b 66 69 65 6c 64 20 72 65 74 75 72 6e 2d  0 +field return-
1a10: 61 64 64 72 65 73 73 20 5c 20 75 73 65 64 20 61  address \ used a
1a20: 73 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  s return address
1a30: 0a 20 20 20 20 24 31 30 20 2b 66 69 65 6c 64 20  .    $10 +field 
1a40: 72 30 2d 61 64 64 72 65 73 73 20 5c 20 75 73 65  r0-address \ use
1a50: 64 20 66 6f 72 20 72 65 73 65 6e 64 69 6e 67 20  d for resending 
1a60: 30 0a 20 20 20 20 24 32 30 20 2b 66 69 65 6c 64  0.    $20 +field
1a70: 20 70 75 6e 63 68 23 0a 20 20 20 20 36 34 66 69   punch#.    64fi
1a80: 65 6c 64 3a 20 72 65 63 76 2d 61 64 64 72 0a 20  eld: recv-addr. 
1a90: 20 20 20 66 69 65 6c 64 3a 20 72 65 61 64 2d 66     field: read-f
1aa0: 69 6c 65 23 0a 20 20 20 20 66 69 65 6c 64 3a 20  ile#.    field: 
1ab0: 77 72 69 74 65 2d 66 69 6c 65 23 0a 20 20 20 20  write-file#.    
1ac0: 66 69 65 6c 64 3a 20 72 65 73 69 64 75 61 6c 72  field: residualr
1ad0: 65 61 64 0a 20 20 20 20 66 69 65 6c 64 3a 20 72  ead.    field: r
1ae0: 65 73 69 64 75 61 6c 77 72 69 74 65 0a 20 20 20  esidualwrite.   
1af0: 20 66 69 65 6c 64 3a 20 62 6c 6f 63 6b 73 69 7a   field: blocksiz
1b00: 65 0a 20 20 20 20 66 69 65 6c 64 3a 20 62 6c 6f  e.    field: blo
1b10: 63 6b 61 6c 69 67 6e 0a 20 20 20 20 66 69 65 6c  ckalign.    fiel
1b20: 64 3a 20 72 65 71 6d 61 73 6b 20 5c 20 70 65 72  d: reqmask \ per
1b30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
1b40: 65 73 74 20 6d 61 73 6b 0a 20 20 20 20 66 69 65  est mask.    fie
1b50: 6c 64 3a 20 72 65 71 63 6f 75 6e 74 20 5c 20 70  ld: reqcount \ p
1b60: 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  er connection re
1b70: 71 75 65 73 74 20 63 6f 75 6e 74 20 28 66 6f 72  quest count (for
1b80: 20 6e 6f 6e 20 63 6f 6f 6b 69 65 2d 72 65 71 75   non cookie-requ
1b90: 65 73 74 73 29 0a 20 20 20 20 66 69 65 6c 64 3a  ests).    field:
1ba0: 20 72 65 71 75 65 73 74 23 0a 20 20 20 20 66 69   request#.    fi
1bb0: 65 6c 64 3a 20 66 69 6c 65 72 65 71 23 0a 20 20  eld: filereq#.  
1bc0: 20 20 66 69 65 6c 64 3a 20 66 69 6c 65 2d 63 6f    field: file-co
1bd0: 75 6e 74 20 5c 20 6f 70 65 6e 20 66 69 6c 65 20  unt \ open file 
1be0: 63 6f 75 6e 74 0a 20 20 20 20 66 69 65 6c 64 3a  count.    field:
1bf0: 20 66 69 6c 65 2d 72 65 67 23 20 20 5c 20 6e 65   file-reg#  \ ne
1c00: 78 74 20 66 69 6c 65 20 69 64 20 74 6f 20 72 65  xt file id to re
1c10: 71 75 65 73 74 0a 20 20 20 20 0a 20 20 20 20 66  quest.    .    f
1c20: 69 65 6c 64 3a 20 64 61 74 61 2d 62 32 62 0a 20  ield: data-b2b. 
1c30: 20 20 20 0a 20 20 20 20 76 61 6c 75 65 3a 20 61     .    value: a
1c40: 63 6b 2d 72 65 73 65 6e 64 73 23 0a 20 20 20 20  ck-resends#.    
1c50: 63 66 69 65 6c 64 3a 20 61 63 6b 2d 73 74 61 74  cfield: ack-stat
1c60: 65 0a 20 20 20 20 63 76 61 6c 75 65 3a 20 61 63  e.    cvalue: ac
1c70: 6b 2d 72 65 63 65 69 76 65 0a 20 20 20 20 63 76  k-receive.    cv
1c80: 61 6c 75 65 3a 20 61 63 6b 2d 72 65 73 65 6e 64  alue: ack-resend
1c90: 7e 0a 20 20 20 20 0a 20 20 20 20 63 76 61 6c 75  ~.    .    cvalu
1ca0: 65 3a 20 72 65 71 2d 63 6f 64 65 73 69 7a 65 0a  e: req-codesize.
1cb0: 20 20 20 20 63 76 61 6c 75 65 3a 20 72 65 71 2d      cvalue: req-
1cc0: 64 61 74 61 73 69 7a 65 0a 0a 20 20 20 20 73 63  datasize..    sc
1cd0: 76 61 6c 75 65 3a 20 6b 65 79 2d 73 65 74 75 70  value: key-setup
1ce0: 3f 20 20 20 20 20 5c 20 74 72 75 65 20 69 66 20  ?     \ true if 
1cf0: 6b 65 79 20 73 65 74 75 70 20 69 73 20 64 6f 6e  key setup is don
1d00: 65 0a 20 20 20 20 63 76 61 6c 75 65 3a 20 69 6e  e.    cvalue: in
1d10: 76 69 74 65 2d 72 65 73 75 6c 74 23 20 5c 20 69  vite-result# \ i
1d20: 6e 76 69 74 61 74 69 6f 6e 20 72 65 73 75 6c 74  nvitation result
1d30: 0a 20 20 20 20 63 76 61 6c 75 65 3a 20 63 6c 6f  .    cvalue: clo
1d40: 73 69 6e 67 3f 0a 20 20 20 20 5c 20 66 6c 6f 77  sing?.    \ flow
1d50: 20 63 6f 6e 74 72 6f 6c 2c 20 73 65 6e 64 65 72   control, sender
1d60: 20 70 61 72 74 0a 0a 20 20 20 20 36 34 66 69 65   part..    64fie
1d70: 6c 64 3a 20 6e 65 78 74 2d 74 69 6d 65 6f 75 74  ld: next-timeout
1d80: 20 5c 20 6e 73 0a 20 20 20 20 36 34 66 69 65 6c   \ ns.    64fiel
1d90: 64 3a 20 72 65 73 65 6e 64 2d 61 6c 6c 2d 74 6f  d: resend-all-to
1da0: 20 5c 20 6e 73 0a 20 20 20 20 5c 20 66 6c 6f 77   \ ns.    \ flow
1db0: 20 63 6f 6e 74 72 6f 6c 2c 20 72 65 63 65 69 76   control, receiv
1dc0: 65 72 20 70 61 72 74 0a 20 20 20 20 36 34 66 69  er part.    64fi
1dd0: 65 6c 64 3a 20 62 75 72 73 74 2d 74 69 63 6b 73  eld: burst-ticks
1de0: 0a 20 20 20 20 36 34 66 69 65 6c 64 3a 20 66 69  .    64field: fi
1df0: 72 73 74 62 2d 74 69 63 6b 73 0a 20 20 20 20 36  rstb-ticks.    6
1e00: 34 66 69 65 6c 64 3a 20 6c 61 73 74 62 2d 74 69  4field: lastb-ti
1e10: 63 6b 73 0a 20 20 20 20 36 34 66 69 65 6c 64 3a  cks.    64field:
1e20: 20 64 65 6c 74 61 2d 74 69 63 6b 73 0a 20 20 20   delta-ticks.   
1e30: 20 36 34 66 69 65 6c 64 3a 20 6d 61 78 2d 64 74   64field: max-dt
1e40: 69 63 6b 73 0a 20 20 20 20 36 34 66 69 65 6c 64  icks.    64field
1e50: 3a 20 6c 61 73 74 2d 72 61 74 65 0a 20 20 20 20  : last-rate.    
1e60: 5c 20 65 78 70 65 72 69 6d 65 6e 74 3a 20 74 72  \ experiment: tr
1e70: 61 63 6b 20 70 72 65 76 69 6f 75 73 20 62 32 62  ack previous b2b
1e80: 2d 73 74 61 72 74 0a 20 20 20 20 36 34 66 69 65  -start.    64fie
1e90: 6c 64 3a 20 6c 61 73 74 2d 72 74 69 63 6b 0a 20  ld: last-rtick. 
1ea0: 20 20 20 36 34 66 69 65 6c 64 3a 20 6c 61 73 74     64field: last
1eb0: 2d 72 61 64 64 72 0a 20 20 20 20 66 69 65 6c 64  -raddr.    field
1ec0: 3a 20 61 63 6b 73 0a 20 20 20 20 66 69 65 6c 64  : acks.    field
1ed0: 3a 20 72 65 63 65 69 76 65 64 0a 20 20 20 20 5c  : received.    \
1ee0: 20 63 6f 6f 6b 69 65 73 0a 20 20 20 20 66 69 65   cookies.    fie
1ef0: 6c 64 3a 20 6c 61 73 74 2d 61 63 6b 61 64 64 72  ld: last-ackaddr
1f00: 0a 20 20 20 20 5c 20 73 74 61 74 69 73 74 69 63  .    \ statistic
1f10: 73 0a 20 20 20 20 4b 45 59 42 59 54 45 53 20 2b  s.    KEYBYTES +
1f20: 66 69 65 6c 64 20 74 70 6b 63 0a 20 20 20 20 4b  field tpkc.    K
1f30: 45 59 42 59 54 45 53 20 2b 66 69 65 6c 64 20 74  EYBYTES +field t
1f40: 73 6b 63 0a 65 6e 64 2d 63 6c 61 73 73 20 63 6f  skc.end-class co
1f50: 6e 74 65 78 74 2d 63 6c 61 73 73 0a 0a 63 6d 64  ntext-class..cmd
1f60: 2d 63 6c 61 73 73 20 63 6c 61 73 73 0a 20 20 20  -class class.   
1f70: 20 73 63 6f 70 65 3a 20 68 6f 73 74 0a 20 20 20   scope: host.   
1f80: 20 66 69 65 6c 64 3a 20 70 72 69 23 0a 20 20 20   field: pri#.   
1f90: 20 66 69 65 6c 64 3a 20 69 64 0a 20 20 20 20 6c   field: id.    l
1fa0: 66 69 65 6c 64 3a 20 69 70 76 34 0a 20 20 20 20  field: ipv4.    
1fb0: 24 31 30 20 2b 66 69 65 6c 64 20 69 70 76 36 0a  $10 +field ipv6.
1fc0: 20 20 20 20 77 66 69 65 6c 64 3a 20 70 6f 72 74      wfield: port
1fd0: 76 34 0a 20 20 20 20 77 66 69 65 6c 64 3a 20 70  v4.    wfield: p
1fe0: 6f 72 74 76 36 0a 20 20 20 20 66 69 65 6c 64 3a  ortv6.    field:
1ff0: 20 61 6e 63 68 6f 72 20 5c 20 6e 65 74 32 6f 20   anchor \ net2o 
2000: 61 6e 63 68 6f 72 20 28 69 73 20 61 20 70 75 62  anchor (is a pub
2010: 6b 65 79 29 0a 20 20 20 20 66 69 65 6c 64 3a 20  key).    field: 
2020: 72 6f 75 74 65 20 20 5c 20 6e 65 74 32 6f 20 72  route  \ net2o r
2030: 6f 75 74 65 0a 20 20 20 20 66 69 65 6c 64 3a 20  oute.    field: 
2040: 72 65 76 6f 6b 65 20 5c 20 69 73 20 61 20 72 65  revoke \ is a re
2050: 76 6f 6b 65 20 70 61 74 68 0a 20 20 20 20 66 69  voke path.    fi
2060: 65 6c 64 3a 20 6b 65 79 20 20 20 20 5c 20 70 73  eld: key    \ ps
2070: 6b 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  k for connection
2080: 20 73 65 74 75 70 0a 20 20 20 20 66 69 65 6c 64   setup.    field
2090: 3a 20 65 6b 65 79 20 20 20 5c 20 65 70 68 65 6d  : ekey   \ ephem
20a0: 65 72 61 6c 20 6b 65 79 20 61 20 6c 61 20 4d 69  eral key a la Mi
20b0: 6e 69 6d 61 4c 54 0a 20 20 20 20 36 34 66 69 65  nimaLT.    64fie
20c0: 6c 64 3a 20 65 6b 65 79 2d 74 6f 20 5c 20 65 70  ld: ekey-to \ ep
20d0: 68 65 6d 65 72 61 6c 20 6b 65 79 20 74 69 6d 65  hemeral key time
20e0: 6f 75 74 0a 20 20 20 20 7d 73 63 6f 70 65 0a 65  out.    }scope.e
20f0: 6e 64 2d 63 6c 61 73 73 20 61 64 64 72 65 73 73  nd-class address
2100: 2d 63 6c 61 73 73 0a 0a 5c 20 63 6f 6f 6b 69 65  -class..\ cookie
2110: 73 0a 0a 6f 62 6a 65 63 74 20 63 6c 61 73 73 0a  s..object class.
2120: 20 20 20 20 36 34 66 69 65 6c 64 3a 20 63 63 2d      64field: cc-
2130: 74 69 6d 65 6f 75 74 0a 20 20 20 20 66 69 65 6c  timeout.    fiel
2140: 64 3a 20 63 63 2d 63 6f 6e 74 65 78 74 0a 20 20  d: cc-context.  
2150: 20 20 4b 45 59 42 59 54 45 53 20 2b 66 69 65 6c    KEYBYTES +fiel
2160: 64 20 63 63 2d 73 65 63 72 65 74 0a 65 6e 64 2d  d cc-secret.end-
2170: 63 6c 61 73 73 20 63 6f 6e 2d 63 6f 6f 6b 69 65  class con-cookie
2180: 0a 0a 63 6f 6e 2d 63 6f 6f 6b 69 65 20 3e 6f 73  ..con-cookie >os
2190: 69 7a 65 20 40 20 43 6f 6e 73 74 61 6e 74 20 63  ize @ Constant c
21a0: 6f 6f 6b 69 65 2d 73 69 7a 65 23 0a 0a 5c 20 70  ookie-size#..\ p
21b0: 65 72 6d 69 73 73 69 6f 6e 73 0a 0a 31 0a 62 69  ermissions..1.bi
21c0: 74 20 70 65 72 6d 25 63 6f 6e 6e 65 63 74 20 20  t perm%connect  
21d0: 20 20 5c 20 6e 6f 74 20 73 65 74 20 66 6f 72 20    \ not set for 
21e0: 62 61 6e 6e 65 64 20 70 65 6f 70 6c 65 0a 62 69  banned people.bi
21f0: 74 20 70 65 72 6d 25 62 6c 6f 63 6b 65 64 20 20  t perm%blocked  
2200: 20 20 5c 20 73 65 74 20 66 6f 72 20 62 61 6e 6e    \ set for bann
2210: 65 64 20 70 65 6f 70 6c 65 20 2d 20 6d 61 6b 65  ed people - make
2220: 73 20 73 75 72 65 20 6f 6e 65 20 62 69 74 20 69  s sure one bit i
2230: 73 20 73 65 74 0a 62 69 74 20 70 65 72 6d 25 64  s set.bit perm%d
2240: 68 74 20 20 20 20 20 20 20 20 5c 20 63 61 6e 20  ht        \ can 
2250: 77 72 69 74 65 20 69 6e 74 6f 20 74 68 65 20 44  write into the D
2260: 48 54 0a 62 69 74 20 70 65 72 6d 25 6d 73 67 20  HT.bit perm%msg 
2270: 20 20 20 20 20 20 20 5c 20 63 61 6e 20 73 65 6e         \ can sen
2280: 64 20 6d 65 73 73 61 67 65 73 0a 62 69 74 20 70  d messages.bit p
2290: 65 72 6d 25 66 69 6c 65 72 64 20 20 20 20 20 5c  erm%filerd     \
22a0: 20 63 61 6e 20 72 65 61 64 20 66 69 6c 65 73 0a   can read files.
22b0: 62 69 74 20 70 65 72 6d 25 66 69 6c 65 77 72 20  bit perm%filewr 
22c0: 20 20 20 20 5c 20 63 61 6e 20 77 72 69 74 65 20      \ can write 
22d0: 66 69 6c 65 73 0a 62 69 74 20 70 65 72 6d 25 66  files.bit perm%f
22e0: 69 6c 65 6e 61 6d 65 20 20 20 5c 20 63 61 6e 20  ilename   \ can 
22f0: 61 63 63 65 73 73 20 6e 61 6d 65 64 20 66 69 6c  access named fil
2300: 65 73 0a 62 69 74 20 70 65 72 6d 25 66 69 6c 65  es.bit perm%file
2310: 68 61 73 68 20 20 20 5c 20 63 61 6e 20 61 63 63  hash   \ can acc
2320: 65 73 73 20 66 69 6c 65 73 20 62 79 20 68 61 73  ess files by has
2330: 68 0a 62 69 74 20 70 65 72 6d 25 73 6f 63 6b 65  h.bit perm%socke
2340: 74 20 20 20 20 20 5c 20 63 61 6e 20 61 63 63 65  t     \ can acce
2350: 73 73 20 73 6f 63 6b 65 74 73 0a 62 69 74 20 70  ss sockets.bit p
2360: 65 72 6d 25 74 65 72 6d 69 6e 61 6c 20 20 20 5c  erm%terminal   \
2370: 20 63 61 6e 20 61 63 63 65 73 73 20 74 65 72 6d   can access term
2380: 69 6e 61 6c 0a 62 69 74 20 70 65 72 6d 25 74 65  inal.bit perm%te
2390: 72 6d 73 65 72 76 65 72 20 5c 20 63 61 6e 20 61  rmserver \ can a
23a0: 63 63 65 73 73 20 74 65 72 6d 73 65 72 76 65 72  ccess termserver
23b0: 0a 62 69 74 20 70 65 72 6d 25 73 79 6e 63 20 20  .bit perm%sync  
23c0: 20 20 20 20 20 5c 20 69 73 20 61 6c 6c 6f 77 65       \ is allowe
23d0: 64 20 74 6f 20 73 79 6e 63 0a 62 69 74 20 70 65  d to sync.bit pe
23e0: 72 6d 25 69 6e 64 69 72 65 63 74 20 20 20 5c 20  rm%indirect   \ 
23f0: 66 6f 72 63 65 20 69 6e 64 69 72 65 63 74 20 63  force indirect c
2400: 6f 6e 6e 65 63 74 69 6f 6e 0a 64 72 6f 70 0a 0a  onnection.drop..
2410: 70 65 72 6d 25 63 6f 6e 6e 65 63 74 20 70 65 72  perm%connect per
2420: 6d 25 64 68 74 20 70 65 72 6d 25 6d 73 67 20 70  m%dht perm%msg p
2430: 65 72 6d 25 66 69 6c 65 72 64 20 70 65 72 6d 25  erm%filerd perm%
2440: 66 69 6c 65 68 61 73 68 20 6f 72 20 6f 72 20 6f  filehash or or o
2450: 72 20 6f 72 20 56 61 6c 75 65 20 70 65 72 6d 25  r or Value perm%
2460: 64 65 66 61 75 6c 74 0a 70 65 72 6d 25 63 6f 6e  default.perm%con
2470: 6e 65 63 74 20 70 65 72 6d 25 64 68 74 20 70 65  nect perm%dht pe
2480: 72 6d 25 69 6e 64 69 72 65 63 74 20 6f 72 20 6f  rm%indirect or o
2490: 72 20 56 61 6c 75 65 20 70 65 72 6d 25 64 68 74  r Value perm%dht
24a0: 72 6f 6f 74 0a 70 65 72 6d 25 62 6c 6f 63 6b 65  root.perm%blocke
24b0: 64 20 70 65 72 6d 25 69 6e 64 69 72 65 63 74 20  d perm%indirect 
24c0: 6f 72 20 56 61 6c 75 65 20 70 65 72 6d 25 75 6e  or Value perm%un
24d0: 6b 6e 6f 77 6e 0a 70 65 72 6d 25 62 6c 6f 63 6b  known.perm%block
24e0: 65 64 20 70 65 72 6d 25 69 6e 64 69 72 65 63 74  ed perm%indirect
24f0: 20 6f 72 20 69 6e 76 65 72 74 20 56 61 6c 75 65   or invert Value
2500: 20 70 65 72 6d 25 6d 79 73 65 6c 66 0a 43 72 65   perm%myself.Cre
2510: 61 74 65 20 70 65 72 6d 24 20 2c 22 20 63 62 64  ate perm$ ," cbd
2520: 6d 72 77 6e 68 73 74 76 79 69 22 0a 0a 5c 20 51  mrwnhstvyi"..\ Q
2530: 52 20 74 61 67 73 0a 0a 73 63 6f 70 65 3a 20 71  R tags..scope: q
2540: 72 0a 30 0a 65 6e 75 6d 20 6f 77 6e 6b 65 79 23  r.0.enum ownkey#
2550: 0a 65 6e 75 6d 20 6b 65 79 23 0a 65 6e 75 6d 20  .enum key#.enum 
2560: 6b 65 79 73 69 67 23 0a 65 6e 75 6d 20 68 61 73  keysig#.enum has
2570: 68 23 0a 65 6e 75 6d 20 73 79 6e 63 23 20 20 20  h#.enum sync#   
2580: 20 5c 20 73 79 63 68 6e 72 6f 6e 69 7a 69 6e 67   \ sychnronizing
2590: 20 69 6e 66 6f 3a 20 6b 65 79 2b 73 65 63 72 65   info: key+secre
25a0: 74 0a 65 6e 75 6d 20 70 61 79 6d 65 6e 74 23 20  t.enum payment# 
25b0: 5c 20 70 61 79 6d 65 6e 74 20 69 73 20 76 61 6c  \ payment is val
25c0: 75 65 2b 63 6f 69 6e 74 79 70 65 2b 77 61 6c 6c  ue+cointype+wall
25d0: 65 74 0a 64 72 6f 70 0a 7d 73 63 6f 70 65 0a 0a  et.drop.}scope..
25e0: 5c 20 74 69 6d 65 73 74 61 73 74 73 20 73 74 72  \ timestasts str
25f0: 75 63 74 75 72 65 0a 0a 62 65 67 69 6e 2d 73 74  ucture..begin-st
2600: 72 75 63 74 75 72 65 20 74 69 6d 65 73 74 61 74  ructure timestat
2610: 73 0a 73 66 76 61 6c 75 65 3a 20 74 73 2d 64 65  s.sfvalue: ts-de
2620: 6c 74 61 0a 73 66 76 61 6c 75 65 3a 20 74 73 2d  lta.sfvalue: ts-
2630: 73 6c 61 63 6b 0a 73 66 76 61 6c 75 65 3a 20 74  slack.sfvalue: t
2640: 73 2d 72 65 71 72 61 74 65 0a 73 66 76 61 6c 75  s-reqrate.sfvalu
2650: 65 3a 20 74 73 2d 72 61 74 65 0a 73 66 76 61 6c  e: ts-rate.sfval
2660: 75 65 3a 20 74 73 2d 67 72 6f 77 0a 65 6e 64 2d  ue: ts-grow.end-
2670: 73 74 72 75 63 74 75 72 65 0a 0a 5c 20 69 6f 20  structure..\ io 
2680: 70 65 72 2d 74 61 73 6b 20 76 61 72 69 61 62 6c  per-task variabl
2690: 65 73 0a 0a 75 73 65 72 2d 6f 20 69 6f 2d 6d 65  es..user-o io-me
26a0: 6d 0a 0a 6f 62 6a 65 63 74 20 75 63 6c 61 73 73  m..object uclass
26b0: 20 69 6f 2d 6d 65 6d 0a 20 20 20 20 70 6f 6c 6c   io-mem.    poll
26c0: 66 64 20 34 20 2a 20 20 20 20 20 20 75 76 61 72  fd 4 *      uvar
26d0: 20 70 6f 6c 6c 66 64 73 20 5c 20 75 70 20 74 6f   pollfds \ up to
26e0: 20 66 6f 75 72 20 66 69 6c 65 20 64 65 73 63 72   four file descr
26f0: 69 70 74 6f 72 73 0a 20 20 20 20 73 6f 63 6b 61  iptors.    socka
2700: 64 64 72 5f 69 6e 20 20 20 20 20 75 76 61 72 20  ddr_in     uvar 
2710: 73 6f 63 6b 61 64 64 72 3c 20 5c 20 69 6e 63 6f  sockaddr< \ inco
2720: 6d 69 6e 67 20 73 6f 63 6b 65 74 0a 20 20 20 20  ming socket.    
2730: 73 6f 63 6b 61 64 64 72 5f 69 6e 20 20 20 20 20  sockaddr_in     
2740: 75 76 61 72 20 73 6f 63 6b 61 64 64 72 3e 20 5c  uvar sockaddr> \
2750: 20 6f 75 74 67 6f 69 6e 67 20 73 6f 63 6b 65 74   outgoing socket
2760: 0a 20 20 20 20 73 6f 63 6b 61 64 64 72 5f 69 6e  .    sockaddr_in
2770: 20 20 20 20 20 75 76 61 72 20 73 6f 63 6b 61 64       uvar sockad
2780: 64 72 31 0a 20 20 20 20 5b 49 46 44 45 46 5d 20  dr1.    [IFDEF] 
2790: 6e 6f 2d 68 79 62 72 69 64 0a 09 73 6f 63 6b 61  no-hybrid..socka
27a0: 64 64 72 5f 69 6e 20 75 76 61 72 20 73 6f 63 6b  ddr_in uvar sock
27b0: 61 64 64 72 32 0a 20 20 20 20 5b 54 48 45 4e 5d  addr2.    [THEN]
27c0: 0a 20 20 20 20 66 69 6c 65 2d 73 74 61 74 20 20  .    file-stat  
27d0: 20 20 20 20 20 75 76 61 72 20 73 74 61 74 62 75       uvar statbu
27e0: 66 0a 20 20 20 20 61 6c 69 67 6e 65 64 0a 20 20  f.    aligned.  
27f0: 20 20 63 65 6c 6c 20 20 20 20 20 20 20 20 20 20    cell          
2800: 20 20 75 76 61 72 20 69 6e 64 2d 61 64 64 72 0a    uvar ind-addr.
2810: 20 20 20 20 63 65 6c 6c 20 20 20 20 20 20 20 20      cell        
2820: 20 20 20 20 75 76 61 72 20 74 61 73 6b 23 0a 20      uvar task#. 
2830: 20 20 20 24 46 20 2b 20 2d 24 31 30 20 61 6e 64     $F + -$10 and
2840: 20 5c 20 61 6c 69 67 6e 20 62 79 20 24 31 30 0a   \ align by $10.
2850: 20 20 20 20 6d 61 78 64 61 74 61 20 20 20 20 20      maxdata     
2860: 20 20 20 20 75 76 61 72 20 61 6c 69 67 6e 65 64      uvar aligned
2870: 24 0a 20 20 20 20 24 31 30 20 20 20 20 20 20 20  $.    $10       
2880: 20 20 20 20 20 20 75 76 61 72 20 63 6d 64 74 6d        uvar cmdtm
2890: 70 0a 20 20 20 20 24 31 30 20 20 20 20 20 20 20  p.    $10       
28a0: 20 20 20 20 20 20 75 76 61 72 20 72 65 74 75 72        uvar retur
28b0: 6e 2d 61 64 64 72 0a 20 20 20 20 24 31 30 20 20  n-addr.    $10  
28c0: 20 20 20 20 20 20 20 20 20 20 20 75 76 61 72 20             uvar 
28d0: 74 65 6d 70 2d 61 64 64 72 0a 20 20 20 20 74 69  temp-addr.    ti
28e0: 6d 65 73 74 61 74 73 20 20 20 20 20 20 20 75 76  mestats       uv
28f0: 61 72 20 73 74 61 74 2d 74 75 70 6c 65 0a 20 20  ar stat-tuple.  
2900: 20 20 6d 61 78 64 61 74 61 20 32 2f 20 6b 65 79    maxdata 2/ key
2910: 2d 73 61 6c 74 23 20 2b 20 6b 65 79 2d 63 6b 73  -salt# + key-cks
2920: 75 6d 23 20 2b 20 75 76 61 72 20 69 6e 69 74 30  um# + uvar init0
2930: 62 75 66 0a 20 20 20 20 61 6c 69 67 6e 65 64 0a  buf.    aligned.
2940: 20 20 20 20 63 65 6c 6c 20 20 20 20 20 20 20 20      cell        
2950: 20 20 20 20 75 76 61 72 20 63 6f 64 65 30 2d 62      uvar code0-b
2960: 75 66 5e 0a 20 20 20 20 63 65 6c 6c 20 20 20 20  uf^.    cell    
2970: 20 20 20 20 20 20 20 20 75 76 61 72 20 63 6f 64          uvar cod
2980: 65 2d 62 75 66 5e 0a 20 20 20 20 63 65 6c 6c 20  e-buf^.    cell 
2990: 20 20 20 20 20 20 20 20 20 20 20 75 76 61 72 20             uvar 
29a0: 63 6f 64 65 2d 62 75 66 24 5e 0a 20 20 20 20 63  code-buf$^.    c
29b0: 65 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 75  ell            u
29c0: 76 61 72 20 63 6f 64 65 2d 6b 65 79 5e 0a 20 20  var code-key^.  
29d0: 20 20 5c 20 76 61 75 6c 74 20 76 61 72 69 61 62    \ vault variab
29e0: 6c 65 73 0a 20 20 20 20 63 65 6c 6c 20 20 20 20  les.    cell    
29f0: 20 20 20 20 20 20 20 20 75 76 61 72 20 65 6e 63          uvar enc
2a00: 2d 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 63 65  -filename.    ce
2a10: 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 75 76  ll            uv
2a20: 61 72 20 65 6e 63 2d 66 69 6c 65 0a 20 20 20 20  ar enc-file.    
2a30: 63 65 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  cell            
2a40: 75 76 61 72 20 65 6e 63 2d 66 64 0a 20 20 20 20  uvar enc-fd.    
2a50: 63 65 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  cell            
2a60: 75 76 61 72 20 65 6e 63 2d 70 61 64 64 69 6e 67  uvar enc-padding
2a70: 0a 20 20 20 20 63 65 6c 6c 20 20 20 20 20 20 20  .    cell       
2a80: 20 20 20 20 20 75 76 61 72 20 6b 65 79 2d 6c 69       uvar key-li
2a90: 73 74 0a 20 20 20 20 5c 20 6d 61 70 70 69 6e 67  st.    \ mapping
2aa0: 20 62 75 66 66 65 72 73 0a 20 20 20 20 31 20 36   buffers.    1 6
2ab0: 34 73 20 20 20 20 20 20 20 20 20 20 20 75 76 61  4s           uva
2ac0: 72 20 6e 65 77 2d 63 6f 64 65 2d 73 0a 20 20 20  r new-code-s.   
2ad0: 20 31 20 36 34 73 20 20 20 20 20 20 20 20 20 20   1 64s          
2ae0: 20 75 76 61 72 20 6e 65 77 2d 63 6f 64 65 2d 64   uvar new-code-d
2af0: 0a 20 20 20 20 31 20 36 34 73 20 20 20 20 20 20  .    1 64s      
2b00: 20 20 20 20 20 75 76 61 72 20 6e 65 77 2d 64 61       uvar new-da
2b10: 74 61 2d 73 0a 20 20 20 20 31 20 36 34 73 20 20  ta-s.    1 64s  
2b20: 20 20 20 20 20 20 20 20 20 75 76 61 72 20 6e 65           uvar ne
2b30: 77 2d 64 61 74 61 2d 64 0a 20 20 20 20 63 65 6c  w-data-d.    cel
2b40: 6c 20 20 20 20 20 20 20 20 20 20 20 20 75 76 61  l            uva
2b50: 72 20 6e 65 77 2d 63 6f 64 65 2d 73 69 7a 65 0a  r new-code-size.
2b60: 20 20 20 20 63 65 6c 6c 20 20 20 20 20 20 20 20      cell        
2b70: 20 20 20 20 75 76 61 72 20 6e 65 77 2d 64 61 74      uvar new-dat
2b80: 61 2d 73 69 7a 65 0a 20 20 20 20 63 65 6c 6c 20  a-size.    cell 
2b90: 20 20 20 20 20 20 20 20 20 20 20 75 76 61 72 20             uvar 
2ba0: 64 6f 2d 6b 65 79 70 61 64 0a 20 20 20 20 63 65  do-keypad.    ce
2bb0: 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 75 76  ll            uv
2bc0: 61 72 20 74 6d 70 2d 69 76 73 0a 20 20 20 20 63  ar tmp-ivs.    c
2bd0: 65 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 75  ell            u
2be0: 76 61 72 20 74 6d 70 2d 70 75 62 6b 65 79 0a 20  var tmp-pubkey. 
2bf0: 20 20 20 63 65 6c 6c 20 20 20 20 20 20 20 20 20     cell         
2c00: 20 20 20 75 76 61 72 20 74 6d 70 2d 6d 79 2d 6b     uvar tmp-my-k
2c10: 65 79 0a 20 20 20 20 63 65 6c 6c 20 20 20 20 20  ey.    cell     
2c20: 20 20 20 20 20 20 20 75 76 61 72 20 74 6d 70 2d         uvar tmp-
2c30: 70 65 72 6d 0a 20 20 20 20 63 65 6c 6c 20 20 20  perm.    cell   
2c40: 20 20 20 20 20 20 20 20 20 75 76 61 72 20 24 65           uvar $e
2c50: 72 72 6f 72 2d 69 64 0a 65 6e 64 2d 63 6c 61 73  rror-id.end-clas
2c60: 73 20 69 6f 2d 62 75 66 66 65 72 73 0a 0a 5c 20  s io-buffers..\ 
2c70: 72 65 70 6c 79 20 73 74 72 75 63 74 75 72 65 0a  reply structure.
2c80: 0a 62 65 67 69 6e 2d 73 74 72 75 63 74 75 72 65  .begin-structure
2c90: 20 72 65 70 6c 79 0a 20 20 20 20 66 69 65 6c 64   reply.    field
2ca0: 3a 20 72 65 70 6c 79 2d 6c 65 6e 0a 20 20 20 20  : reply-len.    
2cb0: 66 69 65 6c 64 3a 20 72 65 70 6c 79 2d 6f 66 66  field: reply-off
2cc0: 73 65 74 0a 20 20 20 20 36 34 66 69 65 6c 64 3a  set.    64field:
2cd0: 20 72 65 70 6c 79 2d 64 65 73 74 0a 20 20 20 20   reply-dest.    
2ce0: 36 34 66 69 65 6c 64 3a 20 72 65 70 6c 79 2d 74  64field: reply-t
2cf0: 69 6d 65 0a 20 20 20 20 64 65 66 65 72 3a 20 72  ime.    defer: r
2d00: 65 70 6c 79 2d 78 74 20 20 5c 20 65 78 65 63 75  eply-xt  \ execu
2d10: 74 65 20 77 68 65 6e 20 72 65 63 65 69 76 69 6e  te when receivin
2d20: 67 20 61 6e 20 6f 6b 0a 20 20 20 20 64 65 66 65  g an ok.    defe
2d30: 72 3a 20 73 65 6e 64 2d 78 74 20 20 20 5c 20 65  r: send-xt   \ e
2d40: 78 65 63 75 74 65 64 20 74 6f 20 28 72 65 29 73  xecuted to (re)s
2d50: 65 6e 64 20 61 20 6d 65 73 73 61 67 65 0a 20 20  end a message.  
2d60: 20 20 76 61 6c 75 65 3a 20 72 65 70 6c 79 2d 74    value: reply-t
2d70: 61 67 20 5c 20 70 6f 69 6e 74 65 72 20 74 6f 20  ag \ pointer to 
2d80: 72 65 70 6c 79 20 74 61 67 0a 5c 20 20 20 20 66  reply tag.\    f
2d90: 69 65 6c 64 3a 20 72 65 70 6c 79 2d 74 69 6d 65  ield: reply-time
2da0: 6f 75 74 23 20 5c 20 70 65 72 2d 72 65 70 6c 79  out# \ per-reply
2db0: 20 74 69 6d 65 6f 75 74 20 63 6f 75 6e 74 65 72   timeout counter
2dc0: 0a 5c 20 20 20 20 66 69 65 6c 64 3a 20 72 65 70  .\    field: rep
2dd0: 6c 79 2d 74 69 6d 65 6f 75 74 2d 78 74 20 5c 20  ly-timeout-xt \ 
2de0: 70 65 72 2d 72 65 70 6c 79 20 74 69 6d 65 6f 75  per-reply timeou
2df0: 74 20 78 74 0a 65 6e 64 2d 73 74 72 75 63 74 75  t xt.end-structu
2e00: 72 65 0a 0a 5c 20 61 64 64 72 65 73 73 20 74 6f  re..\ address to
2e10: 20 69 6e 64 65 78 20 63 6f 6d 70 75 74 61 74 69   index computati
2e20: 6f 6e 73 0a 0a 3a 20 61 64 64 72 3e 62 69 74 73  ons..: addr>bits
2e30: 20 28 20 61 64 64 72 20 2d 2d 20 62 69 74 73 20   ( addr -- bits 
2e40: 29 0a 20 20 20 20 63 68 75 6e 6b 2d 70 32 20 72  ).    chunk-p2 r
2e50: 73 68 69 66 74 20 3b 0a 3a 20 61 64 64 72 3e 62  shift ;.: addr>b
2e60: 79 74 65 73 20 28 20 61 64 64 72 20 2d 2d 20 62  ytes ( addr -- b
2e70: 79 74 65 73 20 29 0a 20 20 20 20 5b 20 63 68 75  ytes ).    [ chu
2e80: 6e 6b 2d 70 32 20 33 20 2b 20 5d 4c 20 72 73 68  nk-p2 3 + ]L rsh
2e90: 69 66 74 20 3b 0a 3a 20 62 79 74 65 73 3e 61 64  ift ;.: bytes>ad
2ea0: 64 72 20 28 20 62 79 74 65 73 20 61 64 64 72 20  dr ( bytes addr 
2eb0: 2d 2d 20 29 0a 20 20 20 20 5b 20 63 68 75 6e 6b  -- ).    [ chunk
2ec0: 2d 70 32 20 33 20 2b 20 5d 4c 20 6c 73 68 69 66  -p2 3 + ]L lshif
2ed0: 74 20 3b 0a 3a 20 62 69 74 73 3e 62 79 74 65 73  t ;.: bits>bytes
2ee0: 20 28 20 62 69 74 73 20 2d 2d 20 62 79 74 65 73   ( bits -- bytes
2ef0: 20 29 0a 20 20 20 20 31 2d 20 32 2f 20 32 2f 20   ).    1- 2/ 2/ 
2f00: 32 2f 20 31 2b 20 3b 0a 3a 20 62 79 74 65 73 3e  2/ 1+ ;.: bytes>
2f10: 62 69 74 73 20 28 20 62 79 74 65 73 20 2d 2d 20  bits ( bytes -- 
2f20: 62 69 74 73 20 29 0a 20 20 20 20 33 20 6c 73 68  bits ).    3 lsh
2f30: 69 66 74 20 3b 0a 3a 20 61 64 64 72 3e 74 73 20  ift ;.: addr>ts 
2f40: 28 20 61 64 64 72 20 2d 2d 20 74 73 2d 6f 66 66  ( addr -- ts-off
2f50: 73 65 74 20 29 0a 20 20 20 20 61 64 64 72 3e 62  set ).    addr>b
2f60: 69 74 73 20 36 34 73 20 3b 0a 3a 20 61 64 64 72  its 64s ;.: addr
2f70: 3e 36 34 20 28 20 61 64 64 72 20 2d 2d 20 74 73  >64 ( addr -- ts
2f80: 2d 6f 66 66 73 65 74 20 29 0a 20 20 20 20 5b 20  -offset ).    [ 
2f90: 63 68 75 6e 6b 2d 70 32 20 33 20 2d 20 5d 4c 20  chunk-p2 3 - ]L 
2fa0: 72 73 68 69 66 74 20 2d 38 20 61 6e 64 20 3b 0a  rshift -8 and ;.
2fb0: 3a 20 61 64 64 72 3e 72 65 70 6c 69 65 73 20 28  : addr>replies (
2fc0: 20 61 64 64 72 20 2d 2d 20 72 65 70 6c 69 65 73   addr -- replies
2fd0: 20 29 0a 20 20 20 20 61 64 64 72 3e 62 69 74 73   ).    addr>bits
2fe0: 20 72 65 70 6c 79 20 2a 20 3b 0a 3a 20 61 64 64   reply * ;.: add
2ff0: 72 3e 6b 65 79 73 20 28 20 61 64 64 72 20 2d 2d  r>keys ( addr --
3000: 20 6b 65 79 73 20 29 0a 20 20 20 20 6d 61 78 2d   keys ).    max-
3010: 73 69 7a 65 5e 32 20 72 73 68 69 66 74 20 5b 20  size^2 rshift [ 
3020: 6d 69 6e 2d 73 69 7a 65 20 6e 65 67 61 74 65 20  min-size negate 
3030: 5d 4c 20 61 6e 64 20 3b 0a 0a 5c 20 6e 65 74 32  ]L and ;..\ net2
3040: 6f 20 68 65 61 64 65 72 20 73 74 72 75 63 74 75  o header structu
3050: 72 65 0a 0a 62 65 67 69 6e 2d 73 74 72 75 63 74  re..begin-struct
3060: 75 72 65 20 6e 65 74 32 6f 2d 68 65 61 64 65 72  ure net2o-header
3070: 0a 20 20 20 20 31 20 2b 66 69 65 6c 64 20 68 64  .    1 +field hd
3080: 72 66 6c 61 67 73 0a 20 20 20 20 31 20 2b 66 69  rflags.    1 +fi
3090: 65 6c 64 20 68 64 72 74 61 67 73 0a 20 20 20 31  eld hdrtags.   1
30a0: 36 20 2b 66 69 65 6c 64 20 64 65 73 74 69 6e 61  6 +field destina
30b0: 74 69 6f 6e 0a 20 20 20 20 38 20 2b 66 69 65 6c  tion.    8 +fiel
30c0: 64 20 6d 61 70 61 64 64 72 0a 65 6e 64 2d 73 74  d mapaddr.end-st
30d0: 72 75 63 74 75 72 65 0a 0a 5c 20 6b 65 79 20 63  ructure..\ key c
30e0: 6c 61 73 73 0a 0a 63 6d 64 2d 63 6c 61 73 73 20  lass..cmd-class 
30f0: 63 6c 61 73 73 0a 20 20 20 20 66 69 65 6c 64 3a  class.    field:
3100: 20 6b 65 2d 73 6b 20 20 20 20 20 20 20 5c 20 73   ke-sk       \ s
3110: 65 63 72 65 74 20 6b 65 79 0a 20 20 20 20 66 69  ecret key.    fi
3120: 65 6c 64 3a 20 6b 65 2d 70 6b 20 20 20 20 20 20  eld: ke-pk      
3130: 20 5c 20 70 75 62 6c 69 63 20 6b 65 79 0a 20 20   \ public key.  
3140: 20 20 66 69 65 6c 64 3a 20 6b 65 2d 72 73 6b 20    field: ke-rsk 
3150: 20 20 20 20 20 5c 20 72 65 76 6f 6b 65 20 73 65       \ revoke se
3160: 63 72 65 74 20 28 74 65 6d 70 6f 72 61 72 69 6c  cret (temporaril
3170: 79 20 73 74 6f 72 65 64 29 0a 20 20 20 20 66 69  y stored).    fi
3180: 65 6c 64 3a 20 6b 65 2d 77 61 6c 6c 65 74 20 20  eld: ke-wallet  
3190: 20 5c 20 77 61 6c 6c 65 74 0a 20 20 20 20 66 69   \ wallet.    fi
31a0: 65 6c 64 3a 20 6b 65 2d 74 79 70 65 20 20 20 20  eld: ke-type    
31b0: 20 5c 20 6b 65 79 20 74 79 70 65 0a 20 20 20 20   \ key type.    
31c0: 66 69 65 6c 64 3a 20 6b 65 2d 6e 69 63 6b 20 20  field: ke-nick  
31d0: 20 20 20 5c 20 6b 65 79 20 6e 69 63 6b 0a 20 20     \ key nick.  
31e0: 20 20 66 69 65 6c 64 3a 20 6b 65 2d 6e 69 63 6b    field: ke-nick
31f0: 23 20 20 20 20 5c 20 74 6f 20 61 76 6f 69 64 20  #    \ to avoid 
3200: 63 6f 6c 69 73 73 69 6f 6e 73 2c 20 61 64 64 20  colissions, add 
3210: 61 20 6e 75 6d 62 65 72 20 68 65 72 65 0a 20 20  a number here.  
3220: 20 20 66 69 65 6c 64 3a 20 6b 65 2d 70 65 74 73    field: ke-pets
3230: 5b 5d 20 20 20 5c 20 6b 65 79 20 70 65 74 6e 61  []   \ key petna
3240: 6d 65 73 0a 20 20 20 20 66 69 65 6c 64 3a 20 6b  mes.    field: k
3250: 65 2d 70 65 74 73 23 20 20 20 20 5c 20 74 6f 20  e-pets#    \ to 
3260: 61 76 6f 69 64 20 63 6f 6c 69 73 73 69 6f 6e 73  avoid colissions
3270: 2c 20 61 64 64 20 61 20 6e 75 6d 62 65 72 20 68  , add a number h
3280: 65 72 65 0a 20 20 20 20 66 69 65 6c 64 3a 20 6b  ere.    field: k
3290: 65 2d 70 72 6f 66 20 20 20 20 20 5c 20 70 72 6f  e-prof     \ pro
32a0: 66 69 6c 65 20 6f 62 6a 65 63 74 0a 20 20 20 20  file object.    
32b0: 66 69 65 6c 64 3a 20 6b 65 2d 61 76 61 74 61 72  field: ke-avatar
32c0: 20 20 20 5c 20 61 76 61 74 61 72 20 6f 62 6a 65     \ avatar obje
32d0: 63 74 0a 20 20 20 20 66 69 65 6c 64 3a 20 6b 65  ct.    field: ke
32e0: 2d 63 68 61 74 20 20 20 20 20 5c 20 63 68 61 74  -chat     \ chat
32f0: 20 67 72 6f 75 70 20 66 6f 72 20 31 3a 31 20 63   group for 1:1 c
3300: 68 61 74 20 77 69 74 68 20 74 68 61 74 20 70 65  hat with that pe
3310: 72 73 6f 6e 0a 20 20 20 20 66 69 65 6c 64 3a 20  rson.    field: 
3320: 6b 65 2d 73 65 6c 66 73 69 67 0a 20 20 20 20 66  ke-selfsig.    f
3330: 69 65 6c 64 3a 20 6b 65 2d 73 69 67 73 5b 5d 0a  ield: ke-sigs[].
3340: 20 20 20 20 66 69 65 6c 64 3a 20 6b 65 2d 69 6d      field: ke-im
3350: 70 6f 72 74 73 20 20 5c 20 62 69 74 6d 61 73 6b  ports  \ bitmask
3360: 20 6f 66 20 6b 65 79 20 69 6d 70 6f 72 74 0a 20   of key import. 
3370: 20 20 20 66 69 65 6c 64 3a 20 6b 65 2d 5b 5d 31     field: ke-[]1
3380: 0a 20 20 20 20 66 69 65 6c 64 3a 20 6b 65 2d 5b  .    field: ke-[
3390: 5d 32 0a 20 20 20 20 66 69 65 6c 64 3a 20 6b 65  ]2.    field: ke
33a0: 2d 5b 5d 33 0a 20 20 20 20 66 69 65 6c 64 3a 20  -[]3.    field: 
33b0: 6b 65 2d 5b 5d 34 0a 20 20 20 20 66 69 65 6c 64  ke-[]4.    field
33c0: 3a 20 6b 65 2d 73 65 63 31 0a 20 20 20 20 66 69  : ke-sec1.    fi
33d0: 65 6c 64 3a 20 6b 65 2d 73 65 63 32 0a 20 20 20  eld: ke-sec2.   
33e0: 20 36 34 66 69 65 6c 64 3a 20 6b 65 2d 23 31 0a   64field: ke-#1.
33f0: 20 20 20 20 36 34 66 69 65 6c 64 3a 20 6b 65 2d      64field: ke-
3400: 23 32 0a 20 20 20 20 36 34 66 69 65 6c 64 3a 20  #2.    64field: 
3410: 6b 65 2d 23 33 0a 20 20 20 20 36 34 66 69 65 6c  ke-#3.    64fiel
3420: 64 3a 20 6b 65 2d 23 34 0a 5c 20 6f 74 68 65 72  d: ke-#4.\ other
3430: 20 66 69 65 6c 64 73 0a 20 20 20 20 66 69 65 6c   fields.    fiel
3440: 64 3a 20 6b 65 2d 73 74 6f 72 65 6b 65 79 20 5c  d: ke-storekey \
3450: 20 75 73 65 64 20 74 6f 20 65 6e 63 72 79 70 74   used to encrypt
3460: 20 6f 6e 20 73 74 6f 72 61 67 65 0a 20 20 20 20   on storage.    
3470: 66 69 65 6c 64 3a 20 6b 65 2d 6d 61 73 6b 20 20  field: ke-mask  
3480: 20 20 20 5c 20 70 65 72 6d 69 73 73 69 6f 6e 20     \ permission 
3490: 6d 61 73 6b 0a 20 20 20 20 66 69 65 6c 64 3a 20  mask.    field: 
34a0: 6b 65 2d 67 72 6f 75 70 73 20 20 20 5c 20 70 65  ke-groups   \ pe
34b0: 72 6d 69 73 73 69 6f 6e 20 67 72 6f 75 70 73 0a  rmission groups.
34c0: 20 20 20 20 36 34 66 69 65 6c 64 3a 20 6b 65 2d      64field: ke-
34d0: 6f 66 66 73 65 74 20 5c 20 6f 66 66 73 65 74 20  offset \ offset 
34e0: 69 6e 20 6b 65 79 20 66 69 6c 65 0a 20 20 20 20  in key file.    
34f0: 66 69 65 6c 64 3a 20 6b 65 2d 70 77 6c 65 76 65  field: ke-pwleve
3500: 6c 20 20 5c 20 70 61 73 73 77 6f 72 64 20 73 74  l  \ password st
3510: 72 65 6e 67 74 68 20 6c 65 76 65 6c 0a 20 20 20  rength level.   
3520: 20 66 69 65 6c 64 3a 20 6b 65 2d 73 6b 73 69 67   field: ke-sksig
3530: 20 20 20 20 5c 20 73 69 67 6e 61 74 75 72 65 20      \ signature 
3540: 73 65 63 72 65 74 2c 20 63 6f 6d 70 75 74 65 64  secret, computed
3550: 2c 20 6e 65 76 65 72 20 73 74 6f 72 65 64 0a 20  , never stored. 
3560: 20 20 20 30 20 2b 66 69 65 6c 64 20 6b 65 2d 65     0 +field ke-e
3570: 6e 64 0a 65 6e 64 2d 63 6c 61 73 73 20 6b 65 79  nd.end-class key
3580: 2d 65 6e 74 72 79 0a 0a 5c 20 6b 65 79 20 72 65  -entry..\ key re
3590: 6c 61 74 65 64 20 20 63 6f 6e 73 74 61 6e 74 73  lated  constants
35a0: 0a 0a 36 34 20 43 6f 6e 73 74 61 6e 74 20 73 74  ..64 Constant st
35b0: 61 74 65 23 0a 73 74 61 74 65 23 20 32 2a 20 43  ate#.state# 2* C
35c0: 6f 6e 73 74 61 6e 74 20 73 74 61 74 65 32 23 0a  onstant state2#.
35d0: 4b 45 59 42 59 54 45 53 20 43 6f 6e 73 74 61 6e  KEYBYTES Constan
35e0: 74 20 6b 65 79 73 69 7a 65 20 5c 20 6f 75 72 20  t keysize \ our 
35f0: 73 68 61 72 65 64 20 73 65 63 72 65 64 20 69 73  shared secred is
3600: 20 6f 6e 6c 79 20 33 32 20 62 79 74 65 73 20 6c   only 32 bytes l
3610: 6f 6e 67 0a 4b 45 59 42 59 54 45 53 20 32 2a 20  ong.KEYBYTES 2* 
3620: 43 6f 6e 73 74 61 6e 74 20 6b 65 79 73 69 7a 65  Constant keysize
3630: 32 20 5c 20 70 75 62 6b 65 79 2b 72 65 76 6b 65  2 \ pubkey+revke
3640: 79 3d 36 34 20 62 79 74 65 73 0a 0a 3a 20 6b 65  y=64 bytes..: ke
3650: 79 7c 20 28 20 73 69 7a 65 20 2d 2d 20 73 69 7a  y| ( size -- siz
3660: 65 27 20 29 20 6b 65 79 73 69 7a 65 20 75 6d 69  e' ) keysize umi
3670: 6e 20 3b 0a 3a 20 6b 65 79 32 7c 20 28 20 73 69  n ;.: key2| ( si
3680: 7a 65 20 2d 2d 20 73 69 7a 65 27 20 29 20 6b 65  ze -- size' ) ke
3690: 79 73 69 7a 65 32 20 75 6d 69 6e 20 3b 0a 0a 5c  ysize2 umin ;..\
36a0: 20 73 70 65 63 69 66 79 20 73 74 72 65 6e 67 74   specify strengt
36b0: 68 20 28 69 6e 20 62 79 74 65 73 29 2c 20 6e 6f  h (in bytes), no
36c0: 74 20 6c 65 6e 67 74 68 21 20 6c 65 6e 67 74 68  t length! length
36d0: 20 69 73 20 32 2a 73 74 72 65 6e 67 74 68 0a 33   is 2*strength.3
36e0: 32 20 43 6f 6e 73 74 61 6e 74 20 68 61 73 68 23  2 Constant hash#
36f0: 31 32 38 20 5c 20 31 32 38 20 62 69 74 20 68 61  128 \ 128 bit ha
3700: 73 68 20 73 74 72 65 6e 67 74 68 20 69 73 20 65  sh strength is e
3710: 6e 6f 75 67 68 21 0a 36 34 20 43 6f 6e 73 74 61  nough!.64 Consta
3720: 6e 74 20 68 61 73 68 23 32 35 36 20 5c 20 32 35  nt hash#256 \ 25
3730: 36 20 62 69 74 20 68 61 73 68 20 73 74 72 65 6e  6 bit hash stren
3740: 67 74 68 20 69 73 20 6d 6f 72 65 20 74 68 61 6e  gth is more than
3750: 20 65 6e 6f 75 67 68 21 0a 0a 5c 20 67 72 6f 75   enough!..\ grou
3760: 70 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 0a 63  p description..c
3770: 6d 64 2d 63 6c 61 73 73 20 63 6c 61 73 73 7b 20  md-class class{ 
3780: 67 72 6f 75 70 73 0a 20 20 20 20 24 76 61 6c 75  groups.    $valu
3790: 65 3a 20 69 64 24 20 5c 20 69 73 20 74 68 65 20  e: id$ \ is the 
37a0: 70 75 62 6b 65 79 0a 20 20 20 20 66 69 65 6c 64  pubkey.    field
37b0: 3a 20 6d 65 6d 62 65 72 5b 5d 0a 20 20 20 20 66  : member[].    f
37c0: 69 65 6c 64 3a 20 61 64 6d 69 6e 20 20 20 20 20  ield: admin     
37d0: 5c 20 73 65 63 72 65 74 20 6b 65 79 2c 20 6f 6e  \ secret key, on
37e0: 6c 79 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20  ly known to the 
37f0: 61 64 6d 69 6e 73 0a 20 20 20 20 36 34 76 61 6c  admins.    64val
3800: 75 65 3a 20 70 65 72 6d 73 23 0a 7d 63 6c 61 73  ue: perms#.}clas
3810: 73 0a 0a 5c 5c 5c 0a 4c 6f 63 61 6c 20 56 61 72  s..\\\.Local Var
3820: 69 61 62 6c 65 73 3a 0a 66 6f 72 74 68 2d 6c 6f  iables:.forth-lo
3830: 63 61 6c 2d 77 6f 72 64 73 3a 0a 20 20 20 20 28  cal-words:.    (
3840: 0a 20 20 20 20 20 28 28 22 6e 65 74 32 6f 3a 22  .     (("net2o:"
3850: 20 22 2b 6e 65 74 32 6f 3a 22 29 20 64 65 66 69   "+net2o:") defi
3860: 6e 69 74 69 6f 6e 2d 73 74 61 72 74 65 72 20 28  nition-starter (
3870: 66 6f 6e 74 2d 6c 6f 63 6b 2d 6b 65 79 77 6f 72  font-lock-keywor
3880: 64 2d 66 61 63 65 20 2e 20 31 29 0a 20 20 20 20  d-face . 1).    
3890: 20 20 22 5b 20 5c 74 5c 6e 5d 22 20 74 20 6e 61    "[ \t\n]" t na
38a0: 6d 65 20 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 75  me (font-lock-fu
38b0: 6e 63 74 69 6f 6e 2d 6e 61 6d 65 2d 66 61 63 65  nction-name-face
38c0: 20 2e 20 33 29 29 0a 20 20 20 20 20 28 28 22 36   . 3)).     (("6
38d0: 34 76 61 6c 75 65 3a 22 29 0a 20 20 20 20 20 20  4value:").      
38e0: 20 6e 6f 6e 2d 69 6d 6d 65 64 69 61 74 65 20 28   non-immediate (
38f0: 66 6f 6e 74 2d 6c 6f 63 6b 2d 74 79 70 65 2d 66  font-lock-type-f
3900: 61 63 65 20 2e 20 32 29 0a 20 20 20 20 20 20 20  ace . 2).       
3910: 22 5b 20 5c 74 5c 6e 5d 22 20 74 20 6e 61 6d 65  "[ \t\n]" t name
3920: 20 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 76 61 72 69   (font-lock-vari
3930: 61 62 6c 65 2d 6e 61 6d 65 2d 66 61 63 65 20 2e  able-name-face .
3940: 20 33 29 29 0a 20 20 20 20 20 28 22 5b 61 2d 7a   3)).     ("[a-z
3950: 30 2d 39 5d 2b 28 22 20 69 6d 6d 65 64 69 61 74  0-9]+(" immediat
3960: 65 20 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 63 6f 6d  e (font-lock-com
3970: 6d 65 6e 74 2d 66 61 63 65 20 2e 20 31 29 0a 20  ment-face . 1). 
3980: 20 20 20 20 20 22 29 22 20 6e 69 6c 20 63 6f 6d       ")" nil com
3990: 6d 65 6e 74 20 28 66 6f 6e 74 2d 6c 6f 63 6b 2d  ment (font-lock-
39a0: 63 6f 6d 6d 65 6e 74 2d 66 61 63 65 20 2e 20 31  comment-face . 1
39b0: 29 29 0a 20 20 20 20 20 28 28 22 63 6c 61 73 73  )).     (("class
39c0: 7b 22 29 20 64 65 66 69 6e 69 74 69 6f 6e 2d 73  {") definition-s
39d0: 74 61 72 74 65 72 20 28 66 6f 6e 74 2d 6c 6f 63  tarter (font-loc
39e0: 6b 2d 6b 65 79 77 6f 72 64 2d 66 61 63 65 20 2e  k-keyword-face .
39f0: 20 31 29 0a 20 20 20 20 20 20 22 5b 20 5c 74 5c   1).      "[ \t\
3a00: 6e 5d 22 20 74 20 6e 61 6d 65 20 28 66 6f 6e 74  n]" t name (font
3a10: 2d 6c 6f 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 6e  -lock-function-n
3a20: 61 6d 65 2d 66 61 63 65 20 2e 20 33 29 29 0a 20  ame-face . 3)). 
3a30: 20 20 20 20 28 28 22 7d 63 6c 61 73 73 22 29 20      (("}class") 
3a40: 64 65 66 69 6e 69 74 69 6f 6e 2d 65 6e 64 65 72  definition-ender
3a50: 20 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 6b 65 79 77   (font-lock-keyw
3a60: 6f 72 64 2d 66 61 63 65 20 2e 20 31 29 29 0a 20  ord-face . 1)). 
3a70: 20 20 20 29 0a 66 6f 72 74 68 2d 6c 6f 63 61 6c     ).forth-local
3a80: 2d 69 6e 64 65 6e 74 2d 77 6f 72 64 73 3a 0a 20  -indent-words:. 
3a90: 20 20 20 28 0a 20 20 20 20 20 28 28 22 6e 65 74     (.     (("net
3aa0: 32 6f 3a 22 20 22 2b 6e 65 74 32 6f 3a 22 29 20  2o:" "+net2o:") 
3ab0: 28 30 20 2e 20 32 29 20 28 30 20 2e 20 32 29 20  (0 . 2) (0 . 2) 
3ac0: 6e 6f 6e 2d 69 6d 6d 65 64 69 61 74 65 29 0a 20  non-immediate). 
3ad0: 20 20 20 20 28 28 22 63 6c 61 73 73 7b 22 29 20      (("class{") 
3ae0: 28 30 20 2e 20 32 29 20 28 30 20 2e 20 32 29 29  (0 . 2) (0 . 2))
3af0: 0a 20 20 20 20 20 28 28 22 7d 63 6c 61 73 73 22  .     (("}class"
3b00: 29 20 28 2d 32 20 2e 20 30 29 20 28 30 20 2e 20  ) (-2 . 0) (0 . 
3b10: 2d 32 29 29 0a 20 20 20 20 29 0a 45 6e 64 3a 0a  -2)).    ).End:.
3b20: 5b 54 48 45 4e 5d 0a                             [THEN].