.PS
# mplex.m4
  log_init
  linewid = linewid*0.9

  define(`short',elen_*2/3)
  del = BUF_ht*L_unit
down_
P: NOR_gate(8)
B: P.In3+(0,del/2)
  dx = P.In1.x-P.In2.x
  line down del/2 from P.Out then right 2*del; dot
  {line up del*1.5; right_; BUFFER_gate(right_ short); "$\bar{Y}$" ljust }
# BUFFER_gate(right_ short,N) ; "$Y$" ljust
  NOT_gate(right_ short,n) ; "$Y$" ljust
  for_(0,7,1,
   `line from P.In`'eval(8-m4x) \
      up B.y-P.In`'eval(8-m4x).y + (3.5-abs(m4x-3.5)) * dx \
      then left (3.5-m4x)*AND_wd*L_unit then up (0.5+abs(m4x-3.5))*dx; down_
    A`'m4x: AND_gate(5) with .Out at Here ')

Eb: "$\bar{E}$" rjust at (A0.In5.x-2*short-dx/2,A0.n.y+del/2)
# BUFFER_gate(from Eb right_ short,N); line to (A7.In1,Here) then to A7.In1
  NOT_gate(from Eb right_ short,n); line to (A7.In1,Here) then to A7.In1
  for_(0,6,1,
   `line from A`'m4x.In1 to (A`'m4x.In1,Eb) ; dot')

  for_(0,2,1,
   `"`$S_'m4x$" wid 0.17 with .e at (Eb.x-textoffset,Eb.y+(1+m4x)*del*2)
    NOT_gate(right_ short)
    V1`'m4x: Here+(N_diam*L_unit/2,-del); {dot(at (V1`'m4x,Here))}
#   NOT_gate(right_ short)
    NOT_gate(right_ short,n)
    V0`'m4x: Here')

  for_(0,7,1,`define(`i',m4x)dnl
    for_(0,2,1,`define(`j',m4x)define(`k',`eval(((i+2**j)/2**j)%2)')dnl
      move to A`'i.In`'eval(j+2)
      line up V`'k`'j.y - Here.y dnl
      ifelse(eval((i==7)|(i==(7-2**j))),1,
       `then to V`'k`'j ifelse(eval(k==1),1,`then up del')',
       `; dot')
      ')
    move to A`'i.In5; line to (Here,V02)
    reversed(`BUFFER_gate',up_ short)
    "$`I_'i$" at last line.end rjust
    ')

.PE
