aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2020-03-20 16:50:19 +0000
committerEd Maste <emaste@FreeBSD.org>2020-03-20 16:50:19 +0000
commit2733d8c96c6fa72beac42174db9f810de5769781 (patch)
tree0ef49a8bef24838acf3f336cbc8822c0bde4f468
parentaad76399cf6a2214f56daac787d9dc1c9fcc606d (diff)
retire cx,ctau drivers
The devices supported by these drivers are obsolete ISA cards, and the sync serial protocols they supported are essentially obsolete too. Sponsored by: The FreeBSD Foundation
Notes
Notes: svn path=/head/; revision=359178
-rw-r--r--ObsoleteFiles.inc4
-rw-r--r--share/man/man4/man4.i386/Makefile2
-rw-r--r--share/man/man4/man4.i386/ctau.4125
-rw-r--r--share/man/man4/man4.i386/cx.4145
-rw-r--r--sys/conf/WITHOUT_SOURCELESS_UCODE1
-rw-r--r--sys/conf/files.i3866
-rw-r--r--sys/dev/ctau/am8530.h115
-rw-r--r--sys/dev/ctau/ctau.c1796
-rw-r--r--sys/dev/ctau/ctau2fw.h498
-rw-r--r--sys/dev/ctau/ctaue1fw.h2066
-rw-r--r--sys/dev/ctau/ctaufw.h848
-rw-r--r--sys/dev/ctau/ctaug7fw.h2062
-rw-r--r--sys/dev/ctau/ctaureg.h276
-rw-r--r--sys/dev/ctau/ctddk.c1162
-rw-r--r--sys/dev/ctau/ctddk.h607
-rw-r--r--sys/dev/ctau/ds2153.h290
-rw-r--r--sys/dev/ctau/hdc64570.h492
-rw-r--r--sys/dev/ctau/if_ct.c2207
-rw-r--r--sys/dev/ctau/lxt318.h44
-rw-r--r--sys/dev/ctau/ng_ct.h31
-rw-r--r--sys/dev/cx/cronyxfw.h32
-rw-r--r--sys/dev/cx/csigma.c1438
-rw-r--r--sys/dev/cx/csigmafw.h852
-rw-r--r--sys/dev/cx/cxddk.c905
-rw-r--r--sys/dev/cx/cxddk.h488
-rw-r--r--sys/dev/cx/cxreg.h486
-rw-r--r--sys/dev/cx/if_cx.c2546
-rw-r--r--sys/dev/cx/ng_cx.h31
-rw-r--r--sys/i386/conf/NOTES8
-rw-r--r--sys/modules/Makefile4
30 files changed, 4 insertions, 19563 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 50cfbbea9ecf..94e4202bd640 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -36,6 +36,10 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20200320: cx and ctau drivers retired
+OLD_FILES+=usr/share/man/man4/ctau.4.gz
+OLD_FILES+=usr/share/man/man4/cx.4.gz
+
# 20200318: host.conf was deprecated a long time ago.
OLD_FILES+=etc/host.conf
OLD_FILES+=etc/rc.d/nsswitch
diff --git a/share/man/man4/man4.i386/Makefile b/share/man/man4/man4.i386/Makefile
index 9e0eb2c85485..a21b3cd6302b 100644
--- a/share/man/man4/man4.i386/Makefile
+++ b/share/man/man4/man4.i386/Makefile
@@ -4,8 +4,6 @@ MAN= apm.4 \
ce.4 \
cp.4 \
CPU_ELAN.4 \
- ctau.4 \
- cx.4 \
glxiic.4 \
glxsb.4 \
longrun.4 \
diff --git a/share/man/man4/man4.i386/ctau.4 b/share/man/man4/man4.i386/ctau.4
deleted file mode 100644
index 1a10c890e6a9..000000000000
--- a/share/man/man4/man4.i386/ctau.4
+++ /dev/null
@@ -1,125 +0,0 @@
-.\" Copyright (c) 2004 Roman Kurakin <rik@cronyx.ru>
-.\" Copyright (c) 2004 Cronyx Engineering
-.\" All rights reserved.
-.\"
-.\" This software is distributed with NO WARRANTIES, not even the implied
-.\" warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\" Authors grant any other persons or organisations a permission to use,
-.\" modify and redistribute this software in source and binary forms,
-.\" as long as this message is kept with the software, all derivative
-.\" works or modified versions.
-.\"
-.\" Cronyx Id: ct.4,v 1.1.2.6 2004/06/21 17:56:40 rik Exp $
-.\" $FreeBSD$
-.\"
-.Dd March 2, 2020
-.Dt CTAU 4 i386
-.Os
-.Sh NAME
-.Nm ctau
-.Nd driver for synchronous Cronyx Tau WAN adapters
-.Sh SYNOPSIS
-.Cd "device ctau"
-.Pp
-Additional options:
-.Cd "device sppp"
-.Cd "options NETGRAPH"
-.Cd "options NETGRAPH_CRONYX"
-.Pp
-In
-.Pa /boot/device.hints :
-.Cd hint.ctau.0.at="isa"
-.Cd hint.ctau.0.port="0x240"
-.Cd hint.ctau.0.irq="15"
-.Cd hint.ctau.0.drq="7"
-.Sh DEPRECATION NOTICE
-The
-.Nm
-driver is not present in
-.Fx 13.0
-and later.
-.Sh DESCRIPTION
-The
-.Nm
-driver needs either
-.Xr sppp 4
-or
-.Xr netgraph 4 .
-Which one to use is determined by the
-.Dv NETGRAPH_CRONYX
-option.
-If this option is present in your kernel configuration file, the
-.Nm
-driver will be compiled with
-.Xr netgraph 4
-support.
-Otherwise, it will be compiled with
-.Xr sppp 4
-support.
-.Pp
-The base I/O port address specified in
-.Pa /boot/device.hints
-must match the port address set by the jumpers on the board.
-The DMA I/O channel and interrupt request numbers are configured
-by software at adapter initialization.
-Legal values are:
-.Pp
-.Bl -tag -compact -width Port:
-.It Port :
-0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
-0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0
-.It IRQ :
-3, 5, 7, 10, 11, 12, 15
-.It DMA :
-5, 6, 7
-.El
-.Pp
-The
-.Nm
-driver supports autodetection.
-As for all non-PNP hardware, using
-autodetection could lead to some potential problems with other devices during
-the hardware detection process.
-It is always better to specify hardware resources manually.
-.Pp
-Refer to
-.Xr sconfig 8
-for information about the
-.Nm
-adapter configuration.
-.Sh HARDWARE
-The
-.Nm
-driver supports the following cards:
-.Pp
-.Bl -bullet -compact
-.It
-Cronyx Tau (RS-232/V.35)
-.It
-Cronyx Tau/R (RS-530/RS-449)
-.It
-Cronyx Tau/E1 (fractional E1)
-.It
-Cronyx Tau/G703 (unframed E1)
-.El
-.Sh SEE ALSO
-.Xr cp 4 ,
-.Xr cx 4 ,
-.Xr sppp 4 ,
-.Xr ifconfig 8 ,
-.Xr sconfig 8 ,
-.Xr spppcontrol 8
-.Sh HISTORY
-The
-.Nm
-driver was added in
-.Fx 5.3
-and
-.Fx 4.10 .
-The
-.Nm
-driver for previous versions of
-.Fx
-is available from
-.Pa http://www.cronyx.ru/ .
diff --git a/share/man/man4/man4.i386/cx.4 b/share/man/man4/man4.i386/cx.4
deleted file mode 100644
index c2ccc71a914b..000000000000
--- a/share/man/man4/man4.i386/cx.4
+++ /dev/null
@@ -1,145 +0,0 @@
-.\" Copyright (c) 2003-2004 Roman Kurakin <rik@cronyx.ru>
-.\" Copyright (c) 2003-2004 Cronyx Engineering
-.\" All rights reserved.
-.\"
-.\" This software is distributed with NO WARRANTIES, not even the implied
-.\" warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\" Authors grant any other persons or organisations a permission to use,
-.\" modify and redistribute this software in source and binary forms,
-.\" as long as this message is kept with the software, all derivative
-.\" works or modified versions.
-.\"
-.\" Cronyx Id: cx.4,v 1.1.2.6 2004/06/21 17:56:40 rik Exp $
-.\" $FreeBSD$
-.\"
-.Dd March 2, 2020
-.Dt CX 4 i386
-.Os
-.Sh NAME
-.Nm cx
-.Nd "driver for synchronous/asynchronous Cronyx Sigma WAN adapters"
-.Sh SYNOPSIS
-To compile this driver into the kernel,
-place the following line in your
-kernel configuration file:
-.Bd -ragged -offset indent
-.Cd "device cx"
-.Ed
-.Pp
-Alternatively, to load the driver as a
-module at boot time, place the following line in
-.Xr loader.conf 5 :
-.Bd -literal -offset indent
-if_cx_load="YES"
-.Ed
-.Pp
-Additional options:
-.Cd "device sppp"
-.Cd "options NETGRAPH"
-.Cd "options NETGRAPH_CRONYX"
-.Pp
-In
-.Pa /boot/device.hints :
-.Cd hint.cx.0.at="isa"
-.Cd hint.cx.0.port="0x240"
-.Cd hint.cx.0.irq="15"
-.Cd hint.cx.0.drq="7"
-.Sh DEPRECATION NOTICE
-The
-.Nm
-driver is not present in
-.Fx 13.0
-and later.
-.Sh DESCRIPTION
-The
-.Nm
-driver needs either
-.Xr sppp 4
-or
-.Xr netgraph 4 .
-Which one to use is determined by the
-.Dv NETGRAPH_CRONYX
-option.
-If this option is present in your kernel configuration file, the
-.Nm
-driver will be compiled with
-.Xr netgraph 4
-support.
-Otherwise, it will be compiled with
-.Xr sppp 4
-support.
-.Pp
-The base I/O port address specified in
-.Pa /boot/device.hints
-must match the port address set by the jumpers on the board.
-The DMA I/O channel and interrupt request numbers are configured
-by software at adapter initialization.
-Legal values are:
-.Pp
-.Bl -tag -compact -width Port:
-.It Port :
-0x240, 0x260, 0x280, 0x300, 0x320, 0x380
-.It IRQ :
-3, 5, 7, 10, 11, 12, 15
-.It DMA :
-5, 6, 7
-.El
-.Pp
-The
-.Nm
-driver supports autodetection.
-As for all non-PNP hardware, using
-autodetection could lead to some potential problems with other devices during
-the hardware detection process.
-It is always better to specify hardware resources manually.
-.Pp
-Refer to
-.Xr sconfig 8
-for information about the
-.Nm
-adapter configuration.
-.Sh HARDWARE
-The
-.Nm
-driver supports the following cards:
-.Pp
-.Bl -bullet -compact
-.It
-Cronyx Sigma-22, Sigma-24
-.It
-Cronyx Sigma-100
-.It
-Cronyx Sigma-400, Sigma-401, Sigma-404, Sigma-410, Sigma-440
-.It
-Cronyx Sigma-500
-.It
-Cronyx Sigma-703
-.It
-Cronyx Sigma-800, Sigma-801, Sigma-810, Sigma-840
-.El
-.Sh SEE ALSO
-.Xr cp 4 ,
-.Xr ctau 4 ,
-.Xr sppp 4 ,
-.Xr ifconfig 8 ,
-.Xr sconfig 8 ,
-.Xr spppcontrol 8
-.Sh HISTORY
-The
-.Nm
-driver was updated in
-.Fx 5.2
-and
-.Fx 4.10 .
-In most of the previous versions of
-.Fx
-the
-.Nm
-driver is out of date.
-The
-.Nm
-driver for previous versions of
-.Fx
-is available from
-.Pa http://www.cronyx.ru/ .
diff --git a/sys/conf/WITHOUT_SOURCELESS_UCODE b/sys/conf/WITHOUT_SOURCELESS_UCODE
index 123658eefb58..e33bcb17e025 100644
--- a/sys/conf/WITHOUT_SOURCELESS_UCODE
+++ b/sys/conf/WITHOUT_SOURCELESS_UCODE
@@ -16,7 +16,6 @@ nodevice ti
nodevice txp
nodevice ce
nodevice cp
-nodevice ctau
nodevice ipwfw
nodevice iwifw
nodevice iwmfw
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index 9cf0060ea328..a8f77a7631af 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -97,12 +97,6 @@ dev/ce/tau32-ddk.c optional ce \
dev/cp/cpddk.c optional cp \
compile-with "${NORMAL_C} ${NO_WMISLEADING_INDENTATION}"
dev/cp/if_cp.c optional cp
-dev/ctau/ctau.c optional ctau
-dev/ctau/ctddk.c optional ctau
-dev/ctau/if_ct.c optional ctau
-dev/cx/csigma.c optional cx
-dev/cx/cxddk.c optional cx
-dev/cx/if_cx.c optional cx
dev/glxiic/glxiic.c optional glxiic
dev/glxsb/glxsb.c optional glxsb
dev/glxsb/glxsb_hash.c optional glxsb
diff --git a/sys/dev/ctau/am8530.h b/sys/dev/ctau/am8530.h
deleted file mode 100644
index 09831c624ed7..000000000000
--- a/sys/dev/ctau/am8530.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*-
- * AMD Am83C30 serial communication controller registers.
- *
- * Copyright (C) 1996 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: am8530.h,v 1.1.2.2 2003/11/12 17:31:21 rik Exp $
- * $FreeBSD$
- */
-
-/*
- * Read/write registers.
- */
-#define AM_IVR 2 /* rw2 - interrupt vector register */
-#define AM_DAT 8 /* rw8 - data buffer register */
-#define AM_TCL 12 /* rw12 - time constant low */
-#define AM_TCH 13 /* rw13 - time constant high */
-#define AM_SICR 15 /* rw15 - status interrupt control reg */
-
-/*
- * Write only registers.
- */
-#define AM_CR 0 /* w0 - command register */
-#define AM_IMR 1 /* w1 - interrupt mode register */
-#define AM_RCR 3 /* w3 - receive control register */
-#define AM_PMR 4 /* w4 - tx/rx parameters and modes reg */
-#define AM_TCR 5 /* w5 - transmit control register */
-#define AM_SAF 6 /* w6 - sync address field */
-#define AM_SFR 7 /* w7 - sync flag register */
-#define AM_MICR 9 /* w9 - master interrupt control reg */
-#define AM_MCR 10 /* w10 - misc control register */
-#define AM_CMR 11 /* w11 - clock mode register */
-#define AM_BCR 14 /* w14 - baud rate control register */
-
-/*
- * Read only registers.
- */
-#define AM_SR 0 /* r0 - status register */
-#define AM_RSR 1 /* r1 - receive status register */
-#define AM_IPR 3 /* r3 - interrupt pending register */
-#define AM_MSR 10 /* r10 - misc status register */
-
-/*
- * Enhanced mode registers.
- * In enhanced mode registers PMR(w4), TCR(w5) become readable.
- */
-#define AM_FBCL 6 /* r6 - frame byte count low */
-#define AM_FBCH 7 /* r7 - frame byte count high */
-#define AM_RCR_R 9 /* r9 - read RCR(w3) */
-#define AM_MCR_R 11 /* r11 - read MCR(w10) */
-#define AM_SFR_R 14 /* r14 - read SFR(w7') */
-
-#define AM_A 32 /* channel A offset */
-
-/*
- * Interrupt vector register
- */
-#define IVR_A 0x08 /* channel A status */
-#define IVR_REASON 0x06 /* interrupt reason mask */
-#define IVR_TXRDY 0x00 /* transmit buffer empty */
-#define IVR_STATUS 0x02 /* external status interrupt */
-#define IVR_RX 0x04 /* receive character available */
-#define IVR_RXERR 0x06 /* special receive condition */
-
-/*
- * Interrupt mask register
- */
-#define IMR_EXT 0x01 /* ext interrupt enable */
-#define IMR_TX 0x02 /* ext interrupt enable */
-#define IMR_PARITY 0x04 /* ext interrupt enable */
-
-#define IMR_RX_FIRST 0x08 /* ext interrupt enable */
-#define IMR_RX_ALL 0x10 /* ext interrupt enable */
-#define IMR_RX_ERR 0x18 /* ext interrupt enable */
-
-#define IMR_WD_RX 0x20 /* wait/request follows receiver fifo */
-#define IMR_WD_REQ 0x40 /* wait/request function as request */
-#define IMR_WD_ENABLE 0x80 /* wait/request pin enable */
-
-/*
- * Master interrupt control register
- */
-#define MICR_VIS 0x01 /* vector includes status */
-#define MICR_NV 0x02 /* no interrupt vector */
-#define MICR_DLC 0x04 /* disable lower chain */
-#define MICR_MIE 0x08 /* master interrupt enable */
-#define MICR_HIGH 0x10 /* status high */
-#define MICR_NINTACK 0x20 /* interrupt masking without INTACK */
-
-#define MICR_RESET_A 0x80 /* channel reset A */
-#define MICR_RESET_B 0x40 /* channel reset B */
-#define MICR_RESET_HW 0xc0 /* force hardware reset */
-
-/*
- * Receive status register
- */
-#define RSR_FRME 0x10 /* framing error */
-#define RSR_RXOVRN 0x20 /* rx overrun error */
-
-/*
- * Command register
- */
-#define CR_RST_EXTINT 0x10 /* reset external/status irq */
-#define CR_TX_ABORT 0x18 /* send abort (SDLC) */
-#define CR_RX_NXTINT 0x20 /* enable irq on next rx character */
-#define CR_RST_TXINT 0x28 /* reset tx irq pending */
-#define CR_RST_ERROR 0x30 /* error reset */
-#define CR_RST_HIUS 0x38 /* reset highest irq under service */
diff --git a/sys/dev/ctau/ctau.c b/sys/dev/ctau/ctau.c
deleted file mode 100644
index 4a839ef39d2d..000000000000
--- a/sys/dev/ctau/ctau.c
+++ /dev/null
@@ -1,1796 +0,0 @@
-/*-
- * Low-level subroutines for Cronyx-Tau adapter.
- *
- * Copyright (C) 1994-2001 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * Copyright (C) 2003 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: ctau.c,v 1.1.2.4 2003/12/11 17:33:43 rik Exp $
- */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <dev/cx/machdep.h>
-#include <dev/ctau/ctddk.h>
-#include <dev/ctau/ctaureg.h>
-#include <dev/ctau/hdc64570.h>
-#include <dev/ctau/ds2153.h>
-#include <dev/ctau/am8530.h>
-#include <dev/ctau/lxt318.h>
-#include <dev/cx/cronyxfw.h>
-
-#define DMA_MASK 0xd4 /* DMA mask register */
-#define DMA_MASK_CLEAR 0x04 /* DMA clear mask */
-#define DMA_MODE 0xd6 /* DMA mode register */
-#define DMA_MODE_MASTER 0xc0 /* DMA master mode */
-
-#define BYTE *(unsigned char*)&
-
-static unsigned char irqmask [] = {
- BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_3,
- BCR0_IRQ_DIS, BCR0_IRQ_5, BCR0_IRQ_DIS, BCR0_IRQ_7,
- BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_10, BCR0_IRQ_11,
- BCR0_IRQ_12, BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_15,
-};
-
-static unsigned char dmamask [] = {
- BCR0_DMA_DIS, BCR0_DMA_DIS, BCR0_DMA_DIS, BCR0_DMA_DIS,
- BCR0_DMA_DIS, BCR0_DMA_5, BCR0_DMA_6, BCR0_DMA_7,
-};
-
-static short porttab [] = { /* standard base port set */
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
-};
-
-static short irqtab [] = { 3, 5, 7, 10, 11, 12, 15, 0 };
-static short dmatab [] = { 5, 6, 7, 0 };
-
-static int valid (short value, short *list)
-{
- while (*list)
- if (value == *list++)
- return 1;
- return 0;
-}
-
-long ct_baud = 256000; /* default baud rate */
-unsigned char ct_chan_mode = M_HDLC; /* default mode */
-
-static void ct_init_chan (ct_board_t *b, int num);
-static void ct_enable_loop (ct_chan_t *c);
-static void ct_disable_loop (ct_chan_t *c);
-
-int ct_download (port_t port, const unsigned char *firmware,
- long bits, const cr_dat_tst_t *tst)
-{
- unsigned char cr1, sr2;
- long i, n, maxn = (bits + 7) >> 3;
- int v, b;
-
- inb (BSR3(port));
- for (i=n=0; n<maxn; ++n) {
- v = ((firmware[n] ^ ' ') << 1) | ((firmware[n] >> 7) & 1);
- for (b=0; b<7; b+=2, i+=2) {
- if (i >= bits)
- break;
- cr1 = 0;
- if (v >> b & 1)
- cr1 |= BCR1_TMS;
- if (v >> b & 2)
- cr1 |= BCR1_TDI;
- outb (BCR1(port), cr1);
- sr2 = inb (BSR2(port));
- outb (BCR0(port), BCR0_TCK);
- outb (BCR0(port), 0);
- if (i >= tst->end)
- ++tst;
- if (i >= tst->start && (sr2 & BSR2_LERR))
- return (0);
- }
- }
- return (1);
-}
-
-/*
- * Firmware unpack algorithm.
- */
-typedef struct {
- const unsigned char *ptr;
- unsigned char byte;
- unsigned char count;
-} unpack_t;
-
-static unsigned short unpack_init (unpack_t *t, const unsigned char *ptr)
-{
- unsigned short len;
-
- len = *ptr++;
- len |= *ptr++ << 8;
- t->ptr = ptr;
- t->byte = 0;
- t->count = 0;
- return len;
-}
-
-static unsigned char unpack_getchar (unpack_t *t)
-{
- if (t->count > 0) {
- --t->count;
- return t->byte;
- }
- t->byte = *t->ptr++;
- if (t->byte == 0)
- t->count = *t->ptr++;
- return t->byte;
-}
-
-/*
- * Firmware download signals.
- */
-#define nstatus(b) (inb(BSR3(b)) & BSR3_NSTATUS)
-
-#define confdone(b) (inb(BSR3(b)) & BSR3_CONF_DN)
-
-#define nconfig_set(b) outb (bcr1_port, (bcr1 &= ~BCR1_NCONFIGI))
-#define nconfig_clr(b) outb (bcr1_port, (bcr1 |= BCR1_NCONFIGI))
-
-#define dclk_tick(b) outb (BCR3(b), 0)
-
-#define putbit(b,bit) { if (bit) bcr1 |= BCR1_1KDAT; \
- else bcr1 &= ~BCR1_1KDAT; \
- outb (bcr1_port, bcr1); \
- dclk_tick (b); }
-
-#define CTAU_DEBUG(x) /*trace_str x*/
-
-int ct_download2 (port_t port, const unsigned char *fwaddr)
-{
- unsigned short bytes;
- unsigned char bcr1, val;
- port_t bcr1_port;
- unpack_t t;
-
- /*
- * Set NCONFIG and wait until NSTATUS is set.
- */
- bcr1_port = BCR1(port);
- bcr1 = 0;
- nconfig_set(port);
- for (val=0; val<255; ++val)
- if (nstatus(port))
- break;
-
- /*
- * Clear NCONFIG, wait 2 usec and check that NSTATUS is cleared.
- */
- nconfig_clr(port);
- for (val=0; val<2*3; ++val)
- nconfig_clr(port);
- if (nstatus(port)) {
- CTAU_DEBUG (("Bad nstatus, downloading aborted (bsr3=0x%x).\n", inb(BSR3(port))));
- nconfig_set(port);
- return 0;
- }
-
- /*
- * Set NCONFIG and wait 5 usec.
- */
- nconfig_set(port);
- for (val=0; val<5*3; ++val) /* Delay 5 msec. */
- nconfig_set(port);
-
- /*
- * С адреса `fwaddr' в памяти должны лежать упакованные данные
- * для загрузки firmware. Значение должно быть согласовано с параметром
- * вызова утилиты `megaprog' в скрипте загрузки (и Makefile).
- */
- bytes = unpack_init (&t, fwaddr);
- for (; bytes>0; --bytes) {
- val = unpack_getchar (&t);
-
- if (nstatus(port) == 0) {
- CTAU_DEBUG (("Bad nstatus, %d bytes remaining.\n", bytes));
- goto failed;
- }
-
- if (confdone(port)) {
- /* Ten extra clocks. Hope 50 is enough. */
- for (val=0; val<50; ++val)
- dclk_tick (port);
-
- if (nstatus(port) == 0) {
- CTAU_DEBUG (("Bad nstatus after confdone, %d bytes remaining (%d).\n",
- bytes, t.ptr - fwaddr));
- goto failed;
- }
-
- /* Succeeded. */
- /*CTAU_DEBUG (("Download succeeded.\n"));*/
- return 1;
- }
-
- putbit (port, val & 0x01);
- putbit (port, val & 0x02);
- putbit (port, val & 0x04);
- putbit (port, val & 0x08);
- putbit (port, val & 0x10);
- putbit (port, val & 0x20);
- putbit (port, val & 0x40);
- putbit (port, val & 0x80);
-
- /* if ((bytes & 1023) == 0) putch ('.'); */
- }
-
- CTAU_DEBUG (("Bad confdone.\n"));
-failed:
- CTAU_DEBUG (("Downloading aborted.\n"));
- return 0;
-}
-
-/*
- * Detect Tau2 adapter.
- */
-static int ct_probe2_board (port_t port)
-{
- unsigned char sr3, osr3;
- int i;
-
- if (! valid (port, porttab))
- return 0;
-
- osr3 = inb (BSR3(port));
- if ((osr3 & (BSR3_IB | BSR3_IB_NEG)) != BSR3_IB &&
- (osr3 & (BSR3_IB | BSR3_IB_NEG)) != BSR3_IB_NEG)
- return (0);
- for (i=0; i<100; ++i) {
- /* Do it twice */
- sr3 = inb (BSR3(port));
- sr3 = inb (BSR3(port));
- if (((sr3 ^ osr3) & (BSR3_IB | BSR3_IB_NEG | BSR3_ZERO)) !=
- (BSR3_IB | BSR3_IB_NEG))
- return (0);
- osr3 = sr3;
- }
- /* Reset the controller. */
- outb (BCR0(port), 0);
- return 1;
-}
-
-/*
- * Check if the Tau board is present at the given base port.
- * Read board status register 1 and check identification bits
- * which should invert every next read.
- * The "zero" bit should remain stable.
- */
-int ct_probe_board (port_t port, int irq, int dma)
-{
- unsigned char sr3, osr3;
- int i;
-
- if (! valid (port, porttab))
- return 0;
-
- if ((irq > 0) && (!valid (irq, irqtab)))
- return 0;
-
- if ((dma > 0) && (!valid (dma, dmatab)))
- return 0;
-
- osr3 = inb (BSR3(port));
- if ((osr3 & (BSR3_IB | BSR3_IB_NEG)) != BSR3_IB &&
- (osr3 & (BSR3_IB | BSR3_IB_NEG)) != BSR3_IB_NEG)
- return (0);
- for (i=0; i<100; ++i) {
- sr3 = inb (BSR3(port));
- if (((sr3 ^ osr3) & (BSR3_IB | BSR3_IB_NEG | BSR3_ZERO)) !=
- (BSR3_IB | BSR3_IB_NEG))
- return ct_probe2_board (port);
- osr3 = sr3;
- }
- /* Reset the controller. */
- outb (BCR0(port), 0);
- return (1);
-}
-
-/*
- * Check that the irq is functional.
- * irq>0 - activate the interrupt from the adapter (irq=on)
- * irq<0 - deactivate the interrupt (irq=off)
- * irq==0 - free the interrupt line (irq=tri-state)
- * Return the interrupt mask _before_ activating irq.
- */
-int ct_probe_irq (ct_board_t *b, int irq)
-{
- int mask;
-
- outb (0x20, 0x0a);
- mask = inb (0x20);
- outb (0xa0, 0x0a);
- mask |= inb (0xa0) << 8;
-
- if (irq > 0) {
- outb (BCR0(b->port), BCR0_HDRUN | irqmask[irq]);
- outb (R(b->port,HD_TEPR_0R), 0);
- outw (R(b->port,HD_TCONR_0R), 1);
- outw (R(b->port,HD_TCNT_0R), 0);
- outb (R(b->port,HD_TCSR_0R), TCSR_ENABLE | TCSR_INTR);
- outb (IER2(b->port), IER2_RX_TME_0);
- } else if (irq < 0) {
- outb (BCR0(b->port), BCR0_HDRUN | irqmask[-irq]);
- outb (IER0(b->port), 0);
- outb (IER1(b->port), 0);
- outb (IER2(b->port), 0);
- outb (R(b->port,HD_TCSR_0R), 0);
- cte_out (E1CS0 (b->port), DS_IMR2, 0);
- cte_out (E1CS1 (b->port), DS_IMR2, 0);
- if (-irq > 7) {
- outb (0xa0, 0x60 | ((-irq) & 7));
- outb (0x20, 0x62);
- } else
- outb (0x20, 0x60 | (-irq));
- } else {
- outb (BCR0(b->port), b->bcr0);
- cte_out (E1CS0 (b->port), DS_IMR2, SR2_SEC);
- cte_out (E1CS1 (b->port), DS_IMR2, SR2_SEC);
- }
-
- return mask;
-}
-
-void ct_init_board (ct_board_t *b, int num, port_t port, int irq, int dma,
- int type, long osc)
-{
- int i;
-
- /* Initialize board structure. */
- b->type = type;
- b->port = port;
- b->num = num;
- b->irq = irq;
- b->dma = dma;
- b->osc = osc;
-
- /* Get the board type. */
- if (b->type == B_TAU) strcpy (b->name, "Tau");
- else if (b->type == B_TAU_E1) strcpy (b->name, "Tau/E1");
- else if (b->type == B_TAU_E1C) strcpy (b->name, "Tau/E1c");
- else if (b->type == B_TAU_E1D) strcpy (b->name, "Tau/E1d");
- else if (b->type == B_TAU_G703) strcpy (b->name, "Tau/G.703");
- else if (b->type == B_TAU_G703C) strcpy (b->name, "Tau/G.703c");
- else if (b->type == B_TAU2) strcpy (b->name, "Tau2");
- else if (b->type == B_TAU2_E1) strcpy (b->name, "Tau2/E1");
- else if (b->type == B_TAU2_E1D) strcpy (b->name, "Tau2/E1d");
- else if (b->type == B_TAU2_G703) strcpy (b->name, "Tau2/G.703");
- else strcpy (b->name, "Tau/???");
-
- /* Set DMA and IRQ. */
- b->bcr0 = BCR0_HDRUN | dmamask[b->dma] | irqmask[b->irq];
-
- /* Clear DTR[0..1]. */
- b->bcr1 = 0;
- b->e1cfg = 0;
-
- /* Initialize channel structures. */
- for (i=0; i<NCHAN; ++i)
- ct_init_chan (b, i);
- ct_reinit_board (b);
-}
-
-/*
- * Initialize the board structure.
- */
-void ct_init (ct_board_t *b, int num, port_t port, int irq, int dma,
- const unsigned char *firmware, long bits, const cr_dat_tst_t *tst,
- const unsigned char *firmware2)
-{
- static long tlen = 182;
- static cr_dat_tst_t tvec [] = {{ 114, 178 }, { 182, 182 }};
- static cr_dat_tst_t tvec2 [] = {{ 50, 178 }, { 182, 182 }};
- static unsigned char tau [] = { 155,153,113,48,64,236,
- 48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,183,};
- static unsigned char e1 [] = { 155,153,113,48,64,236,
- 112,37,49,37,33,116,101,100,112,37,49,37,33,116,101,100,230,};
- static unsigned char e1_2 [] = { 155,153,113,48,64,236,
- 112,37,49,37,33,116,101,100,96,97,53,49,49,96,97,100,230,};
- static unsigned char e1_3 [] = { 155,153,113,48,64,236,
- 96,97,53,49,49,96,97,100,96,97,53,49,49,96,97,100,230,};
- static unsigned char e1_4 [] = { 155,153,113,48,64,236,
- 96,97,53,49,49,96,97,100,112,37,49,37,33,116,101,100,230,};
- static unsigned char g703 [] = { 155,153,113,48,64,236,
- 112,37,49,37,33,116,101,32,117,37,49,37,33,116,101,100,230,};
- static unsigned char g703_2 [] = { 155,153,113,48,64,236,
- 112,37,49,37,33,116,101,32,101,97,53,49,49,96,97,100,230,};
- static unsigned char g703_3 [] = { 155,153,113,48,64,236,
- 96,97,53,49,49,96,97,32,101,97,53,49,49,96,97,100,230,};
- static unsigned char g703_4 [] = { 155,153,113,48,64,236,
- 96,97,53,49,49,96,97,32,117,37,49,37,33,116,101,100,230,};
-
- int type = B_TAU;
- long osc = (inb (BSR3(port)) & BSR3_ZERO) ? 8192000 : 10000000;
-
- /* Get the board type. */
- if (ct_probe2_board (port) && ct_download2 (port, firmware2)) {
- /* Tau2, 1k30-based model */
- unsigned char sr0 = inb (BSR0(port));
- if (! (sr0 & BSR0_T703))
- type = B_TAU2_G703;
- else if (sr0 & BSR0_TE1)
- type = B_TAU2;
- else if (inb(E1SR(port)) & E1SR_REV)
- type = B_TAU2_E1D;
- else
- type = B_TAU2_E1;
- } else if (ct_download (port, tau, tlen, tvec)) {
- if (! ct_download (port, firmware, bits, tst))
- type = B_TAU;
- else {
- unsigned char sr0 = inb (BSR0(port));
- if (! (sr0 & BSR0_T703))
- type = B_TAU_G703C;
- else if (sr0 & BSR0_TE1)
- type = B_TAU;
- else if (inb(E1SR(port)) & E1SR_REV)
- type = B_TAU_E1D;
- else
- type = B_TAU_E1C;
- }
- } else if (ct_download (port, e1, tlen, tvec2) ||
- ct_download (port, e1_2, tlen, tvec2) ||
- ct_download (port, e1_3, tlen, tvec2) ||
- ct_download (port, e1_4, tlen, tvec2))
- type = B_TAU_E1;
- else if (ct_download (port, g703, tlen, tvec2) ||
- ct_download (port, g703_2, tlen, tvec2) ||
- ct_download (port, g703_3, tlen, tvec2) ||
- ct_download (port, g703_4, tlen, tvec2))
- type = B_TAU_G703;
- ct_init_board (b, num, port, irq, dma, type, osc);
-}
-
-/*
- * Initialize the channel structure.
- */
-static void ct_init_chan (ct_board_t *b, int i)
-{
- ct_chan_t *c = b->chan + i;
- port_t port = b->port;
-
- c->num = i;
- c->board = b;
- switch (b->type) {
- case B_TAU:
- case B_TAU2: c->type = T_SERIAL; break;
- case B_TAU_E1:
- case B_TAU_E1C:
- case B_TAU_E1D:
- case B_TAU2_E1:
- case B_TAU2_E1D: c->type = T_E1; break;
- case B_TAU_G703:
- case B_TAU_G703C:
- case B_TAU2_G703: c->type = T_G703; break;
- }
- if (c->num)
- c->type |= T_SERIAL;
-
-#define reg(X,N) HD_##X##_##N
-#define set(X,N) c->X = R(port,reg(X,N))
-#define srx(X,N) c->RX.X = R(port,reg(X,N##R))
-#define stx(X,N) c->TX.X = R(port,reg(X,N##T))
- if (i == 0) {
- set(MD0, 0); set(MD1, 0); set(MD2, 0); set(CTL, 0);
- set(RXS, 0); set(TXS, 0); set(TMC, 0); set(CMD, 0);
- set(ST0, 0); set(ST1, 0); set(ST2, 0); set(ST3, 0);
- set(FST, 0); set(IE0, 0); set(IE1, 0); set(IE2, 0);
- set(FST, 0); set(IE0, 0); set(IE1, 0); set(IE2, 0);
- set(FIE, 0); set(SA0, 0); set(SA1, 0); set(IDL, 0);
- set(TRB, 0); set(RRC, 0); set(TRC0,0); set(TRC1,0);
- set(CST, 0);
- srx(DAR, 0); srx(DARB,0); srx(SAR, 0); srx(SARB,0);
- srx(CDA, 0); srx(EDA, 0); srx(BFL, 0); srx(BCR, 0);
- srx(DSR, 0); srx(DMR, 0); srx(FCT, 0); srx(DIR, 0);
- srx(DCR, 0);
- srx(TCNT,0); srx(TCONR,0); srx(TCSR,0); srx(TEPR,0);
- stx(DAR, 0); stx(DARB,0); stx(SAR, 0); stx(SARB,0);
- stx(CDA, 0); stx(EDA, 0); stx(BCR, 0);
- stx(DSR, 0); stx(DMR, 0); stx(FCT, 0); stx(DIR, 0);
- stx(DCR, 0);
- stx(TCNT,0); stx(TCONR,0); stx(TCSR,0); stx(TEPR,0);
- } else {
- set(MD0, 1); set(MD1, 1); set(MD2, 1); set(CTL, 1);
- set(RXS, 1); set(TXS, 1); set(TMC, 1); set(CMD, 1);
- set(ST0, 1); set(ST1, 1); set(ST2, 1); set(ST3, 1);
- set(FST, 1); set(IE0, 1); set(IE1, 1); set(IE2, 1);
- set(FST, 1); set(IE0, 1); set(IE1, 1); set(IE2, 1);
- set(FIE, 1); set(SA0, 1); set(SA1, 1); set(IDL, 1);
- set(TRB, 1); set(RRC, 1); set(TRC0,1); set(TRC1,1);
- set(CST, 1);
- srx(DAR, 1); srx(DARB,1); srx(SAR, 1); srx(SARB,1);
- srx(CDA, 1); srx(EDA, 1); srx(BFL, 1); srx(BCR, 1);
- srx(DSR, 1); srx(DMR, 1); srx(FCT, 1); srx(DIR, 1);
- srx(DCR, 1);
- srx(TCNT,1); srx(TCONR,1); srx(TCSR,1); srx(TEPR,1);
- stx(DAR, 1); stx(DARB,1); stx(SAR, 1); stx(SARB,1);
- stx(CDA, 1); stx(EDA, 1); stx(BCR, 1);
- stx(DSR, 1); stx(DMR, 1); stx(FCT, 1); stx(DIR, 1);
- stx(DCR, 1);
- stx(TCNT,1); stx(TCONR,1); stx(TCSR,1); stx(TEPR,1);
- }
-#undef set
-#undef srx
-#undef stx
-#undef reg
-}
-
-/*
- * Reinitialize the channels, using new options.
- */
-void ct_reinit_chan (ct_chan_t *c)
-{
- ct_board_t *b = c->board;
- long s;
- int i;
-
- if (c->hopt.txs == CLK_LINE) {
- /* External clock mode -- set zero baud rate. */
- if (c->mode != M_ASYNC)
- c->baud = 0;
- } else if (c->baud == 0) {
- /* No baud rate in internal clock mode -- set default values. */
- if (c->mode == M_ASYNC)
- c->baud = 9600;
- else if (c->mode == M_HDLC)
- c->baud = 64000;
- }
- switch (c->type) {
- case T_E1_SERIAL:
- if (b->opt.cfg == CFG_B)
- break;
- /* Fall through... */
- case T_E1:
- c->mode = M_E1;
- c->hopt.txs = CLK_LINE;
-
- /* Compute the baud value. */
- if (c->num) {
- s = b->opt.s1;
- if (b->opt.cfg == CFG_C)
- s &=~ b->opt.s0;
- } else
- s = b->opt.s0;
- /* Skip timeslot 16 in CAS mode. */
- if (c->gopt.cas)
- s &=~ (1L << 16);
-
- c->baud = 0;
- for (i=0; i<32; ++i)
- if ((s >> i) & 1)
- c->baud += 64000;
- c->gopt.rate = c->baud / 1000;
-
- /* Set NRZ and clear INVCLK. */
- c->opt.md2.encod = MD2_ENCOD_NRZ;
- c->board->opt.bcr2 &= c->num ?
- ~(BCR2_INVTXC1 | BCR2_INVRXC1) :
- ~(BCR2_INVTXC0 | BCR2_INVRXC0);
- break;
-
- case T_G703_SERIAL:
- if (b->opt.cfg == CFG_B)
- break;
- /* Fall through... */
- case T_G703:
- c->mode = M_G703;
- c->hopt.txs = CLK_LINE;
- c->baud = c->gopt.rate * 1000L;
-
- /* Set NRZ/NRZI and clear INVCLK. */
- if (c->opt.md2.encod != MD2_ENCOD_NRZ &&
- c->opt.md2.encod != MD2_ENCOD_NRZI)
- c->opt.md2.encod = MD2_ENCOD_NRZ;
- c->board->opt.bcr2 &= c->num ?
- ~(BCR2_INVTXC1 | BCR2_INVRXC1) :
- ~(BCR2_INVTXC0 | BCR2_INVRXC0);
- break;
- }
-}
-
-/*
- * Reinitialize all channels, using new options and baud rate.
- */
-void ct_reinit_board (ct_board_t *b)
-{
- ct_chan_t *c;
-
- b->opt = ct_board_opt_dflt;
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->opt = ct_chan_opt_dflt;
- c->hopt = ct_opt_hdlc_dflt;
- c->gopt = ct_opt_g703_dflt;
- c->mode = ct_chan_mode;
- c->baud = ct_baud;
-
- ct_reinit_chan (c);
- }
-}
-
-/*
- * Set up the E1 controller of the Tau/E1 board.
- * Frame sync signals:
- * Configuration Rsync0 Tsync0 Rsync1 Tsync1
- * ---------------------------------------------------
- * A (II) out out out out
- * B,C,D (HI,K,D) in out in out
- * ---------------------------------------------------
- * BI out out in in -- not implemented
- * old B,C,D (HI,K,D) out in out in -- old
- */
-static void ct_setup_ctlr (ct_chan_t *c)
-{
- ct_board_t *b = c->board;
- port_t p = c->num ? E1CS1 (b->port) : E1CS0 (b->port);
- unsigned char rcr1, rcr2, tcr1, tcr2, ccr1, licr;
- unsigned long xcbr, tir;
- int i;
-
- rcr2 = RCR2_RSCLKM;
- tcr1 = TCR1_TSIS | TCR1_TSO;
- tcr2 = 0;
- ccr1 = 0;
- licr = 0;
-
- if (b->opt.cfg != CFG_D) {
- /* Enable monitoring channel, when not in telephony mode. */
- rcr2 |= RCR2_SA_4;
- tcr2 |= TCR2_SA_4;
- }
- if (b->opt.cfg == CFG_A) {
- rcr1 = RCR1_RSO;
- } else {
- rcr1 = RCR1_RSI;
- rcr2 |= RCR2_RESE;
- }
-
- if (c->gopt.cas)
- tcr1 |= TCR1_T16S;
- else
- ccr1 |= CCR1_CCS;
-
- if (c->gopt.hdb3)
- ccr1 |= CCR1_THDB3 | CCR1_RHDB3;
-
- if (c->gopt.crc4) {
- ccr1 |= CCR1_TCRC4 | CCR1_RCRC4;
- tcr2 |= TCR2_AEBE;
- }
-
- if (c->gopt.higain)
- licr |= LICR_HIGAIN;
- if (inb (E1SR (b->port)) & (c->num ? E1SR_TP1 : E1SR_TP0))
- licr |= LICR_LB120P;
- else
- licr |= LICR_LB75P;
-
- cte_out (p, DS_RCR1, rcr1); /* receive control 1 */
- cte_out (p, DS_RCR2, rcr2); /* receive control 2 */
- cte_out (p, DS_TCR1, tcr1); /* transmit control 1 */
- cte_out (p, DS_TCR2, tcr2); /* transmit control 2 */
- cte_out (p, DS_CCR1, ccr1); /* common control 1 */
- cte_out (p, DS_CCR2, CCR2_CNTCV | CCR2_AUTORA | CCR2_LOFA1); /* common control 2 */
- cte_out (p, DS_CCR3, CCR3_TSCLKM); /* common control 3 */
- cte_out (p, DS_LICR, licr); /* line interface control */
- cte_out (p, DS_IMR1, 0); /* interrupt mask 1 */
- cte_out (p, DS_IMR2, SR2_SEC); /* interrupt mask 2 */
- cte_out (p, DS_TEST1, 0);
- cte_out (p, DS_TEST2, 0);
- cte_out (p, DS_TAF, 0x9b); /* transmit align frame */
- cte_out (p, DS_TNAF, 0xdf); /* transmit non-align frame */
- cte_out (p, DS_TIDR, 0xff); /* transmit idle definition */
-
- cte_out (p, DS_TS, 0x0b); /* transmit signaling 1 */
- for (i=1; i<16; ++i)
- /* transmit signaling 2..16 */
- cte_out (p, (unsigned char) (DS_TS+i), 0xff);
-
- /*
- * S0 == list of timeslots for channel 0
- * S1 == list of timeslots for channel 1
- * S2 == list of timeslots for E1 subchannel (pass through)
- *
- * Each channel uses the same timeslots for receive and transmit,
- * i.e. RCBRi == TCBRi.
- */
- if (b->opt.cfg == CFG_B)
- b->opt.s1 = 0;
- else if (b->opt.cfg == CFG_C)
- b->opt.s1 &=~ b->opt.s0;
- if (c->gopt.cas) {
- /* Skip timeslot 16 in CAS mode. */
- b->opt.s0 &=~ (1L << 16);
- b->opt.s1 &=~ (1L << 16);
- }
- b->opt.s2 &=~ b->opt.s0;
- b->opt.s2 &=~ b->opt.s1;
-
- /*
- * Configuration A:
- * xCBRi := Si
- * TIRi := ~Si
- *
- * Configuration B:
- * xCBRi := Si
- * TIRi := 0
- *
- * Configuration C: (S0 & S2 == 0)
- * xCBR0 := S0
- * xCBR1 := 0
- * TIR0 := ~S0 & ~S2
- * TIR1 := ~S2
- *
- * Configuration D: (Si & Sj == 0)
- * xCBR0 := S0
- * xCBR1 := S1
- * TIR0 := ~S0 & ~S1 & ~S2
- * TIR1 := ~S2
- */
- xcbr = c->num ? b->opt.s1 : b->opt.s0;
- if (b->opt.cfg == CFG_A)
- tir = ~xcbr;
- else if (b->opt.cfg == CFG_D)
- tir = 0;
- else if (c->num == 0)
- tir = ~(b->opt.s0 | b->opt.s1 | b->opt.s2);
- else
- tir = ~b->opt.s2;
-
- /* Mark idle channels. */
- cte_out (p, DS_TIR, (unsigned char) (tir & 0xfe));
- cte_out (p, DS_TIR+1, (unsigned char) (tir >> 8));
- cte_out (p, DS_TIR+2, (unsigned char) (tir >> 16));
- cte_out (p, DS_TIR+3, (unsigned char) (tir >> 24));
-
- /* Set up rx/tx timeslots. */
- cte_out (p, DS_RCBR, (unsigned char) (xcbr & 0xfe));
- cte_out (p, DS_RCBR+1, (unsigned char) (xcbr >> 8));
- cte_out (p, DS_RCBR+2, (unsigned char) (xcbr >> 16));
- cte_out (p, DS_RCBR+3, (unsigned char) (xcbr >> 24));
- cte_out (p, DS_TCBR, (unsigned char) (xcbr & 0xfe));
- cte_out (p, DS_TCBR+1, (unsigned char) (xcbr >> 8));
- cte_out (p, DS_TCBR+2, (unsigned char) (xcbr >> 16));
- cte_out (p, DS_TCBR+3, (unsigned char) (xcbr >> 24));
-
- /* Reset the line interface. */
- cte_out (p, DS_CCR3, CCR3_TSCLKM | CCR3_LIRESET);
- cte_out (p, DS_CCR3, CCR3_TSCLKM);
-
- /* Reset the elastic store. */
- cte_out (p, DS_CCR3, CCR3_TSCLKM | CCR3_ESRESET);
- cte_out (p, DS_CCR3, CCR3_TSCLKM);
-
- /* Clear status registers. */
- cte_ins (p, DS_SR1, 0xff);
- cte_ins (p, DS_SR2, 0xff);
- cte_ins (p, DS_RIR, 0xff);
-}
-
-/*
- * Set up the serial controller of the Tau/E1 board.
- */
-static void ct_setup_scc (port_t port)
-{
-#define SET(r,v) { cte_out2 (port, r, v); cte_out2 (port, AM_A | r, v); }
-
- /* hardware reset */
- cte_out2 (port, AM_MICR, MICR_RESET_HW);
-
- SET (AM_PMR, 0x0c); /* 2 stop bits */
- SET (AM_IMR, 0); /* no W/REQ signal */
- cte_out2 (port, AM_IVR, 0); /* interrupt vector */
- SET (AM_RCR, 0xc0); /* rx 8 bits/char */
- SET (AM_TCR, 0x60); /* tx 8 bits/char */
- SET (AM_SAF, 0); /* sync address field */
- SET (AM_SFR, 0x7e); /* sync flag register */
- cte_out2 (port, AM_MICR, 0); /* master interrupt control */
- SET (AM_MCR, 0); /* NRZ mode */
- SET (AM_CMR, 0x08); /* rxclk=RTxC, txclk=TRxC */
- SET (AM_TCL, 0); /* time constant low */
- SET (AM_TCH, 0); /* time constant high */
- SET (AM_BCR, 0); /* disable baud rate generator */
-
- SET (AM_RCR, 0xc1); /* enable rx */
- SET (AM_TCR, 0x68); /* enable tx */
-
- SET (AM_SICR, 0); /* no status interrupt */
- SET (AM_CR, CR_RST_EXTINT); /* reset external status */
- SET (AM_CR, CR_RST_EXTINT); /* reset ext/status twice */
-#undef SET
-}
-
-/*
- * Set up the Tau/E1 board.
- */
-void ct_setup_e1 (ct_board_t *b)
-{
- /*
- * Control register 0:
- * 1) board configuration
- * 2) clock modes
- */
- b->e1cfg &= E1CFG_LED;
- switch (b->opt.cfg){
- case CFG_C: b->e1cfg |= E1CFG_K; break;
- case CFG_B: b->e1cfg |= E1CFG_HI; break;
- case CFG_D: b->e1cfg |= E1CFG_D; break;
- default: b->e1cfg |= E1CFG_II; break;
- }
-
- if (b->opt.clk0 == GCLK_RCV) b->e1cfg |= E1CFG_CLK0_RCV;
- if (b->opt.clk0 == GCLK_RCLKO) b->e1cfg |= E1CFG_CLK0_RCLK1;
- else b->e1cfg |= E1CFG_CLK0_INT;
- if (b->opt.clk1 == GCLK_RCV) b->e1cfg |= E1CFG_CLK1_RCV;
- if (b->opt.clk1 == GCLK_RCLKO) b->e1cfg |= E1CFG_CLK1_RCLK0;
- else b->e1cfg |= E1CFG_CLK1_INT;
-
- outb (E1CFG (b->port), b->e1cfg);
-
- /*
- * Set up serial controller.
- */
- ct_setup_scc (b->port);
-
- /*
- * Set up E1 controllers.
- */
- ct_setup_ctlr (b->chan + 0); /* channel 0 */
- ct_setup_ctlr (b->chan + 1); /* channel 1 */
-
- /* Start the board (GRUN). */
- b->e1cfg |= E1CFG_GRUN;
- outb (E1CFG (b->port), b->e1cfg);
-}
-
-/*
- * Set up the G.703 controller of the Tau/G.703 board.
- */
-static void ct_setup_lxt (ct_chan_t *c)
-{
- ctg_outx (c, LX_CCR1, LX_RESET); /* reset the chip */
- /* Delay */
- ctg_inx (c, LX_CCR1);
- c->lx = LX_LOS; /* disable loss of sync interrupt */
- if (c->num && c->board->opt.cfg == CFG_B)
- c->lx |= LX_TAOS; /* idle channel--transmit all ones */
- if (c->gopt.hdb3)
- c->lx |= LX_HDB3; /* enable HDB3 encoding */
- ctg_outx (c, LX_CCR1, c->lx); /* setup the new mode */
- ctg_outx (c, LX_CCR2, LX_CCR2_LH); /* setup Long Haul mode */
- ctg_outx (c, LX_CCR3, LX_CCR3_E1_LH); /* setup Long Haul mode */
-}
-
-/*
- * Set up the Tau/G.703 board.
- */
-void ct_setup_g703 (ct_board_t *b)
-{
- b->gmd0 = GMD_2048;
- if (b->chan[0].gopt.pce) {
- if (b->chan[0].gopt.pce2) b->gmd0 |= GMD_PCE_PCM2;
- else b->gmd0 |= GMD_PCE_PCM2D;
- }
- if (b->opt.clk0)
- b->gmd0 |= GMD_RSYNC;
-
- b->gmd1 = 0;
- if (b->chan[1].gopt.pce) {
- if (b->chan[1].gopt.pce2) b->gmd1 |= GMD_PCE_PCM2;
- else b->gmd1 |= GMD_PCE_PCM2D;
- }
- if (b->opt.clk1)
- b->gmd1 |= GMD_RSYNC;
-
- switch (b->chan[0].gopt.rate) {
- case 2048: b->gmd0 |= GMD_2048; break;
- case 1024: b->gmd0 |= GMD_1024; break;
- case 512: b->gmd0 |= GMD_512; break;
- case 256: b->gmd0 |= GMD_256; break;
- case 128: b->gmd0 |= GMD_128; break;
- case 64: b->gmd0 |= GMD_64; break;
- }
- switch (b->chan[1].gopt.rate) {
- case 2048: b->gmd1 |= GMD_2048; break;
- case 1024: b->gmd1 |= GMD_1024; break;
- case 512: b->gmd1 |= GMD_512; break;
- case 256: b->gmd1 |= GMD_256; break;
-
- case 128: b->gmd1 |= GMD_128; break;
- case 64: b->gmd1 |= GMD_64; break;
- }
-
- outb (GMD0(b->port), b->gmd0);
- outb (GMD1(b->port), b->gmd1 | GMD1_NCS0 | GMD1_NCS1);
-
- b->gmd2 &= GMD2_LED;
- if (b->opt.cfg == CFG_B) b->gmd2 |= GMD2_SERIAL;
- outb (GMD2(b->port), b->gmd2);
-
- /* Set up G.703 controllers. */
- if ((b->chan + 0)->lx & LX_LLOOP) {
- ct_setup_lxt (b->chan + 0); /* channel 0 */
- ct_enable_loop (b->chan + 0);
- } else {
- ct_setup_lxt (b->chan + 0); /* channel 0 */
- }
- if ((b->chan + 1)->lx & LX_LLOOP) {
- ct_setup_lxt (b->chan + 1); /* channel 1 */
- ct_enable_loop (b->chan + 1);
- } else {
- ct_setup_lxt (b->chan + 1); /* channel 1 */
- }
-
- /* Clear errors. */
- outb (GERR(b->port), 0xff);
- outb (GLDR(b->port), 0xff);
-}
-
-/*
- * Set up the board.
- */
-int ct_setup_board (ct_board_t *b, const unsigned char *firmware,
- long bits, const cr_dat_tst_t *tst)
-{
- ct_chan_t *c;
-
- /* Disable DMA channel. */
- outb (DMA_MASK, (b->dma & 3) | DMA_MASK_CLEAR);
-
- /* Reset the controller. */
- outb (BCR0(b->port), 0);
-
- /* Load the firmware. */
- if (firmware && (b->type == B_TAU || b->type == B_TAU_E1 ||
- b->type == B_TAU_G703) &&
- ! ct_download (b->port, firmware, bits, tst))
- return (0);
- if (firmware && (b->type == B_TAU2 || b->type == B_TAU2_E1 ||
- b->type == B_TAU2_E1D || b->type == B_TAU2_G703) &&
- ! ct_download2 (b->port, firmware))
- return (0);
-
- /* Enable DMA and IRQ. */
- outb (BCR0(b->port), BCR0_HDRUN);
- outb (BCR0(b->port), b->bcr0);
-
- /* Clear DTR[0..1]. */
- outb (BCR1(b->port), b->bcr1);
-
- /* Set bus timing. */
- b->bcr2 = b->opt.bcr2;
- outb (BCR2(b->port), b->bcr2);
-
- /*
- * Initialize the controller.
- */
- /* Zero wait state mode. */
- outb (WCRL(b->port), 0);
- outb (WCRM(b->port), 0);
- outb (WCRH(b->port), 0);
-
- /* Clear interrupt modified vector register. */
- outb (IMVR(b->port), 0);
- outb (ITCR(b->port), ITCR_CYCLE_SINGLE | ITCR_VECT_MOD);
-
- /* Disable all interrupts. */
- outb (IER0(b->port), 0);
- outb (IER1(b->port), 0);
- outb (IER2(b->port), 0);
-
- /* Set DMA parameters, enable master DMA mode. */
- outb (PCR(b->port), BYTE b->opt.pcr);
- outb (DMER(b->port), DME_ENABLE);
-
- /* Set up DMA channel to master mode. */
- outb (DMA_MODE, (b->dma & 3) | DMA_MODE_MASTER);
-
- /* Enable DMA channel. */
- outb (DMA_MASK, b->dma & 3);
-
- /* Disable byte-sync mode for Tau/G.703. */
- if (b->type == B_TAU_G703)
- outb (GMD2(b->port), 0);
-
- /* Initialize all channels. */
- for (c=b->chan; c<b->chan+NCHAN; ++c)
- ct_setup_chan (c);
-
- switch (b->type) {
- case B_TAU_G703:
- case B_TAU_G703C:
- case B_TAU2_G703:
- ct_setup_g703 (b);
- break;
- case B_TAU_E1:
- case B_TAU_E1C:
- case B_TAU_E1D:
- case B_TAU2_E1:
- case B_TAU2_E1D:
- ct_setup_e1 (b);
- break;
- }
- return (1);
-}
-
-/*
- * Update the channel mode options.
- */
-void ct_update_chan (ct_chan_t *c)
-{
- int txbr, rxbr, tmc, txcout;
- unsigned char rxs, txs, dmr = 0;
- ct_md0_async_t amd0;
- ct_md0_hdlc_t hmd0;
- ct_md1_async_t amd1;
-
- switch (c->mode) { /* initialize the channel mode */
- case M_ASYNC: default:
- rxs = CLK_INT;
- txs = CLK_INT;
-
- amd0.mode = MD0_MODE_ASYNC;
- amd0.stopb = MD0_STOPB_1;
- amd0.cts_rts_dcd = 0;
-
- amd1.clk = MD1_CLK_16;
- amd1.txclen = amd1.rxclen = MD1_CLEN_8;
- amd1.parmode = MD1_PAR_NO;
-
- outb (c->MD0, BYTE amd0);
- outb (c->MD1, BYTE amd1);
- outb (c->CTL, c->rts ? 0 : CTL_RTS_INV);
- break;
-
- case M_E1:
- case M_G703:
- case M_HDLC:
- rxs = c->hopt.rxs;
- txs = c->hopt.txs;
-
- if (c->mode == M_E1 && c->board->opt.cfg == CFG_D) {
- hmd0 = c->hopt.md0;
- hmd0.crc = 0;
-
- outb (c->MD0, BYTE hmd0);
- outb (c->MD1, BYTE c->hopt.md1);
- outb (c->CTL, c->hopt.ctl & ~CTL_IDLE_PTRN);
- outb (c->SA0, c->hopt.sa0);
- outb (c->SA1, c->hopt.sa1);
- outb (c->IDL, 0x7e); /* HDLC flag 01111110 */
- } else {
- outb (c->MD0, BYTE c->hopt.md0);
- outb (c->MD1, BYTE c->hopt.md1);
- outb (c->SA0, c->hopt.sa0);
- outb (c->SA1, c->hopt.sa1);
- outb (c->IDL, 0x7e); /* HDLC flag 01111110 */
-
- if (c->rts)
- outb (c->CTL, c->hopt.ctl & ~CTL_RTS_INV);
- else
- outb (c->CTL, c->hopt.ctl | CTL_RTS_INV);
- }
-
- /* Chained-block DMA mode with frame counter. */
- dmr |= DMR_CHAIN_CNTE | DMR_CHAIN_NF | DMR_TMOD;
- break;
-
- }
- outb (c->RX.DMR, dmr);
- outb (c->TX.DMR, dmr);
-
- /* set mode-independent options */
- c->opt.md2.dpll_clk = MD2_DPLL_CLK_8;
- outb (c->MD2, BYTE c->opt.md2);
-
- /* set up receiver and transmitter clocks */
- if (c->baud > 1024000) {
- /* turn off DPLL if the baud rate is too high */
- if (rxs == CLK_RXS_LINE_NS) rxs = CLK_LINE;
- else if (rxs == CLK_RXS_DPLL_INT) rxs = CLK_INT;
- }
- if (rxs == CLK_RXS_LINE_NS || rxs == CLK_RXS_DPLL_INT) {
- /* Using 1:8 sampling rate. */
- ct_compute_clock (c->board->osc, c->baud * 8, &rxbr, &tmc);
- txbr = rxbr + 3;
- } else if (c->mode == M_ASYNC) {
- /* Using 1:16 sampling rate. */
- ct_compute_clock (c->board->osc, c->baud * 8, &rxbr, &tmc);
- --rxbr;
- txbr = rxbr;
- } else {
- ct_compute_clock (c->board->osc, c->baud, &rxbr, &tmc);
- txbr = rxbr;
- }
- txs |= txbr;
- rxs |= rxbr;
- outb (c->TMC, tmc);
- outb (c->RXS, rxs);
-
- /* Disable TXCOUT before changing TXS
- * to avoid two transmitters on the same line.
- * Enable it after TXS is set, if needed. */
- txcout = c->num ? BCR1_TXCOUT1 : BCR1_TXCOUT0;
- c->board->bcr1 &= ~txcout;
- outb (BCR1(c->board->port), c->board->bcr1);
- outb (c->TXS, txs);
- if ((txs & CLK_MASK) != CLK_LINE) {
- c->board->bcr1 |= txcout;
- outb (BCR1(c->board->port), c->board->bcr1);
- }
- if (c->board->type == B_TAU_E1D ||
- c->board->type == B_TAU2_E1D)
- ct_set_phony (c, c->gopt.phony);
-}
-
-/*
- * Initialize the channel.
- */
-void ct_setup_chan (ct_chan_t *c)
-{
- /* reset the channel */
- outb (c->RX.DSR, DSR_DMA_DISABLE);
- outb (c->TX.DSR, DSR_DMA_DISABLE);
- outb (c->CMD, CMD_TX_RESET);
- outb (c->CMD, CMD_TX_ABORT);
- outb (c->CMD, CMD_CHAN_RESET);
-
- /* disable interrupts */
- outb (c->IE0, 0);
- outb (c->IE1, 0);
- outb (c->IE2, 0);
- outb (c->FIE, 0);
-
- /* clear DTR, RTS */
- ct_set_dtr (c, 0);
- ct_set_rts (c, 0);
-
- c->lx = LX_LOS;
- ct_update_chan (c);
-}
-
-unsigned long ct_get_ts (ct_chan_t *c)
-{
- return c->num ? c->board->opt.s1 : c->board->opt.s0;
-}
-
-/*
- * Data transfer speed
- */
-unsigned long ct_get_baud (ct_chan_t *c)
-{
- unsigned long speed;
- unsigned long ts;
-
- if (c->mode == M_G703) {
- speed = 1000 * c->gopt.rate;
- } else if (c->mode == M_E1) {
- ts = ct_get_ts (c);
- for (speed=0; ts; ts >>= 1) /* Each timeslot is 64 Kbps */
- if (ts & 1)
- speed += 64000;
- } else
- speed = (c->hopt.txs == CLK_INT) ? c->baud : 0;
- return speed;
-}
-
-/*
- * Turn local loopback on
- */
-static void ct_enable_loop (ct_chan_t *c)
-{
- if (c->mode == M_E1) {
- unsigned short p = c->num ? E1CS1 (c->board->port) :
- E1CS0 (c->board->port);
-
- /* Local loopback. */
- cte_out (p, DS_CCR2, cte_in (p, DS_CCR2) | CCR2_LLOOP);
-
- /* Enable jitter attenuator at the transmit side. */
- cte_out (p, DS_LICR, cte_in (p, DS_LICR) | LICR_JA_TX);
- return;
- } else if (c->mode == M_G703) {
- c->lx = LX_LOS | LX_HDB3;
- ctg_outx (c, LX_CCR1, c->lx |= LX_LLOOP);
- return;
- } else if (c->mode == M_HDLC && ct_get_baud(c)) {
- unsigned char rxs = inb (c->RXS) & ~CLK_MASK;
- unsigned char txs = inb (c->TXS) & ~CLK_MASK;
- int txcout = c->num ? BCR1_TXCOUT1 : BCR1_TXCOUT0;
- c->opt.md2.loop = MD2_LLOOP;
-
- /* Disable TXCOUT before changing TXS */
- /* to avoid two transmitters on the same line. */
- /* Enable it after TXS is set. */
- outb (BCR1(c->board->port), c->board->bcr1 & ~txcout);
-
- outb (c->RXS, rxs | CLK_INT);
- outb (c->TXS, txs | CLK_INT);
-
- c->board->bcr1 |= txcout;
- outb (BCR1(c->board->port), c->board->bcr1);
-
- outb (c->MD2, *(unsigned char*)&c->opt.md2);
- return;
- }
-}
-
-/*
- * Turn local loopback off
- */
-static void ct_disable_loop (ct_chan_t *c)
-{
- if (c->mode == M_E1) {
- unsigned short p = c->num ? E1CS1 (c->board->port) :
- E1CS0 (c->board->port);
-
- /* Local loopback. */
- cte_out (p, DS_CCR2, cte_in (p, DS_CCR2) & ~CCR2_LLOOP);
-
- /* Disable jitter attenuator at the transmit side. */
- cte_out (p, DS_LICR, cte_in (p, DS_LICR) & ~LICR_JA_TX);
- return;
- } else if (c->mode == M_G703) {
- c->lx = LX_LOS | LX_HDB3;
- ctg_outx (c, LX_CCR1, c->lx);
- return;
- } else if (c->mode == M_HDLC && ct_get_baud(c)) {
- unsigned char rxs = inb (c->RXS) & ~CLK_MASK;
- unsigned char txs = inb (c->TXS) & ~CLK_MASK;
- int txcout = c->num ? BCR1_TXCOUT1 : BCR1_TXCOUT0;
- c->opt.md2.loop = MD2_FDX;
-
- outb (BCR1(c->board->port), c->board->bcr1 & ~txcout);
-
- outb (c->RXS, rxs | CLK_LINE);
- if (ct_get_baud (c))
- outb (c->TXS, txs | CLK_INT);
- else
- outb (c->TXS, txs | CLK_LINE);
-
- c->board->bcr1 |= txcout;
- outb (BCR1(c->board->port), c->board->bcr1);
-
- outb (c->MD2, *(unsigned char*)&c->opt.md2);
- return;
- }
-}
-
-/*
- * Turn local loopback on/off
- */
-void ct_set_loop (ct_chan_t *c, int on)
-{
- if (on)
- ct_enable_loop (c);
- else
- ct_disable_loop (c);
-}
-
-int ct_get_loop (ct_chan_t *c)
-{
- if (c->mode == M_E1) {
- unsigned short p = c->num ? E1CS1 (c->board->port) :
- E1CS0 (c->board->port);
-
- return cte_in (p, DS_CCR2) & CCR2_LLOOP;
- }
- if (c->mode == M_G703)
- return c->lx & LX_LLOOP;
-
- /* M_HDLC */
- return (c->opt.md2.loop & MD2_LLOOP) != 0;
-}
-
-void ct_set_phony (ct_chan_t *c, int on)
-{
- /* Valid only for TauPCI-E1. */
- if (c->board->type != B_TAU_E1D &&
- c->board->type != B_TAU2_E1D)
- return;
- c->gopt.phony = (on != 0);
- if (c->gopt.phony) {
- c->board->e1syn |= c->num ? E1SYN_ENS1 : E1SYN_ENS0;
- /* No receive/transmit crc. */
- c->hopt.md0.crc = 0;
- } else {
- c->board->e1syn &= ~(c->num ? E1SYN_ENS1 : E1SYN_ENS0);
- /* Enable crc. */
- c->hopt.md0.crc = 1;
- }
- outb (c->MD0, BYTE c->hopt.md0);
- outb (E1SYN(c->board->port), c->board->e1syn);
-}
-
-void ct_start_receiver (ct_chan_t *c, int dma, unsigned long buf,
- unsigned len, unsigned long desc, unsigned long lim)
-{
- int ier0 = inb (IER0(c->board->port));
- int ier1 = inb (IER1(c->board->port));
- int ier2 = inb (IER2(c->board->port));
- int ie0 = inb (c->IE0);
- int ie2 = inb (c->IE2);
-
- if (dma) {
- ier1 |= c->num ? (IER1_RX_DMERE_1 | IER1_RX_DME_1) :
- (IER1_RX_DMERE_0 | IER1_RX_DME_0);
- if (c->mode == M_ASYNC) {
- ier0 |= c->num ? IER0_RX_INTE_1 : IER0_RX_INTE_0;
- ie0 |= IE0_RX_INTE;
- ie2 |= IE2_OVRNE | IE2_ASYNC_FRMEE | IE2_ASYNC_PEE;
- }
- } else {
- ier0 |= c->num ? (IER0_RX_INTE_1 | IER0_RX_RDYE_1) :
- (IER0_RX_INTE_0 | IER0_RX_RDYE_0);
- ie0 |= IE0_RX_INTE | IE0_RX_RDYE;
- }
-
- /* Start timer. */
- if (! dma) {
- outb (c->RX.TEPR, TEPR_64); /* prescale to 16 kHz */
- outw (c->RX.TCONR, 160); /* period is 10 msec */
- outw (c->RX.TCNT, 0);
- outb (c->RX.TCSR, TCSR_ENABLE | TCSR_INTR);
- ier2 |= c->num ? IER2_RX_TME_1 : IER2_RX_TME_0;
- }
-
- /* Enable interrupts. */
- outb (IER0(c->board->port), ier0);
- outb (IER1(c->board->port), ier1);
- outb (IER2(c->board->port), ier2);
- outb (c->IE0, ie0);
- outb (c->IE2, ie2);
-
- /* RXRDY:=1 when the receive buffer has more than RRC chars */
- outb (c->RRC, dma ? c->opt.dma_rrc : c->opt.pio_rrc);
-
- /* Start receiver. */
- if (dma) {
- outb (c->RX.DCR, DCR_ABORT);
- if (c->mode == M_ASYNC) {
- /* Single-buffer DMA mode. */
- outb (c->RX.DARB, (unsigned char) (buf >> 16));
- outw (c->RX.DAR, (unsigned short) buf);
- outw (c->RX.BCR, len);
- outb (c->RX.DIR, DIR_EOTE);
- } else {
- /* Chained-buffer DMA mode. */
- outb (c->RX.SARB, (unsigned char) (desc >> 16));
- outw (c->RX.EDA, (unsigned short) lim);
- outw (c->RX.CDA, (unsigned short) desc);
- outw (c->RX.BFL, len);
- outb (c->RX.DIR, DIR_CHAIN_EOME | DIR_CHAIN_BOFE |
- DIR_CHAIN_COFE);
- }
- outb (c->RX.DSR, DSR_DMA_ENABLE);
- }
- outb (c->CMD, CMD_RX_ENABLE);
-}
-
-void ct_start_transmitter (ct_chan_t *c, int dma, unsigned long buf,
- unsigned len, unsigned long desc, unsigned long lim)
-{
- int ier0 = inb (IER0(c->board->port));
- int ier1 = inb (IER1(c->board->port));
- int ie0 = inb (c->IE0);
- int ie1 = inb (c->IE1);
-
- /* Enable underrun interrupt in HDLC and raw modes. */
- if (c->mode != M_ASYNC) {
- ier0 |= c->num ? IER0_TX_INTE_1 : IER0_TX_INTE_0;
- ie0 |= IE0_TX_INTE;
- ie1 |= IE1_HDLC_UDRNE;
- }
- if (dma)
- ier1 |= c->num ? (IER1_TX_DMERE_1 | IER1_TX_DME_1) :
- (IER1_TX_DMERE_0 | IER1_TX_DME_0);
- else {
- ier0 |= c->num ? IER0_TX_RDYE_1 : IER0_TX_RDYE_0;
- ie0 |= IE0_TX_RDYE;
- }
-
- /* Enable interrupts. */
- outb (IER0(c->board->port), ier0);
- outb (IER1(c->board->port), ier1);
- outb (c->IE0, ie0);
- outb (c->IE1, ie1);
-
- /* TXRDY:=1 when the transmit buffer has TRC0 or less chars,
- * TXRDY:=0 when the transmit buffer has more than TRC1 chars */
- outb (c->TRC0, dma ? c->opt.dma_trc0 : c->opt.pio_trc0);
- outb (c->TRC1, dma ? c->opt.dma_trc1 : c->opt.pio_trc1);
-
- /* Start transmitter. */
- if (dma) {
- outb (c->TX.DCR, DCR_ABORT);
- if (c->mode == M_ASYNC) {
- /* Single-buffer DMA mode. */
- outb (c->TX.SARB, (unsigned char) (buf >> 16));
- outw (c->TX.SAR, (unsigned short) buf);
- outw (c->TX.BCR, len);
- outb (c->TX.DIR, DIR_EOTE);
- } else {
- /* Chained-buffer DMA mode. */
- outb (c->TX.SARB, (unsigned char) (desc >> 16));
- outw (c->TX.EDA, (unsigned short) lim);
- outw (c->TX.CDA, (unsigned short) desc);
- outb (c->TX.DIR, /* DIR_CHAIN_EOME | */ DIR_CHAIN_BOFE |
- DIR_CHAIN_COFE);
- }
- /* Set DSR_DMA_ENABLE to begin! */
- }
- outb (c->CMD, CMD_TX_ENABLE);
-
- /* Clear errors. */
- if (c->board->type == B_TAU_G703) {
- outb (GERR(c->board->port), 0xff);
- outb (GLDR(c->board->port), 0xff);
- }
-}
-
-/*
- * Control DTR signal for the channel.
- * Turn it on/off.
- */
-void ct_set_dtr (ct_chan_t *c, int on)
-{
- if (on) {
- c->dtr = 1;
- c->board->bcr1 |= c->num ? BCR1_DTR1 : BCR1_DTR0;
- } else {
- c->dtr = 0;
- c->board->bcr1 &= ~(c->num ? BCR1_DTR1 : BCR1_DTR0);
- }
- outb (BCR1(c->board->port), c->board->bcr1);
-}
-
-/*
- * Control RTS signal for the channel.
- * Turn it on/off.
- */
-void ct_set_rts (ct_chan_t *c, int on)
-{
- c->rts = (on != 0);
- if (c->rts)
- outb (c->CTL, inb (c->CTL) & ~CTL_RTS_INV);
- else
- outb (c->CTL, inb (c->CTL) | CTL_RTS_INV);
-}
-
-/*
- * Control BREAK state in asynchronous mode.
- * Turn it on/off.
- */
-void ct_set_brk (ct_chan_t *c, int on)
-{
- if (c->mode != M_ASYNC)
- return;
- if (on)
- outb (c->CTL, inb (c->CTL) | CTL_BRK);
- else
- outb (c->CTL, inb (c->CTL) & ~CTL_BRK);
-}
-
-/*
- * Get the state of DSR signal of the channel.
- */
-int ct_get_dsr (ct_chan_t *c)
-{
- return (inb (BSR1(c->board->port)) &
- (c->num ? BSR1_DSR1 : BSR1_DSR0)) != 0;
-}
-
-/*
- * Get the G.703 line signal level.
- */
-int ct_get_lq (ct_chan_t *c)
-{
- unsigned char q1, q2, q3;
- static int lq_to_santibells [] = { 0, 95, 195, 285 };
- int i;
-
- if (! (c->type & T_G703))
- return 0;
- q1 = inb (GLQ (c->board->port));
- /* Repeat reading the register to produce a 10-usec delay. */
- for (i=0; i<20; ++i)
- q2 = inb (GLQ (c->board->port));
- for (i=0; i<20; ++i)
- q3 = inb (GLQ (c->board->port));
- if (c->num) {
- q1 >>= GLQ_SHIFT;
- q2 >>= GLQ_SHIFT;
- q3 >>= GLQ_SHIFT;
- }
- q1 &= GLQ_MASK;
- q2 &= GLQ_MASK;
- q3 &= GLQ_MASK;
- if (q1 <= q2 && q2 <= q3) return lq_to_santibells [q2];
- if (q2 <= q3 && q3 <= q1) return lq_to_santibells [q3];
- if (q3 <= q1 && q1 <= q2) return lq_to_santibells [q1];
- if (q1 <= q3 && q3 <= q2) return lq_to_santibells [q3];
- if (q3 <= q2 && q2 <= q1) return lq_to_santibells [q2];
- /* if (q2 <= q1 && q1 <= q3) */ return lq_to_santibells [q1];
-}
-
-/*
- * Get the state of CARRIER signal of the channel.
- */
-int ct_get_cd (ct_chan_t *c)
-{
- return (inb (c->ST3) & ST3_DCD_INV) == 0;
-}
-
-/*
- * Get the state of CTS signal of the channel.
- */
-int ct_get_cts (ct_chan_t *c)
-{
- return (inb (c->ST3) & ST3_CTS_INV) == 0;
-}
-
-/*
- * Turn LED on/off.
- */
-void ct_led (ct_board_t *b, int on)
-{
- switch (b->type) {
- case B_TAU_G703:
- case B_TAU_G703C:
- case B_TAU2_G703:
- if (on) b->gmd2 |= GMD2_LED;
- else b->gmd2 &= ~GMD2_LED;
- outb (GMD2(b->port), b->gmd2);
- break;
- default:
- if (on) b->e1cfg |= E1CFG_LED;
- else b->e1cfg &= ~E1CFG_LED;
- outb (E1CFG(b->port), b->e1cfg);
- break;
- }
-}
-
-void ct_disable_dma (ct_board_t *b)
-{
- /* Disable DMA channel. */
- outb (DMA_MASK, (b->dma & 3) | DMA_MASK_CLEAR);
-}
-
-void ct_compute_clock (long hz, long baud, int *txbr, int *tmc)
-{
- if (baud < 100)
- baud = 100;
- *txbr = 0;
- if (4*baud > 3*hz)
- *tmc = 1;
- else {
- while (((hz / baud) >> ++*txbr) > 256)
- continue;
- *tmc = (((2 * hz / baud) >> *txbr) + 1) / 2;
- }
-}
-
-/*
- * Access to DS2153 chips on the Tau/E1 board.
- * Examples:
- * val = cte_in (E1CSi (base), DS_RCR1)
- * cte_out (E1CSi (base), DS_CCR1, val)
- * val = cte_ins (E1CSi (base), DS_SSR)
- */
-unsigned char cte_in (port_t base, unsigned char reg)
-{
- outb (base, reg);
- return inb (E1DAT (base & 0x3e0));
-}
-
-void cte_out (port_t base, unsigned char reg, unsigned char val)
-{
- outb (base, reg);
- outb (E1DAT (base & 0x3e0), val);
-}
-
-/*
- * Get the DS2153 status register, using write-read-write scheme.
- */
-unsigned char cte_ins (port_t base, unsigned char reg,
- unsigned char mask)
-{
- unsigned char val;
- port_t rw = E1DAT (base & 0x3e0);
-
- outb (base, reg); outb (rw, mask); /* lock bits */
- outb (base, reg); val = inb (rw) & mask; /* get values */
- outb (base, reg); outb (rw, val); /* unlock bits */
- return val;
-}
-
-/*
- * Access to 8530 chip on the Tau/E1 board.
- * Examples:
- * val = cte_in2 (base, AM_RSR | AM_A)
- * cte_out2 (base, AM_IMR, val)
- */
-unsigned char cte_in2 (port_t base, unsigned char reg)
-{
- outb (E1CS2(base), E1CS2_SCC | reg >> 4);
- outb (E1DAT(base), reg & 15);
- return inb (E1DAT(base));
-}
-
-void cte_out2 (port_t base, unsigned char reg, unsigned char val)
-{
- outb (E1CS2(base), E1CS2_SCC | reg >> 4);
- outb (E1DAT(base), reg & 15);
- outb (E1DAT(base), val);
-}
-
-/*
- * Read the data from the 8530 receive fifo.
- */
-unsigned char cte_in2d (ct_chan_t *c)
-{
- outb (E1CS2(c->board->port), E1CS2_SCC | E1CS2_DC |
- (c->num ? 0 : E1CS2_AB));
- return inb (E1DAT(c->board->port));
-}
-
-/*
- * Send the 8530 command.
- */
-void cte_out2c (ct_chan_t *c, unsigned char val)
-{
- outb (E1CS2(c->board->port), E1CS2_SCC | (c->num ? 0 : E1CS2_AB));
- outb (E1DAT(c->board->port), val);
-}
-
-/*
- * Write the data to the 8530 transmit fifo.
- */
-void cte_out2d (ct_chan_t *c, unsigned char val)
-{
- outb (E1CS2(c->board->port), E1CS2_SCC | E1CS2_DC |
- (c->num ? 0 : E1CS2_AB));
- outb (E1DAT(c->board->port), val);
-}
-
-/*
- * Access to LXT318 chip on the Tau/G.703 board.
- * Examples:
- * val = ctg_inx (c)
- * ctg_outx (c, val)
- */
-static void ctg_output (port_t port, unsigned char val, unsigned char v0)
-{
- int i;
-
- for (i=0; i<8; ++i) {
- unsigned char v = v0;
- if ((val >> i) & 1)
- v |= GMD0_SDI;
- outb (port, v);
- outb (port, v);
- outb (port, v);
- outb (port, v);
- outb (port, v | GMD0_SCLK);
- outb (port, v | GMD0_SCLK);
- outb (port, v | GMD0_SCLK);
- outb (port, v | GMD0_SCLK);
- }
- outb (port, v0);
-}
-
-void ctg_outx (ct_chan_t *c, unsigned char reg, unsigned char val)
-{
- port_t port = GMD0(c->board->port);
-
- outb (GMD1(c->board->port), c->board->gmd1 | GMD1_NCS0 | GMD1_NCS1);
- outb (GMD1(c->board->port), c->board->gmd1 |
- (c->num ? GMD1_NCS0 : GMD1_NCS1));
- ctg_output (port, (reg << 1) | LX_WRITE, c->board->gmd0);
- ctg_output (port, val, c->board->gmd0);
- outb (GMD1(c->board->port), c->board->gmd1 | GMD1_NCS0 | GMD1_NCS1);
-}
-
-unsigned char ctg_inx (ct_chan_t *c, unsigned char reg)
-{
- port_t port = GMD0(c->board->port);
- port_t data = GLDR(c->board->port);
- unsigned char val = 0, mask = c->num ? GLDR_C1 : GLDR_C0;
- int i;
-
- outb (GMD1(c->board->port), c->board->gmd1 | GMD1_NCS0 | GMD1_NCS1);
- outb (GMD1(c->board->port), c->board->gmd1 |
- (c->num ? GMD1_NCS0 : GMD1_NCS1));
- ctg_output (port, (reg << 1) | LX_READ, c->board->gmd0);
- for (i=0; i<8; ++i) {
- outb (port, c->board->gmd0 | GMD0_SCLK);
- if (inb (data) & mask)
- val |= 1 << i;
- outb (port, c->board->gmd0);
- }
- outb (GMD1(c->board->port), c->board->gmd1 | GMD1_NCS0 | GMD1_NCS1);
- return val;
-}
-
-/*
- * Adapter options
- */
-ct_board_opt_t ct_board_opt_dflt = {
- 0, /* board control register 2 */
- { /* DMA priority control register */
- PCR_PRIO_ROTATE,
- 0, /* all channels share the bus hold */
- 0, /* hold the bus until all transfers done */
- },
- CFG_A, /* E1/G.703 config: two independent channels */
- GCLK_INT, /* E1/G.703 chan 0 internal tx clock source */
- GCLK_INT, /* E1/G.703 chan 1 internal tx clock source */
- ~0UL << 1, /* E1 channel 0 timeslots 1..31 */
- ~0UL << 1, /* E1 channel 1 timeslots 1..31 */
- 0, /* no E1 subchannel timeslots */
-};
-
-/*
- * Mode-independent channel options
- */
-ct_chan_opt_t ct_chan_opt_dflt = {
- { /* mode register 2 */
- MD2_FDX, /* full duplex communication */
- 0, /* empty ADPLL clock rate */
- MD2_ENCOD_NRZ, /* NRZ encoding */
- },
- /* DMA mode FIFO marks */
- 15, 24, 30, /* rx ready, tx empty, tx full */
- /* port i/o mode FIFO marks */
- 15, 16, 30, /* rx ready, tx empty, tx full */
-};
-
-/*
- * Default HDLC options
- */
-ct_opt_hdlc_t ct_opt_hdlc_dflt = {
- { /* mode register 0 */
- 1, /* CRC preset to all ones (V.41) */
- 1, /* CRC-CCITT */
- 1, /* enable CRC */
- 0, /* disable automatic CTS/DCD */
- MD0_MODE_HDLC, /* HDLC mode */
- },
- { /* mode register 1 */
- MD1_ADDR_NOCHK, /* do not check address field */
- },
- CTL_IDLE_PTRN | CTL_UDRN_ABORT | CTL_RTS_INV, /* control register */
- 0, 0, /* empty sync/address registers 0,1 */
- CLK_LINE, /* receive clock source: RXC line input */
- CLK_LINE, /* transmit clock source: TXC line input */
-};
-
-/*
- * Default E1/G.703 options
- */
-ct_opt_g703_t ct_opt_g703_dflt = {
- 1, /* HDB3 enable */
- 0, /* precoder disable */
- GTEST_DIS, /* test disabled, normal operation */
- 0, /* CRC4 disable */
- 0, /* CCS signaling */
- 0, /* low gain */
- 0, /* no raw mode */
- 0, /* no PCM2 precoder compatibility */
- 2048, /* data rate 2048 kbit/sec */
-};
diff --git a/sys/dev/ctau/ctau2fw.h b/sys/dev/ctau/ctau2fw.h
deleted file mode 100644
index 6d43f9725858..000000000000
--- a/sys/dev/ctau/ctau2fw.h
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * DO NOT EDIT MANUALLY!
- * This code was generated by mkfw utility
- * from the file `ctau2.dat'
- *
- * Cronyx Id: ctau2fw.h,v 1.1 2002/06/03 10:19:39 rik Exp $
- * $FreeBSD$
- */
-long ctau2_fw_len = 98448;
-
-const char *ctau2_fw_version = "1.0";
-const char *ctau2_fw_date = "22.08.01";
-const char *ctau2_fw_copyright = "Copyright (C) 2001 Cronyx Engineering.";
-
-const unsigned char ctau2_fw_data[] = {
- 79,231,255,255,98,255,57,0,0,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,160,12,16,1,51,80,6,202,64,
- 25,0,0,83,96,10,76,129,9,50,65,6,200,0,0,25,32,3,100,128,72,148,1,
- 0,15,12,144,1,51,0,0,166,202,20,25,32,3,102,128,12,148,41,50,64,6,
- 192,4,152,48,2,101,160,12,152,1,176,248,0,0,20,192,2,80,0,0,10,64,
- 1,40,128,2,80,0,0,10,64,1,48,0,0,10,64,1,40,0,0,5,160,0,0,14,128,2,
- 0,15,18,128,2,80,0,0,5,192,0,0,40,0,0,5,160,0,0,20,128,1,80,0,0,10,
- 160,0,0,20,128,5,160,0,0,20,128,2,192,255,0,0,4,0,1,16,0,0,2,64,0,
- 0,8,0,0,2,64,0,0,8,0,60,252,0,15,1,48,0,0,2,64,0,0,8,0,1,32,0,0,8,
- 128,0,17,128,0,0,16,0,0,4,192,0,3,32,0,1,128,1,16,0,0,2,128,0,0,16,
- 0,1,16,0,0,2,64,0,0,232,252,0,0,5,8,0,0,20,160,2,84,128,10,0,0,10,
- 64,1,40,0,0,4,132,160,0,0,16,0,0,2,208,1,10,64,32,32,0,17,32,0,0,4,
- 0,0,16,16,2,14,192,1,8,0,0,7,32,4,4,128,0,1,2,64,80,0,0,40,0,0,5,168,
- 0,0,248,255,0,0,5,128,0,0,20,0,4,8,0,0,1,128,8,16,129,4,0,1,16,0,0,
- 2,0,3,68,32,0,9,64,0,6,32,0,0,4,16,0,0,152,0,0,2,64,0,0,32,1,1,32,
- 8,4,128,0,0,136,0,0,1,0,0,1,8,0,0,1,0,2,250,0,52,64,0,10,2,0,8,184,
- 251,0,74,152,255,0,74,152,255,0,74,152,255,0,53,11,0,9,152,32,0,7,
- 136,253,0,52,192,3,2,0,8,30,0,8,192,251,0,53,3,0,9,24,0,8,40,253,0,
- 53,3,0,9,24,0,8,40,253,0,1,52,1,0,70,140,249,0,2,16,0,70,136,255,0,
- 74,152,255,8,0,1,17,0,70,163,253,0,2,10,0,70,229,248,0,1,60,0,71,88,
- 252,4,0,1,16,0,70,200,251,0,1,32,2,0,70,184,255,16,0,16,208,0,27,4,
- 0,26,24,255,0,17,192,0,55,88,255,0,17,192,0,55,88,255,12,0,16,192,
- 0,55,50,249,4,0,17,40,0,26,48,18,0,25,64,248,8,0,16,48,0,27,60,0,26,
- 96,252,0,46,48,0,26,137,253,8,0,45,48,0,26,144,252,0,65,64,3,0,6,156,
- 248,0,66,3,0,6,152,252,0,66,3,0,6,152,252,8,0,65,3,0,6,163,255,0,74,
- 205,250,0,65,192,0,0,2,0,5,120,255,4,0,73,216,251,0,74,152,255,0,4,
- 208,0,68,84,254,0,4,192,0,68,16,251,0,4,192,0,68,16,251,4,0,3,192,
- 0,68,99,252,12,0,4,136,0,67,13,254,0,4,48,0,68,152,252,8,0,73,144,
- 255,0,74,152,255,0,1,180,0,46,16,0,6,32,0,15,52,251,0,1,48,32,0,70,
- 184,252,0,1,48,0,71,152,252,8,0,0,48,16,0,70,179,255,0,1,128,32,0,
- 45,192,68,0,5,128,49,0,14,245,249,0,1,60,0,46,240,0,6,224,1,0,14,168,
- 253,4,0,0,16,32,0,45,192,0,6,128,1,0,14,104,254,0,1,32,0,46,192,0,
- 6,128,1,0,14,8,249,0,1,132,16,0,7,1,0,4,16,0,35,8,0,18,140,250,0,74,
- 152,255,0,74,152,255,4,0,1,66,0,70,139,250,12,0,0,48,64,0,7,140,16,
- 0,4,136,0,34,96,4,0,17,189,254,0,1,60,0,8,15,0,4,48,0,35,120,64,0,
- 17,232,248,8,0,0,32,8,0,7,12,0,4,192,128,0,34,96,0,18,120,255,0,1,
- 128,0,8,12,0,4,192,2,0,34,96,0,18,248,255,0,1,4,0,3,90,16,0,0,8,0,
- 6,16,0,37,13,0,11,1,32,0,2,192,255,0,6,24,0,48,12,0,16,72,250,0,2,
- 16,0,2,16,0,9,192,0,37,12,0,16,16,250,8,0,0,128,0,3,88,8,0,8,192,0,
- 37,12,0,16,234,252,0,1,128,8,0,2,24,8,0,0,96,66,0,6,136,0,36,64,4,
- 0,10,140,129,1,0,1,136,253,0,1,60,0,3,30,0,1,120,0,6,48,0,37,3,0,11,
- 15,224,129,0,1,168,255,4,0,0,48,0,3,24,16,0,0,96,0,7,128,0,49,12,128,
- 1,0,1,41,250,0,1,48,66,0,2,152,0,1,96,0,7,2,0,49,12,128,1,0,1,24,254,
- 16,0,73,204,251,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,
- 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,
- 0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,
- 0,4,0,0,152,255,0,74,152,255,44,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,
- 0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,
- 4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,
- 8,0,0,1,32,0,0,4,0,0,227,248,4,0,73,141,254,40,0,0,4,128,0,0,16,0,
- 0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,
- 4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,
- 0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,144,255,0,74,152,255,40,0,0,4,128,
- 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,
- 1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,
- 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,144,255,0,74,152,255,
- 0,74,152,255,0,2,32,0,70,184,255,0,74,152,255,0,74,152,255,8,0,4,2,
- 0,3,8,0,62,48,253,0,20,16,0,3,4,0,19,16,0,5,128,0,18,128,192,254,0,
- 16,2,0,29,128,0,10,8,0,13,48,255,0,15,128,0,3,8,0,3,4,0,19,8,128,0,
- 5,1,0,3,4,0,13,137,251,0,2,8,0,6,8,0,4,16,0,3,1,0,37,4,0,2,34,0,0,
- 5,0,6,48,252,0,2,8,0,16,64,0,44,1,0,6,208,254,0,10,64,0,48,32,0,11,
- 128,48,249,0,7,2,0,65,184,255,0,74,152,255,0,6,4,0,66,152,251,0,1,
- 16,0,71,152,254,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,
- 0,74,152,255,0,74,152,255,0,69,1,0,3,152,254,0,74,152,255,0,1,64,0,
- 71,220,255,0,74,152,255,0,74,152,255,0,74,152,255,0,1,32,0,54,32,0,
- 15,184,255,0,6,16,0,38,8,0,26,8,254,0,1,16,0,52,32,0,17,152,252,0,
- 2,8,0,61,32,0,7,244,251,0,2,4,0,14,16,0,54,200,250,0,2,64,0,70,216,
- 255,0,74,152,255,2,0,52,128,0,19,26,255,2,0,3,2,0,50,1,0,2,8,0,13,
- 252,2,0,4,32,4,0,5,32,0,38,2,0,10,128,0,6,128,146,251,0,1,160,0,1,
- 2,128,2,0,3,40,0,1,1,0,31,6,0,3,64,0,1,12,2,0,2,16,0,3,64,0,7,88,255,
- 0,1,40,0,3,10,0,0,130,80,0,0,12,0,0,1,32,0,1,16,0,4,16,0,0,1,0,22,
- 128,32,0,2,144,0,0,128,8,0,1,1,0,5,144,0,1,128,0,2,176,253,0,6,8,0,
- 1,2,0,0,8,0,10,64,0,25,32,0,18,128,0,2,240,253,0,1,16,0,4,128,0,0,
- 16,0,0,2,64,0,0,8,0,9,4,0,22,32,0,23,40,251,0,6,64,0,66,216,251,0,
- 12,8,0,60,16,255,0,74,152,255,4,0,55,4,0,16,137,254,8,0,73,178,253,
- 0,49,64,0,20,2,0,1,184,249,0,74,152,255,0,67,1,0,4,128,0,0,255,0,74,
- 152,255,0,1,192,0,15,2,0,54,16,249,0,74,152,255,0,74,152,255,0,44,
- 32,0,14,128,0,12,176,255,0,74,152,255,0,45,128,0,14,6,0,11,240,255,
- 0,44,128,5,0,14,6,0,11,120,250,0,61,6,4,0,10,184,251,0,44,96,128,0,
- 13,128,7,0,11,136,255,0,61,6,0,11,248,255,0,45,4,1,0,13,70,2,0,10,
- 200,253,0,25,160,1,0,16,32,0,21,8,0,5,228,248,0,25,128,1,0,47,254,
- 0,44,128,129,0,27,16,254,8,0,44,4,0,27,163,248,0,67,96,34,0,4,205,
- 254,0,25,96,0,0,1,0,15,96,128,0,20,120,0,5,112,255,4,0,66,96,0,5,216,
- 253,0,26,144,0,17,4,1,0,19,96,0,5,24,253,16,0,8,104,68,0,5,208,0,55,
- 240,253,0,9,96,0,6,192,0,55,56,249,0,9,64,0,6,192,0,55,24,251,12,0,
- 8,96,33,0,5,192,0,55,66,253,4,0,8,96,4,0,6,72,0,54,48,249,8,0,8,120,
- 64,0,5,48,0,55,88,252,0,9,96,64,0,62,233,252,8,0,8,96,2,0,62,208,249,
- 16,0,0,52,0,6,104,68,0,8,64,35,4,0,36,128,194,0,11,224,251,0,1,48,
- 0,6,96,0,63,248,250,0,1,48,0,6,64,0,50,2,0,11,248,248,12,0,0,48,0,
- 6,96,33,0,9,32,4,0,37,64,4,0,10,162,252,4,0,1,33,0,5,96,4,0,9,32,0,
- 38,32,4,0,10,168,248,8,0,0,12,0,6,120,64,0,8,192,3,2,0,36,128,5,0,
- 11,16,255,0,9,96,64,0,49,6,0,11,137,252,8,0,8,96,2,0,9,10,1,0,37,38,
- 1,0,10,56,248,16,0,19,64,35,4,0,36,128,0,12,228,250,0,74,152,255,0,
- 62,4,0,10,216,251,12,0,20,32,4,0,37,22,0,11,227,251,4,0,20,32,0,38,
- 70,2,0,10,169,254,0,20,192,3,2,0,36,128,7,0,11,102,250,0,61,6,0,11,
- 248,255,16,0,20,10,1,0,37,6,8,0,10,120,253,16,0,6,64,3,0,1,1,0,34,
- 128,0,3,64,0,6,128,0,12,32,253,0,8,3,0,64,168,252,0,8,3,0,1,12,0,49,
- 2,0,10,192,250,12,0,7,3,0,1,128,8,0,34,64,8,0,2,35,4,0,5,16,0,11,26,
- 248,4,0,7,32,2,0,0,12,0,35,32,2,0,2,16,1,0,5,32,0,11,160,252,8,0,6,
- 192,0,2,15,4,0,33,128,7,0,2,192,0,6,128,1,4,0,10,48,255,0,8,3,0,1,
- 12,4,0,60,241,253,8,0,7,83,0,1,12,0,35,32,8,0,2,16,4,0,5,6,8,0,10,
- 96,254,0,24,1,32,0,25,64,0,3,32,0,0,4,128,34,16,0,10,132,248,0,25,
- 128,1,0,34,4,0,10,64,250,0,25,128,1,0,25,3,0,6,2,1,0,11,252,4,0,24,
- 128,5,2,0,24,32,4,0,5,64,0,11,19,255,12,0,23,44,128,1,0,25,16,1,0,
- 1,128,49,48,1,16,200,16,0,9,17,254,0,24,15,232,1,1,0,23,192,0,3,224,
- 1,60,144,5,240,0,10,94,255,8,0,23,12,128,1,0,29,128,1,48,0,0,6,192,
- 0,10,8,250,0,24,12,128,145,0,25,16,4,0,1,128,1,48,0,0,38,193,0,10,
- 144,253,0,6,2,0,3,1,0,1,4,0,9,160,48,0,16,32,0,0,4,0,3,2,64,3,8,0,
- 3,4,128,38,0,2,64,0,2,1,32,0,0,4,0,0,192,254,0,26,1,0,25,3,0,7,2,0,
- 10,152,255,0,26,129,0,17,128,0,6,3,0,6,6,1,0,10,64,252,8,0,25,17,0,
- 17,4,0,6,3,0,0,132,0,4,16,0,11,74,250,0,6,24,1,0,2,76,0,1,176,0,10,
- 5,1,0,17,48,2,0,2,24,16,136,96,34,0,2,48,34,66,0,3,35,4,0,0,76,144,
- 17,48,64,168,249,0,6,30,8,0,2,15,8,0,0,60,32,0,8,224,0,17,96,128,60,
- 32,0,2,30,192,0,0,24,0,3,60,128,7,4,0,1,192,3,0,1,15,224,129,60,0,
- 0,8,250,4,0,5,24,0,3,12,0,1,48,0,9,128,64,0,16,128,129,48,0,3,24,0,
- 6,48,0,0,6,4,0,2,3,0,1,12,128,1,48,0,0,193,253,0,6,24,0,3,12,0,1,48,
- 0,9,128,0,19,48,0,3,24,0,2,130,0,2,48,0,0,38,0,3,3,0,1,12,128,1,48,
- 0,0,176,255,16,0,73,204,251,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,
- 1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,
- 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,
- 0,0,1,32,0,0,4,0,0,152,255,0,74,152,255,44,0,0,4,128,0,0,16,0,0,2,
- 64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,
- 15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,
- 0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,227,248,4,0,73,201,250,32,0,0,4,128,
- 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,
- 1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,
- 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,254,249,4,0,73,216,251,
- 32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,
- 64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,
- 0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,152,255,
- 0,6,32,0,66,184,253,0,74,152,255,0,74,152,255,12,0,48,8,0,3,4,128,
- 0,5,4,0,10,152,251,0,73,32,152,253,0,62,16,0,3,2,0,5,168,255,2,0,10,
- 4,0,2,128,0,3,16,0,3,36,0,19,8,8,0,7,2,0,12,2,0,2,40,249,0,3,4,0,11,
- 2,0,7,8,0,29,8,0,9,8,0,5,176,251,0,0,3,0,0,134,0,4,6,0,1,2,0,2,128,
- 1,0,2,8,0,3,76,0,1,8,0,16,8,24,0,7,3,0,9,8,0,1,4,0,3,249,0,0,3,0,2,
- 128,0,0,16,0,3,160,3,0,2,16,0,2,64,1,0,5,1,0,16,68,1,0,8,128,0,2,2,
- 16,1,0,4,64,0,3,216,254,0,12,2,0,7,1,0,34,64,0,2,2,0,10,128,52,252,
- 142,0,3,128,0,0,16,0,4,8,0,59,128,232,248,0,71,2,0,1,184,253,0,74,
- 152,255,0,10,32,0,13,32,0,22,4,0,3,2,64,0,17,216,249,0,21,2,0,51,152,
- 253,0,61,4,0,11,216,255,0,74,152,255,0,12,2,0,30,128,0,28,24,253,0,
- 73,128,50,253,0,27,2,0,45,152,253,0,74,152,255,0,57,32,0,0,32,0,13,
- 152,253,0,10,1,0,62,136,255,0,74,220,251,0,70,16,0,1,128,16,254,0,
- 22,1,0,23,16,0,25,152,255,0,45,64,0,27,216,251,0,61,128,1,0,11,254,
- 16,0,8,64,0,11,2,0,2,128,0,46,74,249,0,26,1,0,33,2,0,11,168,254,0,
- 25,2,0,32,128,0,6,32,0,5,56,253,0,73,128,16,255,0,7,64,0,2,16,0,32,
- 2,0,14,1,0,11,152,249,0,61,16,0,11,152,254,0,11,2,0,31,64,0,28,248,
- 253,0,1,8,32,0,0,2,0,3,64,0,10,128,0,23,8,16,0,3,64,0,0,16,0,1,64,
- 0,2,1,0,10,16,128,251,18,0,2,128,0,46,8,0,0,2,0,4,8,0,1,4,0,9,128,
- 234,249,0,1,8,16,0,0,6,0,3,16,0,11,1,0,0,4,0,20,24,16,0,2,2,192,0,
- 0,16,0,0,132,193,0,0,20,0,0,3,4,0,8,160,16,224,254,0,1,32,0,3,2,0,
- 0,64,5,0,0,5,85,2,0,1,4,0,1,16,0,1,64,16,0,0,128,0,19,132,0,0,128,
- 128,0,0,82,128,0,2,32,0,1,20,0,0,18,0,0,40,0,0,66,0,2,2,64,2,128,0,
- 1,252,0,11,8,0,10,64,0,0,128,0,32,8,0,0,2,0,0,32,0,9,80,253,0,1,32,
- 0,5,128,0,2,2,0,2,1,0,1,4,0,1,16,0,25,33,0,0,4,0,12,2,0,7,120,250,
- 0,10,1,0,62,136,255,2,0,16,32,0,54,128,16,253,0,60,128,0,12,144,255,
- 8,0,73,178,253,8,0,73,144,255,0,2,4,0,11,8,0,57,80,251,0,74,152,255,
- 2,0,73,184,253,0,62,10,0,10,176,253,0,8,8,0,12,4,0,1,128,0,21,2,0,
- 3,1,32,0,5,128,0,11,224,254,0,26,32,0,23,64,0,21,248,251,0,74,152,
- 255,160,1,0,15,192,136,146,0,3,13,0,48,88,250,0,1,1,0,17,4,0,2,12,
- 0,48,64,255,0,17,240,0,1,4,0,2,15,0,48,160,252,128,1,1,0,14,16,2,1,
- 1,0,2,13,0,48,144,248,128,8,0,18,4,0,2,128,2,0,47,248,251,96,1,1,0,
- 14,224,0,0,6,0,3,2,0,48,104,252,0,0,65,0,18,4,0,52,152,254,128,8,0,
- 15,192,0,5,1,0,48,80,254,0,17,208,68,18,1,0,35,160,49,0,14,68,250,
- 0,19,8,4,0,52,88,251,0,18,64,14,0,36,128,1,0,14,32,251,8,0,16,192,
- 0,0,18,0,37,128,0,14,203,253,0,17,64,8,16,0,36,128,0,15,73,255,0,17,
- 176,64,8,0,36,224,1,1,0,13,230,250,4,0,16,128,0,0,8,0,36,128,1,0,14,
- 192,251,0,17,64,36,16,0,36,128,41,0,14,96,250,16,0,3,192,4,0,10,192,
- 4,2,0,4,128,17,1,0,27,13,0,16,112,254,0,5,64,0,11,64,0,36,12,0,16,
- 208,255,0,4,240,64,0,10,240,0,0,22,0,4,224,129,0,28,12,0,16,144,250,
- 12,0,3,16,4,0,10,16,2,11,0,4,32,0,29,12,0,16,90,248,4,0,18,12,0,35,
- 128,1,0,15,152,250,8,0,3,224,0,11,224,0,0,16,0,4,192,1,0,28,3,0,16,
- 80,254,0,17,16,0,0,16,0,53,153,255,8,0,3,192,0,11,192,0,0,8,0,4,128,
- 1,0,46,192,250,176,80,0,17,2,0,33,8,0,18,208,250,0,0,1,0,72,152,254,
- 0,0,1,0,17,22,0,53,248,255,12,9,1,0,16,10,0,53,202,248,4,9,2,0,16,
- 12,0,33,96,1,0,17,192,252,224,0,18,16,0,33,120,64,0,17,128,253,132,
- 128,0,17,16,0,33,96,0,18,33,253,128,8,0,17,8,0,33,96,0,18,112,249,
- 16,0,16,16,66,2,0,53,188,253,0,74,152,255,0,17,48,32,22,0,53,232,252,
- 12,0,16,16,0,0,10,0,53,83,248,4,0,18,12,0,53,9,250,8,0,16,176,64,16,
- 0,53,66,248,0,17,192,32,16,0,53,120,252,8,0,16,208,8,8,0,53,106,253,
- 0,14,4,0,1,192,136,2,0,1,8,0,0,1,0,26,64,0,20,56,254,0,74,152,255,
- 0,17,240,0,0,22,0,1,96,64,0,49,72,248,4,0,14,4,0,0,16,8,11,0,2,2,0,
- 49,242,255,12,0,14,18,0,2,12,0,2,2,64,8,0,26,19,4,0,18,192,249,0,14,
- 12,0,1,224,0,0,16,0,1,120,32,3,0,26,192,3,0,19,40,249,8,0,13,48,0,
- 3,16,0,3,12,8,0,26,3,0,19,137,248,0,14,128,32,0,0,192,0,0,8,0,1,96,
- 10,76,0,27,3,0,19,168,250,128,17,1,0,12,128,0,0,16,34,2,0,3,13,0,38,
- 2,0,8,168,250,0,24,12,0,48,16,251,224,129,0,15,128,128,22,0,3,3,0,
- 48,152,252,44,4,0,16,4,10,0,3,1,0,48,65,251,4,0,15,22,0,0,8,12,0,4,
- 2,0,37,152,16,0,7,251,248,192,1,0,13,128,7,50,128,16,0,3,3,0,38,30,
- 0,8,216,255,4,0,15,6,0,1,16,0,43,24,0,8,26,249,128,1,0,14,6,0,0,130,
- 8,0,3,32,4,0,37,24,0,8,16,255,128,17,1,0,9,160,1,0,2,16,0,0,18,64,
- 0,2,1,0,18,32,0,14,128,0,0,16,0,1,64,0,7,40,253,0,12,128,1,0,4,8,0,
- 54,255,224,1,0,10,128,1,0,3,128,22,0,3,15,0,48,128,248,36,0,0,2,0,
- 9,128,1,0,3,2,10,0,3,13,0,48,202,254,12,0,12,4,0,4,12,0,0,35,2,0,0,
- 12,2,0,17,128,137,0,14,22,194,2,0,1,35,2,0,5,120,255,192,1,0,10,96,
- 128,0,2,240,64,16,192,3,0,1,14,0,18,224,1,0,13,128,7,240,64,0,0,192,
- 3,0,6,160,254,8,0,11,128,1,0,3,32,8,0,0,3,0,1,13,2,0,17,128,1,0,14,
- 6,192,0,2,3,0,6,177,248,128,1,0,10,128,9,1,0,2,8,16,0,0,3,0,1,13,0,
- 18,128,1,0,14,6,192,0,2,3,0,6,176,250,16,0,23,32,2,0,47,204,249,32,
- 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,1,128,2,64,0,
- 0,8,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,
- 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,128,254,0,25,4,
- 0,47,216,255,44,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,
- 0,2,3,64,0,0,8,0,0,32,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,
- 0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,195,
- 251,4,8,0,17,1,2,0,3,2,8,0,46,29,252,0,0,128,4,128,0,1,64,2,64,0,0,
- 8,0,0,1,32,0,0,4,128,0,2,2,64,0,0,8,0,0,1,0,0,128,4,0,15,32,0,0,4,
- 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,
- 0,0,1,32,0,0,4,0,0,96,252,4,0,0,1,0,15,128,0,0,8,0,3,4,0,47,136,251,
- 32,16,4,128,0,1,132,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,8,64,64,0,
- 0,8,0,0,32,32,8,5,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,
- 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,200,253,0,74,152,
- 255,0,1,2,0,71,184,255,0,0,64,0,2,32,0,8,4,0,1,64,1,0,54,216,252,0,
- 0,128,1,0,12,8,0,57,8,255,0,4,128,0,11,128,0,55,144,255,8,0,73,144,
- 255,0,0,1,16,4,0,1,64,0,1,2,0,7,2,0,1,64,0,5,4,32,0,30,8,0,12,80,253,
- 0,3,2,0,11,2,0,7,2,0,18,128,0,0,32,0,5,32,0,18,144,255,68,0,0,8,144,
- 20,0,0,64,0,0,128,6,0,4,96,128,20,2,20,0,0,128,96,0,1,64,9,5,8,16,
- 0,16,1,32,12,0,4,8,0,4,16,0,5,192,0,5,104,249,0,1,208,0,0,16,0,11,
- 16,0,0,32,2,4,165,0,31,32,1,0,3,1,0,7,8,0,3,208,248,2,0,0,16,0,15,
- 32,0,0,4,129,0,31,32,0,18,180,253,0,69,8,0,2,128,220,251,0,74,152,
- 255,0,19,1,0,33,4,0,18,136,251,0,74,152,255,0,13,128,0,3,32,0,54,48,
- 253,2,0,17,16,0,3,1,32,0,31,32,0,14,128,48,253,2,0,72,128,48,253,128,
- 0,60,2,0,11,56,255,20,0,73,234,249,0,18,2,1,0,53,136,253,2,0,73,184,
- 253,0,0,1,0,16,128,0,6,1,0,45,128,76,251,0,5,1,0,11,64,0,54,200,250,
- 0,74,152,255,0,74,152,255,0,74,152,255,0,13,1,0,9,8,1,0,31,128,0,14,
- 152,255,0,74,152,255,0,44,128,0,28,24,255,0,74,152,255,0,16,4,0,0,
- 1,0,5,64,0,35,128,0,1,2,0,7,120,248,2,0,17,64,8,0,3,4,0,47,128,240,
- 253,0,17,32,128,0,2,8,0,50,48,255,0,74,152,255,0,0,4,0,12,8,0,2,2,
- 0,6,4,0,29,32,0,15,240,255,40,0,0,8,0,1,2,0,3,64,0,1,8,0,0,8,16,0,
- 2,2,0,0,128,0,41,4,0,7,128,32,250,10,0,21,64,0,20,64,0,0,4,0,11,8,
- 0,12,128,48,249,64,0,0,8,0,1,2,0,3,16,0,1,4,0,0,8,16,2,0,1,4,0,1,9,
- 0,20,32,3,4,0,11,4,0,0,192,128,2,84,0,8,232,255,32,0,0,16,0,1,128,
- 0,5,4,129,0,1,40,10,0,1,34,0,0,18,0,0,64,9,0,0,1,0,16,128,0,8,2,0,
- 4,8,0,0,80,2,0,0,128,0,7,64,248,0,1,32,0,8,8,128,0,1,8,2,0,26,128,
- 0,14,32,0,0,32,0,10,176,255,0,4,32,0,6,8,0,6,128,0,2,4,64,0,47,144,
- 253,0,56,1,0,16,136,254,0,21,8,0,43,8,0,6,152,255,2,0,57,2,0,13,128,
- 16,253,0,74,152,255,0,73,128,16,255,0,74,152,255,0,74,152,255,8,0,
- 73,144,255,64,128,0,20,64,0,50,208,251,0,0,32,0,3,64,0,10,64,16,2,
- 0,5,128,0,27,16,0,17,8,253,0,74,152,255,0,74,152,255,0,15,128,32,4,
- 0,6,160,81,0,46,24,250,0,26,1,0,46,136,254,0,16,6,0,7,224,0,47,112,
- 249,0,16,70,2,0,6,32,5,1,0,45,136,255,0,16,38,2,0,6,128,1,0,46,64,
- 254,0,15,128,3,0,7,192,1,1,0,45,56,251,0,16,6,0,7,128,1,0,46,96,254,
- 0,16,166,0,7,128,17,1,0,45,248,253,0,14,52,0,6,8,0,3,4,0,35,2,0,8,
- 12,251,0,14,48,0,58,168,255,0,22,24,0,3,48,0,45,40,253,8,0,21,8,0,
- 3,48,0,45,19,255,0,14,48,10,0,5,96,33,0,3,32,0,34,24,3,0,7,245,255,
- 0,14,60,0,6,120,0,3,12,0,35,30,0,8,8,249,4,0,13,48,16,0,5,96,0,4,8,
- 0,34,24,0,8,248,253,0,14,48,1,0,5,96,0,40,24,0,8,40,249,16,0,24,32,
- 0,19,176,16,0,7,44,4,0,0,4,0,13,56,250,0,25,128,1,0,47,254,0,25,96,
- 64,0,18,60,32,0,7,15,0,16,64,253,12,0,24,32,16,0,18,4,2,0,7,33,8,0,
- 1,33,0,12,26,251,20,0,24,128,9,2,0,31,64,0,12,24,252,0,25,224,1,0,
- 18,56,0,8,14,0,1,12,0,13,160,249,0,74,137,254,0,26,40,0,18,48,0,8,
- 12,0,1,176,64,0,12,8,252,0,14,48,34,0,40,32,0,15,168,253,0,57,128,
- 1,0,14,128,255,0,14,60,0,42,128,0,14,104,251,8,0,13,4,32,0,41,16,0,
- 14,225,249,0,59,1,0,13,187,253,0,14,56,0,41,96,0,15,192,249,4,0,73,
- 250,249,0,14,48,0,43,1,0,13,184,254,0,4,192,66,0,2,96,33,0,2,48,34,
- 0,5,104,68,0,0,160,16,0,46,8,253,0,22,64,0,3,1,0,45,152,250,0,4,240,
- 128,0,2,120,32,0,2,60,0,6,96,32,0,0,224,0,47,184,249,8,0,3,16,2,0,
- 2,8,2,0,2,4,34,0,5,96,4,0,0,32,72,0,46,97,249,0,22,96,2,0,0,128,5,
- 0,46,83,253,0,4,224,0,3,112,0,3,56,0,6,120,64,0,0,192,129,0,46,128,
- 252,4,0,21,96,0,50,250,255,0,4,192,0,3,96,0,3,48,0,6,96,36,0,1,17,
- 2,0,45,32,252,0,12,160,1,4,0,6,104,0,0,77,40,144,0,24,64,0,2,1,0,12,
- 32,0,2,168,251,0,12,128,1,48,0,6,96,0,50,176,249,0,12,224,1,0,0,8,
- 0,6,64,12,224,1,0,25,3,0,17,1,0,0,8,248,12,0,11,160,1,0,0,2,0,6,4,
- 132,176,145,0,25,3,0,15,128,5,0,1,81,254,4,0,12,68,48,8,0,6,2,8,132,
- 69,0,25,3,0,1,140,0,13,48,0,1,171,252,0,12,96,0,0,60,0,6,120,32,15,
- 224,0,25,192,3,1,0,0,15,8,0,11,96,0,2,104,252,4,0,13,48,0,8,8,128,
- 1,0,28,12,0,12,128,129,0,1,138,253,0,14,48,16,0,6,128,76,132,73,0,
- 26,4,0,0,12,0,12,128,5,0,1,240,250,16,0,0,4,0,1,192,2,0,7,4,1,0,5,
- 104,1,0,0,32,144,4,0,25,96,33,0,2,4,0,8,13,0,3,220,252,0,5,128,0,8,
- 8,0,6,32,0,44,12,0,3,56,251,0,4,240,0,8,48,0,6,96,0,30,120,0,13,12,
- 0,3,80,253,12,0,3,16,2,1,0,6,48,16,0,5,32,10,0,1,144,0,26,8,64,0,3,
- 33,0,7,12,0,3,123,248,4,0,0,48,32,0,11,33,0,5,64,18,0,0,128,137,48,
- 2,0,30,64,0,7,140,16,0,2,57,255,0,1,60,0,1,224,0,8,12,0,6,120,0,1,
- 224,0,0,60,16,0,24,112,0,3,12,0,8,15,0,3,152,253,4,0,0,48,0,11,32,
- 8,0,5,64,0,2,64,0,31,48,0,13,17,253,0,1,48,0,1,192,0,8,128,0,6,96,
- 34,0,1,4,0,0,33,0,24,96,0,3,128,64,0,7,64,4,0,2,96,252,32,0,3,16,0,
- 8,52,0,3,2,64,0,0,8,0,1,160,1,4,0,19,32,210,0,5,1,32,0,0,52,0,13,120,
- 253,0,14,48,0,9,128,1,0,20,6,0,9,48,0,14,248,128,1,1,0,1,192,128,0,
- 12,6,0,1,96,0,1,128,129,48,0,18,128,1,0,8,128,48,0,13,112,255,132,
- 17,0,2,192,8,0,12,2,0,1,96,33,0,0,128,1,48,18,0,17,128,6,4,132,0,5,
- 128,17,48,0,13,90,250,140,1,0,2,192,0,8,176,0,3,24,1,32,96,18,0,1,
- 68,48,2,0,18,6,0,1,1,0,3,44,0,1,1,10,0,12,8,255,96,128,0,2,48,64,0,
- 7,60,16,0,2,28,208,0,0,25,0,1,224,1,12,8,0,18,1,48,0,5,15,104,0,0,
- 12,0,13,16,253,136,1,0,2,192,0,8,48,0,3,24,0,0,3,98,0,1,128,1,48,0,
- 19,6,0,6,12,0,16,249,255,128,17,2,0,1,192,8,1,0,6,176,32,0,2,24,0,
- 0,35,96,10,0,0,128,73,48,5,0,20,2,1,0,3,12,0,1,1,0,13,120,248,16,0,
- 73,204,251,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,
- 0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,
- 64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,
- 0,152,255,0,74,152,255,44,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,
- 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,
- 0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,
- 32,0,0,4,0,0,227,248,20,0,4,128,0,3,65,0,3,6,0,3,1,0,4,8,1,0,17,128,
- 32,16,4,0,4,65,32,8,0,15,17,253,40,0,0,4,128,0,2,2,64,0,2,1,0,2,128,
- 0,0,16,0,0,2,72,0,2,1,0,1,4,0,15,32,0,3,16,0,0,2,64,0,3,32,0,0,4,128,
- 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,168,251,0,5,128,0,3,64,0,
- 3,16,0,3,8,0,1,16,0,1,128,0,19,16,0,0,2,0,4,32,0,0,4,0,15,177,253,
- 32,0,0,4,128,0,1,8,2,64,0,1,4,1,32,136,4,128,0,0,16,0,0,64,64,0,0,
- 8,1,1,0,0,4,4,0,15,32,0,3,16,0,0,2,64,0,3,32,0,0,4,128,0,0,16,0,0,
- 2,64,0,0,8,0,0,1,32,0,0,4,0,0,120,252,0,4,64,0,3,32,0,4,8,4,0,8,1,
- 32,0,17,16,0,6,32,0,0,4,0,12,128,0,2,168,253,0,22,96,0,33,2,0,15,152,
- 251,0,1,128,0,3,1,0,1,16,0,3,4,0,11,128,0,45,72,251,0,0,2,0,20,128,
- 0,0,16,0,21,4,0,1,64,0,8,16,0,12,16,249,0,22,64,0,50,152,251,0,48,
- 2,0,24,152,253,0,0,1,0,0,4,0,3,64,0,5,32,0,6,2,0,1,8,64,0,18,16,0,
- 8,4,0,8,128,0,6,20,255,0,17,1,128,0,5,130,0,20,32,0,18,64,0,3,32,0,
- 0,40,248,64,0,1,16,0,1,24,0,0,128,0,0,192,0,3,8,0,0,160,4,128,0,2,
- 1,0,0,64,45,168,0,17,48,168,32,0,7,42,0,1,160,0,6,9,0,3,4,0,0,208,
- 252,0,15,8,0,2,8,0,3,64,0,1,16,8,0,16,32,0,9,32,0,7,16,0,1,4,0,0,1,
- 0,1,96,254,0,15,8,0,2,2,0,6,32,8,0,39,8,0,3,9,252,8,0,45,4,0,23,1,
- 0,1,132,250,0,15,16,0,32,2,0,4,32,0,0,4,0,15,168,248,0,74,152,255,
- 0,14,64,0,4,8,0,0,32,0,2,128,0,23,1,0,7,64,0,12,16,248,0,25,32,0,47,
- 152,253,0,5,2,0,3,8,0,35,4,128,0,5,8,0,0,1,0,11,32,32,0,1,208,250,
- 0,69,16,0,3,136,254,0,74,152,255,6,0,53,2,0,18,248,251,0,5,16,0,67,
- 136,255,0,13,2,0,59,184,255,8,0,13,8,0,10,64,0,46,216,255,0,14,32,
- 0,7,64,0,45,8,0,2,120,255,0,74,152,255,0,74,152,255,0,74,152,255,0,
- 26,33,0,46,168,254,0,74,152,255,0,27,2,0,45,152,253,0,27,64,0,29,4,
- 0,14,152,251,0,0,32,0,3,16,0,3,8,0,2,8,0,0,128,0,5,8,0,0,65,0,1,16,
- 0,16,8,0,0,1,0,4,16,0,0,2,128,0,15,8,250,16,0,18,40,0,0,4,0,0,16,2,
- 128,0,47,178,249,0,5,1,0,67,136,254,0,74,152,255,0,14,128,0,7,1,0,
- 49,8,254,8,0,0,4,160,0,10,4,8,0,4,1,0,2,128,0,1,8,0,14,32,0,8,32,0,
- 6,4,0,9,128,60,248,26,0,21,16,0,22,4,0,26,194,254,128,0,0,8,16,163,
- 0,9,104,21,0,3,128,0,0,40,0,1,64,5,0,0,21,0,14,64,0,0,4,0,6,80,1,0,
- 2,160,0,1,2,0,3,64,1,0,3,5,88,250,0,0,5,16,0,0,48,16,0,4,16,18,2,64,
- 8,5,0,4,9,8,0,0,4,136,4,4,1,0,18,2,32,0,2,128,0,0,164,2,64,2,128,0,
- 7,1,0,3,1,72,249,0,1,32,0,7,64,0,0,8,64,0,6,1,0,1,1,128,0,21,2,0,3,
- 128,0,19,24,255,128,0,14,32,0,57,56,253,0,64,2,0,8,184,255,2,0,72,
- 128,48,253,16,0,73,204,251,0,1,2,0,3,1,0,7,8,0,5,8,0,1,16,64,4,0,24,
- 4,0,19,176,255,0,74,220,251,0,15,128,0,57,144,255,0,74,152,255,10,
- 0,73,176,253,0,50,128,0,6,128,0,0,32,0,12,176,253,0,5,32,0,8,4,2,0,
- 3,64,0,2,128,128,0,45,128,88,255,0,74,152,255,0,74,152,255,0,19,2,
- 0,43,2,0,8,152,255,0,64,24,0,8,24,254,0,19,30,0,44,16,0,7,104,254,
- 0,19,26,0,43,152,0,8,48,255,0,19,24,1,0,42,88,16,0,7,152,250,0,19,
- 28,8,0,42,6,0,8,48,254,0,19,24,0,43,24,8,0,7,144,255,0,19,152,4,0,
- 42,24,0,8,80,251,0,14,52,0,58,232,251,0,14,48,0,58,168,255,0,14,48,
- 16,0,57,184,254,8,0,13,48,2,0,57,177,252,0,15,18,0,57,187,255,0,14,
- 60,0,58,224,251,4,0,13,48,32,0,57,234,251,0,14,48,2,0,57,168,253,16,
- 0,73,136,255,0,74,152,255,0,74,152,255,12,0,73,242,249,20,0,73,200,
- 251,8,0,73,144,255,0,74,137,254,0,74,152,255,0,64,26,0,8,124,250,0,
- 64,24,0,8,24,254,0,64,24,16,0,7,8,254,8,0,63,152,0,8,171,253,0,64,
- 88,16,0,7,25,251,0,64,30,0,8,120,254,4,0,63,24,8,0,7,65,251,0,74,152,
- 255,0,1,52,17,0,42,4,0,26,220,249,0,1,32,0,71,152,253,0,1,48,0,43,
- 48,0,26,152,255,4,0,0,176,64,0,42,128,32,0,25,139,251,12,0,0,128,32,
- 0,43,2,0,25,73,248,0,1,60,0,43,12,32,0,25,184,252,8,0,0,48,16,0,70,
- 145,253,0,1,48,0,44,17,0,25,152,253,0,9,8,0,6,208,0,2,16,0,23,4,0,
- 11,4,0,13,208,250,0,17,192,0,2,3,1,0,50,72,252,0,10,32,0,5,192,0,1,
- 192,0,38,32,0,12,184,255,8,0,9,2,0,5,192,0,1,64,35,4,0,22,128,32,0,
- 11,1,0,12,203,252,0,10,4,0,5,192,16,0,1,3,0,24,2,0,11,1,0,12,57,255,
- 0,9,24,32,0,5,240,0,1,128,0,24,12,32,0,10,12,32,0,12,248,250,4,0,20,
- 3,0,36,48,32,0,12,217,251,0,9,96,10,0,6,8,1,0,25,48,17,0,11,2,0,12,
- 192,249,16,0,1,128,0,13,16,0,3,104,32,0,49,184,249,0,22,96,0,50,152,
- 249,0,4,4,0,11,240,0,3,64,0,50,40,251,12,0,16,208,0,3,96,33,0,49,3,
- 255,4,0,2,70,2,0,12,16,0,2,96,2,0,49,153,253,0,2,128,1,0,12,32,0,3,
- 120,32,0,49,152,249,4,0,3,2,0,12,64,0,2,96,64,0,49,233,248,0,3,16,
- 0,13,4,0,2,96,2,0,49,168,254,176,1,4,128,0,0,16,0,0,2,0,4,32,0,1,128,
- 0,0,208,0,5,13,32,0,0,4,0,22,2,64,3,0,1,13,0,1,52,0,4,64,0,7,192,248,
- 128,1,0,15,192,0,5,12,0,27,3,1,0,0,12,4,0,0,48,16,0,12,8,249,128,1,
- 0,4,24,0,4,128,1,0,3,32,0,4,12,0,27,2,0,1,8,0,1,32,0,13,56,251,140,
- 17,2,0,3,24,0,4,128,1,0,2,192,0,5,12,0,27,11,1,0,0,44,4,0,0,176,16,
- 0,12,122,255,132,17,176,32,22,194,8,24,0,5,32,0,1,70,194,16,0,4,64,
- 0,0,136,48,1,0,21,152,8,99,0,1,140,1,0,0,48,6,0,4,35,1,0,5,56,248,
- 224,129,60,128,7,240,128,30,8,0,3,96,0,1,128,7,240,0,5,3,100,0,0,60,
- 32,0,21,30,192,3,0,1,15,0,1,60,0,4,192,3,0,6,208,252,132,1,48,0,0,
- 6,192,0,7,128,0,1,6,192,64,0,5,128,129,48,0,22,24,0,0,3,2,0,0,12,8,
- 0,0,48,32,0,4,3,0,6,249,249,0,0,40,48,0,0,6,192,0,0,64,16,0,4,8,0,
- 1,6,192,4,0,5,128,9,48,0,22,24,0,0,19,0,1,76,0,1,48,1,0,4,3,0,6,248,
- 251,0,74,152,255,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,
- 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,
- 0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,
- 0,4,0,0,152,255,0,74,152,255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,
- 0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,
- 4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,
- 8,0,0,1,32,0,0,4,0,0,129,254,0,18,34,0,0,8,0,52,131,252,32,0,0,4,128,
- 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,3,9,0,0,1,32,0,0,
- 4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,
- 0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,232,255,4,0,17,64,0,0,8,0,0,2,0,
- 50,146,253,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,
- 1,2,66,0,0,32,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,
- 0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,232,
- 251,0,74,152,255,0,74,152,255,0,74,152,255,0,14,16,0,58,136,255,0,
- 21,2,0,51,152,253,0,74,152,255,0,5,64,0,2,16,0,3,4,0,9,8,128,0,19,
- 128,0,17,1,0,5,128,145,250,0,25,4,0,18,128,0,0,32,4,0,17,8,0,5,112,
- 251,0,5,64,0,2,16,0,3,104,0,4,4,0,3,12,128,0,18,1,160,1,0,15,128,0,
- 0,8,0,5,16,251,0,15,8,0,33,16,16,2,0,3,128,0,7,13,0,1,8,0,3,56,251,
- 10,0,14,8,0,40,64,0,7,1,0,6,120,248,8,0,49,128,16,16,0,15,8,0,2,128,
- 17,254,0,2,4,0,70,216,251,0,3,16,0,17,4,0,50,200,254,0,9,16,0,1,64,
- 0,3,32,0,55,232,250,0,1,2,0,12,4,0,2,1,0,32,4,0,1,16,0,1,64,0,13,184,
- 255,2,0,4,64,0,15,64,0,23,16,0,3,64,0,2,1,0,1,4,0,12,128,48,248,4,
- 0,73,201,250,0,74,152,255,0,74,152,255,0,74,152,255,0,6,32,0,66,184,
- 253,8,0,21,16,0,50,144,254,0,21,4,0,51,152,251,0,3,2,0,59,64,0,8,152,
- 249,32,0,8,8,0,1,32,0,3,16,0,56,253,0,74,152,255,0,47,8,0,11,4,0,12,
- 144,251,0,19,4,0,3,8,64,0,33,8,0,3,2,0,7,248,249,0,22,64,0,29,2,0,
- 1,8,0,1,32,0,13,144,249,0,23,1,0,28,8,0,1,32,0,1,128,0,13,2,252,0,
- 74,152,255,0,0,2,0,7,128,0,6,64,0,0,40,0,53,80,255,0,7,4,0,5,8,0,30,
- 64,0,16,4,0,8,144,251,4,0,1,64,0,70,152,251,8,0,50,8,0,21,24,255,64,
- 0,7,1,0,4,8,16,0,8,64,0,1,16,0,16,4,16,0,8,1,0,15,196,255,8,0,3,32,
- 0,21,8,0,18,8,0,25,118,251,64,0,0,16,8,2,16,0,1,128,0,0,192,0,3,24,
- 16,0,0,64,0,3,32,0,1,64,0,0,4,16,0,16,8,48,0,4,6,0,2,4,0,15,136,249,
- 128,0,0,164,128,0,0,16,0,2,8,0,0,160,0,2,128,128,8,128,2,0,1,128,144,
- 0,0,4,0,0,1,4,0,18,4,0,0,128,0,0,4,64,0,0,136,0,1,32,2,0,0,80,0,2,
- 36,0,8,144,253,32,0,20,128,0,1,1,0,48,176,254,0,1,32,0,14,32,0,6,128,
- 0,20,8,0,0,128,0,23,176,253,0,74,152,255,0,74,152,255,8,0,73,178,253,
- 0,74,152,255,0,73,128,16,255,0,16,1,0,47,128,0,7,8,255,0,74,220,251,
- 0,1,8,0,0,1,0,69,24,254,0,28,8,0,44,24,255,0,1,16,0,18,64,0,2,128,
- 0,47,80,250,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,
- 74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74,
- 152,255,0,14,4,0,58,216,251,0,74,152,255,0,74,152,255,8,0,73,129,254,
- 0,14,48,34,0,57,187,252,0,14,60,0,58,224,251,4,0,13,48,0,58,202,249,
- 0,14,48,0,58,168,255,16,0,71,4,0,0,136,251,0,74,152,255,0,73,32,152,
- 253,12,0,71,176,0,0,202,250,4,0,71,48,1,248,248,16,0,71,60,8,176,248,
- 0,72,48,0,0,185,253,0,72,48,18,136,253,0,19,26,0,51,4,0,0,56,250,0,
- 19,24,0,52,16,24,255,0,74,152,255,8,0,71,128,16,137,255,0,19,64,8,
- 0,51,17,179,249,0,19,6,0,51,60,0,0,64,248,4,0,19,16,0,50,32,0,0,202,
- 251,0,20,1,0,50,16,33,136,253,0,24,41,0,46,52,0,1,251,0,25,8,0,45,
- 32,32,56,255,0,24,8,0,46,48,0,0,32,252,4,0,23,128,4,0,45,32,64,146,
- 255,12,0,71,16,2,224,250,0,24,7,8,0,45,60,32,160,253,8,0,23,12,4,0,
- 47,73,250,0,24,140,0,46,16,65,24,254,0,27,4,0,30,4,0,11,4,33,200,249,
- 0,74,152,255,0,72,32,8,56,253,4,0,71,16,2,202,248,12,0,26,48,0,30,
- 48,0,12,17,192,249,0,27,60,16,0,29,60,16,0,10,60,0,0,240,251,8,0,26,
- 48,0,30,48,0,11,32,0,0,161,255,0,27,48,0,30,48,0,11,48,18,136,254,
- 0,7,64,0,2,1,0,6,2,0,31,64,8,1,0,16,148,8,56,250,0,19,24,0,53,24,254,
- 0,19,24,0,51,16,32,8,253,4,0,18,152,8,0,31,11,1,0,17,1,225,249,12,
- 0,7,99,0,1,140,4,0,5,88,8,0,31,17,1,0,16,128,64,251,250,0,7,192,3,
- 0,1,15,0,6,30,0,31,192,2,0,17,44,0,0,184,254,8,0,7,3,0,1,12,0,6,24,
- 16,0,31,3,2,0,16,48,0,0,90,249,0,8,3,0,1,12,0,6,24,1,0,31,34,0,17,
- 48,66,96,253,0,1,4,128,0,0,16,0,0,2,64,0,11,64,0,24,4,128,0,0,16,0,
- 11,16,0,1,64,0,0,8,0,0,5,8,0,0,20,32,152,251,0,74,152,255,0,69,4,0,
- 1,16,0,0,136,250,8,0,68,32,8,0,0,128,8,154,255,0,1,48,2,70,200,72,
- 24,2,19,0,11,19,1,0,22,176,16,38,200,64,0,10,192,0,2,19,96,33,128,
- 0,2,16,56,255,0,1,60,160,7,240,0,0,30,192,3,1,0,9,192,3,0,23,60,128,
- 7,240,0,11,240,64,0,0,192,3,122,0,0,11,4,0,0,44,0,0,232,248,4,0,0,
- 48,0,0,6,192,0,0,24,0,0,3,0,11,3,0,23,48,0,0,6,192,0,11,192,0,2,3,
- 96,0,0,12,0,1,48,0,0,25,249,0,1,48,0,0,6,192,0,0,24,0,0,3,0,11,3,0,
- 23,48,0,0,6,192,0,11,192,0,2,3,96,0,0,140,16,0,0,48,66,96,249,0,74,
- 220,251,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,
- 16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,
- 0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,
- 152,255,0,74,152,255,36,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,
- 0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,
- 16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,
- 0,0,4,0,0,235,248,12,0,73,193,250,32,0,0,4,128,0,0,16,0,0,2,64,0,0,
- 8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,
- 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,
- 0,0,8,0,0,1,32,0,0,4,0,0,186,253,8,0,73,212,251,32,0,0,4,128,0,0,16,
- 0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,
- 0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,
- 16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,152,255,0,74,152,255,0,24,4,0,
- 46,48,0,0,168,248,0,74,152,255,0,74,152,255,0,24,8,0,46,32,0,0,48,
- 253,0,53,1,0,19,136,254,0,2,128,0,41,128,0,0,128,0,25,144,255,0,47,
- 32,0,25,184,255,0,3,1,0,16,10,0,4,96,0,16,128,0,0,32,1,0,24,88,251,
- 0,0,1,0,6,2,0,3,32,0,0,8,0,4,8,0,23,32,0,2,16,0,7,32,0,1,64,0,10,200,
- 252,0,15,8,0,45,16,0,10,85,250,8,1,0,6,2,0,4,1,0,30,4,0,2,128,0,7,
- 32,0,13,64,253,0,8,2,0,36,16,0,26,184,252,0,14,128,0,58,24,255,0,74,
- 152,255,0,19,32,0,51,64,16,216,248,0,67,32,0,5,152,253,0,74,152,255,
- 0,74,152,255,0,74,152,255,0,74,152,255,0,70,16,0,1,64,152,250,8,0,
- 65,128,0,6,152,255,0,74,152,255,0,73,4,216,255,0,74,152,255,0,74,152,
- 255,0,53,64,0,19,216,255,0,49,32,0,22,32,152,255,0,20,2,0,27,8,0,2,
- 2,0,18,164,208,253,0,2,16,0,15,8,0,32,1,0,19,24,254,0,11,2,0,12,2,
- 0,36,1,0,9,152,252,0,69,16,0,3,136,254,0,74,152,255,0,7,64,0,65,152,
- 251,0,74,152,255,10,0,45,4,0,5,2,0,0,32,2,0,16,240,255,0,17,32,0,6,
- 2,0,21,1,0,19,2,64,0,0,8,128,152,248,0,0,3,0,2,128,2,80,0,0,10,32,
- 0,0,128,1,0,3,16,0,0,80,0,4,8,0,19,8,128,0,0,64,0,1,128,10,0,0,32,
- 2,0,11,1,32,0,0,164,0,0,208,252,64,2,32,0,0,9,0,0,2,72,64,8,0,0,1,
- 0,8,64,0,2,8,0,0,144,34,0,17,16,128,8,0,0,2,0,0,2,1,32,0,4,208,8,0,
- 1,34,0,1,72,8,1,32,2,0,1,176,254,0,6,4,0,38,16,0,4,128,0,0,16,0,19,
- 251,0,1,8,0,21,2,0,1,8,0,23,2,0,13,16,8,0,4,184,252,0,74,152,255,2,
- 0,20,1,0,36,64,0,12,128,112,252,0,72,8,80,16,250,2,0,24,4,0,46,128,
- 112,253,26,0,72,128,10,255,0,4,32,0,68,152,253,0,74,152,255,0,4,4,
- 0,64,2,0,2,248,255,0,69,32,0,1,128,0,0,176,253,0,74,152,255,0,74,152,
- 255,0,6,2,0,19,64,0,45,216,249,32,4,16,128,20,64,0,0,8,0,0,1,32,1,
- 4,0,40,128,0,0,17,36,32,0,0,4,128,0,0,16,0,0,18,0,0,1,96,1,36,128,
- 4,132,0,0,152,254,0,0,1,32,0,0,128,128,0,0,16,0,0,2,64,0,0,8,0,40,
- 2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,240,2,10,64,11,40,0,0,5,160,0,0,
- 48,248,0,0,2,64,0,0,64,0,0,1,32,0,0,4,128,0,0,16,0,61,176,250,0,53,
- 4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,0,0,1,4,128,4,16,0,0,2,64,0,0,136,
- 252,0,0,20,128,2,56,0,0,10,64,1,40,0,0,5,160,0,0,45,160,2,84,128,10,
- 80,1,42,64,5,168,0,0,21,160,2,0,15,21,160,2,84,128,10,208,2,40,0,0,
- 5,160,0,0,20,128,2,80,0,0,10,192,0,0,40,0,0,3,160,0,0,20,128,2,224,
- 255,192,12,148,1,34,99,6,204,64,25,40,3,101,160,225,52,129,38,224,
- 4,154,64,19,112,2,77,160,9,56,1,0,14,192,9,56,1,39,208,4,26,86,25,
- 40,3,102,192,12,148,1,51,80,6,204,148,25,40,83,102,192,12,152,1,88,
- 249,255,255,};
diff --git a/sys/dev/ctau/ctaue1fw.h b/sys/dev/ctau/ctaue1fw.h
deleted file mode 100644
index cb3311cd1d66..000000000000
--- a/sys/dev/ctau/ctaue1fw.h
+++ /dev/null
@@ -1,2066 +0,0 @@
-/*
- * DO NOT EDIT MANUALLY!
- * This code was generated by mkfw utility
- * from the file `ctaue1.dat'
- *
- * Cronyx Id: ctaue1fw.h,v 1.1 2002/06/03 10:19:39 rik Exp $
- * $FreeBSD$
- */
-long ctaue1_fw_len = 323982;
-
-const char *ctaue1_fw_version = "1.1";
-const char *ctaue1_fw_date = "10.08.00";
-const char *ctaue1_fw_copyright = "Copyright (C) 2000 Cronyx Engineering.";
-
-const cr_dat_tst_t ctaue1_fw_tvec[] = {
- {130534,132958}, {134206,136630}, {137878,140302}, {141550,143974},
- {145222,147646}, {148894,151318}, {152566,154990}, {156238,158662},
- {159910,162334}, {163582,166006}, {167254,169678}, {170926,173350},
- {174598,177022}, {178270,180694}, {181942,184366}, {185614,188038},
- {189286,191710}, {192958,195382}, {196630,199054}, {200302,202726},
- {203974,206398}, {207646,210070}, {211318,213742}, {214990,217414},
- {218662,221086}, {222334,224758}, {226006,228430}, {229678,232102},
- {233350,235774}, {237022,239446}, {240694,243118}, {244366,246790},
- {248038,250462}, {251710,254134}, {255382,257806}, {259054,261478},
- {262726,265150}, {266398,268822}, {270070,272494}, {273742,276166},
- {277414,279838}, {281086,283510}, {284758,287182}, {288430,290854},
- {292102,294526}, {295774,298198}, {299446,301870}, {303118,305542},
- {306790,309214}, {310462,312886}, {314134,316558}, {317806,320230},
- {321478,323902}, {323982,323982},
-};
-
-const unsigned char ctaue1_fw_data[] = {
- 155,153,97,52,81,185,113,37,97,100,100,36,117,53,32,117,48,101,96,
- 49,112,48,49,49,113,112,49,48,49,97,117,37,112,112,96,112,53,112,33,
- 52,100,100,100,116,52,37,100,100,52,112,117,33,52,48,52,36,37,116,
- 32,49,49,49,117,53,33,49,49,37,37,37,37,49,48,100,100,116,112,96,100,
- 100,100,100,101,96,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,36,49,48,49,49,49,113,112,112,96,48,52,52,112,33,100,
- 100,100,52,112,117,49,49,49,33,52,112,33,48,52,33,116,117,117,100,
- 100,100,112,53,33,49,49,37,49,49,101,49,36,52,53,49,49,49,49,49,49,
- 116,36,96,36,100,100,100,52,52,52,52,112,113,48,37,49,37,49,49,49,
- 36,33,36,49,49,37,53,49,36,37,116,112,96,100,33,53,49,49,49,116,101,
- 96,100,100,97,97,97,33,53,96,96,112,112,112,48,49,49,100,52,117,48,
- 49,113,112,112,52,112,112,101,48,52,52,52,100,100,100,52,113,101,100,
- 100,112,100,48,52,52,112,113,36,37,37,37,49,49,97,52,33,37,49,49,37,
- 37,37,37,37,36,112,96,97,97,97,100,100,100,117,101,96,100,100,97,97,
- 97,97,33,53,52,112,112,112,48,49,49,113,113,96,100,100,36,112,112,
- 112,49,52,53,53,49,113,33,100,100,100,116,101,230,102,36,49,48,49,
- 113,96,117,37,96,53,100,49,112,36,52,100,100,100,52,112,116,100,100,
- 112,117,33,52,52,48,52,36,116,32,37,49,49,49,37,53,33,49,49,49,116,
- 117,32,37,36,37,97,33,53,96,100,100,100,33,113,96,100,100,97,97,97,
- 97,100,32,49,49,53,52,48,49,49,49,113,49,48,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,49,117,117,49,49,100,36,52,52,52,48,36,37,37,
- 116,32,49,49,49,37,53,33,49,49,37,37,37,116,32,36,101,32,117,117,53,
- 49,49,49,112,101,100,100,100,97,100,100,113,36,53,101,101,100,100,
- 100,100,100,36,36,113,33,37,49,49,37,37,37,37,37,116,116,96,97,100,
- 97,100,100,36,53,100,96,100,100,100,32,96,97,33,53,52,48,113,96,101,
- 100,100,36,52,112,48,49,113,112,112,112,96,117,37,37,52,52,52,100,
- 100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,
- 37,53,33,49,49,101,49,33,37,37,96,52,97,97,97,97,100,100,48,53,100,
- 96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,116,32,48,
- 49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,101,16,177,177,97,
- 36,100,100,52,112,117,33,112,49,113,48,52,33,37,49,49,49,37,53,33,
- 49,49,116,117,32,37,37,36,117,33,53,96,97,100,100,100,97,101,96,100,
- 100,33,117,53,96,33,53,32,112,96,37,48,49,49,113,100,53,49,49,113,
- 112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,48,33,
- 49,113,49,33,37,37,37,116,97,97,33,53,96,100,100,100,97,101,96,100,
- 100,97,97,33,53,32,53,112,117,117,117,101,100,100,36,52,112,48,49,
- 113,48,49,113,52,97,101,113,49,49,49,49,49,49,97,96,116,48,100,100,
- 100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,36,97,100,100,36,112,
- 49,97,112,96,101,52,100,52,112,49,49,49,33,112,117,49,49,33,52,52,
- 52,112,117,97,33,37,37,37,49,49,97,36,49,97,100,100,32,37,101,33,37,
- 36,37,97,97,97,97,100,100,100,117,101,96,100,100,113,100,96,97,33,
- 48,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,
- 32,37,52,52,52,100,100,100,52,37,49,100,100,52,52,52,52,52,48,100,
- 36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,97,100,100,100,37,76,68,100,53,53,49,49,37,116,117,32,116,97,52,
- 33,101,96,97,100,100,100,49,49,97,100,36,117,53,96,97,33,97,97,96,
- 37,112,48,49,49,113,96,113,49,49,113,96,117,37,112,96,112,48,52,112,
- 33,100,100,100,52,116,36,100,100,52,52,100,52,100,96,48,49,113,97,
- 33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,33,33,48,49,49,49,49,96,97,33,97,112,112,96,37,48,49,49,113,96,
- 113,49,49,113,112,112,96,37,96,112,36,112,117,117,49,49,49,33,116,
- 36,100,100,52,100,100,52,101,48,52,117,100,100,100,100,100,100,32,
- 96,36,49,48,49,49,113,112,112,112,96,101,37,52,100,52,100,100,100,
- 112,97,36,100,100,100,116,53,52,52,112,97,33,49,37,116,100,100,100,
- 32,53,33,49,49,49,37,37,37,116,117,112,96,97,97,97,100,100,48,53,100,
- 96,100,100,97,97,113,96,97,53,97,112,112,112,48,49,49,113,52,112,48,
- 49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,113,117,33,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 37,37,36,37,97,97,97,97,100,100,100,33,48,49,49,49,49,96,97,101,112,
- 116,48,49,49,112,48,49,49,113,32,110,108,100,101,96,100,100,33,117,
- 53,32,53,49,101,96,49,112,48,49,49,113,96,48,100,100,116,117,37,112,
- 112,96,112,48,112,33,52,100,100,100,52,116,36,100,100,52,112,117,33,
- 52,48,116,37,37,116,32,49,49,49,117,36,117,100,100,32,37,37,37,49,
- 48,100,100,100,113,96,100,100,100,100,101,96,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,36,49,48,49,53,49,112,112,
- 112,96,53,52,52,112,33,100,100,100,52,116,36,100,100,52,52,52,112,
- 33,48,116,116,117,117,117,100,100,100,32,53,33,49,49,37,49,49,101,
- 49,116,32,53,49,49,49,49,49,49,52,112,96,36,100,100,100,52,52,52,52,
- 112,113,33,37,49,37,49,49,49,100,36,32,49,49,37,53,49,36,37,116,112,
- 96,100,33,53,49,49,49,112,32,48,49,49,96,97,97,33,117,53,52,112,112,
- 112,48,49,49,100,48,116,101,100,36,112,112,52,112,96,112,48,52,52,
- 52,100,100,100,52,97,100,100,100,32,37,36,52,52,112,113,36,37,37,37,
- 49,49,97,116,48,33,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,
- 100,49,32,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,49,52,53,100,100,36,52,100,100,100,116,
- 33,179,51,101,100,48,49,113,96,117,37,96,53,100,49,112,36,52,100,100,
- 100,52,116,36,100,100,112,33,52,52,52,48,52,36,116,32,37,49,49,49,
- 101,100,36,49,49,37,116,117,32,37,36,37,97,33,53,96,100,100,100,97,
- 101,96,100,100,97,97,97,97,36,36,49,49,117,53,48,49,49,49,113,49,48,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,117,96,100,100,100,
- 100,52,52,52,48,36,37,37,116,32,49,49,49,101,100,36,49,49,37,37,37,
- 116,32,36,101,32,117,117,53,49,49,49,112,48,97,100,100,97,100,100,
- 113,36,96,101,101,100,100,100,100,100,36,116,113,53,49,49,49,37,37,
- 37,37,37,116,116,101,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 101,97,97,97,53,48,113,96,101,100,100,36,112,49,48,49,113,48,113,112,
- 96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,
- 116,49,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,
- 97,97,97,100,100,112,48,49,97,100,116,96,97,97,97,33,97,97,112,112,
- 112,48,49,49,113,112,49,48,49,49,113,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,112,96,100,100,52,100,52,116,36,101,37,49,49,33,37,
- 49,49,49,101,21,177,177,37,37,49,49,33,112,117,33,112,37,113,36,52,
- 33,37,49,49,49,37,53,33,49,49,116,100,100,100,32,36,37,33,53,96,97,
- 100,100,100,113,48,97,100,100,97,33,53,49,32,97,97,112,96,37,48,49,
- 49,113,97,117,48,49,113,112,112,112,48,33,97,100,100,32,36,100,100,
- 100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,113,116,100,100,53,33,37,37,37,36,97,97,33,53,96,100,
- 100,100,49,113,101,100,100,97,97,97,97,33,97,49,96,117,117,101,100,
- 100,36,100,33,49,49,113,48,49,113,52,33,32,116,49,49,49,49,49,49,97,
- 116,112,116,97,100,100,97,97,97,97,97,97,48,112,48,113,48,49,49,97,
- 112,96,100,100,36,112,49,97,112,112,112,37,100,52,112,49,49,49,33,
- 49,32,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,97,36,48,33,49,
- 49,49,37,101,33,37,36,37,97,97,97,97,100,100,100,33,37,97,100,36,101,
- 100,96,100,33,53,101,112,112,112,48,49,49,100,113,49,49,49,97,37,112,
- 112,112,96,32,37,52,52,52,100,100,100,116,52,48,49,49,33,52,52,52,
- 52,48,116,37,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,
- 100,100,96,97,100,100,100,101,77,68,100,48,33,49,49,37,37,116,32,116,
- 97,52,33,101,96,97,100,100,100,49,33,48,49,113,117,53,96,97,33,97,
- 97,96,37,112,48,49,49,113,112,49,48,49,113,96,117,37,112,96,112,48,
- 52,112,33,100,100,100,52,116,36,100,100,52,52,52,52,100,96,48,49,113,
- 100,33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,100,96,100,116,100,96,97,97,33,97,112,112,96,37,48,49,49,
- 113,112,49,48,49,113,112,112,96,37,96,112,36,112,117,33,100,100,100,
- 52,116,36,100,100,52,100,100,52,101,112,113,116,100,100,100,100,100,
- 100,32,37,113,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,
- 100,100,112,97,36,100,100,52,52,116,48,52,112,97,33,49,37,116,100,
- 100,100,32,53,33,49,49,37,37,49,37,116,117,112,96,97,97,97,100,100,
- 48,101,97,48,49,49,96,97,113,96,33,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,113,97,
- 36,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,49,37,37,37,48,37,97,97,97,97,100,100,100,49,33,48,49,49,96,97,
- 100,101,112,116,48,49,49,112,48,49,49,113,112,58,57,49,100,96,100,
- 100,97,36,53,32,117,48,37,97,49,112,48,49,49,113,112,49,48,49,97,37,
- 112,112,112,96,112,48,112,33,52,100,100,100,52,116,36,100,100,52,100,
- 100,52,52,112,53,36,37,116,32,49,49,49,53,101,116,100,100,32,37,37,
- 37,49,48,100,100,116,112,96,100,100,100,100,101,96,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,36,49,48,49,49,100,
- 37,112,112,96,53,52,52,112,33,100,100,100,52,116,36,100,100,52,52,
- 52,100,52,48,96,101,100,100,117,100,100,100,112,53,33,49,49,37,49,
- 49,101,49,116,52,53,49,49,49,49,49,49,116,33,100,36,49,49,33,52,52,
- 52,52,52,36,33,37,49,37,49,49,49,52,33,37,49,49,37,53,49,36,37,116,
- 32,96,100,33,53,49,49,49,32,37,100,100,100,97,97,97,33,117,53,52,112,
- 112,112,48,49,49,100,49,112,48,49,113,112,112,52,112,96,37,37,52,52,
- 100,100,100,100,52,116,36,100,100,112,52,113,33,100,112,113,48,49,
- 37,37,49,49,113,97,48,49,49,113,36,37,37,37,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,
- 113,52,112,48,49,113,112,112,48,49,113,48,96,100,100,52,100,100,100,
- 116,53,230,102,96,32,100,100,36,96,117,37,96,53,100,49,112,36,52,100,
- 100,100,52,112,96,100,100,112,37,49,33,52,48,52,36,116,32,37,49,49,
- 49,101,36,96,100,100,32,116,117,32,37,36,112,96,33,53,96,100,100,100,
- 97,101,96,100,100,97,97,97,97,36,36,49,49,97,49,48,49,49,49,113,49,
- 48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,36,32,49,49,100,
- 36,52,52,52,48,36,37,37,116,32,49,49,49,101,36,96,100,100,32,37,37,
- 116,32,116,101,32,117,117,53,49,49,49,48,53,48,49,49,96,100,100,116,
- 36,53,101,101,100,100,100,100,100,36,100,48,53,33,49,49,37,37,37,37,
- 37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,
- 33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,48,97,117,
- 37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,
- 37,37,37,49,49,49,37,116,32,49,49,116,32,116,32,37,116,52,97,97,97,
- 97,100,100,96,53,100,96,100,116,96,97,97,97,33,97,97,112,112,112,48,
- 49,49,113,36,113,48,49,113,112,112,48,113,96,112,48,52,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,
- 101,4,177,177,97,36,100,100,52,52,112,33,112,37,113,36,52,33,37,49,
- 49,49,117,112,96,100,100,117,117,32,37,37,36,37,33,53,96,97,100,100,
- 100,97,101,96,100,100,97,97,97,97,33,117,97,112,96,37,48,49,49,113,
- 52,32,100,100,36,112,112,112,48,33,97,100,100,37,37,100,100,100,100,
- 116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,36,49,48,49,113,116,116,32,37,37,36,97,97,33,53,96,100,100,100,
- 97,101,96,100,100,97,97,97,97,33,33,52,112,112,96,101,100,100,36,112,
- 49,48,49,113,48,49,49,53,97,101,113,49,49,49,49,49,49,97,48,96,112,
- 53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,
- 112,49,97,112,96,37,37,100,52,112,49,49,49,97,113,116,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,
- 37,116,112,96,97,97,100,100,100,100,97,101,96,100,36,101,100,96,97,
- 36,53,37,49,113,112,48,49,49,100,100,49,48,49,53,112,112,112,112,96,
- 112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,
- 36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,49,37,33,100,100,100,
- 97,100,100,100,37,73,68,100,53,48,49,49,37,96,117,32,116,97,52,36,
- 101,96,97,100,100,100,97,101,96,100,36,117,48,96,97,33,97,97,96,37,
- 112,48,49,49,113,96,33,49,49,113,32,52,36,112,96,32,37,52,112,33,100,
- 100,100,52,116,36,100,100,52,52,52,52,100,96,48,49,113,100,33,49,49,
- 49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,100,
- 96,100,116,100,96,97,97,33,97,112,112,96,37,48,49,49,113,96,33,49,
- 49,113,112,112,32,36,96,117,116,32,37,117,49,49,49,33,112,116,100,
- 100,52,100,100,52,101,112,113,116,100,100,100,100,100,100,32,116,36,
- 49,48,49,113,112,112,112,112,112,48,36,52,100,52,100,100,100,112,117,
- 33,100,100,52,116,100,48,52,112,33,32,49,37,116,100,100,100,32,53,
- 33,49,49,37,37,37,37,116,117,112,96,100,97,97,100,100,112,113,53,96,
- 100,100,97,97,113,96,33,97,97,112,112,112,48,49,49,113,52,48,49,49,
- 97,113,100,37,112,96,101,49,52,52,52,100,100,100,37,116,36,100,100,
- 117,52,52,52,52,48,52,36,37,37,37,49,49,49,101,36,49,49,49,37,37,37,
- 37,49,36,37,97,97,97,97,100,100,100,33,53,96,100,100,97,97,97,48,101,
- 116,48,49,49,112,48,49,49,113,96,111,108,48,36,49,49,49,32,117,53,
- 32,117,48,101,96,49,112,48,49,49,113,100,33,49,49,97,117,37,112,112,
- 32,33,37,112,33,52,100,100,100,116,36,37,100,100,52,112,117,33,52,
- 48,52,36,37,116,32,49,49,49,101,97,48,49,49,37,37,37,37,49,48,100,
- 100,116,112,96,100,100,100,100,101,96,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,116,32,48,49,117,52,112,112,112,
- 96,48,52,52,112,33,100,100,100,116,116,117,100,100,52,52,52,32,33,
- 48,52,33,116,117,117,100,100,100,32,53,33,49,49,37,49,49,113,49,116,
- 52,53,49,49,49,49,49,49,101,117,96,36,100,100,52,52,52,52,52,112,113,
- 33,37,49,49,49,49,49,36,117,32,49,49,37,53,49,36,37,116,112,96,100,
- 36,53,49,49,49,113,33,96,100,100,97,97,97,33,117,53,52,48,113,112,
- 48,49,49,116,36,49,48,49,113,112,112,52,112,96,32,37,52,52,52,100,
- 100,100,52,37,52,100,100,112,49,117,33,100,112,113,48,49,37,37,49,
- 49,97,100,113,37,49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,100,
- 97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,112,
- 49,48,49,113,112,112,112,48,113,48,96,100,100,52,100,100,100,116,113,
- 179,51,113,49,48,49,113,32,116,37,96,53,100,49,112,36,52,100,100,100,
- 52,116,36,100,100,112,117,33,52,52,48,52,36,116,32,37,49,49,49,37,
- 53,33,49,49,37,96,117,32,37,36,37,97,33,53,96,100,100,100,97,101,96,
- 100,100,97,97,97,97,36,36,49,49,117,53,48,49,49,49,113,49,48,49,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,36,100,100,101,36,52,
- 52,52,48,36,37,37,116,32,49,49,49,37,53,33,49,49,37,37,37,116,32,36,
- 101,32,117,117,53,49,49,49,48,33,48,49,49,96,100,100,113,36,53,101,
- 101,100,100,100,100,100,36,52,112,37,97,100,100,32,37,37,37,37,116,
- 116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,
- 48,113,112,48,49,49,113,112,49,48,49,113,112,112,112,96,53,100,49,
- 52,52,52,100,100,36,113,36,100,100,100,52,52,52,37,52,112,53,36,37,
- 37,49,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,
- 100,48,48,100,96,100,116,96,97,97,97,97,53,117,112,112,112,48,49,49,
- 113,52,52,48,49,113,112,112,112,112,96,112,96,52,52,52,100,100,100,
- 52,37,100,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,101,
- 1,177,241,96,36,100,100,52,112,117,33,112,37,49,37,116,117,32,49,49,
- 49,101,33,37,49,49,116,117,32,37,37,36,37,33,53,96,97,100,100,100,
- 97,101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,117,
- 49,48,49,113,112,112,112,48,33,97,100,100,37,112,49,49,49,49,97,36,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 48,33,49,113,33,49,37,37,37,36,97,97,33,53,96,100,100,100,49,96,48,
- 49,49,96,97,33,53,113,97,49,96,117,117,101,100,100,36,112,49,48,49,
- 113,48,49,113,52,97,101,113,49,49,49,49,49,49,113,113,37,100,96,100,
- 100,97,97,97,97,33,48,53,112,48,113,48,49,49,97,32,49,48,49,113,112,
- 49,97,112,96,37,37,100,100,100,100,100,100,36,113,36,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,
- 37,116,112,96,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,
- 36,53,101,112,112,112,48,49,49,100,48,49,100,100,48,112,112,112,112,
- 112,101,53,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,36,97,100,100,
- 96,97,100,100,100,101,72,68,36,113,116,100,100,32,116,117,32,116,97,
- 52,33,37,97,97,100,100,100,97,101,96,100,36,117,53,96,97,33,33,52,
- 96,37,112,48,49,49,113,96,116,100,100,36,96,37,112,112,96,112,48,52,
- 112,33,100,100,100,52,101,113,49,49,33,52,52,52,100,96,48,49,113,97,
- 36,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,33,49,97,100,116,100,96,97,97,33,97,112,112,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,96,37,96,112,36,112,117,117,49,49,49,33,112,
- 96,100,100,52,100,100,100,101,112,113,116,100,100,100,100,100,100,
- 32,33,112,36,100,100,36,112,112,112,112,96,101,112,33,100,52,100,100,
- 100,112,32,33,49,49,33,116,100,48,52,112,97,33,49,37,116,100,100,100,
- 32,53,33,49,49,37,37,37,37,96,117,112,49,96,100,97,100,100,36,37,97,
- 100,100,100,97,97,113,96,33,97,97,112,112,48,49,49,49,113,52,100,48,
- 49,97,49,49,112,112,96,101,97,100,52,52,100,100,36,113,97,36,100,100,
- 37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,52,53,49,49,37,37,37,
- 37,37,36,37,97,100,97,97,100,100,100,113,48,97,100,100,97,97,97,101,
- 112,116,48,49,49,112,48,49,49,113,48,106,108,32,100,96,100,100,33,
- 53,96,97,33,48,101,112,96,37,48,49,49,113,100,112,48,49,97,117,37,
- 112,112,96,112,48,112,33,52,100,100,100,116,100,48,100,100,52,112,
- 117,33,52,48,52,36,37,116,32,49,49,49,117,53,33,49,49,37,37,37,37,
- 49,48,100,100,116,32,53,49,49,49,49,100,96,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,37,112,49,49,53,113,113,112,
- 112,96,48,52,52,112,33,100,100,100,52,37,117,100,100,52,52,52,112,
- 33,48,52,36,116,117,117,100,100,100,48,113,37,49,49,37,49,49,37,53,
- 116,52,53,49,49,49,49,49,49,116,96,96,36,100,100,52,52,52,52,52,112,
- 113,33,37,49,37,49,49,49,101,53,49,49,49,37,53,49,36,37,116,112,96,
- 100,36,53,49,49,49,48,117,100,100,100,97,97,97,33,117,53,116,36,48,
- 113,48,49,49,97,37,49,48,49,113,112,112,52,112,96,32,37,52,52,52,100,
- 100,100,52,116,36,100,100,112,100,36,52,52,112,113,36,49,37,37,49,
- 49,97,36,97,117,100,36,33,37,37,37,37,117,36,97,97,97,97,100,100,100,
- 97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,36,
- 49,49,49,113,112,112,112,49,100,53,100,100,36,52,100,100,100,116,37,
- 178,51,33,32,49,49,113,96,53,36,32,52,100,49,32,116,52,100,100,100,
- 52,116,36,100,100,112,117,33,52,52,48,96,33,116,32,37,49,49,49,37,
- 53,33,49,49,37,116,97,32,37,36,37,97,33,53,96,100,100,100,33,32,100,
- 100,100,97,97,97,97,36,36,49,49,53,116,49,49,49,49,113,49,48,49,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,36,100,100,101,36,52,
- 52,52,48,36,37,37,116,32,49,49,49,37,53,33,49,49,37,37,37,116,32,36,
- 101,32,117,53,96,100,100,100,97,101,96,100,100,97,100,100,113,113,
- 52,101,101,100,100,100,100,100,36,36,32,113,116,100,100,32,37,37,37,
- 37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,
- 33,53,52,48,113,32,100,100,100,36,112,49,48,49,113,112,112,112,96,
- 53,100,49,52,52,52,100,100,36,113,36,49,100,100,52,52,52,37,52,112,
- 53,36,37,37,37,49,49,49,101,48,37,49,49,52,49,33,37,37,116,52,100,
- 97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,97,117,112,112,
- 112,48,49,49,113,32,116,101,100,36,112,112,112,112,96,112,48,52,100,
- 52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,
- 49,49,49,101,0,228,228,112,37,49,49,33,112,117,33,112,37,113,36,52,
- 33,37,49,49,49,37,53,33,49,49,116,117,32,37,37,36,49,33,53,96,97,100,
- 100,100,37,53,48,49,49,32,117,53,96,33,97,97,112,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,
- 116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,48,33,49,113,49,33,37,37,37,116,97,97,33,53,96,100,100,100,
- 33,33,96,100,100,97,97,33,53,32,97,113,97,117,117,101,100,100,36,117,
- 49,48,49,113,48,49,113,32,53,101,113,49,49,49,49,49,49,97,32,36,100,
- 96,100,100,97,97,97,97,33,53,101,112,48,113,48,49,49,49,37,49,49,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,113,96,36,100,100,52,
- 52,52,52,112,117,97,33,37,37,37,49,49,97,52,53,49,49,49,37,37,101,
- 33,37,116,112,96,97,97,97,100,100,100,37,117,97,100,36,101,100,96,
- 97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,112,96,100,52,52,100,100,100,116,33,48,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,101,100,36,49,49,37,37,37,101,97,113,33,101,
- 100,96,97,100,100,100,37,8,17,49,53,33,49,49,37,116,32,37,116,97,52,
- 33,101,96,97,100,100,100,113,48,97,100,36,117,53,96,97,33,100,97,96,
- 37,112,48,49,49,113,112,49,48,49,113,96,117,101,36,96,112,48,52,112,
- 33,100,100,100,52,96,32,100,100,52,52,52,52,100,96,48,49,113,33,116,
- 100,100,100,100,48,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,113,101,101,100,116,100,96,97,97,33,97,112,112,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,96,37,96,112,36,112,117,117,49,49,49,33,33,
- 113,49,49,33,100,100,52,113,112,113,116,100,100,100,100,100,100,32,
- 48,52,36,48,49,113,112,112,48,49,97,101,37,52,100,52,100,100,100,112,
- 97,36,100,100,52,116,100,48,52,112,97,33,49,37,96,100,100,100,32,36,
- 97,100,100,32,37,37,37,116,117,112,96,97,100,97,100,100,48,53,100,
- 96,100,100,97,97,113,96,33,97,97,112,112,112,48,49,49,113,112,49,48,
- 49,97,49,49,112,112,112,48,33,52,52,52,100,100,36,113,52,36,49,49,
- 36,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 37,37,48,37,97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,101,
- 112,116,48,49,49,112,48,49,49,113,32,107,108,52,116,96,100,100,33,
- 117,53,32,117,48,101,96,49,112,48,49,49,113,112,49,48,49,97,117,101,
- 100,36,96,112,48,112,33,52,100,100,100,52,116,36,100,100,52,112,117,
- 33,52,48,52,36,37,116,32,49,49,49,37,52,48,49,49,37,37,37,37,49,48,
- 100,100,116,112,96,100,100,100,100,101,96,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,36,49,48,49,53,49,112,112,
- 112,32,49,52,52,112,33,100,100,100,52,33,33,49,49,33,52,52,112,33,
- 48,52,33,37,116,117,100,100,100,48,101,116,100,100,32,49,49,101,49,
- 116,52,53,49,49,49,49,49,49,52,36,97,36,100,100,52,52,52,52,52,112,
- 113,33,37,49,37,49,49,49,52,97,48,49,49,37,53,49,36,37,116,112,96,
- 100,33,53,49,49,49,100,116,97,100,100,97,97,97,33,117,53,32,112,112,
- 112,48,49,49,100,37,49,48,49,113,112,112,52,112,96,112,48,52,52,52,
- 100,100,100,116,97,36,49,49,117,100,36,52,52,112,113,36,37,37,37,49,
- 49,97,36,48,33,49,113,33,37,37,37,37,116,37,97,97,97,97,100,100,100,
- 113,48,100,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,112,
- 49,48,49,113,112,112,112,112,96,101,49,112,117,33,100,100,100,116,
- 97,178,51,113,49,48,49,113,96,53,36,96,53,100,49,112,36,52,100,100,
- 100,52,112,117,49,49,117,117,33,52,52,48,52,36,116,32,37,49,49,49,
- 101,49,36,49,49,37,116,117,32,37,36,37,100,33,53,96,100,100,100,97,
- 101,96,100,100,97,97,97,97,36,36,49,49,53,36,49,49,49,49,113,49,48,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,36,49,100,100,101,
- 36,52,52,52,48,36,37,37,116,32,49,49,49,37,53,33,49,49,37,37,37,116,
- 32,36,101,32,117,53,96,100,100,100,97,101,96,100,100,97,100,100,33,
- 113,52,101,101,100,100,100,100,100,36,116,32,112,48,49,49,37,37,37,
- 37,37,116,116,96,97,100,97,100,100,36,48,100,96,100,100,97,97,100,
- 97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,53,53,49,49,33,52,52,37,52,96,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,37,49,96,97,
- 97,97,100,100,48,101,33,96,100,116,96,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,32,113,48,52,52,52,100,
- 100,100,52,49,100,100,100,52,52,52,116,116,101,37,101,117,101,32,49,
- 49,49,101,5,228,228,97,100,100,100,52,112,117,49,117,37,113,36,52,
- 33,37,49,49,49,37,53,33,49,49,116,117,32,49,37,36,37,33,53,96,97,100,
- 100,100,49,32,96,100,100,33,117,53,96,33,97,33,113,32,36,48,49,49,
- 113,113,52,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,
- 100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,52,101,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,
- 100,53,53,96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,
- 52,32,100,100,36,48,49,113,52,97,101,113,49,49,49,49,49,49,97,52,52,
- 36,49,49,49,96,97,97,97,33,48,53,112,48,113,48,49,49,97,52,52,48,49,
- 113,112,116,116,36,96,37,37,100,52,112,49,49,49,97,49,48,49,49,33,
- 52,52,52,112,117,97,33,37,37,37,49,49,97,52,101,96,100,100,32,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,53,112,53,49,113,101,100,96,97,
- 97,97,96,112,112,112,48,49,49,100,49,100,48,49,53,112,112,112,112,
- 32,113,48,52,52,52,100,100,100,116,117,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,49,49,49,49,37,32,53,49,49,37,37,37,117,52,113,97,52,49,
- 53,96,100,100,100,101,9,17,49,53,33,49,49,37,116,117,32,116,97,52,
- 33,101,96,97,100,100,100,113,32,48,49,113,117,53,96,97,33,97,97,96,
- 37,112,48,49,49,113,112,49,48,49,113,96,117,37,112,96,112,48,52,112,
- 33,100,100,100,52,116,36,100,100,100,52,52,52,100,96,48,49,113,97,
- 33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,100,96,100,116,100,96,97,97,33,97,48,113,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,96,37,96,112,36,32,117,117,49,49,49,33,116,
- 36,100,100,52,100,100,52,113,112,113,116,100,100,100,100,100,100,32,
- 117,113,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,100,100,
- 112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,100,100,100,
- 32,53,33,49,49,37,37,37,37,116,117,32,96,97,97,97,100,100,48,53,100,
- 96,100,100,97,100,113,96,33,97,97,112,112,112,48,49,49,113,112,49,
- 48,49,97,49,49,112,112,96,101,52,52,52,52,100,100,36,113,97,36,100,
- 100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,32,48,49,49,37,37,
- 37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,
- 101,112,116,48,49,49,112,48,49,49,113,112,63,57,97,32,53,49,49,32,
- 117,53,96,33,48,101,96,49,112,48,49,49,113,117,49,48,49,97,117,37,
- 112,112,96,117,48,112,33,52,100,100,100,116,117,36,100,100,52,112,
- 117,33,52,116,49,36,37,116,32,49,49,49,117,53,33,49,49,37,37,37,37,
- 49,48,100,100,116,112,96,100,100,100,100,101,96,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,112,53,48,49,53,49,112,
- 112,112,96,48,52,52,112,33,100,100,100,52,53,33,49,49,33,52,52,112,
- 33,48,52,33,116,32,116,100,100,100,96,97,48,49,49,37,49,49,101,49,
- 116,52,53,49,49,49,49,49,49,116,53,96,36,100,100,52,52,52,52,52,112,
- 113,36,37,49,37,49,49,49,52,113,116,100,100,32,117,52,36,37,116,112,
- 96,100,33,53,49,49,49,52,32,97,100,100,97,97,97,33,117,53,52,112,112,
- 112,48,49,49,100,33,36,100,100,36,112,112,52,112,96,112,48,52,52,52,
- 100,100,100,52,49,49,100,100,112,100,36,52,52,112,113,36,37,37,37,
- 49,49,97,52,101,96,100,36,33,37,37,37,37,36,37,97,97,97,97,100,100,
- 100,117,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 117,49,48,49,113,112,112,112,49,52,53,100,100,36,52,100,100,100,116,
- 117,231,102,36,49,48,49,113,96,117,37,96,53,100,49,112,36,52,100,100,
- 100,52,117,100,100,100,112,117,33,52,52,48,52,36,116,32,37,49,49,49,
- 101,113,116,100,100,32,116,117,32,37,36,37,97,36,53,96,100,100,100,
- 49,117,100,100,100,100,97,97,97,36,36,49,49,53,52,48,49,49,49,113,
- 49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,36,100,100,
- 101,36,52,52,52,48,36,37,37,49,37,49,49,49,37,53,33,49,49,37,37,37,
- 116,32,36,101,32,117,53,96,100,100,100,97,101,96,100,100,97,100,100,
- 113,113,52,101,101,100,100,100,100,100,36,100,117,48,116,100,100,32,
- 49,49,49,49,116,116,96,100,100,97,100,100,36,53,100,96,100,100,97,
- 101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,
- 112,96,117,37,37,52,52,100,100,100,36,113,97,36,100,100,52,52,100,
- 37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,
- 52,97,97,100,97,100,100,48,53,100,96,100,116,96,97,100,97,33,97,97,
- 112,48,113,48,49,49,113,52,112,48,49,113,48,113,112,112,96,112,48,
- 52,52,100,100,100,100,52,117,49,100,100,52,52,52,116,48,101,37,49,
- 113,116,32,49,49,49,101,84,177,177,37,96,100,100,52,112,117,33,32,
- 37,113,36,52,33,37,49,49,49,33,48,33,49,49,116,117,32,37,37,36,37,
- 33,53,96,97,100,100,100,117,101,96,100,100,33,117,53,96,33,97,97,112,
- 112,112,48,49,49,113,117,49,48,49,113,112,112,112,48,33,100,100,100,
- 37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,52,48,33,49,113,49,33,37,37,37,36,97,97,33,
- 53,96,100,100,100,53,101,101,100,100,97,97,33,53,32,97,49,96,117,117,
- 101,100,100,36,96,53,100,100,36,48,49,113,52,97,101,113,49,49,49,49,
- 49,49,97,112,33,100,96,100,100,97,97,97,97,33,53,101,112,48,113,48,
- 49,49,97,97,36,49,49,113,112,101,97,112,96,37,37,100,52,112,49,49,
- 49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,
- 48,49,49,49,37,37,101,33,37,36,37,97,97,97,100,100,100,100,117,101,
- 96,100,36,101,100,96,97,33,53,101,112,48,113,48,49,49,100,33,36,100,
- 100,48,112,112,112,112,96,112,48,52,52,52,100,100,100,116,112,53,100,
- 100,52,52,52,52,52,116,49,36,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 37,53,117,113,97,100,100,96,97,100,100,100,37,93,68,100,48,33,49,49,
- 37,116,117,32,116,97,52,33,101,96,97,100,100,100,113,116,97,100,36,
- 117,53,96,97,33,97,33,97,37,112,48,49,49,113,32,32,49,49,113,96,117,
- 37,112,96,112,48,52,32,33,100,100,100,52,117,100,100,100,52,52,52,
- 52,100,96,48,49,113,97,33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,49,113,32,100,100,116,100,96,97,97,33,97,112,
- 112,112,112,48,49,49,113,112,49,48,49,113,112,112,96,37,96,112,36,
- 112,37,117,49,49,49,33,116,36,100,100,52,100,100,52,37,113,113,96,
- 100,100,100,100,100,100,32,36,32,53,48,49,113,112,48,49,49,97,101,
- 37,100,100,52,100,100,100,112,97,36,100,100,52,116,112,53,52,112,97,
- 33,49,37,116,100,100,100,96,101,116,100,100,32,37,37,37,116,117,112,
- 96,97,97,97,100,100,100,100,101,96,100,100,97,97,113,96,33,97,97,112,
- 112,112,48,49,49,113,116,101,48,49,97,49,49,112,112,96,101,49,52,52,
- 52,100,100,36,113,97,36,100,100,37,100,52,52,52,48,52,36,37,37,49,
- 49,49,49,37,53,33,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,
- 113,32,48,49,49,96,97,97,101,112,116,48,49,49,112,48,49,49,113,96,
- 106,108,52,49,97,100,100,33,117,53,32,117,48,101,96,49,112,48,49,49,
- 113,36,32,48,49,97,117,37,112,112,96,112,48,112,33,52,100,100,100,
- 52,112,49,49,49,33,112,117,33,52,48,52,36,37,116,32,49,49,49,117,100,
- 33,49,49,37,37,37,37,49,48,100,100,116,112,96,100,100,100,100,101,
- 96,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 33,49,48,49,53,49,112,112,112,96,48,52,52,112,33,100,100,100,116,112,
- 33,49,49,33,52,52,112,33,48,52,33,116,117,97,100,100,100,32,53,33,
- 49,49,37,49,49,101,97,116,52,48,49,49,49,49,49,49,52,97,96,36,100,
- 100,52,52,52,52,52,112,113,36,37,49,37,49,49,49,116,53,36,49,49,37,
- 53,49,36,37,116,112,96,100,33,53,49,49,49,52,36,96,100,100,97,97,97,
- 33,117,53,52,112,112,112,48,49,49,112,100,32,48,49,113,112,112,96,
- 37,96,112,48,52,52,52,100,100,100,52,32,116,100,100,112,100,36,52,
- 52,112,113,36,37,37,37,49,49,97,52,37,32,49,113,33,37,37,37,37,36,
- 37,97,97,97,97,100,100,100,53,100,48,49,49,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,100,116,49,49,113,112,112,112,49,52,53,100,100,
- 36,52,100,100,100,116,49,178,51,113,49,48,49,113,96,117,37,96,53,100,
- 49,52,37,52,100,100,100,52,116,36,100,100,112,117,33,52,52,48,52,36,
- 49,37,37,49,49,49,37,53,33,49,49,37,116,117,32,37,36,37,97,97,97,97,
- 100,100,100,97,101,96,100,100,97,100,97,97,36,36,49,49,53,52,48,49,
- 49,49,113,49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,100,
- 113,49,49,100,36,52,52,52,48,36,37,37,96,32,49,49,49,37,53,33,49,49,
- 37,37,37,116,32,36,101,32,117,117,53,49,49,49,112,36,97,100,100,97,
- 100,100,113,36,53,117,48,49,49,49,49,49,113,52,117,117,33,49,49,37,
- 37,37,49,49,116,116,96,100,100,97,100,100,36,53,100,96,100,100,97,
- 37,117,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,
- 112,96,117,37,37,52,52,52,100,100,100,37,116,36,100,100,52,52,52,97,
- 52,48,116,37,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,
- 97,97,100,97,100,100,48,53,100,96,100,116,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,49,113,49,48,49,113,112,112,112,112,112,101,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,48,112,49,49,33,
- 37,49,49,49,101,81,177,177,36,97,100,100,52,112,117,33,112,37,113,
- 36,101,33,37,49,49,49,117,53,33,49,49,116,117,32,37,37,36,37,33,53,
- 96,97,100,100,100,113,117,96,100,100,33,117,53,96,33,97,97,112,112,
- 112,48,49,49,113,117,49,48,49,113,112,112,112,48,33,97,100,100,37,
- 37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,116,37,48,49,113,49,33,37,37,37,36,97,97,33,
- 53,96,100,100,100,117,101,96,100,100,97,97,33,53,32,97,49,96,117,117,
- 101,100,100,36,117,49,48,49,113,48,49,113,52,97,101,113,49,49,49,49,
- 49,49,97,100,97,97,53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,
- 49,97,32,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,
- 117,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,36,37,100,
- 100,100,32,37,101,36,37,36,37,97,97,97,97,100,100,100,117,101,96,100,
- 36,101,100,96,97,33,53,101,112,112,48,49,49,49,100,37,49,48,49,53,
- 112,112,112,112,96,32,37,52,52,52,100,100,100,116,33,117,49,49,33,
- 52,52,52,52,116,49,36,37,37,37,49,49,49,101,97,36,49,49,37,37,37,53,
- 33,48,116,112,112,96,97,100,100,100,101,92,68,100,48,33,49,49,37,116,
- 117,32,116,97,52,33,101,96,97,100,100,100,33,32,100,100,100,33,53,
- 96,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,96,117,37,
- 112,96,112,48,52,112,33,100,100,100,52,33,53,49,49,33,52,52,100,100,
- 96,48,49,113,97,33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,100,96,100,116,100,96,97,97,97,53,112,112,96,
- 37,48,49,49,113,116,101,48,49,113,112,112,96,37,112,101,36,112,117,
- 117,49,49,49,33,32,96,100,100,52,100,100,52,37,116,113,116,100,100,
- 100,100,100,100,32,113,112,49,48,49,113,112,112,48,49,97,101,49,100,
- 100,52,100,100,100,112,36,52,100,100,52,116,100,96,52,32,97,33,49,
- 37,116,100,100,100,96,96,96,100,100,32,37,37,37,96,117,112,96,97,97,
- 97,100,100,96,48,100,96,100,100,97,97,33,48,32,97,117,112,112,112,
- 48,49,49,113,116,48,100,100,116,49,49,112,112,96,101,49,52,52,52,100,
- 100,36,113,36,100,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,
- 37,53,33,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,
- 96,100,100,97,97,97,101,112,116,96,101,112,37,48,49,49,113,48,47,57,
- 113,53,49,49,49,32,117,53,32,117,48,101,96,49,112,48,49,49,113,117,
- 49,48,49,97,117,37,112,112,96,112,48,112,33,52,100,100,100,52,49,49,
- 100,100,52,112,117,33,52,48,52,36,37,116,32,49,49,49,37,53,33,49,49,
- 37,37,37,37,49,48,100,100,116,112,96,100,100,100,100,101,96,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,52,112,49,
- 49,53,49,112,112,112,96,48,52,52,112,33,100,100,100,52,97,32,49,49,
- 33,52,52,112,33,48,52,33,116,117,117,100,100,100,96,100,36,49,49,37,
- 49,49,101,97,116,52,53,49,49,49,49,49,49,116,116,117,36,100,100,52,
- 52,52,52,52,112,113,33,37,49,37,49,49,49,36,48,33,49,49,37,53,49,36,
- 49,116,112,96,100,33,53,49,49,49,36,96,53,49,49,96,97,97,33,117,53,
- 52,112,112,112,48,49,49,36,49,96,48,49,113,112,112,52,112,96,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,112,100,36,52,52,112,113,36,
- 37,37,37,49,49,113,33,53,33,49,113,33,37,37,37,37,36,112,96,97,97,
- 97,100,100,100,117,101,96,100,100,97,97,97,97,33,97,97,112,112,112,
- 48,49,49,49,113,49,48,49,113,112,112,112,49,52,53,52,49,113,33,100,
- 100,100,116,101,227,102,36,49,48,49,113,96,117,37,96,53,100,49,32,
- 36,52,100,100,100,52,101,113,49,49,37,117,33,52,52,48,52,36,96,32,
- 37,49,49,49,37,53,33,49,49,37,116,117,32,37,36,37,97,33,48,96,100,
- 100,100,97,101,96,100,100,97,97,97,97,36,36,49,49,53,52,48,49,49,49,
- 113,49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,36,100,
- 100,101,36,52,52,52,48,36,37,37,116,32,49,49,49,49,53,33,49,49,37,
- 37,37,116,32,36,101,32,117,117,53,49,49,49,49,100,96,100,100,97,100,
- 100,113,116,53,101,101,100,100,100,100,100,36,36,37,32,53,49,49,37,
- 37,37,37,49,116,52,97,97,100,97,100,100,36,117,32,100,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,37,116,36,100,100,52,52,52,37,52,
- 48,52,36,37,37,37,49,49,49,113,36,49,49,49,52,101,116,32,49,116,52,
- 97,97,97,97,100,100,48,37,97,100,100,116,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,116,48,100,100,36,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,112,117,49,49,33,52,52,116,36,101,37,49,49,33,
- 37,49,49,49,101,80,176,177,116,37,100,100,52,112,117,33,112,37,113,
- 36,32,33,37,49,49,49,117,53,33,49,49,116,117,32,37,37,36,37,33,53,
- 96,97,100,100,100,97,101,96,100,100,33,117,53,96,33,53,52,112,96,37,
- 48,49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,
- 100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,52,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,
- 100,100,97,101,96,100,100,97,97,33,53,32,53,100,117,117,117,101,100,
- 100,36,117,49,48,49,113,48,49,113,52,117,101,113,49,49,49,49,49,49,
- 97,96,117,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,
- 97,100,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,97,116,48,33,
- 49,49,37,37,37,116,32,36,37,97,97,97,97,100,100,100,113,101,100,100,
- 36,37,53,53,96,36,53,101,112,112,112,48,49,49,100,37,49,48,49,53,112,
- 112,112,112,96,32,37,52,52,52,100,100,100,116,117,36,100,100,52,52,
- 52,52,52,48,96,33,37,37,37,49,49,49,101,97,53,49,49,37,37,37,53,97,
- 113,97,100,100,96,97,100,100,100,37,28,68,100,48,33,49,49,37,116,117,
- 32,116,97,52,33,101,96,97,100,100,100,33,97,53,49,113,117,53,96,97,
- 33,97,97,96,101,36,48,49,49,113,52,32,100,100,36,96,117,37,112,96,
- 112,48,52,112,33,100,100,100,52,116,36,100,100,52,52,52,52,100,96,
- 48,49,113,97,33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,33,53,48,49,97,100,96,100,97,33,97,112,112,96,37,48,
- 49,49,113,52,32,100,100,36,112,112,96,37,96,112,36,112,117,117,49,
- 49,49,33,101,113,49,49,33,100,100,52,101,112,113,96,100,100,100,100,
- 100,100,32,32,36,49,49,49,113,112,112,112,112,96,101,49,52,100,52,
- 100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,101,100,32,116,
- 100,100,100,96,112,48,49,49,37,37,37,37,116,117,112,96,97,97,97,100,
- 100,48,117,117,48,49,49,96,97,113,96,33,97,97,112,112,112,48,49,49,
- 113,112,49,48,49,97,49,49,112,112,96,101,49,52,52,52,100,100,100,49,
- 37,49,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,101,101,96,
- 100,100,32,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,
- 100,97,97,97,101,112,116,48,52,49,112,48,49,49,113,32,42,57,33,52,
- 97,100,100,33,117,53,32,117,48,101,96,49,112,48,49,49,113,117,49,48,
- 49,97,117,37,112,112,96,112,48,112,33,52,100,100,100,52,116,36,100,
- 100,52,112,117,33,52,96,52,36,37,116,32,49,49,49,37,53,33,49,49,37,
- 37,37,37,49,48,100,100,116,112,96,100,100,100,100,101,96,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,33,49,48,49,53,
- 49,112,112,112,96,48,52,52,112,33,100,100,100,52,116,36,100,100,52,
- 52,52,112,33,48,100,33,116,117,117,100,100,100,32,53,33,49,49,37,49,
- 49,101,49,116,52,53,49,49,49,49,49,49,52,96,52,116,49,49,33,52,52,
- 52,52,112,113,36,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,
- 116,112,96,100,33,53,49,49,49,100,33,49,49,49,96,97,97,97,33,53,52,
- 112,112,112,48,49,49,100,37,49,48,49,113,112,112,100,112,96,112,48,
- 52,52,52,100,100,100,116,36,37,100,100,112,100,36,52,52,112,113,36,
- 37,37,37,49,49,49,49,48,100,100,36,33,37,37,37,37,36,37,97,97,97,97,
- 100,100,100,117,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,
- 49,49,113,32,36,48,49,113,112,112,112,49,52,53,100,52,113,33,100,100,
- 100,116,33,226,102,36,49,48,49,113,96,117,37,96,53,100,49,112,49,33,
- 100,100,100,52,113,53,100,100,112,117,33,52,52,48,52,36,116,32,49,
- 49,49,49,101,97,36,49,49,37,116,117,32,37,36,49,97,33,53,96,100,100,
- 100,97,101,96,100,100,97,97,97,97,36,36,49,49,53,52,48,49,49,49,113,
- 49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,117,33,100,100,
- 101,36,52,100,52,48,36,37,37,116,32,49,49,49,101,97,36,49,49,37,37,
- 37,116,32,48,101,32,117,117,53,49,49,49,32,36,96,100,100,97,100,100,
- 113,116,53,101,101,100,100,100,100,100,36,116,37,53,33,49,49,37,37,
- 37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,48,97,100,100,52,52,52,37,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,36,37,37,116,52,97,
- 97,97,97,100,100,48,53,100,96,100,116,96,97,97,100,33,97,97,112,112,
- 112,48,49,49,113,32,36,48,49,113,112,48,113,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,52,33,37,49,
- 49,49,101,85,176,177,36,32,49,49,33,112,117,33,112,37,113,36,116,117,
- 32,49,49,49,53,112,48,49,49,116,117,32,37,37,36,37,33,53,96,97,100,
- 100,100,117,101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,
- 113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,
- 100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,52,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,
- 117,101,96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,
- 112,49,48,49,113,48,49,113,52,97,101,113,49,49,49,49,49,49,97,116,
- 97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,
- 37,101,53,37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,101,100,
- 96,97,33,53,101,112,112,112,48,49,49,100,36,97,100,100,48,112,112,
- 112,112,96,48,49,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,
- 52,48,52,36,37,37,37,49,49,49,101,100,48,49,49,37,37,37,53,97,113,
- 97,36,37,97,97,100,100,100,101,29,68,100,48,33,49,49,37,116,117,32,
- 116,97,52,33,101,96,97,100,100,100,97,101,96,100,36,117,53,96,97,97,
- 53,97,96,37,112,48,49,49,113,100,117,48,49,113,96,117,37,48,97,112,
- 48,52,112,49,49,49,49,33,116,36,100,100,52,52,52,52,100,96,48,49,113,
- 97,33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,97,96,100,100,116,100,96,97,97,36,97,112,112,96,101,100,100,
- 100,36,52,117,48,49,113,48,49,97,37,96,112,36,112,117,117,49,49,49,
- 33,37,112,49,49,33,100,100,52,101,112,113,37,49,49,49,49,49,49,37,
- 101,112,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,100,100,
- 112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,100,100,100,
- 32,53,33,49,49,37,37,37,37,116,117,112,96,97,97,97,100,100,48,101,
- 32,53,49,49,96,97,113,96,33,97,97,112,112,112,48,49,49,113,52,52,48,
- 49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,116,97,36,100,100,
- 37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,101,
- 112,116,48,113,117,113,48,49,49,113,112,46,57,97,53,97,100,100,33,
- 117,53,32,117,48,101,96,33,113,48,49,49,113,116,48,100,100,116,117,
- 37,112,112,96,112,48,112,33,52,100,100,100,52,32,37,49,49,33,112,117,
- 33,52,48,52,36,37,116,32,49,49,49,37,53,33,49,49,37,37,37,37,49,48,
- 100,100,116,112,96,100,100,100,100,101,96,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,33,49,48,49,53,49,112,112,
- 112,96,48,52,52,112,33,100,100,100,52,32,37,49,49,33,52,52,112,33,
- 48,52,33,116,117,117,100,100,100,96,36,37,49,49,37,49,49,101,49,116,
- 52,53,49,49,49,49,49,49,116,49,116,36,100,100,52,52,52,52,52,112,113,
- 33,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,96,100,
- 33,53,49,49,49,96,101,96,100,100,97,97,97,33,117,53,52,112,112,112,
- 48,49,49,100,113,32,48,49,113,112,112,52,112,96,112,48,52,52,52,100,
- 100,100,52,48,32,100,100,112,100,116,52,52,112,113,36,37,37,37,49,
- 49,97,36,48,33,49,113,33,37,37,37,37,36,49,97,97,97,97,100,100,100,
- 97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,96,
- 101,100,100,36,112,112,112,49,52,53,100,100,116,52,100,100,100,116,
- 53,227,102,36,49,48,49,113,96,117,37,96,53,100,49,112,36,52,100,100,
- 100,52,116,36,100,100,112,117,33,52,52,48,52,36,116,32,37,49,49,49,
- 49,53,33,49,49,37,116,117,32,37,36,49,97,33,53,96,100,100,100,97,101,
- 96,100,100,97,97,97,97,36,36,49,49,53,52,48,49,49,49,113,49,48,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,32,53,49,49,100,36,52,
- 52,52,48,36,37,49,116,32,49,49,49,37,53,33,49,49,37,37,37,116,32,48,
- 101,32,117,117,53,49,49,49,96,101,96,100,100,97,100,100,113,36,117,
- 113,101,100,100,100,100,100,36,100,36,53,33,49,49,37,37,37,37,37,116,
- 116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,
- 48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,
- 52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,100,48,52,36,37,
- 49,37,49,49,49,37,53,33,49,49,52,49,33,37,37,96,52,97,97,97,97,100,
- 100,48,101,49,48,49,97,96,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,116,36,101,37,49,49,36,37,49,49,49,101,68,
- 176,177,117,96,100,100,52,112,117,33,112,37,113,36,52,33,37,49,49,
- 49,53,116,96,100,100,117,117,32,37,37,36,37,33,53,96,97,100,100,100,
- 117,101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,112,
- 49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,
- 36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 52,48,33,49,113,49,33,37,37,37,36,100,97,33,53,96,100,100,100,97,101,
- 96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,112,49,48,
- 49,113,48,49,113,52,97,101,113,49,49,49,49,49,49,113,37,97,101,96,
- 100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,
- 112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,116,49,100,100,100,32,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,53,53,96,100,36,101,100,96,97,
- 33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,97,100,100,100,112,24,68,100,48,33,49,49,37,116,117,32,116,97,52,
- 33,101,96,100,100,100,100,97,101,96,100,100,36,53,96,97,33,97,97,96,
- 37,112,48,49,49,113,96,112,101,100,36,96,117,37,112,96,112,48,52,112,
- 33,100,100,100,100,116,36,100,100,52,52,52,52,100,96,48,49,113,97,
- 33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,97,101,100,100,116,100,96,97,97,33,97,112,112,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,96,37,96,112,36,112,117,117,49,49,49,33,112,
- 117,49,49,33,100,100,52,101,112,113,116,100,100,100,100,100,100,32,
- 52,112,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,100,100,
- 112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,100,100,100,
- 32,53,33,49,49,37,37,37,37,116,117,112,96,97,97,97,100,100,48,53,100,
- 96,100,100,97,97,113,96,33,97,33,113,112,112,48,49,49,113,112,49,48,
- 49,97,49,96,37,112,96,101,49,52,52,52,100,100,36,113,96,112,49,49,
- 36,52,52,52,100,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 37,37,36,37,97,97,97,97,100,100,100,49,49,97,100,100,97,97,97,101,
- 112,116,48,49,49,112,48,49,49,113,96,43,57,49,100,96,100,100,33,117,
- 53,32,117,48,37,97,49,112,48,49,49,113,117,49,48,49,97,117,37,112,
- 112,96,112,48,112,33,52,100,100,100,52,116,36,100,100,52,112,117,33,
- 52,48,52,36,37,116,32,49,49,49,37,53,33,49,49,37,37,37,37,49,48,100,
- 100,116,112,96,100,100,100,100,101,96,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,36,49,48,49,53,49,112,112,112,
- 96,48,52,52,112,33,100,100,100,52,116,36,100,100,52,52,52,112,33,48,
- 52,33,116,117,117,100,100,100,48,101,33,49,49,37,49,49,101,49,116,
- 52,53,49,49,49,49,49,49,52,37,116,36,100,100,52,52,52,52,52,112,113,
- 33,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,96,100,
- 33,53,49,49,49,96,101,96,100,100,97,97,97,33,117,53,52,112,112,112,
- 48,49,49,100,33,32,48,49,113,112,112,52,112,96,112,48,52,52,52,100,
- 100,100,116,113,116,100,100,112,100,36,52,52,112,113,36,37,37,37,49,
- 49,97,36,48,33,49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,100,
- 97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,116,
- 49,49,49,113,112,112,112,49,52,48,100,100,36,52,100,100,100,116,113,
- 226,102,48,32,100,100,36,96,117,37,96,53,100,49,112,36,52,100,100,
- 100,52,112,33,100,100,112,117,33,52,100,48,52,36,116,32,37,49,49,49,
- 37,53,33,49,49,37,116,117,32,37,36,37,97,33,53,96,100,100,100,97,101,
- 96,100,100,97,97,97,97,36,36,49,49,53,52,48,49,49,49,113,49,48,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,36,100,100,101,36,
- 52,52,52,48,36,37,37,116,32,49,49,49,37,53,33,49,49,37,37,37,116,32,
- 36,101,32,117,117,53,49,49,49,96,101,96,100,100,100,100,100,113,36,
- 53,101,101,100,100,100,100,100,36,52,36,53,33,49,49,37,37,37,37,37,
- 116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,
- 53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,
- 37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,
- 49,37,37,49,49,49,37,53,33,49,49,52,49,53,37,37,116,52,97,97,97,97,
- 100,100,48,37,116,96,100,116,96,97,97,97,36,97,97,112,112,112,48,49,
- 49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,
- 101,65,176,177,97,36,100,100,52,112,117,33,112,37,113,36,52,33,37,
- 49,49,49,37,53,33,49,49,116,117,32,37,37,36,37,33,53,96,97,100,100,
- 100,97,101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,
- 116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,
- 97,101,96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,116,
- 97,101,100,100,100,100,36,52,97,101,113,49,49,49,49,49,49,97,36,97,
- 101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,
- 49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,
- 52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,97,36,49,49,37,37,101,
- 33,37,36,49,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,
- 33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,101,32,32,49,49,37,37,37,53,97,113,97,100,
- 100,96,97,100,100,100,101,24,68,100,48,33,49,49,37,116,117,32,116,
- 97,52,33,101,96,97,100,100,100,97,101,96,100,36,117,53,96,97,33,97,
- 97,96,37,112,48,49,49,113,112,49,48,49,113,96,117,37,112,96,112,48,
- 52,112,33,100,100,100,52,116,36,100,100,52,52,52,52,100,96,48,49,113,
- 97,33,49,49,49,49,53,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,100,96,100,116,100,96,97,97,33,97,112,112,96,37,48,49,49,
- 113,112,49,48,49,113,112,112,96,37,96,112,36,112,117,117,49,49,49,
- 33,116,36,100,100,52,100,100,52,101,112,113,116,100,100,100,100,100,
- 100,32,97,37,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,
- 100,100,112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,100,
- 100,100,32,53,33,49,49,37,37,37,37,116,117,112,96,97,97,97,100,100,
- 48,53,100,96,100,100,97,97,113,96,33,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,113,116,
- 37,100,100,37,52,52,52,100,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,
- 97,97,97,101,112,116,48,49,49,48,49,49,49,113,48,126,108,100,100,100,
- 100,100,97,97,97,97,97,100,36,112,100,112,48,96,100,100,100,100,100,
- 100,36,112,112,112,112,112,48,33,52,52,52,36,48,49,49,49,49,49,49,
- 33,52,52,52,52,100,52,32,37,37,37,33,100,100,100,100,100,100,100,32,
- 37,37,37,49,49,49,49,33,49,97,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 36,100,112,112,112,48,49,33,52,52,52,36,48,49,49,49,49,49,49,33,52,
- 52,52,52,52,100,32,37,37,37,33,100,100,100,100,100,100,100,32,49,49,
- 101,100,36,49,96,100,100,100,32,49,49,37,117,49,49,49,49,33,52,52,
- 52,52,100,100,32,37,49,37,33,100,100,100,100,100,100,100,32,101,116,
- 37,37,49,49,96,100,97,97,32,49,49,49,49,49,49,49,96,97,97,97,97,100,
- 36,112,112,112,48,96,100,100,100,100,100,100,36,112,112,100,112,48,
- 49,33,52,52,52,36,48,49,49,49,49,49,49,33,49,49,52,52,100,100,32,37,
- 37,37,33,100,100,100,100,100,100,100,32,37,37,37,37,49,49,96,97,97,
- 97,32,49,49,49,49,49,49,49,96,97,97,97,97,97,36,112,112,112,48,96,
- 100,100,100,100,100,100,36,112,112,112,100,36,49,33,49,49,52,36,48,
- 49,113,112,183,51,49,49,49,49,113,112,53,32,48,96,100,100,36,32,52,
- 52,100,100,100,100,100,100,100,100,36,32,52,100,100,100,32,37,37,37,
- 117,49,49,49,49,49,49,49,37,33,52,32,49,37,49,96,97,117,100,100,100,
- 100,100,100,100,100,100,100,100,117,100,100,97,100,100,36,112,48,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,33,52,100,100,100,100,100,32,49,37,49,117,49,49,49,49,49,
- 49,49,37,49,49,33,32,49,49,37,37,37,96,117,100,100,100,100,100,100,
- 100,100,100,100,97,97,97,36,48,49,49,113,48,49,49,37,116,100,100,100,
- 100,32,49,49,49,49,37,49,49,49,49,116,32,49,49,49,49,49,49,49,96,117,
- 100,100,100,33,48,113,48,32,48,96,100,100,100,100,100,100,36,117,117,
- 117,53,113,48,49,97,117,37,96,101,100,100,100,100,100,100,116,53,52,
- 100,100,100,100,100,100,100,32,33,100,100,100,100,100,100,100,32,49,
- 49,37,49,37,49,96,97,117,32,96,100,100,100,100,100,100,100,97,100,
- 100,100,100,97,36,53,32,112,112,48,49,49,49,49,49,49,113,48,49,49,
- 96,33,48,113,112,112,32,116,101,100,100,100,100,100,100,36,112,112,
- 32,116,101,100,112,117,117,49,33,100,100,36,64,229,228,100,100,100,
- 100,100,100,100,100,100,100,100,36,48,49,49,49,49,49,49,49,49,49,49,
- 113,48,37,49,117,49,49,116,100,97,117,100,100,100,100,100,100,100,
- 100,117,100,100,100,117,100,100,100,100,36,117,53,49,49,49,49,49,49,
- 113,117,53,113,101,101,100,112,117,49,49,117,49,49,49,49,49,49,49,
- 117,117,117,117,117,49,49,116,117,117,117,117,100,100,100,100,100,
- 100,100,100,100,112,117,117,49,49,96,117,100,117,100,100,100,100,100,
- 100,100,100,100,117,117,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,36,101,117,37,53,49,49,49,117,117,117,33,100,100,36,
- 117,53,49,49,49,49,49,116,117,117,117,100,36,117,117,53,113,48,49,
- 49,49,49,49,49,33,100,100,96,117,53,49,97,117,101,116,101,100,100,
- 100,100,100,100,100,100,100,100,100,116,101,100,112,49,49,49,49,49,
- 49,49,49,49,49,49,49,37,37,113,116,49,49,116,117,117,100,100,100,100,
- 100,100,100,100,100,100,52,117,100,52,100,100,100,100,32,49,49,49,
- 49,49,49,49,49,49,113,117,117,117,53,49,49,49,33,52,52,100,100,100,
- 100,100,100,100,52,116,117,101,100,100,100,100,100,100,112,49,49,49,
- 49,49,49,49,49,49,49,49,96,100,100,100,100,100,100,117,100,100,100,
- 112,93,17,49,49,49,49,49,113,48,49,113,112,48,49,49,49,49,49,33,100,
- 100,100,100,100,100,100,100,36,37,100,97,100,36,48,113,100,48,49,49,
- 49,49,49,49,49,49,49,49,49,101,53,49,49,49,49,53,96,101,100,100,100,
- 100,100,100,100,52,100,49,52,100,100,32,37,49,49,37,49,49,49,49,49,
- 49,49,37,37,37,37,37,49,49,96,97,97,97,97,100,100,100,100,100,100,
- 100,52,52,117,117,117,100,36,97,53,97,101,100,100,100,100,100,100,
- 100,100,48,117,53,49,37,49,49,49,49,49,49,96,100,100,100,100,100,100,
- 100,97,100,52,97,100,100,100,100,100,100,53,48,49,49,112,101,100,100,
- 100,100,100,97,97,97,97,100,100,36,112,53,49,96,100,100,100,100,100,
- 100,100,97,100,100,97,100,100,52,33,112,48,113,48,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,37,33,52,100,52,100,100,100,100,100,100,100,100,
- 117,117,52,117,100,36,117,101,96,32,49,49,49,49,49,49,49,49,37,49,
- 49,37,49,49,49,96,97,97,100,100,100,100,100,100,100,100,100,101,49,
- 52,112,48,49,49,49,37,37,101,48,49,49,49,49,49,49,101,32,117,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 52,100,100,100,100,100,36,53,37,49,49,33,127,108,100,100,100,100,36,
- 117,117,117,117,53,49,97,117,117,117,117,101,100,100,100,100,100,100,
- 116,117,53,116,117,101,100,112,117,101,116,117,49,49,49,49,49,49,49,
- 117,36,112,117,33,100,100,117,117,117,112,37,49,49,49,49,49,49,49,
- 52,33,116,117,100,100,100,100,36,117,53,49,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,117,37,112,112,
- 48,49,33,52,112,117,117,49,49,49,49,49,49,49,117,97,53,112,117,49,
- 49,116,117,117,117,117,100,100,100,100,100,100,100,117,100,100,49,
- 117,100,36,53,49,49,113,48,49,49,101,116,49,49,49,49,117,33,49,49,
- 49,97,100,117,96,100,33,116,100,100,100,100,100,100,100,117,117,117,
- 112,37,49,49,32,101,32,117,53,49,49,49,49,49,49,113,117,117,117,53,
- 116,100,36,96,117,117,117,101,100,100,100,100,100,100,116,37,112,96,
- 37,48,49,33,52,116,113,117,49,49,49,49,49,49,49,117,117,33,112,117,
- 49,49,116,117,117,117,117,100,100,100,100,100,100,100,117,32,37,37,
- 53,48,113,117,53,96,33,36,49,49,49,49,49,49,113,112,117,117,117,53,
- 49,97,117,117,53,113,101,100,100,100,100,100,100,116,117,117,117,117,
- 101,100,112,117,117,33,112,49,49,113,100,183,59,49,37,9,102,97,52,
- 48,33,49,49,49,37,37,37,37,116,52,100,97,100,97,100,100,36,97,32,97,
- 100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,117,49,48,49,
- 113,112,112,112,96,37,48,48,52,52,52,100,100,36,49,101,53,100,100,
- 52,52,52,37,52,116,49,36,37,37,37,49,49,49,101,116,49,49,49,52,49,
- 36,37,37,116,52,97,97,97,97,100,100,48,101,96,97,100,100,97,97,97,
- 97,33,33,52,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,
- 112,96,37,37,52,52,52,100,100,100,116,52,48,49,49,33,52,52,116,36,
- 101,101,101,100,116,32,49,49,49,117,17,177,177,117,48,100,100,100,
- 112,117,33,112,37,113,36,52,33,37,49,49,49,37,53,33,49,49,116,117,
- 32,37,37,36,117,33,53,96,97,100,100,100,101,113,96,100,100,33,117,
- 53,96,33,97,97,112,96,37,48,49,49,113,117,49,48,49,113,112,112,112,
- 48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,48,33,49,49,49,49,
- 37,37,37,36,97,97,33,53,96,100,100,100,33,117,53,49,49,49,96,33,53,
- 32,97,49,96,117,117,101,100,100,36,117,49,48,49,113,48,49,113,52,97,
- 96,113,49,49,49,49,49,49,97,101,32,100,96,100,100,100,97,97,97,33,
- 53,37,113,48,113,48,49,49,97,48,96,48,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,97,117,36,100,100,52,52,52,52,112,33,36,36,37,
- 37,37,49,49,97,100,113,37,49,49,37,37,101,33,37,117,36,97,97,97,97,
- 100,100,100,49,117,100,100,36,101,36,97,97,33,53,101,112,112,112,48,
- 49,49,100,49,112,48,49,113,112,112,112,112,96,32,37,52,52,52,100,100,
- 100,116,117,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,
- 53,37,100,100,100,32,37,37,53,97,113,113,49,49,53,96,100,100,100,117,
- 76,102,32,113,33,37,49,49,37,37,37,37,37,116,116,96,97,100,97,100,
- 100,36,53,100,96,100,100,100,32,96,97,33,53,52,48,113,96,101,100,100,
- 36,52,112,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,101,49,33,37,37,96,52,97,97,97,97,100,100,48,53,100,96,100,116,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,116,32,48,49,113,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,
- 52,116,36,101,37,49,49,33,37,49,49,49,101,16,177,177,97,36,100,100,
- 52,112,117,33,112,37,113,36,52,33,37,49,49,49,37,52,53,49,49,116,117,
- 32,37,37,36,37,33,53,96,97,100,100,100,97,101,96,100,100,36,117,53,
- 96,33,97,97,112,96,37,48,49,49,113,96,52,48,49,113,112,112,112,48,
- 49,96,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,117,117,100,36,49,33,37,
- 37,37,36,97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,33,53,
- 32,97,49,96,117,117,101,100,100,36,116,49,49,49,113,48,49,113,52,97,
- 101,113,49,49,49,49,49,49,33,97,116,96,97,100,100,97,97,97,97,33,53,
- 53,112,48,113,48,49,49,97,37,49,48,49,49,49,32,112,112,96,37,37,100,
- 52,112,49,49,49,33,37,52,100,100,52,52,52,52,112,117,97,33,37,37,37,
- 49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,
- 100,97,101,96,100,100,113,100,96,97,33,48,101,112,112,112,48,49,49,
- 100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,53,32,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,
- 49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,49,76,102,117,
- 36,97,48,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,49,36,
- 49,49,49,96,101,36,97,33,53,113,48,113,96,101,100,100,36,96,117,101,
- 100,36,112,112,112,96,117,37,37,52,52,52,100,100,36,49,100,36,49,49,
- 33,52,52,37,52,48,52,36,37,37,37,49,49,49,117,53,33,49,49,101,49,33,
- 37,37,96,52,97,97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,
- 33,52,112,112,112,48,49,49,113,52,100,48,49,113,112,112,112,112,96,
- 48,49,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,
- 49,49,33,37,49,49,49,53,16,177,177,97,36,100,100,52,112,117,33,112,
- 49,113,48,52,33,37,49,49,49,37,53,33,49,49,116,117,32,37,37,36,117,
- 33,53,96,97,100,100,100,97,101,96,100,100,33,117,53,96,33,53,32,112,
- 96,37,48,49,49,113,100,53,49,49,113,112,112,112,48,33,97,100,100,37,
- 37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,48,33,49,113,49,33,37,37,37,116,97,97,
- 33,53,96,100,100,100,97,101,96,100,100,97,97,33,53,32,53,112,117,117,
- 117,101,100,100,36,52,112,48,49,113,48,49,113,52,97,101,113,49,49,
- 49,49,49,49,97,96,116,48,100,100,100,97,97,97,97,33,53,53,112,48,113,
- 48,49,49,97,36,97,100,100,36,112,49,97,112,96,101,52,100,52,112,49,
- 49,49,33,112,117,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,97,
- 36,49,97,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,117,
- 101,96,100,100,113,100,96,97,33,48,101,112,112,112,48,49,49,100,37,
- 49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,100,52,37,49,
- 100,100,52,52,52,52,52,48,100,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,53,97,113,97,100,100,96,97,100,100,100,37,76,102,52,100,48,
- 33,49,49,49,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,
- 100,100,100,117,97,97,33,53,52,48,113,96,101,100,100,36,112,49,48,
- 49,49,113,112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,
- 52,52,52,37,52,116,49,36,37,37,37,49,49,49,101,33,37,49,49,52,49,33,
- 37,37,116,52,97,97,97,97,100,100,48,117,53,96,100,100,97,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,32,49,49,49,49,33,52,116,36,101,
- 37,49,49,33,37,49,49,49,37,64,228,228,112,116,100,100,52,112,117,33,
- 112,37,113,36,52,33,37,49,49,49,101,100,36,49,49,116,117,32,37,37,
- 36,37,33,53,96,97,100,100,100,33,101,101,100,100,33,117,53,96,33,97,
- 97,112,96,37,48,49,49,113,112,49,48,49,113,112,48,113,48,33,97,100,
- 100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,36,36,96,100,100,100,100,32,37,37,36,97,
- 97,33,53,96,100,100,100,33,101,101,100,100,97,97,33,53,32,97,49,96,
- 117,117,101,100,100,36,112,49,48,49,113,48,49,113,52,97,112,116,49,
- 49,49,49,49,49,33,32,49,100,96,100,100,100,97,97,97,33,53,53,112,48,
- 113,48,49,49,97,37,49,48,49,49,113,117,112,112,96,37,37,100,52,112,
- 49,49,49,33,116,36,100,100,100,52,52,52,112,117,97,33,37,37,37,49,
- 49,97,116,48,33,49,49,37,37,101,33,37,117,36,97,97,97,97,100,100,100,
- 113,96,97,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,
- 117,37,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,96,100,
- 100,100,100,32,37,53,97,113,97,100,100,96,97,100,100,100,33,24,51,
- 48,52,48,33,49,49,49,37,37,37,37,116,116,96,97,100,97,100,100,36,49,
- 33,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,52,32,
- 100,100,36,112,112,112,96,117,37,37,52,52,52,100,100,36,49,36,117,
- 49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,101,48,49,49,49,96,
- 33,33,37,37,116,52,97,97,97,97,100,100,48,53,100,96,100,100,97,97,
- 97,97,33,97,97,112,112,112,48,49,49,113,36,32,48,49,113,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,117,64,228,228,116,36,100,100,52,112,
- 117,33,112,49,113,36,52,33,37,49,49,49,37,36,97,100,100,117,117,32,
- 37,37,36,37,33,53,96,97,100,100,100,97,101,96,100,100,33,117,53,96,
- 33,97,117,112,96,37,48,49,49,113,101,112,101,100,36,112,112,112,48,
- 33,97,100,100,52,37,100,100,100,100,116,36,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,48,33,49,113,49,33,37,
- 37,37,116,97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,33,53,
- 32,97,101,117,117,117,101,100,100,36,112,49,48,49,113,48,49,113,52,
- 97,37,112,49,49,49,49,49,49,97,33,37,100,96,100,100,100,97,97,97,33,
- 53,53,112,48,113,48,49,49,97,100,32,48,49,113,112,49,97,112,96,37,
- 37,100,52,112,49,49,49,33,37,32,49,49,33,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,36,97,117,100,100,32,37,101,33,37,36,37,97,97,97,97,
- 100,100,100,49,100,100,100,36,112,96,96,97,33,53,101,112,112,112,48,
- 49,49,100,37,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,52,33,32,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,
- 53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,53,24,
- 51,117,113,53,49,49,49,37,37,37,37,37,116,116,101,97,100,97,100,100,
- 36,53,100,96,100,100,97,101,101,97,97,97,53,48,113,96,101,100,100,
- 36,112,49,48,49,113,48,113,112,96,117,37,37,52,52,52,100,100,36,113,
- 97,36,100,100,52,52,52,37,52,116,49,36,37,37,37,49,49,49,37,53,33,
- 49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,112,48,49,97,100,116,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,49,113,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,112,96,100,100,52,100,
- 52,116,36,101,37,49,49,33,37,49,49,49,101,21,177,177,48,49,100,100,
- 52,112,117,33,112,37,113,36,52,33,37,49,49,49,37,53,33,49,49,116,32,
- 37,37,37,36,37,33,53,96,97,100,100,100,49,49,97,100,100,33,117,53,
- 96,33,97,97,112,96,37,48,49,49,113,112,49,48,49,113,112,112,112,48,
- 33,97,100,100,117,37,100,100,100,100,116,36,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,53,48,49,49,49,49,37,37,
- 37,36,97,97,33,53,96,100,100,100,49,49,97,100,100,97,97,33,53,32,97,
- 49,96,117,117,101,100,100,36,52,100,48,49,113,48,49,113,52,33,112,
- 113,49,49,49,49,49,49,33,117,116,101,100,100,100,97,97,97,97,33,53,
- 117,113,48,113,48,49,49,97,37,49,48,49,113,112,113,113,112,112,112,
- 37,100,52,112,49,49,49,33,116,36,100,100,52,100,52,52,112,117,97,33,
- 37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,117,36,97,97,97,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,
- 48,49,49,52,100,100,48,49,53,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,116,36,100,100,100,52,52,52,52,48,52,36,37,37,37,49,49,
- 49,37,52,48,49,49,37,49,37,53,97,113,97,100,100,96,97,100,100,100,
- 113,77,102,37,116,113,37,49,49,37,37,37,37,37,37,97,96,97,100,97,100,
- 100,36,97,33,49,49,49,96,101,36,97,97,97,53,48,113,96,101,100,100,
- 36,100,32,100,100,36,112,112,112,96,117,37,37,52,52,52,100,100,36,
- 49,96,36,100,100,100,52,52,37,52,48,52,36,37,37,37,49,49,49,37,52,
- 36,49,49,52,49,33,49,37,116,52,97,97,97,97,100,100,48,101,101,100,
- 100,36,53,96,97,97,33,33,52,112,112,112,48,49,49,113,113,96,100,100,
- 36,112,112,112,112,96,112,53,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,116,36,101,37,49,49,33,37,49,49,49,53,21,177,177,37,37,49,
- 49,33,112,117,33,112,37,113,36,52,33,37,49,49,49,37,53,33,49,49,116,
- 100,100,100,32,36,37,33,53,96,97,100,100,100,113,48,97,100,100,97,
- 33,53,49,32,97,97,112,96,37,48,49,49,113,97,117,48,49,113,112,112,
- 112,48,33,97,100,100,32,36,100,100,100,100,116,36,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,113,116,100,100,
- 53,33,37,37,37,36,97,97,33,53,96,100,100,100,49,113,101,100,100,97,
- 97,97,97,33,97,49,96,117,117,101,100,100,36,100,33,49,49,113,48,49,
- 113,52,33,32,116,49,49,49,49,49,49,97,116,112,116,97,100,100,97,97,
- 97,97,97,97,48,112,48,113,48,49,49,97,112,96,100,100,36,112,49,97,
- 112,112,112,37,100,52,112,49,49,49,33,49,32,49,49,33,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,36,48,33,49,49,49,37,101,33,37,36,37,97,
- 97,97,97,100,100,100,33,37,97,100,36,101,100,96,100,33,53,101,112,
- 112,112,48,49,49,100,113,49,49,49,97,37,112,112,112,96,32,37,52,52,
- 52,100,100,100,116,52,48,49,49,33,52,52,52,52,48,116,37,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 101,77,102,36,48,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,
- 100,36,53,100,96,100,100,97,97,37,97,33,53,52,48,113,96,101,100,100,
- 36,112,49,48,49,113,112,48,113,96,117,37,37,52,52,52,100,100,36,113,
- 52,36,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,53,100,96,100,116,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,48,
- 113,112,112,32,113,48,52,52,52,100,100,100,52,49,32,49,49,33,52,100,
- 116,36,101,37,49,49,33,37,49,49,49,37,5,177,177,97,36,100,100,52,52,
- 112,33,112,37,113,36,52,33,37,49,49,49,101,36,96,100,100,117,117,32,
- 37,37,36,37,33,53,96,97,100,100,100,97,101,96,100,100,33,117,53,96,
- 33,97,97,112,96,37,48,49,49,113,112,49,48,49,113,112,112,112,48,33,
- 97,100,100,49,37,100,100,100,100,116,36,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,48,33,49,113,49,33,37,37,37,
- 36,97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,33,53,32,97,
- 49,96,117,37,48,49,49,113,112,49,48,49,113,48,49,113,52,97,101,113,
- 49,49,49,49,49,49,33,52,100,101,96,100,100,97,97,97,97,33,53,53,112,
- 48,113,48,49,49,97,37,49,48,49,113,112,112,97,112,96,37,37,100,52,
- 112,49,49,49,33,116,36,100,100,52,52,100,52,112,117,97,33,37,37,37,
- 49,49,97,52,37,97,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,
- 100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,
- 100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,100,52,52,52,96,52,36,37,37,37,49,49,49,101,36,
- 96,100,100,32,37,49,53,97,113,97,100,100,96,97,100,100,100,97,73,102,
- 33,32,49,97,100,100,32,37,37,37,37,37,97,96,97,100,97,100,100,36,101,
- 96,97,100,100,97,101,36,97,33,53,32,48,113,96,101,100,100,36,96,33,
- 49,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,36,52,100,
- 100,52,52,52,37,52,112,97,33,37,37,49,49,49,49,37,53,33,49,49,52,101,
- 116,32,49,116,52,100,100,97,97,100,100,116,48,100,100,100,52,97,97,
- 97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,37,52,100,100,52,52,52,100,100,
- 52,36,48,49,49,37,49,49,49,117,5,177,177,97,36,100,100,52,100,112,
- 33,112,37,113,48,52,33,37,49,49,49,37,53,33,49,49,116,32,37,37,37,
- 36,37,33,53,96,97,100,100,100,97,101,96,100,100,97,100,100,97,33,117,
- 97,112,96,37,48,49,49,113,113,100,101,100,36,112,112,112,48,33,97,
- 100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,48,33,49,49,97,116,32,37,37,116,
- 97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,97,100,33,33,116,
- 100,100,116,101,100,100,36,117,49,48,49,113,48,49,113,52,97,101,113,
- 49,49,49,49,49,49,97,53,96,100,48,49,49,96,97,97,97,97,97,48,112,48,
- 113,48,49,49,97,49,112,48,49,113,112,49,97,112,96,37,32,100,52,112,
- 49,49,49,33,112,96,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,52,33,37,49,49,37,37,101,33,37,116,112,96,97,97,100,100,100,100,
- 97,101,96,100,36,101,49,53,96,36,53,37,49,113,112,48,49,49,53,36,49,
- 49,49,101,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,33,37,49,49,
- 37,37,37,49,49,37,33,100,100,100,97,100,100,100,117,73,102,96,48,53,
- 33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,
- 100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,
- 113,112,112,48,97,117,37,37,52,52,52,100,100,36,113,97,36,100,100,
- 52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,116,32,49,49,116,32,116,
- 32,37,116,52,97,97,97,97,100,100,96,53,100,96,100,116,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,36,113,48,49,113,112,112,48,113,
- 96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,101,4,177,177,48,32,49,49,33,112,117,33,112,
- 37,113,36,52,33,37,49,49,49,37,52,48,49,49,116,97,100,32,37,36,37,
- 33,53,96,97,100,100,100,49,33,48,49,49,32,117,53,96,33,33,52,112,96,
- 37,48,49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,112,
- 36,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,36,33,96,100,36,49,33,37,37,37,36,97,97,33,
- 53,96,100,100,100,49,33,48,49,49,96,97,33,53,32,117,49,96,117,117,
- 101,100,100,36,100,37,100,100,36,48,49,49,53,97,101,113,49,49,49,49,
- 49,49,33,49,100,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,
- 49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,
- 33,116,36,100,100,52,52,52,100,112,117,97,33,37,37,37,49,49,97,116,
- 48,33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,33,53,96,
- 100,36,53,32,53,96,33,53,101,112,112,112,48,49,49,112,37,49,48,49,
- 53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,97,52,100,100,
- 52,52,52,100,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 53,97,113,97,100,100,96,97,100,100,100,49,73,102,53,32,97,117,100,
- 100,32,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,
- 97,101,36,97,33,53,52,48,113,96,101,100,100,36,101,113,49,49,113,112,
- 112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,
- 37,52,112,97,33,37,37,49,49,49,49,37,53,33,49,49,52,49,33,37,49,116,
- 52,100,100,97,97,100,100,48,49,101,96,100,116,96,97,97,97,33,97,97,
- 112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,100,52,36,48,49,
- 49,37,49,49,49,53,4,177,177,97,36,100,100,52,52,112,33,112,37,113,
- 36,52,33,37,49,49,49,117,112,96,100,100,117,117,32,37,37,36,37,33,
- 53,96,97,100,100,100,97,101,96,100,100,97,97,97,97,33,117,97,112,96,
- 37,48,49,49,113,52,32,100,100,36,112,112,112,48,33,97,100,100,37,37,
- 100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,36,49,48,49,113,116,116,32,37,37,36,97,97,33,53,
- 96,100,100,100,97,101,96,100,100,97,97,97,97,33,33,52,112,112,96,101,
- 100,100,36,112,49,48,49,113,48,49,49,53,97,101,113,49,49,49,49,49,
- 49,97,48,96,112,53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,
- 97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,113,
- 116,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,
- 49,49,37,37,101,33,37,116,112,96,97,97,100,100,100,100,97,101,96,100,
- 36,101,100,96,97,36,53,37,49,113,112,48,49,49,100,100,49,48,49,53,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,
- 49,37,33,100,100,100,97,100,100,100,37,73,102,116,101,48,33,49,49,
- 37,37,37,37,37,37,97,96,97,100,97,100,100,36,117,53,96,100,100,97,
- 101,36,97,33,53,32,48,113,96,101,100,100,36,112,49,48,49,113,112,112,
- 112,96,117,37,37,100,52,52,100,100,36,53,117,33,100,100,52,52,52,37,
- 52,48,52,36,37,37,37,49,49,49,101,33,49,49,49,52,101,116,32,37,116,
- 52,97,97,97,97,100,100,116,96,101,96,100,116,101,97,97,97,33,97,97,
- 112,112,112,48,49,49,113,100,48,49,49,113,112,112,112,48,97,112,48,
- 52,52,52,100,100,100,52,112,33,100,100,52,52,52,36,113,100,37,49,49,
- 33,37,49,49,49,37,84,228,228,112,96,100,100,52,32,117,33,112,37,113,
- 48,52,33,37,49,49,49,37,53,33,49,49,116,97,32,37,37,36,37,33,53,96,
- 97,100,100,100,33,37,100,100,100,33,112,48,96,33,33,52,112,96,37,48,
- 49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,49,37,100,
- 100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,
- 100,100,100,33,37,100,100,100,97,97,33,48,32,117,113,33,52,116,101,
- 100,100,36,96,113,49,49,113,48,49,113,52,97,101,113,49,49,49,49,49,
- 49,33,112,49,100,96,100,100,97,97,97,97,97,97,48,112,48,113,48,49,
- 49,97,117,37,48,49,113,112,49,97,112,96,37,32,100,52,112,49,49,49,
- 33,116,36,100,100,52,52,52,52,112,117,97,33,49,37,37,49,49,97,101,
- 117,32,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,113,96,
- 100,100,36,101,49,53,96,33,53,101,112,112,112,48,49,49,53,112,49,48,
- 49,117,113,112,112,112,96,112,48,52,52,52,100,100,100,52,49,100,100,
- 100,52,52,52,52,100,48,52,36,37,37,37,49,49,49,37,116,32,49,49,37,
- 37,37,97,52,113,97,100,100,96,97,100,100,100,33,29,51,112,53,48,33,
- 49,49,37,37,37,37,37,116,116,96,97,100,100,100,100,36,97,53,96,100,
- 100,97,101,36,97,33,53,52,48,49,97,101,100,100,100,116,32,48,49,113,
- 112,112,112,96,117,37,37,100,52,52,100,100,36,53,97,36,100,100,52,
- 52,52,37,52,48,96,33,37,37,37,49,49,49,101,33,37,49,49,116,100,117,
- 32,49,116,52,100,100,97,97,100,100,48,113,116,97,100,116,96,97,97,
- 97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,100,
- 52,36,48,49,49,37,49,49,49,117,84,228,164,97,48,49,49,33,112,117,33,
- 112,37,113,36,52,33,37,49,49,49,101,52,48,49,49,116,117,32,37,37,48,
- 112,32,53,96,97,100,100,100,101,112,96,100,100,33,117,53,96,33,97,
- 97,112,96,37,48,49,49,113,52,36,49,49,113,112,112,112,48,33,97,100,
- 100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,37,32,49,113,101,33,37,37,37,36,97,
- 97,33,53,96,100,100,100,101,117,101,100,100,97,97,33,48,32,97,49,96,
- 117,117,101,100,100,36,112,49,48,49,113,48,49,49,53,97,101,113,49,
- 49,49,49,49,49,113,116,37,100,96,100,100,97,97,97,97,33,53,53,112,
- 48,49,49,49,49,97,112,37,48,49,113,112,49,97,112,96,37,37,100,100,
- 112,49,49,49,49,53,32,100,100,52,52,52,52,112,117,97,33,49,37,37,49,
- 49,97,101,48,33,49,49,37,37,101,33,37,36,112,96,97,97,97,100,100,100,
- 113,96,97,100,36,53,113,53,96,36,53,37,49,113,112,48,49,49,100,52,
- 117,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,37,49,37,33,100,100,100,97,100,100,100,53,29,51,53,112,37,
- 97,100,100,32,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,
- 100,100,97,101,36,97,33,53,52,48,113,112,48,49,49,113,112,49,48,49,
- 113,112,112,112,96,53,100,49,52,52,52,100,100,36,113,36,100,100,100,
- 52,52,52,37,52,112,53,36,37,37,49,49,49,49,37,53,33,49,49,52,49,33,
- 37,37,116,52,97,97,97,97,100,100,48,48,100,96,100,116,96,97,97,97,
- 97,53,117,112,112,112,48,49,49,113,52,52,48,49,113,112,112,112,112,
- 96,112,96,52,52,52,100,100,100,52,37,100,100,100,52,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,101,1,177,177,97,36,100,100,52,32,117,33,112,
- 37,113,36,52,33,37,49,49,49,37,53,33,49,49,116,117,32,37,37,36,37,
- 33,53,96,97,100,100,100,97,101,96,100,100,33,112,53,96,33,97,97,112,
- 96,37,48,49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,117,
- 37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,48,33,49,113,49,33,37,37,37,36,97,97,33,
- 53,96,100,100,100,97,101,96,100,100,97,97,33,53,32,97,49,96,117,117,
- 101,100,100,36,100,32,100,100,36,48,49,113,52,97,101,113,49,49,49,
- 49,49,49,33,37,116,97,48,49,49,96,97,97,97,33,53,53,112,48,113,48,
- 49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,52,112,37,113,36,37,37,37,49,49,97,
- 52,33,49,49,49,37,37,101,33,37,116,37,97,97,97,100,100,100,100,97,
- 101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,36,36,49,
- 48,49,53,112,112,112,112,112,101,53,52,52,52,100,100,100,52,37,37,
- 100,100,52,52,52,52,52,48,52,48,37,37,37,49,49,49,101,33,49,49,49,
- 37,37,37,53,97,113,97,100,100,96,97,100,100,100,113,72,102,101,53,
- 48,33,49,49,37,37,37,37,37,96,116,96,97,100,97,100,100,36,33,100,96,
- 100,100,97,101,36,97,33,53,52,48,49,49,49,49,49,49,100,49,48,49,113,
- 112,112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,
- 52,52,37,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,
- 49,116,52,97,97,97,97,100,100,48,97,100,48,49,97,96,97,97,97,97,53,
- 117,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,
- 48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,49,36,49,
- 49,33,37,49,49,49,53,1,177,241,96,36,100,100,52,112,117,33,112,37,
- 49,37,116,117,32,49,49,49,101,33,37,49,49,116,117,32,37,37,36,37,33,
- 53,96,97,100,100,100,97,101,96,100,100,33,117,53,96,33,97,97,112,96,
- 37,48,49,49,113,117,49,48,49,113,112,112,112,48,33,97,100,100,37,112,
- 49,49,49,49,97,36,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,48,33,49,113,33,49,37,37,37,36,97,97,33,53,96,
- 100,100,100,49,96,48,49,49,96,97,33,53,113,97,49,96,117,117,101,100,
- 100,36,112,49,48,49,113,48,49,113,52,97,101,113,49,49,49,49,49,49,
- 113,113,37,100,96,100,100,97,97,97,97,33,48,53,112,48,113,48,49,49,
- 97,32,49,48,49,113,112,49,97,112,96,37,37,100,100,100,100,100,100,
- 36,113,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,
- 48,33,49,49,37,37,101,33,37,116,112,96,97,97,97,100,100,100,97,101,
- 96,100,36,101,100,96,97,36,53,101,112,112,112,48,49,49,100,48,49,100,
- 100,48,112,112,112,112,112,101,53,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 37,53,97,36,97,100,100,96,97,100,100,100,101,72,102,100,33,101,96,
- 100,100,32,37,37,37,37,116,36,53,96,100,97,100,100,36,37,48,48,49,
- 49,96,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,
- 112,112,112,32,116,37,53,33,100,52,100,100,100,112,48,100,100,100,
- 52,52,52,37,52,48,52,36,37,37,49,49,49,49,101,97,36,49,49,52,49,33,
- 37,37,116,52,100,100,97,97,100,100,48,53,100,96,100,116,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,96,113,49,49,113,112,112,112,112,
- 96,112,48,100,52,52,100,100,100,52,37,49,100,100,52,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,37,1,228,228,101,113,49,49,33,112,117,33,112,
- 37,113,36,52,36,37,49,49,49,37,53,33,49,49,116,117,32,37,37,36,112,
- 32,53,96,97,100,100,100,33,113,49,49,49,32,53,96,97,33,97,97,112,96,
- 37,48,49,49,113,52,101,101,100,36,112,112,112,48,33,97,100,100,37,
- 49,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,36,100,36,49,113,49,33,37,37,37,36,97,97,33,
- 53,96,100,100,100,97,101,96,100,100,97,97,33,53,32,97,49,96,117,117,
- 101,100,100,36,96,33,49,49,113,48,49,49,53,97,101,113,49,49,49,49,
- 49,49,33,36,96,49,48,49,49,96,97,97,97,33,53,97,37,48,113,48,49,49,
- 97,33,36,100,100,36,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,32,117,97,101,32,49,37,49,49,49,52,36,49,
- 49,49,37,37,101,33,37,36,37,97,97,97,100,100,100,100,113,48,97,100,
- 36,101,100,96,97,33,53,37,49,113,112,48,49,49,100,37,49,48,49,53,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,112,116,100,100,52,52,
- 52,52,52,48,52,36,49,37,37,49,49,49,101,97,36,49,49,37,37,37,53,97,
- 113,97,100,100,96,97,100,100,100,97,8,51,96,49,48,33,49,49,37,37,37,
- 37,37,116,116,96,97,100,97,100,100,100,113,101,100,100,100,97,101,
- 36,97,33,53,52,48,49,97,101,100,100,36,100,53,49,49,113,112,112,112,
- 96,117,37,53,33,100,52,100,100,100,112,97,36,100,100,52,52,52,37,52,
- 48,96,33,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,
- 100,97,97,100,100,48,97,112,53,49,97,96,97,97,97,97,53,97,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,52,97,100,100,100,52,52,52,116,36,113,37,49,49,33,37,
- 49,49,49,117,1,228,164,96,36,100,100,52,112,33,52,52,32,113,36,37,
- 116,32,49,49,49,101,36,37,49,49,116,117,32,37,37,36,37,33,53,96,97,
- 100,100,100,101,36,97,100,100,33,117,53,96,33,97,97,112,96,37,48,49,
- 49,113,117,49,48,49,113,112,112,112,48,33,97,100,100,37,112,49,49,
- 49,49,97,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,116,32,53,49,113,49,53,37,37,37,36,97,97,33,53,96,100,100,
- 100,113,112,101,100,100,97,97,33,53,32,97,97,96,117,117,101,100,100,
- 36,49,117,48,49,113,48,49,113,112,97,101,113,49,49,49,49,49,49,97,
- 37,36,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,113,
- 116,49,49,49,113,112,49,97,112,96,37,37,100,100,112,49,49,49,33,113,
- 101,100,100,52,52,52,52,112,117,97,101,32,49,37,49,49,49,116,48,33,
- 49,49,37,37,101,33,37,36,112,96,97,97,97,100,100,100,97,101,96,100,
- 36,101,100,96,97,33,53,101,48,113,112,48,49,49,100,48,116,101,100,
- 48,112,112,112,112,112,101,48,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,48,49,49,49,37,37,37,
- 53,97,116,97,100,100,96,97,100,100,100,117,8,51,37,32,113,116,100,
- 100,32,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,
- 97,101,36,97,33,53,52,48,113,32,100,100,100,36,112,49,48,49,113,112,
- 112,112,96,53,100,49,52,52,52,100,100,36,113,36,49,100,100,52,52,52,
- 37,52,112,53,36,37,37,37,49,49,49,101,48,37,49,49,52,49,33,37,37,116,
- 52,100,97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,97,117,
- 112,112,112,48,49,49,113,32,116,101,100,36,112,112,112,112,96,112,
- 48,52,100,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,
- 49,49,33,37,49,49,49,101,0,228,228,32,96,100,100,52,112,37,33,32,37,
- 113,36,32,53,37,49,49,49,37,53,33,49,49,116,117,32,37,37,36,112,32,
- 53,96,97,100,100,100,97,101,96,100,100,33,117,48,96,33,97,97,112,96,
- 37,48,49,49,113,32,32,49,49,113,112,112,112,48,33,97,100,100,37,117,
- 100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,48,33,49,113,49,33,37,37,37,36,97,97,33,53,
- 96,100,100,100,97,101,96,100,100,97,97,33,53,32,97,49,96,117,37,48,
- 49,49,113,112,49,48,49,113,48,49,113,116,52,101,113,49,49,49,49,49,
- 49,33,33,96,52,53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,97,
- 37,49,48,49,113,112,49,97,112,96,37,37,100,52,32,49,49,49,33,116,36,
- 100,100,52,52,52,52,112,37,113,36,37,37,37,49,49,97,52,97,36,49,49,
- 37,37,101,33,37,116,37,97,97,97,97,100,100,100,49,100,97,100,36,101,
- 100,96,97,33,53,37,113,112,112,48,49,49,100,37,49,48,49,53,112,112,
- 112,112,96,112,53,52,52,52,100,100,100,52,32,117,49,49,33,52,52,52,
- 52,48,52,36,37,49,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,
- 100,100,96,97,100,100,100,49,8,51,116,49,48,33,49,49,37,37,37,37,37,
- 116,52,97,97,100,97,100,100,100,52,100,100,100,100,97,101,36,97,33,
- 53,52,48,113,96,101,100,100,100,33,49,48,49,113,112,112,112,96,117,
- 37,37,52,52,52,100,100,36,113,116,100,100,100,52,52,52,37,52,112,97,
- 33,37,37,37,49,49,49,53,116,37,49,49,52,49,33,37,37,116,52,97,97,97,
- 97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,33,49,113,112,48,
- 49,49,113,37,96,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,52,49,49,100,100,52,52,52,52,37,101,37,52,49,33,37,49,49,49,53,
- 0,228,228,112,37,49,49,33,112,117,33,112,37,113,36,52,33,37,49,49,
- 49,37,53,33,49,49,116,117,32,37,37,36,49,33,53,96,97,100,100,100,37,
- 53,48,49,49,32,117,53,96,33,97,97,112,96,37,48,49,49,113,112,49,48,
- 49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,48,
- 33,49,113,49,33,37,37,37,116,97,97,33,53,96,100,100,100,33,33,96,100,
- 100,97,97,33,53,32,97,113,97,117,117,101,100,100,36,117,49,48,49,113,
- 48,49,113,32,53,101,113,49,49,49,49,49,49,97,32,36,100,96,100,100,
- 97,97,97,97,33,53,101,112,48,113,48,49,49,49,37,49,49,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,113,96,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,52,53,49,49,49,37,37,101,33,37,116,
- 112,96,97,97,97,100,100,100,37,117,97,100,36,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,112,96,
- 100,52,52,100,100,100,116,33,48,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,101,100,36,49,49,37,37,37,101,97,113,33,101,100,96,
- 97,100,100,100,37,8,51,33,97,97,32,49,49,37,37,37,49,49,116,116,96,
- 97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,
- 32,100,100,100,36,96,48,100,100,36,112,112,112,96,117,37,37,52,100,
- 52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,
- 49,49,37,53,33,49,49,52,49,33,37,37,37,49,96,97,97,97,100,100,48,101,
- 97,48,49,97,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,
- 49,113,112,112,112,112,32,113,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,37,16,228,228,116,
- 36,100,100,52,112,33,52,112,37,113,36,52,33,37,49,49,49,101,97,36,
- 49,49,116,117,32,37,37,48,37,33,53,96,97,100,100,100,97,101,96,100,
- 100,33,117,53,49,32,97,97,112,96,37,48,49,49,113,32,33,48,49,113,112,
- 112,112,48,33,97,100,100,37,112,49,49,49,49,97,36,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,53,53,49,113,49,
- 33,37,37,37,36,97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,
- 33,53,32,97,49,96,117,117,101,100,100,36,36,100,101,100,36,48,49,113,
- 100,97,101,113,49,49,49,49,49,49,33,96,112,48,96,100,100,97,97,97,
- 100,36,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,37,100,52,32,49,49,49,33,48,36,49,49,33,52,52,52,112,117,97,
- 33,37,49,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,97,97,97,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,97,97,36,112,112,112,
- 48,49,49,100,113,48,100,100,48,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,96,52,36,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 33,12,51,48,97,48,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,
- 100,36,101,48,100,100,100,97,101,36,97,33,53,52,48,113,96,101,100,
- 100,36,49,117,48,49,113,112,112,112,96,117,37,32,52,52,52,100,100,
- 36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,117,
- 48,97,100,100,53,49,33,37,37,116,52,97,97,97,97,100,100,48,33,100,
- 96,100,116,96,97,97,97,33,117,97,112,112,112,48,49,49,113,52,36,49,
- 49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,112,113,36,116,117,32,49,49,49,117,16,228,228,97,
- 37,100,100,52,112,117,33,112,37,113,36,52,33,37,49,49,49,37,53,33,
- 49,49,116,117,100,100,32,36,37,33,53,96,97,100,100,100,97,101,96,100,
- 100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,96,33,49,49,113,112,
- 112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,48,33,49,113,
- 49,33,37,37,37,48,97,97,33,53,96,100,100,100,49,48,48,49,49,96,97,
- 33,53,32,97,49,112,96,117,101,100,100,36,113,100,101,100,36,48,49,
- 113,52,97,101,113,49,49,49,49,49,49,97,97,48,100,96,100,100,97,97,
- 97,97,33,53,53,112,48,113,48,49,49,97,49,36,49,49,113,112,49,97,112,
- 96,37,37,100,52,112,49,49,49,97,100,53,100,100,52,52,52,52,112,117,
- 33,32,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,97,97,
- 97,97,100,100,100,53,100,48,49,113,101,100,96,97,33,53,101,112,112,
- 112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,117,48,52,52,52,
- 100,100,100,52,37,97,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,
- 49,37,53,33,49,49,37,37,37,37,37,116,52,33,117,53,96,100,100,100,53,
- 12,51,117,32,112,48,49,49,37,37,37,37,37,116,116,96,97,100,97,100,
- 100,36,48,100,96,100,100,97,97,100,97,33,53,52,48,113,96,101,100,100,
- 36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 53,53,49,49,33,52,52,37,52,96,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,52,49,33,37,37,37,49,96,97,97,97,100,100,48,101,33,96,100,116,96,
- 97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,32,113,48,52,52,52,100,100,100,52,49,100,100,100,52,52,52,
- 116,116,101,37,101,117,101,32,49,49,49,101,5,228,228,116,36,100,100,
- 52,112,37,33,112,37,113,36,52,33,37,49,49,49,37,116,117,100,100,117,
- 117,32,37,37,36,37,33,53,96,97,100,100,100,113,36,97,100,100,33,117,
- 53,96,33,97,33,113,96,37,48,49,49,113,112,49,48,49,113,112,112,112,
- 48,33,97,100,100,37,97,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,36,97,36,49,113,49,33,
- 37,37,37,36,97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,33,
- 53,32,97,49,96,117,37,48,49,49,113,112,49,48,49,113,48,49,113,96,52,
- 101,113,49,49,49,49,49,49,33,53,32,52,100,100,100,97,97,97,97,33,53,
- 53,112,48,113,48,49,49,33,36,49,48,49,113,112,48,113,112,96,37,37,
- 100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,116,101,101,100,100,32,37,101,33,37,48,37,97,97,97,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,97,97,36,112,112,112,
- 48,49,49,100,113,32,48,49,53,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,52,52,96,52,36,37,37,37,49,49,49,
- 101,36,49,49,49,37,37,37,53,117,113,97,113,117,49,96,100,100,100,113,
- 9,51,36,113,48,100,100,100,32,37,37,37,37,96,116,96,97,100,97,100,
- 100,36,113,112,96,100,100,97,113,113,49,32,53,52,48,113,96,101,100,
- 100,36,101,96,100,100,36,112,112,112,96,117,37,37,52,52,52,100,100,
- 36,113,52,33,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,117,96,
- 117,100,100,53,49,33,37,37,37,33,97,97,97,97,100,100,48,101,48,97,
- 100,116,96,97,97,97,33,100,97,112,112,112,48,49,49,113,117,49,48,49,
- 113,112,112,112,112,96,112,48,52,52,100,100,100,100,52,32,116,100,
- 100,52,52,52,116,113,100,37,113,100,116,32,49,49,49,53,5,228,228,97,
- 100,100,100,52,112,117,49,117,37,113,36,52,33,37,49,49,49,37,53,33,
- 49,49,116,117,32,49,37,36,37,33,53,96,97,100,100,100,49,32,96,100,
- 100,33,117,53,96,33,97,33,113,32,36,48,49,49,113,113,52,48,49,113,
- 112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,52,101,33,
- 49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,53,53,96,100,100,
- 97,97,33,53,32,97,49,96,117,117,101,100,100,36,52,32,100,100,36,48,
- 49,113,52,97,101,113,49,49,49,49,49,49,97,52,52,36,49,49,49,96,97,
- 97,97,33,48,53,112,48,113,48,49,49,97,52,52,48,49,113,112,116,116,
- 36,96,37,37,100,52,112,49,49,49,97,49,48,49,49,33,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,52,101,96,100,100,32,37,101,33,37,36,37,97,
- 97,97,97,100,100,100,53,112,53,49,113,101,100,96,97,97,97,96,112,112,
- 112,48,49,49,100,49,100,48,49,53,112,112,112,112,32,113,48,52,52,52,
- 100,100,100,116,117,36,100,100,52,52,52,52,52,48,52,36,37,37,49,49,
- 49,49,37,32,53,49,49,37,37,37,117,52,113,97,52,49,53,96,100,100,100,
- 101,9,51,113,53,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,
- 100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,
- 36,112,49,48,49,113,112,112,112,96,117,37,32,52,52,52,100,100,36,113,
- 97,36,100,100,52,100,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,
- 49,49,52,49,33,37,37,116,100,97,97,97,97,100,100,48,53,100,96,100,
- 116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,32,32,49,49,113,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,116,36,101,37,49,49,33,37,49,49,49,37,85,177,177,97,36,100,100,
- 52,112,117,33,112,37,113,36,52,33,37,49,49,49,101,33,96,100,100,117,
- 117,32,37,37,36,37,33,53,96,97,100,100,100,97,101,96,100,100,33,117,
- 53,96,33,97,97,112,96,37,48,49,49,113,112,49,48,49,49,113,112,112,
- 48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,48,33,49,113,49,33,
- 37,37,37,36,97,100,33,53,96,100,100,100,97,101,96,100,100,97,97,33,
- 53,32,97,49,32,116,117,101,100,100,36,112,49,48,49,113,48,49,113,100,
- 97,101,113,49,49,49,49,49,49,33,116,101,101,96,100,100,97,97,97,97,
- 33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,
- 37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,33,32,
- 37,37,37,49,49,97,116,48,33,49,49,37,49,101,33,37,36,37,97,97,97,97,
- 100,100,100,97,101,96,100,36,101,100,96,97,33,53,113,112,112,112,48,
- 49,49,100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,52,32,96,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,
- 53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,97,93,
- 102,33,37,48,33,49,49,37,37,37,37,37,116,52,97,97,100,97,100,100,36,
- 101,52,53,49,49,96,53,37,97,33,53,52,48,113,96,101,100,100,36,37,96,
- 48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,32,33,49,
- 49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,101,100,36,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,48,101,49,48,49,97,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,116,117,36,100,100,52,52,52,116,36,
- 101,37,49,49,33,37,49,49,49,117,85,177,177,36,112,49,49,33,112,117,
- 33,52,32,113,36,52,33,37,49,49,49,117,53,33,49,49,116,117,32,37,37,
- 116,37,33,53,96,97,100,100,100,117,101,96,100,100,33,117,53,96,97,
- 53,97,112,96,37,48,49,49,113,117,49,48,49,113,112,112,112,48,33,97,
- 100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,36,117,33,49,113,49,33,37,37,37,36,
- 97,97,33,53,96,100,100,100,113,49,48,49,49,96,97,33,53,32,97,49,96,
- 37,96,101,100,100,36,52,36,49,49,113,48,49,113,52,97,101,113,49,49,
- 49,49,49,49,97,117,33,100,96,100,100,97,97,97,97,33,53,101,112,48,
- 113,48,49,49,97,49,101,101,100,36,112,101,97,112,96,37,37,100,52,112,
- 49,49,49,97,33,48,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,52,96,96,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,
- 49,49,97,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,113,
- 36,100,100,48,112,112,112,112,96,112,48,52,52,52,100,100,100,116,117,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,117,53,33,49,
- 49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,117,93,102,96,117,
- 48,116,100,100,32,49,49,49,49,116,116,96,100,100,97,100,100,36,53,
- 100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,
- 49,48,49,113,112,112,112,96,117,37,37,52,52,100,100,100,36,113,97,
- 36,100,100,52,52,100,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,52,49,33,37,37,116,52,97,97,100,97,100,100,48,53,100,96,100,116,
- 96,97,100,97,33,97,97,112,48,113,48,49,49,113,52,112,48,49,113,48,
- 113,112,112,96,112,48,52,52,100,100,100,100,52,117,49,100,100,52,52,
- 52,116,48,101,37,49,113,116,32,49,49,49,101,84,177,177,97,36,100,100,
- 52,112,117,33,112,37,113,36,52,33,37,49,49,49,101,53,49,49,49,116,
- 117,32,37,37,36,37,33,53,96,97,100,100,100,113,52,53,49,49,32,117,
- 53,96,33,97,97,48,97,37,48,49,49,113,100,53,49,49,49,113,112,112,48,
- 33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,48,33,49,113,49,33,37,
- 37,37,36,97,97,97,100,97,100,100,100,97,101,96,100,100,97,97,33,53,
- 32,97,49,96,117,37,48,49,49,113,112,49,48,49,113,48,49,113,116,52,
- 101,113,49,49,49,49,49,49,33,113,53,36,53,49,49,96,100,100,100,36,
- 53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,49,49,49,97,116,48,33,49,49,37,37,113,33,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,48,113,48,49,
- 49,100,37,49,48,49,53,112,48,113,112,96,112,48,52,100,52,100,100,100,
- 52,37,52,100,100,52,100,52,52,52,48,52,36,37,37,49,49,49,49,101,117,
- 36,49,49,37,37,37,53,100,113,97,100,52,53,96,100,100,100,49,93,102,
- 53,37,48,33,49,49,37,37,37,37,37,116,52,97,97,100,97,100,100,36,37,
- 49,100,100,100,97,53,37,97,33,53,52,48,113,96,101,100,100,36,112,49,
- 48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,96,100,
- 100,100,52,52,52,37,52,48,52,36,37,37,49,49,49,49,117,53,33,49,49,
- 52,49,33,37,37,116,52,97,97,100,97,100,100,48,37,48,48,49,97,96,97,
- 97,97,33,97,97,112,112,112,48,49,49,113,97,117,48,49,113,112,112,112,
- 112,112,101,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,
- 116,101,37,49,49,33,37,49,49,49,53,84,177,177,37,96,100,100,52,112,
- 117,33,32,37,113,36,52,33,37,49,49,49,33,48,33,49,49,116,117,32,37,
- 37,36,37,33,53,96,97,100,100,100,117,101,96,100,100,33,117,53,96,33,
- 97,97,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,48,33,
- 100,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,52,48,33,49,113,49,33,37,37,37,
- 36,97,97,33,53,96,100,100,100,53,101,101,100,100,97,97,33,53,32,97,
- 49,96,117,117,101,100,100,36,96,53,100,100,36,48,49,113,52,97,101,
- 113,49,49,49,49,49,49,97,112,33,100,96,100,100,97,97,97,97,33,53,101,
- 112,48,113,48,49,49,97,97,36,49,49,113,112,101,97,112,96,37,37,100,
- 52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,
- 37,49,49,97,52,48,49,49,49,37,37,101,33,37,36,37,97,97,97,100,100,
- 100,100,117,101,96,100,36,101,100,96,97,33,53,101,112,48,113,48,49,
- 49,100,33,36,100,100,48,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,116,112,53,100,100,52,52,52,52,52,116,49,36,37,37,37,49,49,49,
- 37,53,33,49,49,37,37,37,53,117,113,97,100,100,96,97,100,100,100,37,
- 93,102,116,32,112,33,49,49,37,37,49,49,49,116,116,96,100,100,97,100,
- 100,36,53,100,96,100,100,97,37,117,97,33,53,52,48,113,96,101,100,100,
- 36,116,100,101,100,36,112,112,112,96,117,37,37,52,52,52,100,100,100,
- 100,116,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,101,117,
- 36,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,53,100,96,100,
- 116,96,100,97,97,33,97,97,112,112,48,49,49,49,113,112,49,48,49,113,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,37,32,49,49,33,52,
- 52,116,36,101,37,49,49,33,37,49,49,49,37,4,228,228,116,36,100,100,
- 52,112,117,33,112,37,113,36,52,33,37,49,49,49,101,113,37,49,49,116,
- 117,32,37,37,36,37,36,53,96,97,100,100,100,33,32,100,100,100,33,117,
- 53,96,33,97,97,112,32,36,48,49,49,113,116,49,49,49,113,112,112,112,
- 48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,33,48,49,113,49,33,
- 37,37,37,36,97,97,97,97,97,100,100,100,97,101,96,100,100,97,97,33,
- 53,32,97,49,96,53,116,101,100,100,36,112,49,48,49,113,48,49,113,52,
- 100,101,33,49,49,49,49,49,49,33,48,32,116,96,100,100,97,97,100,100,
- 36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,97,117,112,96,37,
- 37,100,52,112,49,49,49,33,53,113,49,49,33,52,52,52,112,117,97,33,37,
- 37,37,49,49,49,49,53,33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,
- 100,100,113,53,97,100,36,101,100,96,97,33,53,101,112,112,112,48,49,
- 49,100,37,49,48,49,53,48,113,112,112,96,112,48,52,52,100,100,100,100,
- 52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,33,
- 96,100,100,32,37,37,53,97,113,97,100,100,96,97,100,100,100,33,9,51,
- 112,48,48,33,49,49,37,37,37,37,37,116,52,97,97,100,97,100,100,36,117,
- 37,97,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,37,33,
- 48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,52,49,32,100,
- 100,52,52,52,112,33,48,52,36,37,37,37,49,49,49,37,32,53,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,48,101,33,96,100,116,96,97,97,
- 97,33,97,97,112,112,112,48,49,49,113,37,49,100,100,36,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,49,117,100,100,52,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,117,4,228,228,49,49,100,100,52,112,
- 117,33,112,37,113,36,52,33,37,49,49,49,101,32,32,49,49,116,117,32,
- 37,37,36,37,33,53,96,97,100,100,100,33,53,49,49,49,32,117,53,96,33,
- 97,97,112,96,37,48,49,49,113,101,52,48,49,113,112,112,112,48,33,97,
- 100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,52,48,33,49,113,49,33,37,37,37,36,
- 97,97,33,53,96,100,100,100,37,53,48,49,49,96,97,33,53,32,97,49,96,
- 117,53,100,100,100,36,112,49,48,49,113,48,49,113,52,100,101,33,49,
- 49,49,49,49,49,97,49,36,100,96,100,100,97,97,97,97,33,53,101,112,48,
- 113,48,49,49,97,117,97,48,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,97,97,32,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 33,101,36,32,49,49,37,37,37,116,32,36,37,97,97,97,97,100,100,100,33,
- 96,101,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,113,
- 32,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,116,97,
- 36,49,49,33,52,52,52,52,48,52,36,37,37,37,49,49,49,101,100,53,49,49,
- 37,37,37,53,97,113,97,100,100,96,97,100,100,100,53,9,51,53,117,117,
- 33,49,49,37,37,37,49,49,116,116,96,100,100,97,100,100,36,53,100,96,
- 100,100,97,37,117,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,
- 113,112,112,112,96,117,37,37,52,52,52,100,100,100,37,116,36,100,100,
- 52,52,52,97,52,48,116,37,37,37,37,49,49,49,37,53,33,49,49,52,49,33,
- 37,37,116,52,97,97,100,97,100,100,48,53,100,96,100,116,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,49,113,49,48,49,113,112,112,112,112,
- 112,101,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,
- 48,112,49,49,33,37,49,49,49,101,81,177,177,97,36,100,100,52,112,117,
- 33,112,37,113,36,101,33,37,49,49,49,37,53,33,49,49,116,117,32,37,37,
- 36,37,97,100,97,97,100,100,100,97,101,96,100,100,33,117,53,96,33,97,
- 97,112,112,112,48,49,49,113,112,49,48,49,113,48,113,112,48,33,97,100,
- 100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,36,113,116,100,36,49,33,37,37,37,36,97,
- 97,33,48,96,100,100,100,97,101,96,100,100,97,97,33,53,32,97,49,96,
- 117,117,101,100,100,36,52,97,48,49,113,48,49,113,52,97,101,53,100,
- 100,100,100,100,100,52,101,117,117,96,100,100,97,97,97,100,36,53,53,
- 48,49,113,48,49,49,97,37,49,48,49,113,112,97,117,112,96,37,37,100,
- 52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,
- 37,49,49,113,33,53,33,49,49,37,37,101,48,37,36,117,97,97,97,97,100,
- 100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,48,113,48,49,
- 49,100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 100,116,36,100,100,52,52,52,52,52,116,49,36,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,37,53,33,36,116,100,100,96,97,100,100,100,113,92,102,
- 101,48,37,117,100,100,32,37,37,37,37,116,116,96,97,100,97,100,100,
- 36,33,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,
- 117,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,49,52,
- 48,49,49,33,52,52,49,52,48,52,36,37,37,37,49,49,49,117,53,33,49,49,
- 52,49,33,37,37,116,52,97,97,97,100,100,100,48,53,100,96,100,116,96,
- 97,97,97,33,33,52,112,112,112,48,49,49,113,37,116,101,100,36,112,112,
- 112,112,112,101,48,52,52,52,100,100,100,52,37,49,100,100,52,52,52,
- 116,36,96,112,97,97,33,37,49,49,49,53,81,177,177,36,97,100,100,52,
- 112,117,33,112,37,113,36,101,33,37,49,49,49,117,53,33,49,49,116,117,
- 32,37,37,36,37,33,53,96,97,100,100,100,113,117,96,100,100,33,117,53,
- 96,33,97,97,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,
- 48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,116,37,48,49,113,49,33,
- 37,37,37,36,97,97,33,53,96,100,100,100,117,101,96,100,100,97,97,33,
- 53,32,97,49,96,117,117,101,100,100,36,117,49,48,49,113,48,49,113,52,
- 97,101,113,49,49,49,49,49,49,97,100,97,97,53,49,49,96,97,97,97,33,
- 53,53,112,48,113,48,49,49,97,32,49,48,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,97,117,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,36,37,100,100,100,32,37,101,36,37,36,37,97,97,97,97,
- 100,100,100,117,101,96,100,36,101,100,96,97,33,53,101,112,112,48,49,
- 49,49,100,37,49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,
- 100,116,33,117,49,49,33,52,52,52,52,116,49,36,37,37,37,49,49,49,101,
- 97,36,49,49,37,37,37,53,33,48,116,112,112,96,97,100,100,100,101,92,
- 102,100,32,53,33,49,49,37,37,37,49,49,116,52,97,100,100,97,100,100,
- 36,101,96,97,100,100,97,101,36,100,33,48,52,48,113,96,101,100,100,
- 36,36,36,100,100,36,112,112,112,32,116,37,37,52,52,52,100,100,36,36,
- 97,36,100,100,52,52,52,32,33,48,116,37,37,37,37,49,49,49,101,37,97,
- 100,100,53,49,33,37,37,116,52,97,97,97,97,100,100,48,101,96,100,100,
- 116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,116,36,101,37,116,36,117,32,49,49,49,37,81,176,177,97,36,100,
- 100,52,112,117,33,112,37,113,36,52,33,37,49,49,49,37,32,48,49,49,37,
- 116,32,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,33,117,
- 53,96,33,97,97,112,96,37,48,49,49,113,36,116,100,100,36,112,112,48,
- 49,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,48,33,49,113,49,33,
- 37,37,37,117,96,97,33,53,96,100,100,100,113,53,97,100,100,97,97,33,
- 53,96,53,49,96,117,117,101,100,100,36,32,32,49,49,113,48,49,113,52,
- 112,101,113,49,49,49,49,49,49,33,100,97,101,96,100,100,97,97,97,100,
- 36,53,101,48,49,113,48,49,49,97,49,112,48,49,113,112,49,33,113,32,
- 36,37,100,52,112,49,49,49,33,33,33,49,49,33,52,52,52,32,117,97,33,
- 37,37,37,49,49,33,97,48,33,49,49,37,37,37,96,32,36,117,97,97,97,97,
- 100,100,100,113,97,48,49,113,101,100,96,97,33,53,101,112,112,112,48,
- 49,49,100,49,48,49,49,53,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,
- 53,33,49,49,37,37,37,53,97,113,33,53,97,53,96,100,100,100,97,28,102,
- 97,112,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,
- 33,100,96,100,100,97,101,36,97,36,53,52,48,113,96,101,100,100,36,33,
- 112,101,100,36,112,112,112,96,117,37,37,52,52,52,100,100,36,97,36,
- 48,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 52,49,33,37,37,116,52,97,97,97,97,100,100,116,96,101,96,100,116,96,
- 97,97,97,33,33,52,112,112,112,48,49,49,113,117,49,48,49,113,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,100,116,36,100,100,52,52,52,
- 116,36,101,37,101,100,116,32,49,49,49,117,81,176,177,117,49,49,49,
- 33,112,117,33,112,37,113,36,52,33,37,49,49,49,117,53,33,49,49,116,
- 117,32,37,37,36,37,33,53,96,97,100,100,100,49,49,97,100,100,33,117,
- 53,96,33,97,97,112,96,37,48,49,49,113,112,49,48,49,113,112,112,112,
- 48,33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,33,53,49,113,49,33,
- 37,37,37,36,97,97,33,53,96,100,100,100,49,36,48,49,49,96,97,33,53,
- 32,97,49,96,117,117,101,100,100,36,100,100,48,49,113,48,49,113,52,
- 100,101,113,49,49,49,49,49,49,97,101,117,101,96,100,100,97,97,97,97,
- 33,53,53,112,48,113,48,49,49,97,32,49,48,49,113,112,49,97,48,97,37,
- 37,100,52,112,49,49,49,97,32,116,49,49,33,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,48,33,36,49,49,37,37,101,33,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,
- 49,53,112,49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,100,
- 116,117,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,49,53,
- 33,49,49,37,37,37,53,97,113,97,49,49,53,96,100,100,100,117,28,102,
- 32,37,32,53,49,49,37,37,37,37,49,116,52,97,97,100,97,100,100,36,117,
- 32,100,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,
- 49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,37,116,36,
- 100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,113,36,49,49,49,
- 52,101,116,32,49,116,52,97,97,97,97,100,100,48,37,97,100,100,116,96,
- 97,97,97,33,97,97,112,112,112,48,49,49,113,116,48,100,100,36,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,112,117,49,49,33,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,101,80,176,177,97,36,100,100,52,112,
- 117,33,112,37,113,36,32,33,37,49,49,49,101,113,116,100,100,97,117,
- 32,37,37,36,37,33,48,96,97,100,100,100,97,101,96,100,100,33,117,53,
- 96,33,97,97,112,32,36,48,49,49,113,112,49,48,49,113,112,112,112,48,
- 33,97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,48,33,49,113,49,33,37,
- 37,37,36,97,97,33,53,96,100,100,100,100,101,96,100,100,97,97,33,53,
- 32,97,49,96,117,117,101,100,100,100,36,49,48,49,113,48,49,113,52,117,
- 101,113,49,49,49,49,49,49,33,97,33,96,101,100,100,97,97,97,97,36,53,
- 101,112,48,113,48,49,49,97,53,32,49,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,33,53,33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,
- 100,100,52,97,100,100,36,101,49,53,96,36,53,101,112,112,112,48,49,
- 49,100,97,48,49,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,53,36,49,49,33,52,52,52,52,48,52,36,37,37,37,49,49,49,37,116,117,
- 100,100,32,37,37,53,97,113,97,100,100,96,97,100,100,100,49,28,102,
- 117,112,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,
- 49,101,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,
- 49,48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,36,113,97,36,
- 100,100,52,52,52,112,33,48,52,36,37,37,37,49,49,49,101,53,49,49,49,
- 52,116,116,32,49,116,52,97,97,97,97,100,100,48,53,100,96,100,116,96,
- 97,97,97,33,33,52,112,112,112,48,49,49,113,117,49,48,49,113,112,112,
- 112,112,96,32,37,52,52,52,100,100,100,52,37,117,100,100,52,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,53,80,176,177,116,37,100,100,52,112,
- 117,33,112,37,113,36,32,33,37,49,49,49,117,53,33,49,49,116,117,32,
- 37,37,36,37,33,53,96,97,100,100,100,97,101,96,100,100,33,117,53,96,
- 33,53,52,112,96,37,48,49,49,113,112,49,48,49,113,112,112,112,48,33,
- 97,100,100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,52,48,33,49,113,49,33,37,37,37,
- 36,97,97,33,53,96,100,100,100,97,101,96,100,100,97,97,33,53,32,53,
- 100,117,117,117,101,100,100,36,117,49,48,49,113,48,49,113,52,117,101,
- 113,49,49,49,49,49,49,97,96,117,101,96,100,100,97,97,97,97,33,53,53,
- 112,48,113,48,49,49,97,100,49,48,49,113,112,49,97,112,96,37,37,100,
- 52,112,49,49,49,33,116,36,100,100,52,52,52,52,52,112,97,33,37,37,37,
- 49,49,97,116,48,33,49,49,37,37,37,116,32,36,37,97,97,97,97,100,100,
- 100,113,101,100,100,36,37,53,53,96,36,53,101,112,112,112,48,49,49,
- 100,37,49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,100,116,
- 117,36,100,100,52,52,52,52,52,48,96,33,37,37,37,49,49,49,101,97,53,
- 49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,37,28,102,52,
- 96,48,49,49,49,37,37,37,37,37,116,52,97,97,100,97,100,100,36,53,100,
- 96,100,100,97,101,36,97,33,53,116,100,36,96,101,100,100,36,36,37,49,
- 49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,117,37,49,
- 49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,52,113,48,97,100,116,96,97,97,
- 97,33,97,97,112,112,112,48,49,49,113,116,36,100,100,36,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,
- 36,101,37,97,49,33,37,49,49,49,37,0,176,177,97,36,100,100,52,112,117,
- 33,112,37,113,36,52,33,37,49,49,49,37,36,117,100,100,117,117,32,37,
- 37,36,37,33,53,49,96,100,100,100,113,32,48,49,49,32,117,53,96,33,97,
- 97,112,96,37,48,49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,
- 100,37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,36,116,96,100,36,49,33,49,37,37,36,97,
- 97,33,53,96,100,100,100,113,32,48,49,49,96,97,33,53,32,97,49,96,117,
- 117,101,100,100,36,52,101,101,100,36,48,49,113,52,97,101,33,49,49,
- 49,49,49,49,33,32,48,100,100,100,100,97,97,97,97,33,53,101,112,48,
- 113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,53,49,33,112,49,
- 49,49,33,97,97,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,
- 116,117,97,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,97,
- 101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,101,52,
- 100,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,53,
- 33,49,49,33,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,53,97,113,97,112,100,96,97,100,100,100,33,8,102,49,48,37,
- 117,100,100,32,37,37,37,37,116,52,97,97,100,97,100,100,36,53,100,96,
- 100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,113,96,100,
- 100,36,112,112,112,112,96,37,37,52,52,52,100,100,36,113,97,36,100,
- 100,52,52,52,49,52,48,52,36,37,37,37,49,49,49,53,97,33,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,100,36,36,49,49,97,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,32,33,100,100,52,52,52,116,36,101,
- 37,49,101,116,32,49,49,49,117,0,176,177,96,49,100,100,52,112,117,33,
- 112,37,113,36,52,33,37,49,49,49,117,53,33,49,49,116,117,32,37,37,36,
- 37,33,53,96,97,100,100,100,97,101,96,100,100,33,117,53,96,33,100,97,
- 112,96,37,48,49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,
- 37,37,100,100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,52,48,33,49,113,49,33,37,37,37,36,97,97,33,
- 53,96,100,100,100,97,101,96,100,100,97,97,33,53,32,97,52,96,117,117,
- 101,100,100,36,112,49,48,49,113,48,49,113,52,97,101,113,49,49,49,49,
- 49,49,97,33,100,97,53,49,49,96,97,97,97,33,53,101,112,48,113,48,49,
- 49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,
- 52,48,49,49,33,52,52,52,52,112,97,33,37,37,37,49,49,97,116,48,33,49,
- 49,37,37,101,36,37,36,37,97,97,97,97,100,100,100,101,112,96,100,36,
- 101,100,96,97,33,53,101,112,112,112,48,49,49,49,33,97,100,100,48,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,116,117,36,100,100,52,52,
- 52,52,52,48,52,36,37,37,37,49,49,49,37,96,32,49,49,37,37,37,53,97,
- 113,97,100,49,53,96,100,100,100,53,8,102,112,37,53,33,49,49,37,37,
- 37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,48,97,100,100,52,52,52,37,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,36,37,37,116,52,97,
- 97,97,97,100,100,48,53,100,96,100,116,96,97,97,100,33,97,97,112,112,
- 112,48,49,49,113,32,36,48,49,113,112,48,113,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,52,33,37,49,
- 49,49,101,85,176,177,97,36,100,100,52,112,117,33,112,37,113,36,116,
- 100,32,49,49,49,101,116,37,49,49,116,117,32,37,37,36,37,33,53,96,100,
- 100,100,100,113,48,97,100,100,33,117,53,96,33,97,100,112,96,37,48,
- 49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,
- 100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,117,32,49,113,49,33,37,49,37,36,97,97,33,53,96,
- 100,100,100,113,48,97,100,100,97,97,33,53,32,100,49,96,117,117,101,
- 100,100,36,32,33,48,49,113,48,49,113,52,117,101,113,49,49,49,49,49,
- 49,33,117,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,
- 49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,100,
- 48,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,
- 36,101,36,97,97,33,53,101,112,112,112,48,49,49,100,37,49,48,49,53,
- 112,112,48,113,96,112,48,52,52,52,100,100,100,52,32,33,100,100,52,
- 52,100,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,
- 97,113,97,36,101,96,97,100,100,100,113,29,102,37,32,53,33,49,49,37,
- 37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,117,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,
- 97,97,97,100,100,48,49,36,49,49,97,96,97,97,97,33,97,100,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,49,97,100,100,52,52,52,116,36,101,37,49,52,36,37,49,49,
- 49,53,85,176,177,36,32,49,49,33,112,117,33,112,37,113,36,116,117,32,
- 49,49,49,53,112,48,49,49,116,117,32,37,37,36,37,33,53,96,97,100,100,
- 100,117,101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,
- 112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,
- 116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,52,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,117,
- 101,96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,112,
- 49,48,49,113,48,49,113,52,97,101,113,49,49,49,49,49,49,97,116,97,101,
- 96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,
- 52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,
- 53,37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,
- 33,53,101,112,112,112,48,49,49,100,36,97,100,100,48,112,112,112,112,
- 96,48,49,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,101,100,48,49,49,37,37,37,53,97,113,97,36,
- 37,97,97,100,100,100,101,29,102,36,36,53,33,49,49,37,37,37,37,37,116,
- 116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,
- 48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,
- 52,52,52,100,100,36,113,36,112,49,49,33,52,52,37,52,48,52,36,37,37,
- 37,49,49,49,101,97,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,
- 100,96,53,100,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,
- 113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,116,36,101,37,49,117,53,37,49,49,49,37,
- 69,176,177,97,36,100,100,52,112,117,33,112,37,113,36,52,33,37,49,49,
- 49,37,53,33,49,49,116,117,32,37,37,117,36,33,53,96,97,100,100,100,
- 49,117,97,100,100,33,117,53,96,36,97,97,112,96,101,100,100,100,36,
- 112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,
- 116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,36,33,49,49,113,49,33,37,37,49,36,97,97,33,53,49,49,49,49,112,
- 116,97,100,100,97,100,36,53,32,97,49,96,117,117,101,100,100,36,52,
- 96,101,100,36,48,49,113,52,97,101,53,100,100,100,100,100,100,52,52,
- 97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,33,116,100,100,
- 32,37,101,33,37,36,37,97,97,97,97,100,100,100,113,112,96,100,36,101,
- 100,96,97,33,53,101,112,112,112,48,49,49,112,37,49,48,49,53,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,
- 97,100,117,101,97,100,100,100,97,25,102,33,36,53,33,49,49,37,37,37,
- 37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,
- 97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,52,32,100,100,52,52,52,37,52,
- 48,52,36,37,37,37,49,49,49,37,36,32,49,49,52,49,53,37,37,116,52,97,
- 97,97,97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,100,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,52,112,49,49,49,33,52,52,116,36,101,37,49,49,53,37,
- 49,49,49,117,69,176,177,116,49,100,100,52,112,117,33,112,37,113,36,
- 52,48,37,49,49,49,101,37,97,100,100,117,117,32,37,37,36,37,33,53,96,
- 97,100,100,100,33,112,48,49,49,32,117,53,96,33,97,97,112,96,37,48,
- 49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,
- 100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,52,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,
- 100,100,33,112,48,49,49,96,97,33,53,32,97,49,96,117,117,101,100,100,
- 36,100,112,48,49,113,48,49,113,52,97,101,113,49,49,49,49,49,49,97,
- 53,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,
- 49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,
- 100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,37,32,49,49,
- 37,37,101,33,37,36,37,97,97,97,97,100,100,100,33,33,96,100,36,101,
- 100,101,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,
- 112,112,96,48,49,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,
- 52,48,52,36,37,37,37,49,49,49,37,116,100,100,100,32,37,37,53,97,113,
- 97,100,100,101,97,100,100,100,117,25,102,96,36,53,33,49,49,37,37,37,
- 37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,
- 97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,100,
- 48,52,36,37,49,37,49,49,49,37,53,33,49,49,52,49,33,37,37,96,52,97,
- 97,97,97,100,100,48,101,49,48,49,97,96,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,36,37,49,49,
- 49,101,68,176,177,97,36,100,100,52,112,117,33,112,37,113,36,52,33,
- 37,49,49,49,37,53,33,49,49,116,117,32,37,37,36,37,33,53,96,97,100,
- 100,100,100,101,96,100,100,33,117,53,96,33,97,100,112,96,37,48,49,
- 49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,
- 100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,36,96,101,100,36,49,33,37,37,37,36,97,97,36,53,96,100,
- 100,100,97,101,96,100,100,97,97,33,53,32,100,49,96,117,117,101,100,
- 100,36,112,49,48,49,113,48,49,113,52,97,117,116,49,49,49,49,49,49,
- 33,49,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,
- 37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,
- 49,37,37,101,33,49,36,37,97,97,100,97,100,100,100,97,101,96,100,36,
- 101,100,96,97,33,48,101,112,112,112,48,49,49,100,113,36,100,100,48,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,
- 97,113,97,100,36,97,97,100,100,100,49,25,102,53,36,53,33,49,49,37,
- 37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,101,48,49,49,33,52,52,37,52,48,
- 52,36,37,37,37,49,49,49,117,116,32,49,49,52,49,33,37,37,116,52,97,
- 97,97,97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,97,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,
- 49,49,49,97,65,176,177,117,96,100,100,52,112,117,33,112,37,113,36,
- 52,33,37,49,49,49,53,116,96,100,100,117,117,32,37,37,36,37,33,53,96,
- 97,100,100,100,117,101,96,100,100,33,117,53,96,33,97,97,112,96,37,
- 48,49,49,113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,
- 100,100,100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,52,48,33,49,113,49,33,37,37,37,36,100,97,33,53,96,
- 100,100,100,97,101,96,100,100,97,97,33,53,32,97,49,96,117,117,101,
- 100,100,36,112,49,48,49,113,48,49,113,52,97,101,113,49,49,49,49,49,
- 49,113,37,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,
- 49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,49,
- 100,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,53,53,96,
- 100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,
- 53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 53,97,113,97,100,100,96,97,100,100,100,112,24,102,116,33,53,33,49,
- 49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,
- 97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,
- 112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,
- 37,52,48,52,48,37,37,37,49,49,49,37,53,33,49,49,52,33,116,32,37,116,
- 52,97,97,97,97,100,100,48,37,36,53,49,97,96,97,97,97,36,97,97,112,
- 112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,49,49,100,100,52,52,52,116,36,101,37,49,49,33,
- 37,49,49,49,37,20,176,177,97,36,100,100,52,112,117,33,112,37,113,36,
- 52,33,49,49,49,49,37,53,33,49,49,49,116,32,37,37,36,37,33,53,96,97,
- 100,100,100,33,97,53,49,49,32,117,53,96,33,97,97,112,96,37,48,49,49,
- 49,113,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,
- 100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,36,53,49,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,
- 97,101,96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,96,
- 117,101,100,36,48,49,113,52,97,101,113,49,49,49,49,49,49,33,112,96,
- 101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,
- 49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,
- 52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,
- 101,33,37,36,37,100,97,97,97,100,100,100,97,101,96,100,36,101,32,53,
- 96,33,53,101,112,112,112,48,49,49,100,33,97,101,100,48,112,112,112,
- 48,97,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,101,100,36,49,49,37,37,37,53,97,113,97,
- 100,100,96,97,100,100,100,33,13,102,113,33,53,33,49,49,37,37,37,37,
- 37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,
- 33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,
- 117,37,37,52,52,52,100,100,36,113,32,32,100,100,52,52,52,37,52,48,
- 52,36,37,37,37,49,49,49,117,52,53,49,49,52,49,33,37,37,116,52,97,97,
- 97,97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,117,100,100,100,52,52,52,116,36,37,36,49,49,33,37,49,49,
- 49,117,20,176,177,97,36,100,100,52,112,117,33,112,37,113,48,52,33,
- 37,49,49,49,117,53,33,49,49,116,117,32,37,37,36,37,33,53,96,97,100,
- 100,100,97,101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,
- 113,112,49,48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,
- 100,116,36,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,
- 100,97,101,96,100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,
- 36,113,52,48,49,113,48,49,113,52,97,101,113,49,49,49,49,49,49,97,113,
- 96,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,32,32,49,49,37,
- 37,101,33,37,36,37,97,97,97,97,100,100,100,53,101,101,100,36,101,100,
- 96,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,101,53,49,49,49,37,37,37,53,97,33,97,100,
- 100,96,97,100,100,100,53,13,102,48,36,53,33,49,49,37,37,37,37,37,116,
- 116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,
- 48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,
- 52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,49,37,
- 37,49,49,49,37,53,33,49,49,52,49,53,37,37,116,52,97,97,97,97,100,100,
- 48,37,116,96,100,116,96,97,97,97,36,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,101,65,
- 176,177,36,32,49,49,33,112,117,33,112,37,113,36,52,33,37,49,49,49,
- 37,116,32,49,49,116,117,32,37,49,36,37,33,53,96,97,100,100,100,97,
- 101,96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,112,49,
- 48,49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 48,33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,97,101,96,
- 100,100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,112,49,48,49,
- 49,49,49,113,52,97,101,113,49,49,49,49,49,49,33,37,97,101,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,
- 37,97,100,97,97,100,100,100,97,101,96,100,36,101,100,101,97,33,53,
- 101,112,112,112,48,49,49,100,33,53,48,49,53,112,112,112,48,97,112,
- 48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,
- 37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,
- 97,100,100,100,113,24,102,101,33,53,33,49,49,37,37,37,37,37,116,116,
- 96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,
- 113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,
- 52,52,100,100,36,113,36,49,100,100,52,52,52,37,52,48,100,36,37,37,
- 37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,
- 48,33,100,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 33,32,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,53,65,176,
- 177,97,36,100,100,52,112,117,33,112,37,113,36,52,33,37,49,49,49,37,
- 53,33,49,49,116,117,32,37,37,36,37,33,53,96,97,100,100,100,97,101,
- 96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,112,49,48,
- 49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,48,
- 33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,97,101,96,100,
- 100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,116,97,101,100,
- 100,100,100,36,52,97,101,113,49,49,49,49,49,49,97,36,97,101,96,100,
- 100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,
- 49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,
- 52,112,117,97,33,37,37,37,49,49,97,52,97,36,49,49,37,37,101,33,37,
- 36,49,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,
- 101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,112,
- 48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,
- 37,37,37,49,49,49,101,32,32,49,49,37,37,37,53,97,113,97,100,100,96,
- 97,100,100,100,101,24,102,100,117,48,33,49,49,37,37,37,37,37,116,116,
- 96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,
- 113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,
- 52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,
- 49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,
- 48,101,117,96,100,116,96,97,97,97,36,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,116,36,101,37,49,49,33,49,49,49,49,37,65,229,
- 228,116,36,100,100,52,112,117,33,112,37,113,36,52,33,37,49,49,49,37,
- 53,33,49,49,116,117,32,37,37,36,37,33,53,96,97,100,100,100,97,101,
- 96,100,100,33,117,53,96,33,97,97,112,96,37,48,49,49,113,112,49,48,
- 49,113,112,112,112,48,33,97,100,100,37,37,100,100,100,100,116,36,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,48,
- 33,49,113,49,33,37,37,37,36,97,97,33,53,96,100,100,100,97,101,96,100,
- 100,97,97,33,53,32,97,49,96,117,117,101,100,100,36,112,49,48,49,113,
- 48,49,113,52,97,101,113,49,49,49,49,49,49,33,36,53,100,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,
- 37,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,100,113,53,48,49,53,112,112,112,48,97,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,100,
- 100,100,100,97,88,51,96,117,100,100,100,100,32,37,37,37,37,49,49,96,
- 97,100,97,32,49,49,49,49,49,49,49,96,49,117,97,97,100,36,48,113,112,
- 48,96,100,100,100,100,100,100,36,112,112,112,112,48,49,33,52,52,52,
- 36,48,49,49,49,49,49,49,33,52,52,49,52,100,100,32,37,37,37,33,100,
- 100,100,100,100,100,100,96,100,36,37,37,49,49,96,97,97,97,32,49,49,
- 49,49,49,49,49,96,97,97,97,97,100,36,112,112,112,48,96,100,100,100,
- 100,100,100,36,112,112,112,112,112,48,33,52,52,52,36,48,49,49,49,49,
- 49,49,33,52,52,52,49,97,100,96,100,36,37,33,100,100,52,84,229,228,
- 100,100,100,100,52,52,52,52,52,100,100,32,101,36,37,33,100,100,100,
- 100,100,100,100,32,37,37,37,37,37,49,96,97,97,97,32,49,49,49,49,49,
- 49,49,96,97,97,97,97,100,33,112,112,112,48,96,100,100,100,100,100,
- 100,36,112,112,112,48,49,49,49,49,48,49,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,96,36,37,37,37,49,49,96,97,97,97,32,49,49,49,49,49,49,
- 49,96,97,97,97,97,97,36,112,112,112,48,96,100,100,100,100,100,100,
- 36,48,49,113,100,100,48,33,100,100,100,36,48,49,113,112,53,49,49,49,
- 49,96,97,97,97,97,100,36,112,48,113,48,96,100,100,100,100,100,100,
- 36,112,100,117,112,48,49,33,100,52,52,36,48,49,49,49,49,49,49,33,52,
- 52,52,52,100,100,32,37,37,37,33,100,100,100,100,100,100,100,32,37,
- 101,36,37,49,49,96,97,97,97,32,49,49,49,49,49,49,49,48,49,97,97,97,
- 100,36,112,112,112,48,96,100,100,100,100,100,100,36,112,112,112,112,
- 48,49,33,52,52,52,36,48,49,49,49,49,49,49,33,52,52,52,52,52,100,32,
- 37,37,37,33,100,100,100,100,100,100,100,32,37,37,101,100,48,49,48,
- 49,97,97,32,49,49,37,93,51,37,116,100,100,100,100,32,49,49,49,49,37,
- 49,49,49,49,116,32,49,49,49,49,49,49,49,96,117,100,100,100,33,48,113,
- 48,32,48,96,100,100,100,100,100,100,36,117,117,117,53,113,48,49,97,
- 117,37,96,101,100,100,100,100,100,100,116,53,52,100,100,100,100,100,
- 100,100,32,33,100,100,100,100,100,100,100,32,49,49,37,49,37,49,96,
- 97,117,32,96,100,100,100,100,100,100,100,97,100,100,100,100,97,36,
- 53,32,112,112,48,49,49,49,49,49,49,113,48,49,49,96,33,48,113,112,112,
- 32,116,101,100,100,100,100,100,100,36,112,112,32,116,101,100,112,117,
- 117,49,33,100,100,36,64,229,228,100,100,100,100,52,116,37,32,36,48,
- 49,49,33,32,37,37,49,49,49,49,49,49,49,49,33,32,37,49,49,49,96,97,
- 97,97,117,100,100,100,100,100,100,100,97,32,37,96,100,97,36,112,112,
- 53,49,49,49,49,49,49,49,49,49,49,113,53,49,113,48,49,49,33,52,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,32,37,49,49,49,49,49,96,100,97,
- 100,117,100,100,100,100,100,100,100,97,100,100,32,96,100,100,97,97,
- 33,112,53,49,49,49,49,49,49,49,49,49,113,112,112,48,33,100,100,100,
- 52,100,100,100,33,53,49,49,49,49,96,100,100,100,100,97,100,100,100,
- 36,53,96,100,100,100,100,100,100,36,112,53,49,49,113,32,100,52,36,
- 32,36,48,49,49,49,49,49,49,97,117,117,117,101,52,100,100,112,117,33,
- 112,49,49,49,49,49,49,49,117,37,37,49,49,49,49,49,49,49,96,32,49,49,
- 49,49,49,49,49,96,100,100,97,100,97,36,112,112,53,32,48,49,49,49,49,
- 49,49,113,48,49,49,49,113,48,97,37,32,52,52,100,100,100,100,100,100,
- 100,52,100,100,36,112,32,100,52,52,52,32,117,49,49,49,49,49,49,49,
- 33,52,52,32,117,49,49,116,117,117,100,32,49,49,33,88,51,116,117,100,
- 100,100,100,100,112,117,117,117,49,49,116,117,117,100,97,100,100,100,
- 100,100,100,36,48,49,33,117,117,100,36,117,53,113,53,49,49,49,49,49,
- 49,49,49,49,49,49,113,53,49,97,101,100,100,100,100,100,100,100,100,
- 100,100,100,52,52,100,113,101,100,112,117,117,49,49,49,49,49,49,49,
- 49,49,49,113,116,49,113,48,49,49,49,33,100,100,100,100,100,100,100,
- 100,100,100,117,117,117,117,100,100,100,36,112,112,48,49,49,49,49,
- 49,49,113,112,117,53,49,49,49,49,49,49,97,101,100,100,100,100,100,
- 100,100,100,100,100,32,49,49,49,49,49,49,117,49,49,49,97,85,229,228,
- 100,100,100,100,100,100,100,100,100,100,100,36,48,49,49,49,49,49,49,
- 49,49,49,49,113,48,37,49,117,49,49,116,100,97,117,100,100,100,100,
- 100,100,100,100,117,100,100,100,117,100,100,100,100,36,117,53,49,49,
- 49,49,49,49,113,117,53,113,101,101,100,112,117,49,49,117,49,49,49,
- 49,49,49,49,117,117,117,117,117,49,49,116,117,117,117,117,100,100,
- 100,100,100,100,100,100,100,112,117,117,49,49,96,117,100,117,100,100,
- 100,100,100,100,100,100,100,117,117,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,36,101,117,37,53,49,49,49,117,117,117,
- 33,100,100,36,117,53,49,49,49,49,49,116,117,117,117,100,36,117,117,
- 53,113,48,49,49,49,49,49,49,33,100,100,96,117,53,49,97,117,101,116,
- 101,100,100,100,100,100,100,100,100,100,100,100,116,101,100,112,49,
- 49,49,49,49,49,49,49,49,49,49,49,37,37,113,116,49,49,116,117,117,100,
- 100,100,100,100,100,100,100,100,100,52,117,100,52,100,100,100,100,
- 32,49,49,49,49,49,49,49,49,49,113,117,117,117,53,49,49,49,33,52,52,
- 100,100,100,100,100,100,100,52,116,117,101,100,100,100,100,100,100,
- 112,49,49,49,49,49,49,49,49,49,49,49,96,100,100,100,100,100,100,117,
- 100,100,100,112,93,51,33,117,100,100,100,100,100,52,52,52,52,100,100,
- 100,32,117,49,33,100,100,100,100,100,100,100,52,100,100,52,100,100,
- 100,49,32,37,49,37,49,49,49,49,49,49,49,49,49,49,49,49,49,113,48,96,
- 97,100,97,100,100,100,100,100,100,100,116,117,101,113,101,100,112,
- 117,36,36,48,49,49,49,49,49,49,49,113,48,49,113,48,49,49,33,52,52,
- 100,100,100,100,100,100,100,100,100,116,52,97,33,37,49,49,49,113,112,
- 112,36,49,49,49,49,49,49,113,36,112,101,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,97,100,100,100,100,
- 100,112,113,48,49,49,80,229,228,100,100,100,100,100,97,100,100,97,
- 97,100,100,100,100,100,36,48,49,49,49,49,49,49,49,49,52,48,37,49,49,
- 96,100,49,97,100,100,100,100,100,100,100,100,100,100,100,52,117,100,
- 100,100,100,116,32,53,49,49,49,49,49,49,49,113,48,101,112,48,49,33,
- 52,100,100,52,100,100,100,100,100,100,100,52,52,52,52,52,100,100,32,
- 37,37,37,37,49,49,49,49,49,49,49,113,112,116,117,117,49,49,36,117,
- 36,53,49,49,49,49,49,49,49,49,97,116,117,100,52,100,100,100,100,100,
- 100,32,49,49,49,49,49,49,49,37,49,113,36,49,49,49,49,49,49,117,96,
- 100,100,96,53,49,49,49,49,49,37,37,37,37,49,49,49,96,117,100,32,49,
- 49,49,49,49,49,49,37,49,49,37,49,49,113,36,96,97,100,97,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,52,36,112,48,113,48,49,49,
- 49,49,49,49,49,117,117,113,116,49,49,116,53,33,33,100,100,100,100,
- 100,100,100,100,52,100,100,52,100,100,100,32,37,37,49,49,49,49,49,
- 49,49,49,49,53,101,112,96,97,100,100,100,52,52,52,97,100,100,100,100,
- 100,100,52,33,116,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,113,48,49,49,49,49,49,116,52,100,100,36,92,51,48,117,100,
- 100,100,100,117,96,100,100,100,48,113,53,48,113,32,53,49,49,49,49,
- 49,49,113,117,117,53,116,97,100,36,96,49,96,117,101,100,100,100,100,
- 100,100,116,117,117,117,37,53,49,33,112,117,117,117,49,49,49,49,49,
- 49,49,117,33,52,112,33,100,100,32,37,117,116,117,100,100,100,100,100,
- 100,100,117,117,32,116,117,100,36,117,117,117,117,53,49,49,49,49,49,
- 49,113,53,96,97,97,37,100,116,117,37,112,32,97,100,100,100,100,100,
- 100,52,116,117,117,117,101,100,112,117,117,101,116,49,49,49,49,49,
- 49,49,117,117,117,117,117,49,49,116,117,117,32,116,100,100,52,81,229,
- 228,100,100,100,100,112,117,117,117,117,49,49,116,117,117,117,117,
- 100,100,100,100,100,100,100,117,117,97,117,117,100,36,117,117,100,
- 117,53,49,49,49,49,49,49,113,101,32,117,53,96,100,116,117,117,37,117,
- 48,49,49,49,49,49,49,97,49,96,117,101,100,100,100,100,112,117,49,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,116,117,32,37,37,49,49,96,33,117,117,53,49,49,49,49,49,49,
- 113,53,116,33,117,53,49,97,117,117,117,117,101,100,100,100,100,100,
- 100,116,101,100,52,113,101,100,112,49,49,49,37,49,49,113,100,53,49,
- 49,49,113,53,48,49,49,49,100,116,37,100,52,96,101,100,100,100,100,
- 100,100,116,117,117,37,117,48,49,33,112,36,112,117,49,49,49,49,49,
- 49,49,117,117,117,117,97,101,100,32,116,117,117,117,100,100,100,100,
- 100,100,100,117,32,37,116,32,49,49,96,97,53,117,53,49,49,49,49,49,
- 49,113,117,53,32,117,53,49,97,117,117,117,117,101,100,100,100,100,
- 100,100,116,37,112,112,112,33,49,117,117,33,52,96,48,49,49,49,49,49,
- 49,37,117,117,117,117,49,49,116,117,117,49,117,100,100,100,100,100,
- 100,100,117,117,117,117,117,100,36,117,117,53,32,53,49,49,101,92,59,
- 101,113,12,110,48,49,89,27,179,};
diff --git a/sys/dev/ctau/ctaufw.h b/sys/dev/ctau/ctaufw.h
deleted file mode 100644
index 354f2bac974d..000000000000
--- a/sys/dev/ctau/ctaufw.h
+++ /dev/null
@@ -1,848 +0,0 @@
-/*
- * DO NOT EDIT MANUALLY!
- * This code was generated by mkfw utility
- * from the file `ctau.dat'
- *
- * Cronyx Id: ctaufw.h,v 1.1 2002/06/03 10:19:40 rik Exp $
- * $FreeBSD$
- */
-long ctau_fw_len = 131234;
-
-const char *ctau_fw_version = "1.1";
-const char *ctau_fw_date = "18.02.97";
-const char *ctau_fw_copyright = "Copyright (C) 1997 Cronyx Engineering.";
-
-const cr_dat_tst_t ctau_fw_tvec[] = {
- { 65066, 66278}, { 66314, 67526}, { 67562, 68774}, { 68810, 70022},
- { 70058, 71270}, { 71306, 72518}, { 72554, 73766}, { 73802, 75014},
- { 75050, 76262}, { 76298, 77510}, { 77546, 78758}, { 78794, 80006},
- { 80042, 81254}, { 81290, 82502}, { 82538, 83750}, { 83786, 84998},
- { 85034, 86246}, { 86282, 87494}, { 87530, 88742}, { 88778, 89990},
- { 90026, 91238}, { 91274, 92486}, { 92522, 93734}, { 93770, 94982},
- { 95018, 96230}, { 96266, 97478}, { 97514, 98726}, { 98762, 99974},
- {100010,101222}, {101258,102470}, {102506,103718}, {103754,104966},
- {105002,106214}, {106250,107462}, {107498,108710}, {108746,109958},
- {109994,111206}, {111242,112454}, {112490,113702}, {113738,114950},
- {114986,116198}, {116234,117446}, {117482,118694}, {118730,119942},
- {119978,121190}, {121226,122438}, {122474,123686}, {123722,124934},
- {124970,126182}, {126218,127430}, {127466,128678}, {128714,129926},
- {129962,131174}, {131234,131234},
-};
-
-const unsigned char ctau_fw_data[] = {
- 155,153,97,92,102,33,49,48,49,49,113,112,112,112,96,101,97,52,100,
- 52,100,100,100,48,36,48,100,100,52,116,100,48,52,112,97,33,49,37,116,
- 100,100,100,112,53,33,49,49,37,37,37,37,116,32,33,97,97,97,97,100,
- 100,48,113,116,97,100,100,97,97,113,96,97,53,97,112,112,112,48,49,
- 49,113,100,53,49,49,97,49,97,112,112,96,101,49,52,52,52,100,100,36,
- 113,36,52,100,100,52,52,52,52,52,48,96,33,37,37,37,49,49,49,117,53,
- 33,49,49,37,37,37,37,37,116,112,96,97,97,97,100,100,100,101,33,49,
- 49,49,96,97,97,101,112,116,116,100,100,37,48,49,49,113,53,59,57,97,
- 96,97,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,
- 49,49,49,32,112,112,96,37,37,100,52,112,49,49,49,33,37,52,100,100,
- 52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,
- 101,33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,113,100,
- 96,97,33,48,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,53,32,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,
- 100,96,97,100,100,100,49,76,68,36,97,48,49,49,37,37,37,37,37,116,116,
- 96,97,100,97,100,100,36,49,36,49,49,49,96,101,36,97,33,53,113,48,113,
- 96,101,100,100,36,96,117,101,100,36,112,112,112,96,117,37,37,52,52,
- 52,100,100,36,49,100,36,49,49,33,52,52,37,52,48,52,36,37,37,37,49,
- 49,49,117,53,33,49,49,101,49,33,37,37,96,52,97,97,97,97,100,100,48,
- 53,100,96,100,116,96,97,97,97,33,33,52,112,112,112,48,49,49,113,52,
- 100,48,49,113,112,112,112,112,96,48,49,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,53,16,177,177,
- 97,36,100,100,100,52,52,52,52,112,113,33,37,49,37,49,49,49,116,48,
- 33,49,49,49,117,37,37,37,116,112,96,100,33,53,49,49,49,96,101,96,100,
- 100,100,97,97,33,117,53,52,112,112,112,48,49,49,100,37,49,48,49,113,
- 112,112,52,112,112,101,48,52,52,52,100,100,100,52,37,52,100,100,112,
- 100,36,52,52,112,113,36,37,37,37,49,49,97,116,117,32,49,49,37,37,37,
- 37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,32,100,100,100,100,36,112,112,49,
- 52,53,100,100,36,52,100,100,100,52,32,179,51,32,49,48,49,49,113,112,
- 112,112,96,101,37,52,100,52,100,100,100,48,49,32,100,100,52,116,100,
- 48,52,112,97,33,49,37,116,100,100,100,96,33,96,100,100,32,37,37,37,
- 116,117,112,96,97,97,97,100,100,48,97,112,53,49,49,96,97,113,96,33,
- 97,97,112,112,112,48,49,49,113,36,49,49,49,33,52,48,112,112,96,101,
- 49,52,52,52,100,100,36,113,97,36,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,101,32,32,49,49,37,37,37,37,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,100,97,97,97,101,112,116,48,49,49,112,48,49,
- 49,113,37,110,108,116,101,100,100,100,97,97,97,97,33,53,117,113,48,
- 113,48,49,49,97,37,49,48,49,113,112,113,113,112,112,112,37,100,52,
- 112,49,49,49,33,116,36,100,100,52,100,52,52,112,117,97,33,37,37,37,
- 49,49,97,116,48,33,49,49,37,37,101,33,37,117,36,97,97,97,97,100,100,
- 100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,
- 52,100,100,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,100,52,52,52,52,48,52,36,37,37,37,49,49,49,37,52,
- 48,49,49,37,49,37,53,97,113,97,100,100,96,97,100,100,100,113,77,68,
- 116,113,37,49,49,37,37,37,37,37,37,97,96,97,100,97,100,100,36,97,33,
- 49,49,49,96,101,36,97,97,97,53,48,113,96,101,100,100,36,100,32,100,
- 100,36,112,112,112,96,117,37,37,52,52,52,100,100,36,49,96,36,100,100,
- 100,52,52,37,52,48,52,36,37,37,37,49,49,49,37,52,36,49,49,52,49,33,
- 49,37,116,52,97,97,97,97,100,100,48,101,101,100,100,36,53,96,97,97,
- 33,33,52,112,112,112,48,49,49,113,113,96,100,100,36,112,112,112,112,
- 96,112,53,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,53,21,177,177,97,36,100,100,52,52,52,52,52,
- 112,113,33,37,49,37,49,49,49,116,48,33,49,49,37,37,53,36,37,116,112,
- 96,100,33,53,49,49,49,96,101,96,100,100,97,97,100,33,117,53,52,112,
- 112,112,48,49,49,100,113,48,100,100,36,112,112,52,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,112,100,36,52,52,112,113,36,37,
- 37,37,49,49,97,116,48,33,49,113,33,37,37,37,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,100,97,100,97,97,33,100,97,112,112,112,48,49,
- 49,113,100,32,100,100,36,112,48,113,49,52,53,100,100,36,52,100,100,
- 100,52,52,230,102,49,49,100,100,36,112,112,112,112,112,48,36,52,100,
- 52,100,100,100,112,36,52,100,100,52,116,100,48,52,112,33,32,49,37,
- 116,100,100,100,32,52,48,49,49,37,37,37,37,116,117,112,96,97,97,97,
- 100,100,48,101,96,97,100,100,97,97,113,96,33,53,52,112,112,48,49,49,
- 49,113,112,49,48,49,97,113,100,37,48,97,101,97,100,52,52,100,100,100,
- 37,97,100,100,100,49,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,113,96,97,100,
- 100,97,97,97,100,100,97,32,49,49,113,48,49,49,113,117,58,57,49,100,
- 96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,
- 52,52,100,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,33,53,96,100,36,53,32,53,96,33,
- 53,101,112,112,112,48,49,49,112,37,49,48,49,53,112,112,112,112,96,
- 112,48,52,52,52,100,100,100,52,97,52,100,100,52,52,52,100,52,48,52,
- 36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,97,100,100,100,49,73,68,52,97,117,100,100,32,37,37,37,37,116,116,
- 96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,
- 113,96,101,100,100,36,101,113,49,49,113,112,112,112,96,117,37,37,52,
- 52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,112,97,33,37,37,
- 49,49,49,49,37,53,33,49,49,52,49,33,37,49,116,52,100,100,97,97,100,
- 100,48,49,101,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,
- 113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,52,100,52,36,48,49,49,37,49,49,49,53,4,
- 177,177,97,36,100,100,52,52,52,52,52,52,36,33,37,49,37,49,49,49,116,
- 117,32,49,49,37,53,49,36,37,116,32,96,100,33,53,49,49,49,96,101,96,
- 100,100,97,97,97,33,117,53,52,48,113,112,48,49,49,116,116,37,48,49,
- 113,112,112,52,112,96,112,48,52,52,52,100,100,100,52,37,100,100,100,
- 112,52,113,33,52,112,113,36,37,37,37,49,49,113,33,53,33,49,113,53,
- 37,37,37,37,36,37,97,97,97,97,100,100,100,49,97,100,100,100,97,97,
- 97,97,36,97,97,112,112,112,48,49,49,113,96,37,48,49,113,112,112,48,
- 100,49,53,100,100,36,52,100,100,100,52,112,179,51,32,49,48,49,113,
- 112,112,112,112,96,101,37,52,100,100,100,100,100,48,116,33,100,100,
- 52,116,100,48,52,112,97,33,49,49,116,100,100,100,100,37,32,49,49,37,
- 37,37,37,116,117,112,96,100,97,97,100,100,112,49,100,96,100,100,97,
- 97,113,96,33,33,52,112,112,112,48,49,49,113,52,112,48,49,97,101,116,
- 37,48,97,101,97,100,52,52,100,100,36,49,101,53,100,100,37,52,52,52,
- 52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,37,36,37,
- 97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,100,97,32,49,
- 49,113,48,49,49,113,101,111,108,116,97,48,49,49,96,97,97,97,33,53,
- 53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,112,37,113,36,37,37,
- 37,49,49,97,52,33,49,49,49,37,37,101,33,37,116,37,97,97,97,100,100,
- 100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,
- 49,36,36,49,48,49,53,112,112,112,112,112,101,53,52,52,52,100,100,100,
- 52,37,37,100,100,52,52,52,52,52,48,52,48,37,37,37,49,49,49,101,33,
- 49,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,113,72,68,
- 52,48,33,49,49,37,37,37,37,37,96,116,96,97,100,97,100,100,36,33,100,
- 96,100,100,97,101,36,97,33,53,52,48,49,49,49,49,49,49,100,49,48,49,
- 113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,
- 52,52,52,37,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,52,49,33,
- 37,49,116,52,97,97,97,97,100,100,48,97,100,48,49,97,96,97,97,97,97,
- 53,117,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,
- 112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,49,36,
- 49,49,33,37,49,49,49,53,1,177,177,52,33,49,49,33,52,52,52,52,112,49,
- 116,32,49,37,49,49,49,52,96,96,100,100,32,53,49,36,37,116,112,96,100,
- 33,53,49,49,49,96,101,96,100,100,97,97,97,33,112,53,116,36,48,113,
- 48,49,49,97,97,48,49,49,113,112,112,52,112,96,112,48,52,52,100,100,
- 100,100,52,37,49,100,100,112,100,36,52,52,112,113,48,49,37,37,49,49,
- 97,116,48,33,49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,100,33,
- 101,101,100,100,97,97,97,97,33,97,97,48,113,112,48,49,49,113,52,100,
- 48,49,113,112,112,112,49,52,53,100,100,36,52,100,100,100,52,36,178,
- 51,32,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,100,100,
- 52,117,100,100,100,52,116,100,48,52,112,97,33,49,49,116,100,100,100,
- 96,116,49,49,49,37,37,37,37,116,117,112,49,96,100,97,100,100,36,53,
- 100,96,100,100,97,97,113,96,33,33,52,112,112,112,48,49,49,113,112,
- 49,48,49,97,49,49,112,112,96,101,49,100,52,52,100,100,36,49,36,117,
- 49,49,36,52,52,52,52,116,49,36,37,37,37,49,49,49,37,53,33,49,49,37,
- 37,37,37,37,36,37,97,97,97,97,100,100,100,49,100,100,100,100,97,97,
- 97,101,48,117,48,49,49,112,48,49,49,113,53,106,108,116,52,53,49,49,
- 96,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,32,49,49,49,33,116,36,100,100,52,52,52,52,112,
- 37,113,36,37,37,37,49,49,97,52,97,36,49,49,37,37,101,33,37,116,37,
- 97,97,97,97,100,100,100,49,100,97,100,36,101,100,96,97,33,53,37,113,
- 112,112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,112,53,52,52,
- 52,100,100,100,52,32,117,49,49,33,52,52,52,52,48,52,36,37,49,37,49,
- 49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 49,8,17,33,48,33,49,49,37,37,37,37,37,116,52,97,97,100,97,100,100,
- 100,52,100,100,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,
- 100,33,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 116,100,100,100,52,52,52,37,52,112,97,33,37,37,37,49,49,49,53,116,
- 37,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,33,100,96,100,
- 116,96,97,97,97,33,97,33,49,113,112,48,49,49,113,37,96,48,49,113,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,49,49,100,100,52,52,
- 52,52,37,101,37,52,49,33,37,49,49,49,53,0,228,228,32,33,100,100,52,
- 52,52,100,100,112,113,33,37,49,37,49,49,49,116,48,33,49,49,37,53,49,
- 36,37,116,112,96,100,33,48,49,49,49,32,97,48,49,49,96,97,97,33,117,
- 53,52,112,48,113,48,49,49,100,37,49,48,49,113,112,112,52,112,96,112,
- 48,52,52,52,100,100,100,52,116,36,100,100,112,100,36,52,52,52,100,
- 32,37,37,37,49,49,97,52,37,97,100,36,33,37,37,37,37,36,37,97,97,97,
- 97,100,100,100,97,101,96,100,100,97,97,97,97,33,100,97,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,49,52,53,100,100,36,52,100,
- 100,100,52,96,178,51,113,49,48,49,113,112,112,112,112,96,101,37,52,
- 100,52,100,100,100,112,36,97,100,100,52,116,100,48,52,112,97,33,49,
- 37,116,100,100,100,48,113,37,49,49,37,37,37,37,116,117,32,96,97,97,
- 97,100,100,48,53,100,96,100,100,97,97,113,96,33,97,97,112,112,112,
- 48,49,49,113,37,49,100,100,116,49,49,112,112,96,101,49,52,52,52,100,
- 100,36,49,96,36,100,100,37,52,52,52,52,112,53,36,37,37,37,49,49,49,
- 101,97,48,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,
- 96,100,100,97,97,97,97,33,53,101,96,117,37,48,49,49,113,37,107,108,
- 52,52,100,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,33,36,49,
- 48,49,113,112,48,113,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,101,101,100,100,
- 32,37,101,33,37,48,37,97,97,97,97,100,100,100,97,101,96,100,36,101,
- 100,96,97,97,97,36,112,112,112,48,49,49,100,113,32,48,49,53,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,96,52,36,37,37,37,49,49,49,101,36,49,49,49,37,37,37,53,117,113,
- 97,113,117,49,96,100,100,100,113,9,17,97,48,100,100,100,32,37,37,37,
- 37,96,116,96,97,100,97,100,100,36,113,112,96,100,100,97,113,113,49,
- 32,53,52,48,113,96,101,100,100,36,101,96,100,100,36,112,112,112,96,
- 117,37,37,52,52,52,100,100,36,113,52,33,49,49,33,52,52,37,52,48,52,
- 36,37,37,37,49,49,49,117,96,117,100,100,53,49,33,37,37,37,33,97,97,
- 97,97,100,100,48,101,48,97,100,116,96,97,97,97,33,100,97,112,112,112,
- 48,49,49,113,117,49,48,49,113,112,112,112,112,96,112,48,52,52,100,
- 100,100,100,52,32,116,100,100,52,52,52,116,113,100,37,113,100,116,
- 32,49,49,49,53,5,228,228,116,36,100,100,52,52,52,52,52,112,113,33,
- 37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,96,100,33,
- 53,49,49,49,96,101,96,100,100,97,97,97,33,117,53,32,112,112,112,48,
- 49,49,100,37,49,48,49,113,48,113,52,112,96,112,48,52,52,52,100,100,
- 100,52,116,36,100,100,112,100,36,52,52,112,49,37,37,37,37,49,49,97,
- 116,48,33,49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,100,33,32,
- 100,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,
- 49,113,112,112,112,49,52,53,100,100,36,52,100,100,100,52,116,231,102,
- 33,49,48,49,113,112,112,112,112,96,101,49,52,100,52,100,100,100,112,
- 100,113,49,49,33,116,113,48,52,112,97,33,49,37,116,100,100,100,112,
- 32,36,49,49,37,37,37,37,116,117,112,96,97,97,97,100,100,48,37,48,48,
- 49,49,96,97,113,96,33,97,97,112,112,112,48,49,49,113,100,100,48,49,
- 97,49,49,112,112,96,101,49,52,52,52,100,100,36,113,52,33,49,49,36,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,117,53,33,49,49,37,37,37,37,
- 37,36,37,97,97,97,97,100,100,100,117,101,96,100,100,97,97,97,101,112,
- 116,48,49,49,112,48,49,49,113,117,63,57,33,36,53,49,49,96,100,100,
- 100,36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,
- 37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,
- 33,37,37,49,49,49,97,116,48,33,49,49,37,37,113,33,37,36,37,97,97,97,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,48,113,
- 48,49,49,100,37,49,48,49,53,112,48,113,112,96,112,48,52,100,52,100,
- 100,100,52,37,52,100,100,52,100,52,52,52,48,52,36,37,37,49,49,49,49,
- 101,117,36,49,49,37,37,37,53,100,113,97,100,52,53,96,100,100,100,49,
- 93,68,52,48,33,49,49,37,37,37,37,37,116,52,97,97,100,97,100,100,36,
- 37,49,100,100,100,97,53,37,97,33,53,52,48,113,96,101,100,100,36,112,
- 49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,96,100,
- 100,100,52,52,52,37,52,48,52,36,37,37,49,49,49,49,117,53,33,49,49,
- 52,49,33,37,37,116,52,97,97,100,97,100,100,48,37,48,48,49,97,96,97,
- 97,97,33,97,97,112,112,112,48,49,49,113,97,117,48,49,113,112,112,112,
- 112,112,101,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,
- 116,101,37,49,49,33,37,49,49,49,53,84,177,177,96,37,100,100,52,52,
- 100,100,100,112,113,33,49,49,37,49,49,49,116,48,33,49,49,37,53,116,
- 37,37,116,112,96,100,33,53,49,49,49,112,49,53,49,49,96,97,97,33,117,
- 53,52,112,112,112,48,49,49,49,113,49,48,49,113,112,112,52,112,96,112,
- 48,52,52,52,100,100,100,52,117,49,100,100,112,100,36,52,52,112,113,
- 36,37,37,37,49,49,97,116,48,33,49,113,33,49,37,37,37,36,37,97,97,97,
- 100,100,100,100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,52,32,100,100,36,112,112,112,49,52,53,100,100,36,52,100,
- 100,100,52,48,178,51,32,49,48,49,113,112,112,112,112,96,101,49,52,
- 100,52,100,100,100,112,117,48,100,100,52,116,100,48,52,112,97,33,49,
- 37,116,100,100,100,112,48,32,49,49,37,37,37,37,116,117,112,96,97,97,
- 97,100,100,96,49,33,96,100,100,97,97,33,53,32,97,97,112,112,112,48,
- 49,49,113,32,112,49,49,97,49,49,112,112,96,101,49,52,52,52,100,100,
- 36,113,52,32,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,117,
- 48,97,100,100,32,37,37,37,37,36,37,97,97,97,97,100,100,100,49,113,
- 101,100,100,97,97,97,101,112,116,48,49,49,112,48,49,49,113,101,106,
- 108,116,117,96,100,100,97,97,97,100,36,53,53,48,49,113,48,49,49,97,
- 37,49,48,49,113,112,97,117,112,96,37,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,113,33,53,33,49,
- 49,37,37,101,48,37,36,117,97,97,97,97,100,100,100,97,101,96,100,36,
- 101,100,96,97,33,53,101,112,48,113,48,49,49,100,37,49,48,49,53,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,100,116,36,100,100,52,52,
- 52,52,52,116,49,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,33,
- 36,116,100,100,96,97,100,100,100,113,92,68,52,37,117,100,100,32,37,
- 37,37,37,116,116,96,97,100,97,100,100,36,33,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,117,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,49,52,48,49,49,33,52,52,49,52,48,
- 52,36,37,37,37,49,49,49,117,53,33,49,49,52,49,33,37,37,116,52,97,97,
- 97,100,100,100,48,53,100,96,100,116,96,97,97,97,33,33,52,112,112,112,
- 48,49,49,113,37,116,101,100,36,112,112,112,112,112,101,48,52,52,52,
- 100,100,100,52,37,49,100,100,52,52,52,116,36,96,112,97,97,33,37,49,
- 49,49,53,81,177,177,97,36,100,100,52,52,52,100,100,112,113,36,49,49,
- 37,49,49,49,52,33,37,49,49,37,53,49,48,37,96,112,96,100,33,53,49,49,
- 49,48,48,48,49,49,96,97,97,33,112,53,52,112,112,112,48,49,49,48,36,
- 49,48,49,113,112,112,32,36,96,112,53,52,52,52,100,100,100,52,53,36,
- 49,49,117,100,36,52,52,112,113,36,37,37,37,49,49,97,52,33,49,49,113,
- 33,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,97,
- 97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,49,52,53,112,49,116,33,100,100,100,52,100,227,102,33,49,48,49,
- 113,112,112,112,112,96,101,37,52,100,52,100,100,100,48,96,36,100,100,
- 52,116,100,48,100,112,97,33,49,37,116,100,100,100,48,32,117,100,100,
- 32,37,37,37,116,117,112,96,97,97,97,100,100,48,100,32,97,100,100,97,
- 97,113,96,33,97,97,112,112,112,48,49,49,113,112,49,48,49,97,49,49,
- 112,112,96,101,49,52,52,52,100,100,100,37,116,36,100,100,37,52,52,
- 52,52,48,96,33,37,37,37,49,49,49,117,53,33,49,49,37,37,37,37,37,36,
- 37,97,97,97,97,100,100,100,100,101,96,100,100,97,97,97,101,112,116,
- 112,100,100,37,48,49,49,113,53,47,57,113,96,101,100,100,97,97,97,97,
- 36,53,101,112,48,113,48,49,49,97,53,32,49,49,113,112,49,97,112,96,
- 37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,
- 33,37,37,37,49,49,97,33,53,33,49,49,37,37,101,33,37,36,37,97,97,97,
- 97,100,100,100,52,97,100,100,36,101,49,53,96,36,53,101,112,112,112,
- 48,49,49,100,97,48,49,49,53,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,53,36,49,49,33,52,52,52,52,48,52,36,37,37,37,49,49,49,37,
- 116,117,100,100,32,37,37,53,97,113,97,100,100,96,97,100,100,100,49,
- 28,68,52,48,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,
- 49,101,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,
- 49,48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,36,113,97,36,
- 100,100,52,52,52,112,33,48,52,36,37,37,37,49,49,49,101,53,49,49,49,
- 52,116,116,32,49,116,52,97,97,97,97,100,100,48,53,100,96,100,116,96,
- 97,97,97,33,33,52,112,112,112,48,49,49,113,117,49,48,49,113,112,112,
- 112,112,96,32,37,52,52,52,100,100,100,52,37,117,100,100,52,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,53,80,176,177,96,100,100,100,52,52,
- 52,52,52,112,113,36,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,
- 37,116,112,49,49,32,53,49,49,49,48,52,100,100,100,97,97,97,33,117,
- 53,52,112,112,112,48,49,49,100,117,53,100,100,36,112,112,52,112,96,
- 112,48,52,52,52,100,100,100,52,116,36,100,100,112,100,36,52,52,112,
- 113,36,37,37,37,49,49,113,100,97,36,49,113,33,37,37,37,37,36,37,97,
- 97,97,97,100,100,100,113,49,48,49,49,96,97,97,97,33,97,97,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,49,52,53,36,101,36,52,
- 100,100,100,52,32,226,102,37,113,101,100,36,112,112,112,112,96,101,
- 49,52,100,52,100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,
- 33,49,37,116,100,100,100,48,37,100,100,100,32,37,37,37,37,116,112,
- 96,97,97,97,100,100,48,53,100,96,100,100,97,97,49,97,33,97,97,112,
- 112,112,48,49,49,113,49,52,48,49,97,49,49,112,112,96,101,49,52,52,
- 52,100,100,100,100,96,48,49,49,36,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,117,53,33,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,
- 33,48,96,100,100,97,97,97,101,112,116,48,113,100,37,48,49,49,113,37,
- 42,57,49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,
- 37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,100,48,49,
- 49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,
- 101,36,97,97,33,53,101,112,112,112,48,49,49,100,37,49,48,49,53,112,
- 112,48,113,96,112,48,52,52,52,100,100,100,52,32,33,100,100,52,52,100,
- 52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,
- 97,36,101,96,97,100,100,100,113,29,68,100,48,33,49,49,37,37,37,37,
- 37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,
- 33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,
- 117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,117,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,
- 97,97,100,100,48,49,36,49,49,97,96,97,97,97,33,97,100,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,49,97,100,100,52,52,52,116,36,101,37,49,52,36,37,49,49,
- 49,53,85,176,177,97,36,100,100,52,52,52,52,52,112,113,33,37,49,37,
- 49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,96,100,33,53,49,49,
- 49,96,101,96,100,100,97,97,97,33,117,53,52,112,112,112,48,49,49,100,
- 49,96,101,100,36,112,112,52,112,96,112,48,52,52,52,100,100,100,52,
- 37,37,100,100,112,100,36,52,52,112,113,36,37,37,37,49,49,33,117,48,
- 33,49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,
- 100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,
- 112,112,112,49,52,53,100,116,117,52,100,100,100,52,52,227,102,36,49,
- 48,49,113,112,112,112,112,96,101,37,52,100,52,100,100,100,112,97,36,
- 100,100,52,116,100,48,52,112,97,33,49,37,116,100,100,100,32,53,33,
- 49,49,37,37,37,37,116,117,112,96,97,97,97,100,100,48,101,33,96,100,
- 100,97,97,113,96,33,97,97,112,112,112,48,49,49,113,96,32,48,49,97,
- 49,113,113,112,96,101,49,52,52,52,100,100,36,49,96,36,100,100,37,52,
- 52,52,52,48,100,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,37,
- 36,37,97,97,97,97,100,100,100,33,53,49,49,49,96,97,97,101,112,116,
- 48,49,113,113,48,49,49,113,117,46,57,49,100,96,100,100,97,97,97,97,
- 33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,
- 37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,
- 37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,49,36,37,97,97,100,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,33,48,101,112,112,112,
- 48,49,49,100,113,36,100,100,48,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,36,97,97,100,100,100,
- 49,25,68,100,48,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,
- 36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,
- 112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 101,48,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,117,116,32,
- 49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,33,100,96,100,116,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,
- 52,116,36,101,37,49,49,33,37,49,49,49,97,65,176,177,97,36,100,100,
- 52,52,52,52,52,112,113,33,37,49,37,49,49,49,116,48,33,49,49,37,53,
- 49,36,37,116,112,96,100,33,53,49,49,49,96,101,96,100,100,97,97,97,
- 33,117,53,52,112,112,112,48,49,49,100,37,49,48,49,113,112,112,52,112,
- 96,112,96,52,52,52,100,100,100,52,116,36,100,100,112,36,112,33,52,
- 112,113,36,37,37,37,49,49,97,52,48,116,100,36,33,37,37,37,49,36,37,
- 97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,100,100,48,49,113,112,112,112,49,52,53,100,100,
- 36,52,100,100,100,52,112,226,102,36,49,48,49,113,112,112,112,112,96,
- 101,37,52,100,52,100,100,100,112,97,36,100,100,52,116,100,48,52,112,
- 97,33,49,37,116,100,100,100,32,53,33,49,49,37,37,37,37,116,117,112,
- 96,97,97,97,100,100,48,37,32,96,100,100,97,97,113,96,33,97,97,112,
- 112,112,48,49,49,113,101,113,49,49,97,49,49,112,112,96,101,49,52,52,
- 52,100,100,36,49,96,36,100,100,37,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,
- 113,101,100,100,100,97,97,97,101,112,96,48,49,49,112,48,49,49,113,
- 101,43,57,49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,
- 49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,
- 33,49,49,37,37,101,33,37,36,37,97,100,97,97,100,100,100,97,101,96,
- 100,36,101,100,101,97,33,53,101,112,112,112,48,49,49,100,33,53,48,
- 49,53,112,112,112,48,97,112,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 37,53,97,113,97,100,100,96,97,100,100,100,113,24,68,100,48,33,49,49,
- 37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,
- 101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,
- 112,96,117,37,37,52,52,52,100,100,36,113,36,49,100,100,52,52,52,37,
- 52,48,100,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,
- 97,97,97,97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,33,32,100,100,52,52,52,116,36,101,37,49,49,33,
- 37,49,49,49,53,65,176,177,97,36,100,100,52,52,52,52,52,112,113,33,
- 37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,96,100,33,
- 53,49,49,49,96,101,96,100,100,97,97,97,33,117,53,52,112,112,112,48,
- 49,49,100,37,49,48,49,113,112,112,52,112,96,112,48,52,52,52,100,100,
- 100,52,116,36,100,100,112,100,36,52,52,112,113,36,37,37,37,49,49,97,
- 52,117,33,49,113,33,37,37,37,49,36,37,97,97,97,97,100,100,100,97,101,
- 96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,
- 49,113,112,112,112,49,52,53,100,100,36,100,100,100,100,52,36,183,51,
- 49,49,49,49,113,112,112,112,112,48,49,33,52,100,52,36,48,49,49,49,
- 49,49,49,33,52,113,53,52,100,100,32,49,37,37,33,100,100,100,100,100,
- 100,100,32,37,37,37,37,49,49,96,97,97,97,32,49,49,49,49,49,49,49,96,
- 97,49,97,97,100,36,112,112,112,48,96,100,100,100,100,100,100,36,100,
- 100,112,112,48,49,33,52,52,52,36,48,49,49,49,49,49,49,33,52,52,52,
- 52,100,100,32,37,37,37,33,100,100,100,100,100,100,100,32,37,37,37,
- 37,37,49,96,97,97,97,32,49,49,49,49,49,49,49,96,97,97,49,49,100,36,
- 100,100,112,48,96,100,100,97,127,108,100,100,100,100,100,97,100,100,
- 100,100,97,100,100,100,36,53,96,100,100,100,100,100,100,36,112,53,
- 49,49,113,32,100,52,36,32,36,48,49,49,49,49,49,49,97,117,117,117,101,
- 52,100,100,112,117,33,112,49,49,49,49,49,49,49,117,37,37,49,49,49,
- 49,49,49,49,96,32,49,49,49,49,49,49,49,96,100,100,97,100,97,36,112,
- 112,53,32,48,49,49,49,49,49,49,113,48,49,49,49,113,48,97,37,32,52,
- 52,100,100,100,100,100,100,100,52,100,100,36,112,32,100,52,52,52,32,
- 117,49,49,49,49,49,49,49,33,52,52,32,117,49,49,116,117,117,100,32,
- 49,49,33,88,17,49,49,49,49,49,49,117,117,117,117,49,49,116,117,117,
- 100,97,100,100,100,100,100,100,36,48,49,33,117,117,100,36,117,53,113,
- 53,49,49,49,49,49,49,49,49,49,49,49,113,53,49,97,101,100,100,100,100,
- 100,100,100,100,100,100,100,52,52,100,113,101,100,112,117,117,49,49,
- 49,49,49,49,49,49,49,49,113,116,49,113,48,49,49,49,33,100,100,100,
- 100,100,100,100,100,100,100,117,117,117,117,100,100,100,36,112,112,
- 48,49,49,49,49,49,49,113,112,117,53,49,49,49,49,49,49,97,101,100,100,
- 100,100,100,100,100,100,100,100,32,49,49,49,49,49,49,117,49,49,49,
- 97,85,229,228,100,100,100,100,100,36,112,112,112,48,49,49,33,116,101,
- 36,48,49,49,49,49,49,49,113,48,49,113,48,49,49,101,32,52,100,52,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,97,32,37,49,37,
- 49,49,49,49,49,49,49,113,117,53,101,53,49,97,117,49,48,96,100,100,
- 100,100,100,100,100,100,97,100,100,97,100,100,36,112,112,48,49,49,
- 49,49,49,49,49,49,113,113,36,37,52,100,100,100,100,97,97,49,100,100,
- 100,100,100,100,100,49,96,53,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,37,49,49,49,49,49,97,101,97,100,100,96,183,51,49,
- 49,49,49,97,37,100,100,100,36,49,117,33,49,37,112,49,49,49,49,49,49,
- 49,117,117,117,97,53,100,100,32,52,33,116,117,100,100,100,100,100,
- 100,100,117,117,117,117,112,49,49,32,117,117,117,53,49,49,49,49,49,
- 49,113,53,96,33,53,96,100,36,112,112,101,117,101,100,100,100,100,100,
- 100,116,117,37,96,117,101,100,112,117,117,117,117,49,49,49,49,49,49,
- 49,117,33,52,52,116,96,100,117,117,32,37,48,100,100,100,100,100,100,
- 100,97,117,117,117,117,100,36,117,117,117,100,53,49,49,49,49,49,49,
- 113,117,117,117,117,53,49,97,117,117,37,96,101,100,100,49,127,76,100,
- 28,102,97,110,108,32,100,96,100,100,100,97,97,97,33,53,37,113,48,113,
- 48,49,49,97,48,96,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,
- 49,97,117,36,100,100,52,52,52,52,112,33,36,36,37,37,37,49,49,97,100,
- 113,37,49,49,37,37,101,33,37,117,36,97,97,97,97,100,100,100,49,117,
- 100,100,36,101,36,97,97,33,53,101,112,112,112,48,49,49,100,49,112,
- 48,49,113,112,112,112,112,96,32,37,52,52,52,100,100,100,116,117,36,
- 100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,53,37,100,100,100,
- 32,37,37,53,97,113,113,49,49,53,96,100,100,100,117,76,102,32,59,57,
- 97,96,97,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,49,49,32,112,112,96,37,37,100,52,112,49,49,49,33,37,52,100,100,
- 52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,
- 101,33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,113,100,
- 96,97,33,48,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,53,32,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,
- 100,96,97,100,100,100,49,76,102,117,110,108,116,48,100,100,100,97,
- 97,97,97,33,53,53,112,48,113,48,49,49,97,36,97,100,100,36,112,49,97,
- 112,96,101,52,100,52,112,49,49,49,33,112,117,49,49,33,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,36,49,97,100,100,32,37,101,33,37,36,37,
- 97,97,97,97,100,100,100,117,101,96,100,100,113,100,96,97,33,48,101,
- 112,112,112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,32,37,52,
- 52,52,100,100,100,52,37,49,100,100,52,52,52,52,52,48,100,36,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,
- 100,100,37,76,102,52,110,108,100,101,96,100,100,100,97,97,97,33,53,
- 53,112,48,113,48,49,49,97,37,49,48,49,49,113,117,112,112,96,37,37,
- 100,52,112,49,49,49,33,116,36,100,100,100,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,117,36,97,97,97,97,
- 100,100,100,113,96,97,100,36,101,100,96,97,33,53,101,112,112,112,48,
- 49,49,100,117,37,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,
- 37,96,100,100,100,100,32,37,53,97,113,97,100,100,96,97,100,100,100,
- 33,24,51,48,110,108,32,100,96,100,100,100,97,97,97,33,53,53,112,48,
- 113,48,49,49,97,100,32,48,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,33,37,32,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,97,
- 36,97,117,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,49,
- 100,100,100,36,112,96,96,97,33,53,101,112,112,112,48,49,49,100,37,
- 49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,33,
- 32,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,53,97,113,97,100,100,96,97,100,100,100,53,24,51,117,59,57,
- 97,101,100,100,100,97,97,97,97,33,53,117,113,48,113,48,49,49,97,37,
- 49,48,49,113,112,113,113,112,112,112,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,100,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,
- 49,49,37,37,101,33,37,117,36,97,97,97,97,100,100,100,97,101,96,100,
- 36,101,100,96,97,33,53,101,112,112,112,48,49,49,52,100,100,48,49,53,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,100,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,37,52,48,49,49,37,49,37,53,
- 97,113,97,100,100,96,97,100,100,100,113,77,102,37,110,108,112,116,
- 97,100,100,97,97,97,97,97,97,48,112,48,113,48,49,49,97,112,96,100,
- 100,36,112,49,97,112,112,112,37,100,52,112,49,49,49,33,49,32,49,49,
- 33,52,52,52,112,117,97,33,37,37,37,49,49,97,36,48,33,49,49,49,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,33,37,97,100,36,101,100,96,100,
- 33,53,101,112,112,112,48,49,49,100,113,49,49,49,97,37,112,112,112,
- 96,32,37,52,52,52,100,100,100,116,52,48,49,49,33,52,52,52,52,48,116,
- 37,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,97,100,100,100,101,77,102,36,58,57,49,100,96,100,100,97,97,97,97,
- 33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,112,97,112,96,
- 37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,100,52,112,117,97,
- 33,37,37,37,49,49,97,52,37,97,100,100,32,37,101,33,37,36,37,97,97,
- 97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,
- 112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,100,52,52,52,96,52,36,37,37,37,49,
- 49,49,101,36,96,100,100,32,37,49,53,97,113,97,100,100,96,97,100,100,
- 100,97,73,102,33,58,57,101,100,48,49,49,96,97,97,97,97,97,48,112,48,
- 113,48,49,49,97,49,112,48,49,113,112,49,97,112,96,37,32,100,52,112,
- 49,49,49,33,112,96,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,52,33,37,49,49,37,37,101,33,37,116,112,96,97,97,100,100,100,100,
- 97,101,96,100,36,101,49,53,96,36,53,37,49,113,112,48,49,49,53,36,49,
- 49,49,101,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,33,37,49,49,
- 37,37,37,49,49,37,33,100,100,100,97,100,100,100,117,73,102,96,58,57,
- 49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,100,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,
- 37,101,33,37,36,37,97,97,97,97,100,100,100,33,53,96,100,36,53,32,53,
- 96,33,53,101,112,112,112,48,49,49,112,37,49,48,49,53,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,97,52,100,100,52,52,52,100,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,97,100,100,100,49,73,102,53,58,57,101,112,53,49,49,96,97,97,97,
- 33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,
- 37,100,52,112,49,49,49,97,113,116,100,100,52,52,52,52,112,117,97,33,
- 37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,116,112,96,97,97,
- 100,100,100,100,97,101,96,100,36,101,100,96,97,36,53,37,49,113,112,
- 48,49,49,100,100,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,
- 37,53,33,49,49,37,37,37,37,49,37,33,100,100,100,97,100,100,100,37,
- 73,102,116,111,108,100,101,96,100,100,97,97,97,97,97,97,48,112,48,
- 113,48,49,49,97,117,37,48,49,113,112,49,97,112,96,37,32,100,52,112,
- 49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,49,37,37,49,49,
- 97,101,117,32,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,
- 113,96,100,100,36,101,49,53,96,33,53,101,112,112,112,48,49,49,53,112,
- 49,48,49,117,113,112,112,112,96,112,48,52,52,52,100,100,100,52,49,
- 100,100,100,52,52,52,52,100,48,52,36,37,37,37,49,49,49,37,116,32,49,
- 49,37,37,37,97,52,113,97,100,100,96,97,100,100,100,33,29,51,112,111,
- 108,32,100,96,100,100,97,97,97,97,33,53,53,112,48,49,49,49,49,97,112,
- 37,48,49,113,112,49,97,112,96,37,37,100,100,112,49,49,49,49,53,32,
- 100,100,52,52,52,52,112,117,97,33,49,37,37,49,49,97,101,48,33,49,49,
- 37,37,101,33,37,36,112,96,97,97,97,100,100,100,113,96,97,100,36,53,
- 113,53,96,36,53,37,49,113,112,48,49,49,100,52,117,48,49,53,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,49,37,
- 33,100,100,100,97,100,100,100,53,29,51,53,58,57,97,97,48,49,49,96,
- 97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,
- 112,96,37,37,100,52,52,100,100,100,52,116,36,100,100,52,52,52,52,112,
- 37,113,36,37,37,37,49,49,97,52,33,49,49,49,37,37,101,33,37,116,37,
- 97,97,97,100,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,36,36,49,48,49,53,112,112,112,112,112,101,53,
- 52,52,52,100,100,100,52,37,37,100,100,52,52,52,52,52,48,52,48,37,37,
- 37,49,49,49,101,33,49,49,49,37,37,37,53,97,113,97,100,100,96,97,100,
- 100,100,113,72,102,101,111,108,32,100,96,100,100,97,97,97,97,33,48,
- 53,112,48,113,48,49,49,97,32,49,48,49,113,112,49,97,112,96,37,37,100,
- 100,100,100,100,100,36,113,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,116,112,96,97,97,97,
- 100,100,100,97,101,96,100,36,101,100,96,97,36,53,101,112,112,112,48,
- 49,49,100,48,49,100,100,48,112,112,112,112,112,101,53,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,
- 37,53,33,49,49,37,37,37,53,97,36,97,100,100,96,97,100,100,100,101,
- 72,102,100,107,108,116,49,48,49,49,96,97,97,97,33,53,97,37,48,113,
- 48,49,49,97,33,36,100,100,36,112,49,97,112,96,37,37,100,52,112,49,
- 49,49,33,116,36,100,100,52,52,52,52,32,117,97,101,32,49,37,49,49,49,
- 52,36,49,49,49,37,37,101,33,37,36,37,97,97,97,100,100,100,100,113,
- 48,97,100,36,101,100,96,97,33,53,37,49,113,112,48,49,49,100,37,49,
- 48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,112,116,
- 100,100,52,52,52,52,52,48,52,36,49,37,37,49,49,49,101,97,36,49,49,
- 37,37,37,53,97,113,97,100,100,96,97,100,100,100,97,8,51,96,107,108,
- 32,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,113,116,
- 49,49,49,113,112,49,97,112,96,37,37,100,100,112,49,49,49,33,113,101,
- 100,100,52,52,52,52,112,117,97,101,32,49,37,49,49,49,116,48,33,49,
- 49,37,37,101,33,37,36,112,96,97,97,97,100,100,100,97,101,96,100,36,
- 101,100,96,97,33,53,101,48,113,112,48,49,49,100,48,116,101,100,48,
- 112,112,112,112,112,101,48,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,48,49,49,49,37,37,37,
- 53,97,116,97,100,100,96,97,100,100,100,117,8,51,37,106,108,116,52,
- 53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,
- 112,49,97,112,96,37,37,100,52,32,49,49,49,33,116,36,100,100,52,52,
- 52,52,112,37,113,36,37,37,37,49,49,97,52,97,36,49,49,37,37,101,33,
- 37,116,37,97,97,97,97,100,100,100,49,100,97,100,36,101,100,96,97,33,
- 53,37,113,112,112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,112,
- 53,52,52,52,100,100,100,52,32,117,49,49,33,52,52,52,52,48,52,36,37,
- 49,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,
- 100,100,100,49,8,51,116,107,108,32,100,96,100,100,97,97,97,97,33,53,
- 101,112,48,113,48,49,49,49,37,49,49,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,113,96,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,52,53,49,49,49,37,37,101,33,37,116,112,96,97,97,97,
- 100,100,100,37,117,97,100,36,101,100,96,97,33,53,101,112,112,112,48,
- 49,49,100,32,49,48,49,53,112,112,112,112,96,112,96,100,52,52,100,100,
- 100,116,33,48,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,
- 100,36,49,49,37,37,37,101,97,113,33,101,100,96,97,100,100,100,37,8,
- 51,33,107,108,36,48,96,100,100,97,97,97,100,36,53,53,112,48,113,48,
- 49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,32,49,49,49,
- 33,48,36,49,49,33,52,52,52,112,117,97,33,37,49,37,49,49,97,116,48,
- 33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,
- 36,101,100,96,97,97,97,36,112,112,112,48,49,49,100,113,48,100,100,
- 48,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,52,52,96,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 53,97,113,97,100,100,96,97,100,100,100,33,12,51,48,107,108,100,101,
- 96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,49,36,49,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,100,53,100,100,52,
- 52,52,52,112,117,33,32,37,37,37,49,49,97,116,48,33,49,49,37,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,53,100,48,49,113,101,100,96,97,
- 33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,117,48,52,52,52,100,100,100,52,37,97,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,37,116,52,33,117,
- 53,96,100,100,100,53,12,51,117,106,108,52,52,100,100,100,97,97,97,
- 97,33,53,53,112,48,113,48,49,49,33,36,49,48,49,113,112,48,113,112,
- 96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,116,101,101,100,100,32,37,101,33,37,48,37,
- 97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,97,97,36,112,
- 112,112,48,49,49,100,113,32,48,49,53,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,96,52,36,37,37,
- 37,49,49,49,101,36,49,49,49,37,37,37,53,117,113,97,113,117,49,96,100,
- 100,100,113,9,51,36,107,108,48,36,49,49,49,96,97,97,97,33,48,53,112,
- 48,113,48,49,49,97,52,52,48,49,113,112,116,116,36,96,37,37,100,52,
- 112,49,49,49,97,49,48,49,49,33,52,52,52,112,117,97,33,37,37,37,49,
- 49,97,52,101,96,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,
- 100,53,112,53,49,113,101,100,96,97,97,97,96,112,112,112,48,49,49,100,
- 49,100,48,49,53,112,112,112,112,32,113,48,52,52,52,100,100,100,116,
- 117,36,100,100,52,52,52,52,52,48,52,36,37,37,49,49,49,49,37,32,53,
- 49,49,37,37,37,117,52,113,97,52,49,53,96,100,100,100,101,9,51,113,
- 63,57,49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,
- 37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,117,33,32,37,37,37,49,49,97,116,48,33,49,
- 49,37,49,101,33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,
- 101,100,96,97,33,53,113,112,112,112,48,49,49,100,37,49,48,49,53,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,32,96,100,100,52,52,
- 52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,
- 113,97,100,100,96,97,100,100,100,97,93,102,33,63,57,37,100,96,100,
- 100,97,97,97,97,33,53,101,112,48,113,48,49,49,97,49,101,101,100,36,
- 112,101,97,112,96,37,37,100,52,112,49,49,49,97,33,48,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,52,96,96,100,100,32,37,101,33,
- 37,36,37,97,97,97,97,100,100,100,49,49,97,100,36,101,100,96,97,33,
- 53,101,112,112,112,48,49,49,100,113,36,100,100,48,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,116,117,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,117,53,33,49,49,37,37,37,53,97,113,97,100,
- 100,96,97,100,100,100,117,93,102,96,63,57,33,36,53,49,49,96,100,100,
- 100,36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,
- 37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,
- 33,37,37,49,49,49,97,116,48,33,49,49,37,37,113,33,37,36,37,97,97,97,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,48,113,
- 48,49,49,100,37,49,48,49,53,112,48,113,112,96,112,48,52,100,52,100,
- 100,100,52,37,52,100,100,52,100,52,52,52,48,52,36,37,37,49,49,49,49,
- 101,117,36,49,49,37,37,37,53,100,113,97,100,52,53,96,100,100,100,49,
- 93,102,53,63,57,37,100,96,100,100,97,97,97,97,33,53,101,112,48,113,
- 48,49,49,97,97,36,49,49,113,112,101,97,112,96,37,37,100,52,112,49,
- 49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,
- 52,48,49,49,49,37,37,101,33,37,36,37,97,97,97,100,100,100,100,117,
- 101,96,100,36,101,100,96,97,33,53,101,112,48,113,48,49,49,100,33,36,
- 100,100,48,112,112,112,112,96,112,48,52,52,52,100,100,100,116,112,
- 53,100,100,52,52,52,52,52,116,49,36,37,37,37,49,49,49,37,53,33,49,
- 49,37,37,37,53,117,113,97,100,100,96,97,100,100,100,37,93,102,116,
- 106,108,52,116,96,100,100,97,97,100,100,36,53,53,48,49,113,48,49,49,
- 97,37,49,48,49,113,112,97,117,112,96,37,37,100,52,112,49,49,49,33,
- 53,113,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,49,49,53,33,
- 49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,113,53,97,100,
- 36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,37,49,48,49,53,
- 48,113,112,112,96,112,48,52,52,100,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,101,33,96,100,100,32,37,37,
- 53,97,113,97,100,100,96,97,100,100,100,33,9,51,112,106,108,32,100,
- 96,100,100,97,97,97,97,33,53,101,112,48,113,48,49,49,97,117,97,48,
- 49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,97,32,100,100,
- 52,52,52,52,112,117,97,33,37,37,37,49,49,33,101,36,32,49,49,37,37,
- 37,116,32,36,37,97,97,97,97,100,100,100,33,96,101,100,36,101,100,96,
- 97,33,53,101,112,112,112,48,49,49,100,113,32,48,49,53,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,116,97,36,49,49,33,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,101,100,53,49,49,37,37,37,53,97,113,97,
- 100,100,96,97,100,100,100,53,9,51,53,63,57,97,117,96,100,100,97,97,
- 97,100,36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,97,117,112,
- 96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,
- 97,33,37,37,37,49,49,113,33,53,33,49,49,37,37,101,48,37,36,117,97,
- 97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,
- 48,113,48,49,49,100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,100,116,36,100,100,52,52,52,52,52,116,49,36,37,37,37,
- 49,49,49,37,53,33,49,49,37,37,37,53,33,36,116,100,100,96,97,100,100,
- 100,113,92,102,101,106,108,96,97,53,49,49,96,97,97,97,33,53,53,112,
- 48,113,48,49,49,97,32,49,48,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,97,117,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,36,37,100,100,100,32,37,101,36,37,36,37,97,97,97,97,100,100,100,
- 117,101,96,100,36,101,100,96,97,33,53,101,112,112,48,49,49,49,100,
- 37,49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,100,116,33,
- 117,49,49,33,52,52,52,52,116,49,36,37,37,37,49,49,49,101,97,36,49,
- 49,37,37,37,53,33,48,116,112,112,96,97,100,100,100,101,92,102,100,
- 42,57,49,100,96,100,100,97,97,97,100,36,53,101,48,49,113,48,49,49,
- 97,49,112,48,49,113,112,49,33,113,32,36,37,100,52,112,49,49,49,33,
- 33,33,49,49,33,52,52,52,32,117,97,33,37,37,37,49,49,33,97,48,33,49,
- 49,37,37,37,96,32,36,117,97,97,97,97,100,100,100,113,97,48,49,113,
- 101,100,96,97,33,53,101,112,112,112,48,49,49,100,49,48,49,49,53,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,
- 52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,
- 113,33,53,97,53,96,100,100,100,97,28,102,97,42,57,37,100,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,32,49,48,49,113,112,49,
- 97,48,97,37,37,100,52,112,49,49,49,97,32,116,49,49,33,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,48,33,36,49,49,37,37,101,33,37,36,37,97,
- 97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,
- 112,112,48,49,49,53,112,49,48,49,53,112,112,112,112,96,32,37,52,52,
- 52,100,100,100,116,117,36,100,100,52,52,52,52,52,48,52,36,37,37,37,
- 49,49,49,49,53,33,49,49,37,37,37,53,97,113,97,49,49,53,96,100,100,
- 100,117,28,102,32,47,57,113,96,101,100,100,97,97,97,97,36,53,101,112,
- 48,113,48,49,49,97,53,32,49,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,33,53,33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,52,
- 97,100,100,36,101,49,53,96,36,53,101,112,112,112,48,49,49,100,97,48,
- 49,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,53,36,49,
- 49,33,52,52,52,52,48,52,36,37,37,37,49,49,49,37,116,117,100,100,32,
- 37,37,53,97,113,97,100,100,96,97,100,100,100,49,28,102,117,42,57,37,
- 100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,100,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,52,112,97,33,37,37,37,49,49,97,116,48,33,49,49,37,
- 37,37,116,32,36,37,97,97,97,97,100,100,100,113,101,100,100,36,37,53,
- 53,96,36,53,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,112,
- 112,96,32,37,52,52,52,100,100,100,116,117,36,100,100,52,52,52,52,52,
- 48,96,33,37,37,37,49,49,49,101,97,53,49,49,37,37,37,53,97,113,97,100,
- 100,96,97,100,100,100,37,28,102,52,42,57,33,100,100,100,100,97,97,
- 97,97,33,53,101,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,53,49,33,112,49,49,49,33,97,97,100,100,52,52,52,52,112,117,97,
- 33,37,37,37,49,49,97,116,117,97,100,100,32,37,101,33,37,36,37,97,97,
- 97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,
- 112,48,49,49,101,52,100,48,49,53,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,53,33,49,49,33,52,52,52,52,48,52,36,37,37,37,49,49,
- 49,37,53,33,49,49,37,37,37,53,97,113,97,112,100,96,97,100,100,100,
- 33,8,102,49,42,57,53,100,53,49,49,96,97,97,97,33,53,101,112,48,113,
- 48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,
- 49,97,52,48,49,49,33,52,52,52,52,112,97,33,37,37,37,49,49,97,116,48,
- 33,49,49,37,37,101,36,37,36,37,97,97,97,97,100,100,100,101,112,96,
- 100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,49,33,97,100,100,
- 48,112,112,112,112,96,112,48,52,52,52,100,100,100,116,117,36,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,96,32,49,49,37,37,37,
- 53,97,113,97,100,49,53,96,100,100,100,53,8,102,112,47,57,49,100,96,
- 100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,
- 112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,52,100,48,49,49,37,37,101,33,
- 37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,101,36,97,97,33,
- 53,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,48,113,96,112,
- 48,52,52,52,100,100,100,52,32,33,100,100,52,52,100,52,52,48,52,36,
- 37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,36,101,96,97,
- 100,100,100,113,29,102,37,42,57,49,100,96,100,100,97,97,97,97,33,53,
- 53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,
- 52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,
- 37,49,49,97,116,48,33,49,49,37,37,101,53,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,
- 49,100,36,97,100,100,48,112,112,112,112,96,48,49,52,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,
- 100,48,49,49,37,37,37,53,97,113,97,36,37,97,97,100,100,100,101,29,
- 102,36,46,57,49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,
- 49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,
- 33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,33,
- 116,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,113,112,
- 96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,112,37,49,48,
- 49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 37,53,97,113,97,100,117,101,97,100,100,100,97,25,102,33,46,57,49,100,
- 96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,
- 52,52,52,112,117,97,33,37,37,37,49,49,97,52,37,32,49,49,37,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,33,33,96,100,36,101,100,101,97,
- 33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,48,49,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,37,116,100,100,100,32,37,37,53,97,113,97,100,
- 100,101,97,100,100,100,117,25,102,96,46,57,49,100,96,100,100,97,97,
- 97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,49,36,37,97,97,
- 100,97,100,100,100,97,101,96,100,36,101,100,96,97,33,48,101,112,112,
- 112,48,49,49,100,113,36,100,100,48,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,
- 49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,36,97,97,100,100,
- 100,49,25,102,53,46,57,49,100,96,100,100,97,97,97,97,33,53,53,112,
- 48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,116,49,100,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,
- 53,53,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,32,
- 49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,53,97,113,97,100,100,96,97,100,100,100,112,24,102,116,43,
- 57,49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,
- 49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,
- 100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,
- 37,37,101,33,37,36,37,100,97,97,97,100,100,100,97,101,96,100,36,101,
- 32,53,96,33,53,101,112,112,112,48,49,49,100,33,97,101,100,48,112,112,
- 112,48,97,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,
- 52,48,52,36,37,37,37,49,49,49,101,100,36,49,49,37,37,37,53,97,113,
- 97,100,100,96,97,100,100,100,33,13,102,113,43,57,49,100,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,52,32,32,49,49,37,37,101,33,37,36,
- 37,97,97,97,97,100,100,100,53,101,101,100,36,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,101,53,49,49,49,37,37,37,53,97,33,97,100,100,96,97,
- 100,100,100,53,13,102,48,46,57,49,100,96,100,100,97,97,97,97,33,53,
- 53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,
- 52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,
- 37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,97,100,97,97,100,
- 100,100,97,101,96,100,36,101,100,101,97,33,53,101,112,112,112,48,49,
- 49,100,33,53,48,49,53,112,112,112,48,97,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,113,24,102,
- 101,43,57,49,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,
- 49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,97,36,
- 49,49,37,37,101,33,37,36,49,97,97,97,97,100,100,100,97,101,96,100,
- 36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,101,32,32,49,49,37,37,37,53,
- 97,113,97,100,100,96,97,100,100,100,101,24,102,100,127,108,100,101,
- 96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,
- 52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,
- 33,37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,
- 33,53,101,112,112,112,48,49,49,100,113,53,48,49,53,112,112,112,48,
- 97,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,100,100,100,100,97,88,51,96,127,108,100,100,100,100,100,97,97,97,
- 97,97,100,36,112,48,113,48,96,100,100,100,100,100,100,36,112,100,117,
- 112,48,49,33,100,52,52,36,48,49,49,49,49,49,49,33,52,52,52,52,100,
- 100,32,37,37,37,33,100,100,100,100,100,100,100,32,37,101,36,37,49,
- 49,96,97,97,97,32,49,49,49,49,49,49,49,48,49,97,97,97,100,36,112,112,
- 112,48,96,100,100,100,100,100,100,36,112,112,112,112,48,49,33,52,52,
- 52,36,48,49,49,49,49,49,49,33,52,52,52,52,52,100,32,37,37,37,33,100,
- 100,100,100,100,100,100,32,37,37,101,100,48,49,48,49,97,97,32,49,49,
- 37,93,51,37,126,108,100,100,100,100,100,97,100,100,100,100,97,100,
- 100,100,36,53,96,100,100,100,100,100,100,36,112,53,49,49,113,32,100,
- 52,36,32,36,48,49,49,49,49,49,49,97,117,117,117,101,52,100,100,112,
- 117,33,112,49,49,49,49,49,49,49,117,37,37,49,49,49,49,49,49,49,96,
- 32,49,49,49,49,49,49,49,96,100,100,97,100,97,36,112,112,53,32,48,49,
- 49,49,49,49,49,113,48,49,49,49,113,48,97,37,32,52,52,100,100,100,100,
- 100,100,100,52,100,100,36,112,32,100,52,52,52,32,117,49,49,49,49,49,
- 49,49,33,52,52,32,117,49,49,116,117,117,100,32,49,49,33,88,51,116,
- 127,108,100,100,100,100,100,100,117,117,117,117,100,36,117,117,53,
- 113,48,49,49,49,49,49,49,33,100,100,96,117,53,49,97,117,101,116,101,
- 100,100,100,100,100,100,100,100,100,100,100,116,101,100,112,49,49,
- 49,49,49,49,49,49,49,49,49,49,37,37,113,116,49,49,116,117,117,100,
- 100,100,100,100,100,100,100,100,100,52,117,100,52,100,100,100,100,
- 32,49,49,49,49,49,49,49,49,49,113,117,117,117,53,49,49,49,33,52,52,
- 100,100,100,100,100,100,100,52,116,117,101,100,100,100,100,100,100,
- 112,49,49,49,49,49,49,49,49,49,49,49,96,100,100,100,100,100,100,117,
- 100,100,100,112,93,51,33,127,108,100,100,100,100,100,100,32,37,37,
- 37,49,49,49,96,117,100,32,49,49,49,49,49,49,49,37,49,49,37,49,49,113,
- 36,96,97,100,97,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 52,36,112,48,113,48,49,49,49,49,49,49,49,117,117,113,116,49,49,116,
- 53,33,33,100,100,100,100,100,100,100,100,52,100,100,52,100,100,100,
- 32,37,37,49,49,49,49,49,49,49,49,49,53,101,112,96,97,100,100,100,52,
- 52,52,97,100,100,100,100,100,100,52,33,116,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,49,49,49,49,113,48,49,49,49,49,49,116,52,100,
- 100,36,92,51,48,127,108,100,100,100,100,36,53,48,49,49,49,100,116,
- 37,100,52,96,101,100,100,100,100,100,100,116,117,117,37,117,48,49,
- 33,112,36,112,117,49,49,49,49,49,49,49,117,117,117,117,97,101,100,
- 32,116,117,117,117,100,100,100,100,100,100,100,117,32,37,116,32,49,
- 49,96,97,53,117,53,49,49,49,49,49,49,113,117,53,32,117,53,49,97,117,
- 117,117,117,101,100,100,100,100,100,100,116,37,112,112,112,33,49,117,
- 117,33,52,96,48,49,49,49,49,49,49,37,117,117,117,117,49,49,116,117,
- 117,49,117,100,100,100,100,100,100,100,117,117,117,117,117,100,36,
- 117,117,53,32,53,49,49,101,92,59,101,43,179,100,194,206,100,};
diff --git a/sys/dev/ctau/ctaug7fw.h b/sys/dev/ctau/ctaug7fw.h
deleted file mode 100644
index 523008932a0f..000000000000
--- a/sys/dev/ctau/ctaug7fw.h
+++ /dev/null
@@ -1,2062 +0,0 @@
-/*
- * DO NOT EDIT MANUALLY!
- * This code was generated by mkfw utility
- * from the file `ctaug703.dat'
- *
- * Cronyx Id: ctaug7fw.h,v 1.1 2002/06/03 10:19:40 rik Exp $
- * $FreeBSD$
- */
-long ctaug703_fw_len = 323982;
-
-const char *ctaug703_fw_version = "1.1";
-const char *ctaug703_fw_date = "18.02.97";
-const char *ctaug703_fw_copyright = "Copyright (C) 1997 Cronyx Engineering.";
-
-const cr_dat_tst_t ctaug703_fw_tvec[] = {
- {130534,132958}, {134206,136630}, {137878,140302}, {141550,143974},
- {145222,147646}, {148894,151318}, {152566,154990}, {156238,158662},
- {159910,162334}, {163582,166006}, {167254,169678}, {170926,173350},
- {174598,177022}, {178270,180694}, {181942,184366}, {185614,188038},
- {189286,191710}, {192958,195382}, {196630,199054}, {200302,202726},
- {203974,206398}, {207646,210070}, {211318,213742}, {214990,217414},
- {218662,221086}, {222334,224758}, {226006,228430}, {229678,232102},
- {233350,235774}, {237022,239446}, {240694,243118}, {244366,246790},
- {248038,250462}, {251710,254134}, {255382,257806}, {259054,261478},
- {262726,265150}, {266398,268822}, {270070,272494}, {273742,276166},
- {277414,279838}, {281086,283510}, {284758,287182}, {288430,290854},
- {292102,294526}, {295774,298198}, {299446,301870}, {303118,305542},
- {306790,309214}, {310462,312886}, {314134,316558}, {317806,320230},
- {321478,323902}, {323982,323982},
-};
-
-const unsigned char ctaug703_fw_data[] = {
- 155,153,97,52,81,185,113,32,100,100,101,112,96,101,100,36,96,112,49,
- 112,96,101,100,116,100,53,32,49,97,100,37,96,100,100,36,97,48,37,116,
- 100,96,100,101,100,117,36,100,100,52,37,52,52,116,52,112,33,101,33,
- 37,49,49,113,113,48,97,100,100,48,52,112,97,101,48,100,33,117,53,96,
- 100,100,53,53,100,96,100,101,112,32,101,32,113,101,96,49,112,112,48,
- 49,49,113,36,101,48,49,113,52,112,112,52,96,48,37,37,52,37,100,100,
- 100,100,37,117,36,49,113,33,101,32,113,101,36,37,37,116,32,49,49,49,
- 53,101,33,49,49,116,32,116,32,101,113,32,117,101,96,97,100,100,116,
- 116,36,96,36,100,100,100,52,52,52,52,112,113,48,37,49,37,49,49,49,
- 36,33,36,49,49,37,53,49,36,37,116,112,96,100,33,53,49,49,49,116,101,
- 96,100,100,97,97,97,33,53,96,96,112,112,112,48,49,49,100,52,117,48,
- 49,113,112,112,52,112,112,101,48,52,52,52,100,100,100,52,113,101,100,
- 100,112,100,48,52,52,112,113,36,37,37,37,49,49,97,52,33,37,49,49,37,
- 37,37,37,37,36,112,96,97,97,97,100,100,100,117,101,96,100,100,97,97,
- 97,97,33,53,52,112,112,112,48,49,49,113,113,96,100,100,36,112,112,
- 112,49,52,53,53,49,113,33,100,100,100,116,101,230,102,36,49,48,97,
- 100,49,112,49,49,33,33,116,36,52,112,49,49,53,113,97,36,100,48,113,
- 33,48,49,49,33,49,100,33,53,49,48,113,49,97,116,116,100,100,36,33,
- 37,116,36,37,116,96,113,96,100,100,100,36,53,100,96,100,100,33,113,
- 112,113,100,33,113,100,96,37,48,49,33,48,36,117,49,97,100,49,96,49,
- 96,116,49,112,36,52,52,100,100,100,52,116,36,100,100,52,37,52,52,37,
- 48,112,97,33,101,33,49,49,49,49,53,33,97,100,116,48,49,96,116,97,97,
- 97,33,53,96,100,100,100,97,101,96,100,100,97,33,53,96,113,52,96,117,
- 49,112,48,49,49,53,36,113,33,37,49,49,37,37,37,37,37,116,116,96,97,
- 100,97,100,100,36,53,100,96,100,100,100,32,96,97,33,53,52,48,113,96,
- 101,100,100,36,52,112,48,49,113,112,112,112,96,117,37,37,52,52,52,
- 100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,
- 49,37,53,33,49,49,101,49,33,37,37,96,52,97,97,97,97,100,100,48,53,
- 100,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,116,32,
- 48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,101,16,177,241,
- 96,36,100,48,113,36,52,96,117,117,36,53,33,37,116,100,100,101,36,48,
- 33,49,112,33,37,52,101,100,48,36,113,49,100,36,100,36,101,116,101,
- 96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,117,49,48,
- 49,113,100,100,52,112,113,96,52,112,33,52,100,100,96,36,37,37,49,49,
- 36,37,112,36,96,112,36,52,33,37,37,49,49,49,53,52,36,49,49,101,33,
- 37,101,33,36,113,112,96,113,96,100,100,100,32,100,96,100,96,53,100,
- 36,48,117,100,112,112,96,37,48,49,49,113,113,116,100,100,100,36,96,
- 37,112,52,37,112,117,36,52,100,100,100,101,96,116,48,100,100,100,97,
- 97,97,97,33,53,53,112,48,113,48,49,49,97,36,97,100,100,36,112,49,97,
- 112,96,101,52,100,52,112,49,49,49,33,112,117,49,49,33,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,36,49,97,100,100,32,37,101,33,37,36,37,
- 97,97,97,97,100,100,100,117,101,96,100,100,113,100,96,97,33,48,101,
- 112,112,112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,32,37,52,
- 52,52,100,100,100,52,37,49,100,100,52,52,52,52,52,48,100,36,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,
- 100,100,37,76,68,100,33,53,49,100,52,33,53,100,49,32,97,101,96,33,
- 53,49,113,49,101,37,53,49,52,53,32,33,100,100,33,97,97,112,49,33,49,
- 37,100,117,49,48,49,49,53,112,96,101,112,96,37,52,37,100,100,100,100,
- 112,112,96,100,100,116,97,53,32,97,97,48,101,36,96,32,49,49,101,36,
- 53,33,49,36,36,33,52,33,52,32,97,113,96,97,97,100,100,100,97,101,96,
- 100,100,116,96,97,113,32,97,52,52,48,53,48,49,49,49,37,33,100,101,
- 97,112,49,33,100,53,49,52,52,112,33,100,100,100,52,116,36,100,100,
- 112,33,112,33,52,101,33,116,53,33,37,49,49,113,33,96,36,49,48,49,49,
- 113,112,112,112,96,101,37,52,100,52,100,100,100,112,97,36,100,100,
- 100,116,53,52,52,112,97,33,49,37,116,100,100,100,32,53,33,49,49,49,
- 37,37,37,116,117,112,96,97,97,97,100,100,48,53,100,96,100,100,97,97,
- 113,96,97,53,97,112,112,112,48,49,49,113,52,112,48,49,97,49,49,112,
- 112,96,101,49,52,52,52,100,100,36,113,117,33,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,37,36,37,97,
- 97,97,97,100,100,100,33,48,49,49,49,49,96,97,101,112,116,48,49,49,
- 112,48,49,49,113,32,110,108,32,100,96,36,49,101,96,37,101,36,96,112,
- 49,112,96,101,100,116,100,116,97,100,36,33,113,96,48,113,36,97,48,
- 53,97,100,96,100,49,113,117,36,100,100,52,37,52,112,97,52,112,33,101,
- 33,37,49,49,113,52,37,100,100,100,112,101,100,52,96,48,100,113,32,
- 53,96,100,36,117,96,117,96,100,117,113,32,101,32,116,101,32,48,112,
- 112,48,49,49,113,36,36,100,100,36,52,112,112,52,112,37,37,49,52,37,
- 100,100,100,36,96,36,36,113,36,116,100,32,113,101,36,37,37,116,32,
- 49,49,49,37,53,33,49,49,49,37,116,32,101,113,32,53,97,96,97,100,100,
- 116,52,112,96,36,100,100,100,52,52,52,52,112,113,33,37,49,37,49,49,
- 49,100,36,32,49,49,37,53,49,36,37,116,112,96,100,33,53,49,49,49,112,
- 32,48,49,49,96,97,97,33,117,53,52,112,112,112,48,49,49,100,48,116,
- 101,100,36,112,112,52,112,96,112,48,52,52,52,100,100,100,52,97,100,
- 100,100,32,37,36,52,52,112,113,36,37,37,37,49,49,97,116,48,33,49,49,
- 37,37,37,37,37,36,37,97,97,97,97,100,100,100,49,32,96,100,100,97,97,
- 97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 49,52,53,100,100,36,52,100,100,100,116,33,179,51,117,53,48,97,100,
- 49,112,52,97,33,48,116,36,52,112,49,49,53,113,97,36,100,32,117,33,
- 112,48,101,52,48,52,36,53,49,48,49,48,53,96,116,100,100,36,33,37,116,
- 36,37,116,96,113,96,100,100,100,116,101,101,96,100,100,113,113,97,
- 37,49,36,113,52,96,37,48,49,49,52,112,49,48,33,112,53,96,49,96,33,
- 48,52,37,52,52,100,100,100,52,116,36,100,100,52,37,52,52,37,48,100,
- 97,33,101,33,49,49,49,113,100,53,113,52,33,53,49,96,116,49,97,97,33,
- 53,96,100,100,100,49,117,97,100,36,53,32,53,96,113,52,96,117,49,112,
- 48,49,49,53,116,113,53,49,49,49,37,37,37,37,37,116,116,101,97,100,
- 97,100,100,36,53,100,96,100,100,97,101,101,97,97,97,53,48,113,96,101,
- 100,100,36,112,49,48,49,113,48,113,112,96,117,37,37,52,52,52,100,100,
- 36,113,97,36,100,100,52,52,52,37,52,116,49,36,37,37,37,49,49,49,37,
- 53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,112,48,49,97,
- 100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,
- 49,113,112,112,112,96,112,48,52,52,52,100,100,100,52,112,96,100,100,
- 52,100,52,116,36,101,37,49,49,33,37,49,49,49,101,21,177,177,97,36,
- 100,48,113,36,116,100,49,117,36,53,33,37,116,100,100,101,100,37,48,
- 49,113,33,37,100,53,101,48,36,113,96,101,36,100,116,53,101,112,96,
- 100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,49,48,49,
- 113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,101,37,100,96,116,
- 36,112,36,48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,37,
- 101,33,117,112,112,96,113,96,100,100,100,36,97,48,53,49,48,100,36,
- 48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,37,112,
- 52,37,112,117,36,52,100,100,100,101,116,112,116,97,100,100,97,97,97,
- 97,97,97,48,112,48,113,48,49,49,97,112,96,100,100,36,112,49,97,112,
- 112,112,37,100,52,112,49,49,49,33,49,32,49,49,33,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,36,48,33,49,49,49,37,101,33,37,36,37,97,97,
- 97,97,100,100,100,33,37,97,100,36,101,100,96,100,33,53,101,112,112,
- 112,48,49,49,100,113,49,49,49,97,37,112,112,112,96,32,37,52,52,52,
- 100,100,100,116,52,48,49,49,33,52,52,52,52,48,116,37,37,37,37,49,49,
- 49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 101,77,68,36,97,33,49,100,52,33,37,112,117,53,97,101,96,33,53,49,113,
- 49,53,100,96,36,33,49,32,117,101,100,33,97,52,112,49,33,49,113,101,
- 37,49,48,49,49,53,112,96,101,112,96,37,52,37,100,100,100,100,37,101,
- 33,49,49,33,100,97,101,100,52,48,101,33,116,32,49,49,100,116,48,33,
- 49,52,100,33,52,33,100,53,33,101,96,97,97,100,100,100,33,97,53,49,
- 49,112,96,97,113,32,97,52,52,112,52,48,49,49,49,113,49,48,49,112,37,
- 49,33,100,53,49,52,52,112,33,100,100,100,52,32,48,100,100,32,33,112,
- 49,33,101,33,116,53,33,37,49,49,113,33,37,113,49,48,49,113,112,112,
- 112,112,96,101,37,52,100,52,100,100,100,112,97,36,100,100,52,52,116,
- 48,52,112,97,33,49,37,116,100,100,100,32,53,33,49,49,37,37,49,37,116,
- 117,112,96,97,97,97,100,100,48,101,97,48,49,49,96,97,113,96,33,97,
- 97,112,112,112,48,49,49,113,112,49,48,49,97,49,49,112,112,96,101,49,
- 52,52,52,100,100,36,113,97,36,100,100,37,52,52,52,52,48,52,36,37,37,
- 37,49,49,49,37,53,33,49,49,37,49,37,37,37,48,37,97,97,97,97,100,100,
- 100,49,33,48,49,49,96,97,100,101,112,116,48,49,49,112,48,49,49,113,
- 112,58,57,97,117,96,100,117,113,96,101,112,36,96,112,113,113,96,101,
- 100,52,101,37,49,48,97,100,37,96,100,100,36,97,48,37,116,100,96,100,
- 101,100,117,36,100,100,52,37,52,112,97,97,112,53,101,33,37,49,49,113,
- 113,53,33,49,49,53,49,100,49,49,37,100,113,32,53,96,100,36,49,33,100,
- 96,36,49,101,32,101,96,37,96,96,49,112,112,48,49,49,113,97,37,100,
- 100,36,96,37,112,52,96,48,37,37,52,37,100,100,100,100,48,37,36,49,
- 37,52,117,33,33,101,36,37,37,116,32,49,49,49,101,96,96,100,100,97,
- 32,96,32,101,116,32,117,112,53,96,100,100,52,117,33,100,36,49,49,33,
- 52,52,52,52,52,36,33,37,49,37,49,49,49,52,33,37,49,49,37,53,49,36,
- 37,116,32,96,100,33,53,49,49,49,32,37,100,100,100,97,97,97,33,117,
- 53,52,112,112,112,48,49,49,100,49,112,48,49,113,112,112,52,112,96,
- 37,37,52,52,100,100,100,100,52,116,36,100,100,112,52,113,33,100,112,
- 113,48,49,37,37,49,49,113,97,48,49,49,113,36,37,37,37,37,36,37,97,
- 97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,
- 112,48,49,49,113,52,112,48,49,113,112,112,48,49,113,48,96,100,100,
- 52,100,100,100,116,53,230,102,36,49,48,33,112,53,112,49,33,116,49,
- 116,48,52,112,49,49,53,113,100,53,100,48,113,33,48,49,49,97,48,100,
- 33,53,49,48,49,49,37,36,97,100,100,36,33,37,116,116,48,52,97,113,96,
- 100,100,100,116,112,33,96,100,100,100,52,116,53,48,36,49,117,97,101,
- 100,100,100,100,112,32,48,33,101,49,96,49,96,33,48,112,36,52,52,100,
- 100,100,52,116,36,100,100,52,37,52,52,37,48,100,33,116,96,33,49,49,
- 49,49,53,33,49,100,116,112,117,97,33,48,97,97,33,53,96,100,100,100,
- 97,101,96,100,36,53,32,53,96,113,52,96,117,49,112,48,49,49,53,100,
- 48,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,
- 96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,
- 49,113,112,112,48,97,117,37,37,52,52,52,100,100,36,113,97,36,100,100,
- 52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,116,32,49,49,116,32,116,
- 32,37,116,52,97,97,97,97,100,100,96,53,100,96,100,116,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,36,113,48,49,113,112,112,48,113,
- 96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,101,4,177,177,97,36,100,48,113,36,116,49,97,
- 117,36,53,33,37,116,100,100,101,36,48,33,49,100,116,32,100,100,112,
- 48,36,113,96,101,36,100,116,100,48,48,48,49,49,112,96,33,53,36,32,
- 53,112,52,112,48,49,49,53,117,49,48,49,113,49,97,52,49,113,96,52,37,
- 112,33,100,100,48,49,96,36,100,48,113,36,112,36,48,117,36,52,33,37,
- 37,49,49,49,37,112,116,100,100,32,37,37,101,33,36,113,48,97,113,96,
- 100,100,100,100,101,96,96,52,53,100,36,48,117,100,112,112,96,37,48,
- 49,49,113,32,101,101,100,116,37,96,37,112,96,48,52,32,117,33,100,100,
- 100,113,48,96,112,53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,
- 97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,113,
- 116,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,
- 49,49,37,37,101,33,37,116,112,96,97,97,100,100,100,100,97,101,96,100,
- 36,101,100,96,97,36,53,37,49,113,112,48,49,49,100,100,49,48,49,53,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,
- 49,37,33,100,100,100,97,100,100,100,37,73,68,36,101,101,100,101,52,
- 33,97,49,49,32,100,101,96,33,53,49,113,49,37,53,53,49,37,96,33,53,
- 113,49,36,113,117,112,101,116,100,100,36,112,49,48,49,113,52,112,96,
- 37,113,96,37,52,37,52,100,100,100,37,32,33,100,100,100,100,97,117,
- 33,97,48,113,53,116,100,100,100,100,100,97,32,49,52,97,33,52,33,52,
- 32,33,101,96,97,97,100,100,100,97,101,96,100,100,113,101,97,113,32,
- 117,52,52,112,52,48,49,49,49,97,116,100,101,49,112,49,33,100,53,97,
- 52,100,112,33,100,100,100,52,116,36,100,100,32,33,32,33,52,37,32,96,
- 53,33,37,49,49,113,33,116,36,49,48,49,113,112,112,112,112,112,48,36,
- 52,100,52,100,100,100,112,117,33,100,100,52,116,100,48,52,112,33,32,
- 49,37,116,100,100,100,32,53,33,49,49,37,37,37,37,116,117,112,96,100,
- 97,97,100,100,112,113,53,96,100,100,97,97,113,96,33,97,97,112,112,
- 112,48,49,49,113,52,48,49,49,97,113,100,37,112,96,101,49,52,52,52,
- 100,100,100,37,116,36,100,100,117,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,101,36,49,49,49,37,37,37,37,49,36,37,97,97,97,97,100,100,100,
- 33,53,96,100,100,97,97,97,48,101,116,48,49,49,112,48,49,49,113,96,
- 111,108,36,112,48,49,97,48,97,101,112,36,96,112,33,113,96,101,100,
- 116,49,117,49,48,97,100,37,96,100,100,113,96,48,37,116,100,96,100,
- 101,36,116,36,100,100,52,37,52,112,97,32,112,33,101,33,37,49,49,113,
- 113,53,33,49,49,53,49,100,49,49,37,100,113,32,53,96,100,36,49,33,100,
- 96,36,49,101,32,101,32,113,101,96,49,112,112,48,49,49,113,112,49,48,
- 49,113,32,36,112,52,96,53,37,49,52,37,100,100,100,100,116,36,36,49,
- 37,52,116,32,53,101,36,37,37,116,32,49,49,49,37,53,33,49,49,96,32,
- 96,32,37,116,33,112,96,96,97,100,100,52,53,117,96,36,100,100,52,52,
- 52,52,52,112,113,33,37,49,49,49,49,49,36,117,32,49,49,37,53,49,36,
- 37,116,112,96,100,36,53,49,49,49,113,33,96,100,100,97,97,97,33,117,
- 53,52,48,113,112,48,49,49,116,36,49,48,49,113,112,112,52,112,96,32,
- 37,52,52,52,100,100,100,52,37,52,100,100,112,49,117,33,100,112,113,
- 48,49,37,37,49,49,97,100,113,37,49,113,33,37,37,37,37,36,37,97,97,
- 97,97,100,100,100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,48,113,48,96,100,100,52,
- 100,100,100,116,113,179,51,113,49,48,97,96,52,36,96,100,116,49,116,
- 36,52,112,49,49,53,113,117,36,100,36,32,52,112,49,53,97,48,117,37,
- 53,52,48,49,49,37,36,117,100,100,96,33,37,116,48,37,116,96,113,96,
- 97,100,100,116,48,116,96,100,100,100,52,116,53,48,36,49,117,97,101,
- 100,100,100,100,32,53,48,97,112,49,96,49,96,33,48,112,36,52,52,100,
- 100,100,52,101,48,100,100,52,49,52,52,37,48,100,97,33,101,33,49,49,
- 49,113,117,48,97,117,116,48,53,97,116,49,97,97,33,53,96,100,100,100,
- 113,36,97,100,36,53,32,53,96,113,52,112,96,117,37,48,49,49,53,52,112,
- 37,97,100,100,32,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,
- 96,100,100,97,101,36,97,33,53,52,48,113,112,48,49,49,113,112,49,48,
- 49,113,112,112,112,96,53,100,49,52,52,52,100,100,36,113,36,100,100,
- 100,52,52,52,37,52,112,53,36,37,37,49,49,49,49,37,53,33,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,48,48,100,96,100,116,96,97,97,
- 97,97,53,117,112,112,112,48,49,49,113,52,52,48,49,113,112,112,112,
- 112,96,112,96,52,52,52,100,100,100,52,37,100,100,100,52,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,101,1,177,241,96,36,100,48,113,36,116,
- 52,49,112,36,53,33,37,116,100,100,101,36,48,33,49,100,116,32,100,100,
- 36,49,36,113,96,101,36,100,116,100,100,37,48,49,49,32,53,32,53,100,
- 33,53,112,52,112,48,49,49,53,117,49,48,49,113,49,97,52,49,113,96,52,
- 37,112,33,100,100,48,49,96,36,100,48,113,36,112,36,48,117,36,52,33,
- 37,37,49,49,49,117,53,33,49,49,101,33,37,101,33,36,113,112,96,113,
- 96,100,100,100,32,100,96,48,97,53,100,36,48,117,100,112,112,32,36,
- 48,49,49,113,112,49,48,49,33,36,32,36,112,52,32,112,37,36,52,100,100,
- 100,113,36,32,100,96,100,100,97,97,97,97,33,48,53,112,48,113,48,49,
- 49,97,32,49,48,49,113,112,49,97,112,96,37,37,100,100,100,100,100,100,
- 36,113,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,
- 48,33,49,49,37,37,101,33,37,116,112,96,97,97,97,100,100,100,97,101,
- 96,100,36,101,100,96,97,36,53,101,112,112,112,48,49,49,100,48,49,100,
- 100,48,112,112,112,112,112,101,53,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 37,53,97,36,97,100,100,96,97,100,100,100,101,72,68,36,48,49,49,100,
- 52,33,53,36,100,53,97,101,96,33,53,49,113,49,37,48,53,49,37,96,33,
- 53,113,49,36,113,117,112,113,116,100,100,36,112,49,48,49,113,52,112,
- 96,37,113,96,37,52,37,52,100,100,100,37,32,37,49,49,49,49,96,117,33,
- 97,48,113,53,116,100,100,100,100,100,97,97,100,101,97,33,52,33,52,
- 32,33,101,96,97,97,100,100,100,33,36,49,49,49,48,97,97,113,32,97,52,
- 52,112,52,48,49,49,49,97,101,100,101,33,113,49,33,100,53,49,52,52,
- 112,33,100,100,100,52,113,33,49,49,117,33,112,33,52,101,33,116,53,
- 33,37,49,49,113,33,33,112,36,100,100,36,112,112,112,112,96,101,112,
- 33,100,52,100,100,100,112,32,33,49,49,33,116,100,48,52,112,97,33,49,
- 37,116,100,100,100,32,53,33,49,49,37,37,37,37,96,117,112,49,96,100,
- 97,100,100,36,37,97,100,100,100,97,97,113,96,33,97,97,112,112,48,49,
- 49,49,113,52,100,48,49,97,49,49,112,112,96,101,97,100,52,52,100,100,
- 36,113,97,36,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,
- 52,53,49,49,37,37,37,37,37,36,37,97,100,97,97,100,100,100,113,48,97,
- 100,100,97,97,97,101,112,116,48,49,49,112,48,49,49,113,48,106,108,
- 100,101,96,36,49,101,96,101,100,36,96,112,49,112,96,101,100,116,100,
- 100,49,48,97,100,37,96,100,100,36,97,116,48,116,100,96,100,101,36,
- 96,113,49,49,33,52,52,112,97,52,112,33,37,37,37,49,49,113,113,53,33,
- 49,49,53,49,100,49,49,37,100,113,32,53,96,100,36,49,33,100,96,36,49,
- 101,32,101,32,33,101,32,48,112,112,48,49,49,113,37,48,48,49,113,116,
- 113,112,52,96,48,37,37,52,37,100,100,100,36,96,36,36,49,113,97,100,
- 32,113,101,36,37,37,116,32,49,49,49,37,53,33,49,49,116,32,116,32,101,
- 33,32,117,101,96,97,100,100,116,116,96,96,36,100,100,52,52,52,52,52,
- 112,113,33,37,49,37,49,49,49,101,53,49,49,49,37,53,49,36,37,116,112,
- 96,100,36,53,49,49,49,48,117,100,100,100,97,97,97,33,117,53,116,36,
- 48,113,48,49,49,97,37,49,48,49,113,112,112,52,112,96,32,37,52,52,52,
- 100,100,100,52,116,36,100,100,112,100,36,52,52,112,113,36,49,37,37,
- 49,49,97,36,97,117,100,36,33,37,37,37,37,117,36,97,97,97,97,100,100,
- 100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 36,49,49,49,113,112,112,112,49,100,53,100,100,36,52,100,100,100,116,
- 37,178,51,101,48,49,97,100,49,112,49,49,36,48,116,36,52,112,49,49,
- 53,113,97,36,100,36,32,52,112,49,37,101,48,36,32,53,97,48,49,49,37,
- 53,33,49,49,101,53,37,116,48,37,116,96,113,101,97,100,100,116,48,32,
- 96,100,100,100,52,116,53,48,36,49,117,97,101,100,100,100,100,32,32,
- 48,97,36,48,96,49,96,116,49,52,37,52,52,100,100,100,52,116,36,100,
- 100,52,37,52,52,37,48,100,97,33,101,33,49,49,49,113,112,36,97,100,
- 116,52,101,117,116,49,97,100,33,53,49,49,49,49,97,49,53,49,113,53,
- 32,53,96,113,52,96,117,49,112,48,49,49,53,36,32,113,116,100,100,32,
- 37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,32,100,100,100,36,112,49,48,49,113,112,112,112,
- 96,53,100,49,52,52,52,100,100,36,113,36,49,100,100,52,52,52,37,52,
- 112,53,36,37,37,37,49,49,49,101,48,37,49,49,52,49,33,37,37,116,52,
- 100,97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,97,117,112,
- 112,112,48,49,49,113,32,116,101,100,36,112,112,112,112,96,112,48,52,
- 100,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,
- 33,37,49,49,49,101,0,228,228,116,36,100,48,113,36,116,100,36,33,36,
- 53,33,37,116,100,100,101,36,48,33,49,100,116,32,100,100,100,48,36,
- 113,96,101,36,100,116,100,96,101,96,100,100,33,48,32,53,100,33,53,
- 112,32,36,48,49,49,53,112,49,48,49,113,113,101,100,101,36,97,52,37,
- 32,33,100,100,48,53,53,32,100,48,113,36,112,36,48,53,37,52,33,37,37,
- 49,49,49,53,116,37,49,49,101,33,37,101,33,36,33,101,96,113,96,100,
- 100,100,32,100,96,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,
- 113,32,117,100,100,116,37,96,37,112,116,48,112,117,36,52,100,100,100,
- 101,32,36,100,96,100,100,97,97,97,97,33,53,101,112,48,113,48,49,49,
- 49,37,49,49,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,113,
- 96,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,53,49,
- 49,49,37,37,101,33,37,116,112,96,97,97,97,100,100,100,37,117,97,100,
- 36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,
- 112,112,112,112,96,112,96,100,52,52,100,100,100,116,33,48,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,100,36,49,49,37,37,37,
- 101,97,113,33,101,100,96,97,100,100,100,37,8,17,113,113,96,100,101,
- 52,33,53,49,113,33,97,101,96,33,53,49,113,49,117,97,48,49,37,96,33,
- 53,113,49,36,97,32,112,49,53,49,49,113,52,97,48,49,113,100,112,96,
- 37,113,96,37,52,49,52,100,100,100,37,37,37,100,100,52,48,37,117,33,
- 97,48,101,33,37,37,49,49,32,33,53,33,49,100,52,33,52,33,100,53,33,
- 101,96,97,97,100,100,100,97,101,96,100,100,113,96,97,113,32,97,52,
- 116,113,52,48,49,49,49,53,116,49,100,100,101,53,33,100,53,49,52,52,
- 112,49,49,49,49,49,97,36,100,100,112,33,112,33,52,101,33,116,53,33,
- 37,49,49,113,33,48,52,36,48,49,113,112,112,48,49,97,101,37,52,100,
- 52,100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,
- 96,100,100,100,32,36,97,100,100,32,37,37,37,116,117,112,96,97,100,
- 97,100,100,48,53,100,96,100,100,97,97,113,96,33,97,97,112,112,112,
- 48,49,49,113,112,49,48,49,97,49,49,112,112,112,48,33,52,52,52,100,
- 100,36,113,52,36,49,49,36,52,52,52,52,48,52,36,37,37,37,49,49,49,37,
- 53,33,49,49,37,37,37,37,37,48,37,97,97,97,97,100,100,100,97,101,96,
- 100,100,97,97,97,101,112,116,48,49,49,112,48,49,49,113,32,107,108,
- 36,116,96,36,100,101,96,101,100,36,96,112,97,112,96,101,100,52,101,
- 117,48,100,116,113,113,96,100,117,36,97,48,37,116,100,96,100,101,117,
- 117,36,100,100,52,37,52,112,97,52,112,33,101,33,37,49,49,113,49,37,
- 117,100,100,48,113,101,49,49,37,100,113,32,53,96,100,36,49,37,48,48,
- 113,49,117,117,117,117,113,101,96,117,37,112,48,49,49,113,112,49,48,
- 49,113,52,48,113,52,96,48,37,37,52,37,100,100,100,36,96,36,36,49,113,
- 97,100,32,113,101,36,37,37,116,32,49,49,49,37,53,33,49,49,116,32,116,
- 32,101,113,32,117,101,96,97,100,100,116,52,36,97,36,100,100,52,52,
- 52,52,52,112,113,33,37,49,37,49,49,49,52,97,48,49,49,37,53,49,36,37,
- 116,112,96,100,33,53,49,49,49,100,116,97,100,100,97,97,97,33,117,53,
- 32,112,112,112,48,49,49,100,37,49,48,49,113,112,112,52,112,96,112,
- 48,52,52,52,100,100,100,116,97,36,49,49,117,100,36,52,52,112,113,36,
- 37,37,37,49,49,97,36,48,33,49,113,33,37,37,37,37,116,37,97,97,97,97,
- 100,100,100,113,48,100,100,100,97,97,97,97,33,97,97,112,112,112,48,
- 49,49,113,112,49,48,49,113,112,112,112,112,96,101,49,112,117,33,100,
- 100,100,116,97,178,51,113,49,48,97,97,52,112,49,49,33,48,116,36,52,
- 112,49,49,53,113,97,36,100,36,32,52,48,96,100,52,48,100,33,53,49,48,
- 113,96,116,49,117,100,100,96,36,37,116,48,37,116,96,113,96,97,100,
- 100,116,96,101,96,100,100,101,36,113,100,100,33,113,52,96,37,48,49,
- 97,100,37,49,48,97,100,49,96,49,96,116,49,112,36,52,52,100,100,100,
- 52,33,48,49,49,33,37,52,52,37,48,100,97,33,101,33,49,49,49,113,33,
- 37,97,100,116,116,112,117,116,49,97,97,33,53,96,100,100,100,36,53,
- 96,100,36,53,113,53,96,113,52,96,117,49,112,48,49,49,101,116,32,112,
- 48,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,48,100,96,
- 100,100,97,97,100,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,
- 113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,53,53,49,49,33,
- 52,52,37,52,96,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,
- 37,37,49,96,97,97,97,100,100,48,101,33,96,100,116,96,97,97,97,33,97,
- 97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,32,113,
- 48,52,52,52,100,100,100,52,49,100,100,100,52,52,52,116,116,101,37,
- 101,117,101,32,49,49,49,101,5,228,164,37,100,100,48,113,36,116,100,
- 100,32,36,53,33,37,116,100,100,101,36,53,53,49,100,116,32,100,100,
- 100,48,36,113,96,101,36,100,116,100,53,97,97,100,100,113,96,33,53,
- 100,33,53,112,52,112,48,49,49,53,112,49,48,49,113,49,97,52,49,113,
- 49,33,37,112,33,100,100,48,113,101,113,49,53,113,117,117,117,53,117,
- 36,116,117,100,32,49,49,49,49,53,33,49,49,101,33,37,101,33,116,113,
- 112,96,113,96,100,100,100,32,100,96,48,49,53,100,36,48,117,100,112,
- 112,96,37,48,49,49,113,37,48,48,49,97,37,96,37,112,52,37,112,117,36,
- 52,100,100,100,101,52,52,36,49,49,49,96,97,97,97,33,48,53,112,48,113,
- 48,49,49,97,52,52,48,49,113,112,116,116,36,96,37,37,100,52,112,49,
- 49,49,97,49,48,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,97,52,
- 101,96,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,53,112,
- 53,49,113,101,100,96,97,97,97,96,112,112,112,48,49,49,100,49,100,48,
- 49,53,112,112,112,112,32,113,48,52,52,52,100,100,100,116,117,36,100,
- 100,52,52,52,52,52,48,52,36,37,37,49,49,49,49,37,32,53,49,49,37,37,
- 37,117,52,113,97,52,49,53,96,100,100,100,101,9,17,49,53,33,49,112,
- 52,33,53,49,49,32,97,48,53,113,53,49,113,49,53,100,96,36,49,53,32,
- 49,49,112,36,113,97,112,49,33,49,53,49,112,49,48,49,113,116,113,96,
- 37,113,96,37,52,37,52,100,100,100,37,97,97,100,100,116,100,48,101,
- 100,52,48,101,33,116,32,49,49,100,116,48,33,49,100,52,33,52,33,100,
- 53,33,101,96,97,97,100,100,100,113,49,53,49,49,112,96,97,113,32,97,
- 52,52,112,52,48,49,49,49,101,112,48,100,100,101,101,33,100,53,49,52,
- 52,112,33,100,100,100,52,116,36,100,100,112,33,52,52,52,101,33,116,
- 53,33,37,49,49,113,33,117,113,49,48,49,113,112,112,112,112,96,101,
- 37,52,100,52,100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,
- 33,49,37,116,100,100,100,32,53,33,49,49,37,37,37,37,116,117,32,96,
- 97,97,97,100,100,48,53,100,96,100,100,97,100,113,96,33,97,97,112,112,
- 112,48,49,49,113,112,49,48,49,97,49,49,112,112,96,101,52,52,52,52,
- 100,100,36,113,97,36,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,
- 49,37,32,48,49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,
- 101,96,100,100,97,97,97,101,112,116,48,49,49,112,48,49,49,113,112,
- 63,57,37,100,96,36,49,101,96,101,100,36,96,112,49,112,96,101,100,116,
- 100,52,117,48,97,100,37,96,100,100,116,97,48,37,116,100,96,100,101,
- 36,116,36,100,100,52,37,100,112,97,52,112,33,101,33,37,49,49,113,97,
- 116,116,100,100,48,49,100,49,49,37,100,113,32,53,96,100,36,49,53,100,
- 96,36,49,101,32,101,32,113,101,96,49,112,112,48,49,49,49,113,49,48,
- 49,113,52,112,112,52,96,53,37,49,52,37,100,100,100,36,101,53,36,49,
- 113,97,100,32,113,113,36,37,37,116,32,49,49,49,53,100,33,49,49,116,
- 32,49,37,101,113,32,117,101,96,97,100,100,116,116,53,96,36,100,100,
- 52,52,52,52,52,112,113,36,37,49,37,49,49,49,52,113,116,100,100,32,
- 117,52,36,37,116,112,96,100,33,53,49,49,49,52,32,97,100,100,97,97,
- 97,33,117,53,52,112,112,112,48,49,49,100,33,36,100,100,36,112,112,
- 52,112,96,112,48,52,52,52,100,100,100,52,49,49,100,100,112,100,36,
- 52,52,112,113,36,37,37,37,49,49,97,52,101,96,100,36,33,37,37,37,37,
- 36,37,97,97,97,97,100,100,100,117,101,96,100,100,97,97,97,97,33,97,
- 97,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,49,52,53,
- 100,100,36,52,100,100,100,116,117,231,102,32,97,101,116,49,52,112,
- 49,49,33,48,36,113,33,112,49,49,53,113,97,36,100,48,113,33,48,49,49,
- 97,48,100,33,53,49,48,113,49,33,48,32,49,49,101,33,37,116,48,37,116,
- 96,113,96,97,100,100,116,96,101,96,100,100,101,36,33,49,49,36,113,
- 52,96,37,48,49,97,100,49,97,48,97,100,117,117,117,117,116,49,112,117,
- 49,33,100,100,100,52,113,33,49,49,33,37,52,52,37,48,100,97,33,101,
- 33,49,49,49,49,53,33,97,100,116,48,49,96,116,49,97,97,33,53,96,100,
- 100,100,97,101,96,100,36,53,32,53,96,113,52,96,117,49,112,48,49,49,
- 53,100,117,48,116,100,100,32,49,49,49,49,116,116,96,100,100,97,100,
- 100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,
- 36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,100,100,100,36,
- 113,97,36,100,100,52,52,100,37,52,48,52,36,37,37,37,49,49,49,37,53,
- 33,49,49,52,49,33,37,37,116,52,97,97,100,97,100,100,48,53,100,96,100,
- 116,96,97,100,97,33,97,97,112,48,113,48,49,49,113,52,112,48,49,113,
- 48,113,112,112,96,112,48,52,52,100,100,100,100,52,117,49,100,100,52,
- 52,52,116,48,101,37,49,113,116,32,49,49,49,101,84,177,241,96,36,100,
- 48,113,36,116,100,100,32,36,53,33,37,116,100,100,101,100,33,49,49,
- 100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,52,101,101,
- 100,100,113,96,33,53,100,33,101,112,52,112,48,49,49,117,48,33,48,49,
- 113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,100,48,113,
- 117,117,117,53,117,36,116,117,32,37,49,49,49,37,112,101,100,100,96,
- 33,37,101,33,48,113,112,96,113,96,100,100,100,116,36,100,48,49,53,
- 52,116,117,32,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,48,
- 113,112,52,37,112,117,36,52,100,100,100,116,112,33,100,96,100,100,
- 97,97,97,97,33,53,101,112,48,113,48,49,49,97,97,36,49,49,113,112,101,
- 97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,52,48,49,49,49,37,37,101,33,37,36,
- 37,97,97,97,100,100,100,100,117,101,96,100,36,101,100,96,97,33,53,
- 101,112,48,113,48,49,49,100,33,36,100,100,48,112,112,112,112,96,112,
- 48,52,52,52,100,100,100,116,112,53,100,100,52,52,52,52,52,116,49,36,
- 37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,117,113,97,100,100,96,
- 97,100,100,100,37,93,68,36,53,49,49,36,53,33,53,49,49,32,97,101,96,
- 33,53,49,113,49,53,100,96,36,49,53,113,49,49,49,36,97,52,48,100,116,
- 100,48,49,112,49,48,49,113,52,112,112,112,116,96,37,52,37,52,100,100,
- 100,112,97,36,100,100,116,100,48,101,36,53,48,101,33,116,32,49,49,
- 100,116,37,117,100,101,52,33,52,33,100,53,33,101,96,97,97,100,100,
- 100,97,101,96,100,100,113,96,97,113,32,97,52,52,112,52,48,49,49,49,
- 113,49,48,100,100,37,97,36,100,53,49,52,52,112,33,100,100,100,52,48,
- 48,49,49,117,33,112,33,52,101,33,116,53,33,37,49,49,113,33,36,32,53,
- 48,49,113,112,48,49,49,97,101,37,100,100,52,100,100,100,112,97,36,
- 100,100,52,116,112,53,52,112,97,33,49,37,116,100,100,100,96,101,116,
- 100,100,32,37,37,37,116,117,112,96,97,97,97,100,100,100,100,101,96,
- 100,100,97,97,113,96,33,97,97,112,112,112,48,49,49,113,116,101,48,
- 49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,113,97,36,100,100,
- 37,100,52,52,52,48,52,36,37,37,49,49,49,49,37,53,33,49,49,37,37,37,
- 37,37,36,37,97,97,97,97,100,100,100,113,32,48,49,49,96,97,97,101,112,
- 116,48,49,49,112,48,49,49,113,96,106,108,48,32,100,36,49,101,96,101,
- 100,36,96,112,49,112,96,101,100,116,100,32,49,48,97,100,37,96,100,
- 100,36,97,48,37,116,100,96,100,101,36,116,36,100,100,52,37,52,32,97,
- 97,112,33,101,33,37,49,49,113,116,112,96,100,100,48,49,100,49,33,48,
- 100,113,32,53,96,100,36,49,97,32,97,36,49,37,33,101,32,113,101,96,
- 49,112,112,48,49,49,113,116,32,48,49,113,52,112,112,52,96,48,37,37,
- 52,37,100,100,100,36,96,36,36,49,113,97,100,32,113,101,36,37,37,116,
- 32,49,49,49,53,116,37,49,49,116,32,49,37,101,113,32,117,101,96,97,
- 100,100,116,52,97,96,36,100,100,52,52,52,52,52,112,113,36,37,49,37,
- 49,49,49,116,53,36,49,49,37,53,49,36,37,116,112,96,100,33,53,49,49,
- 49,52,36,96,100,100,97,97,97,33,117,53,52,112,112,112,48,49,49,112,
- 100,32,48,49,113,112,112,96,37,96,112,48,52,52,52,100,100,100,52,32,
- 116,100,100,112,100,36,52,52,112,113,36,37,37,37,49,49,97,52,37,32,
- 49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,100,53,100,48,49,49,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,100,116,49,49,113,112,
- 112,112,49,52,53,100,100,36,52,100,100,100,116,49,178,51,113,49,48,
- 97,52,52,112,49,49,33,48,116,36,52,112,49,49,53,113,96,112,49,53,113,
- 49,53,49,49,97,48,100,33,97,100,101,36,49,97,117,48,49,49,101,33,37,
- 116,96,37,52,97,113,96,97,100,100,36,48,100,96,100,100,101,36,113,
- 100,100,33,113,52,96,37,48,49,97,100,37,49,48,97,100,113,97,49,96,
- 116,49,112,36,52,52,100,100,100,52,116,36,100,100,52,37,52,100,37,
- 48,100,97,33,101,33,49,49,49,49,32,48,97,100,116,48,113,97,116,49,
- 97,97,33,53,96,100,100,100,97,101,96,100,36,53,32,53,96,113,52,96,
- 117,49,112,48,49,49,117,53,117,117,33,49,49,37,37,37,49,49,116,116,
- 96,100,100,97,100,100,36,53,100,96,100,100,97,37,117,97,33,53,52,48,
- 113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,
- 52,52,100,100,100,37,116,36,100,100,52,52,52,97,52,48,116,37,37,37,
- 37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,100,97,100,
- 100,48,53,100,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,
- 49,113,49,48,49,113,112,112,112,112,112,101,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,116,36,48,112,49,49,33,37,49,49,49,101,
- 81,177,241,113,49,49,53,113,36,116,100,100,32,36,53,33,37,116,100,
- 100,101,36,48,33,49,100,116,32,100,100,100,48,36,113,96,101,36,100,
- 116,100,32,113,96,100,100,113,96,33,48,100,33,117,113,52,112,48,49,
- 49,53,112,49,48,49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,
- 49,96,36,100,48,113,48,112,36,48,117,36,52,33,37,37,49,49,49,117,100,
- 101,100,100,96,33,37,101,33,36,113,112,96,113,96,100,100,100,32,100,
- 96,48,49,53,100,36,116,32,100,112,112,96,37,48,49,49,113,52,112,48,
- 49,97,37,96,37,112,52,37,112,117,36,52,100,100,100,101,100,97,97,53,
- 49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,97,32,49,48,49,113,
- 112,49,97,112,96,37,37,100,52,112,49,49,49,97,117,36,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,36,37,100,100,100,32,37,101,
- 36,37,36,37,97,97,97,97,100,100,100,117,101,96,100,36,101,100,96,97,
- 33,53,101,112,112,48,49,49,49,100,37,49,48,49,53,112,112,112,112,96,
- 32,37,52,52,52,100,100,100,116,33,117,49,49,33,52,52,52,52,116,49,
- 36,37,37,37,49,49,49,101,97,36,49,49,37,37,37,53,33,48,116,112,112,
- 96,97,100,100,100,101,92,68,100,48,33,49,100,32,33,53,49,49,32,97,
- 101,96,33,53,49,113,49,101,101,100,36,49,53,113,49,49,49,36,97,52,
- 48,100,116,100,48,49,112,49,48,49,113,52,112,96,37,116,96,49,52,37,
- 52,100,100,100,37,32,48,100,100,116,100,48,101,100,97,48,101,33,116,
- 32,49,49,100,52,101,96,100,101,52,53,52,33,100,53,33,101,96,97,97,
- 100,100,100,97,101,96,100,100,113,96,97,33,117,97,100,52,112,96,101,
- 100,100,100,116,49,48,100,100,37,49,33,112,53,49,52,52,112,33,100,
- 100,100,52,116,36,100,100,112,33,32,33,52,101,33,116,53,33,49,49,49,
- 113,33,113,112,49,48,49,113,112,112,48,49,97,101,49,100,100,52,100,
- 100,100,112,36,52,100,100,52,116,100,96,52,32,97,33,49,37,116,100,
- 100,100,96,96,96,100,100,32,37,37,37,96,117,112,96,97,97,97,100,100,
- 96,48,100,96,100,100,97,97,33,48,32,97,117,112,112,112,48,49,49,113,
- 116,48,100,100,116,49,49,112,112,96,101,49,52,52,52,100,100,36,113,
- 36,100,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,
- 49,49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,
- 97,97,97,101,112,116,96,101,112,37,48,49,49,113,48,47,57,37,100,96,
- 36,49,101,96,101,100,36,96,112,101,37,96,101,100,116,112,117,32,48,
- 97,100,37,32,101,100,36,97,48,37,116,100,96,100,101,100,33,117,49,
- 49,33,37,52,112,97,52,112,33,101,33,37,49,49,113,97,96,96,100,100,
- 48,49,100,49,113,48,100,113,32,53,96,100,36,49,37,117,100,36,49,101,
- 32,96,32,113,37,97,49,112,48,49,49,49,113,112,49,48,49,113,52,112,
- 112,112,96,48,37,37,52,37,100,100,100,36,96,36,36,49,113,97,100,32,
- 116,101,36,37,37,116,32,49,49,49,53,112,53,49,49,116,32,116,32,113,
- 113,32,117,37,97,97,100,100,116,116,116,117,36,100,100,52,52,52,52,
- 52,112,113,33,37,49,37,49,49,49,36,48,33,49,49,37,53,49,36,49,116,
- 112,96,100,33,53,49,49,49,36,96,53,49,49,96,97,97,33,117,53,52,112,
- 112,112,48,49,49,36,49,96,48,49,113,112,112,52,112,96,112,48,52,52,
- 52,100,100,100,52,116,36,100,100,112,100,36,52,52,112,113,36,37,37,
- 37,49,49,113,33,53,33,49,113,33,37,37,37,37,36,112,96,97,97,97,100,
- 100,100,117,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,
- 49,49,113,49,48,49,113,112,112,112,49,52,53,52,49,113,33,100,100,100,
- 116,101,227,102,112,32,48,97,100,117,37,49,49,33,48,52,37,52,112,49,
- 49,97,36,116,36,100,48,113,33,116,100,100,52,48,100,33,53,49,48,113,
- 49,33,53,33,49,49,101,33,37,116,48,37,36,53,112,96,97,100,100,116,
- 96,101,96,100,100,101,36,113,100,100,33,113,52,96,37,48,49,97,100,
- 37,49,48,97,100,49,112,52,96,116,49,112,36,52,52,100,100,100,52,49,
- 37,100,100,52,37,52,52,117,48,100,97,33,101,33,49,49,49,113,116,116,
- 116,100,116,48,49,112,33,48,97,97,33,53,96,100,100,100,97,101,96,100,
- 36,53,32,53,96,113,52,96,117,113,113,48,49,49,53,36,37,32,53,49,49,
- 37,37,37,37,49,116,52,97,97,100,97,100,100,36,117,32,100,100,100,97,
- 101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,
- 112,96,117,37,37,52,52,52,100,100,36,37,116,36,100,100,52,52,52,37,
- 52,48,52,36,37,37,37,49,49,49,113,36,49,49,49,52,101,116,32,49,116,
- 52,97,97,97,97,100,100,48,37,97,100,100,116,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,116,48,100,100,36,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,112,117,49,49,33,52,52,116,36,101,37,49,49,33,
- 37,49,49,49,101,80,176,241,96,36,100,48,113,36,116,100,100,32,36,101,
- 33,37,116,100,100,101,49,112,53,49,100,116,32,100,100,100,48,36,113,
- 96,101,36,100,116,100,116,101,96,100,100,113,96,33,53,100,33,53,112,
- 52,112,48,49,49,53,32,101,101,100,36,49,97,52,49,37,97,52,37,112,33,
- 100,100,48,49,96,36,100,48,113,36,112,36,48,117,36,52,36,37,49,49,
- 49,49,101,48,96,100,100,96,33,37,101,36,36,113,117,96,49,97,100,100,
- 100,96,101,101,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,
- 96,32,48,49,97,37,96,37,48,53,53,117,117,36,52,100,100,100,101,96,
- 117,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,100,
- 49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,
- 100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,97,116,48,33,49,49,
- 37,37,37,116,32,36,37,97,97,97,97,100,100,100,113,101,100,100,36,37,
- 53,53,96,36,53,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,
- 112,112,96,32,37,52,52,52,100,100,100,116,117,36,100,100,52,52,52,
- 52,52,48,96,33,37,37,37,49,49,49,101,97,53,49,49,37,37,37,53,97,113,
- 97,100,100,96,97,100,100,100,37,28,68,100,97,32,49,100,116,117,48,
- 49,49,32,97,53,53,32,53,49,49,100,96,101,96,36,49,53,96,101,100,100,
- 33,97,52,112,49,33,49,53,49,100,53,49,49,113,52,112,96,101,37,97,37,
- 52,37,100,100,100,100,37,116,36,100,100,116,100,48,101,100,52,48,101,
- 33,116,32,49,49,100,52,32,97,100,101,52,33,101,33,100,53,33,101,101,
- 97,97,100,100,100,97,101,96,100,100,113,96,97,33,117,97,100,52,112,
- 96,101,100,100,100,36,49,48,100,100,37,49,33,97,53,49,52,52,112,33,
- 100,100,100,52,116,36,100,100,112,33,112,33,52,101,33,116,53,33,37,
- 49,49,113,33,32,36,49,49,49,113,112,112,112,112,96,101,49,52,100,52,
- 100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,101,100,32,116,
- 100,100,100,96,112,48,49,49,37,37,37,37,116,117,112,96,97,97,97,100,
- 100,48,117,117,48,49,49,96,97,113,96,33,97,97,112,112,112,48,49,49,
- 113,112,49,48,49,97,49,49,112,112,96,101,49,52,52,52,100,100,100,49,
- 37,49,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,101,101,96,
- 100,100,32,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,
- 100,97,97,97,101,112,116,48,52,49,112,48,49,49,113,32,42,57,53,100,
- 53,113,49,101,101,101,100,36,96,112,49,112,96,101,100,116,100,48,96,
- 48,97,100,37,96,100,100,36,97,48,37,116,100,96,100,101,100,117,36,
- 100,100,52,37,52,112,97,52,112,33,101,33,37,49,49,113,33,53,33,49,
- 49,53,49,100,49,113,48,100,113,32,53,96,100,36,49,33,100,96,36,49,
- 101,32,37,33,113,101,96,49,112,112,48,49,49,113,97,113,49,49,113,52,
- 112,112,52,96,48,37,37,52,37,100,100,100,100,113,96,36,49,113,97,100,
- 32,113,101,36,37,37,116,32,49,49,49,37,53,33,49,49,116,32,116,32,101,
- 116,32,117,117,53,96,100,100,116,52,96,52,116,49,49,33,52,52,52,52,
- 112,113,36,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,
- 96,100,33,53,49,49,49,100,33,49,49,49,96,97,97,97,33,53,52,112,112,
- 112,48,49,49,100,37,49,48,49,113,112,112,100,112,96,112,48,52,52,52,
- 100,100,100,116,36,37,100,100,112,100,36,52,52,112,113,36,37,37,37,
- 49,49,49,49,48,100,100,36,33,37,37,37,37,36,37,97,97,97,97,100,100,
- 100,117,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 32,36,48,49,113,112,112,112,49,52,53,100,52,113,33,100,100,100,116,
- 33,226,102,36,49,48,97,100,117,37,49,49,33,48,52,112,33,112,49,49,
- 97,101,116,36,100,48,113,33,96,49,49,97,48,100,33,53,49,48,113,49,
- 33,100,33,49,49,101,33,37,116,116,48,116,96,113,96,97,100,100,116,
- 112,36,97,100,100,101,36,113,100,100,33,113,52,96,37,48,49,97,100,
- 33,36,100,116,100,49,32,112,97,116,49,112,36,52,52,100,100,100,52,
- 116,36,100,100,52,37,52,52,49,48,100,117,33,113,36,49,49,49,49,53,
- 33,97,100,116,48,49,96,116,49,97,97,97,97,97,100,100,100,33,97,53,
- 49,113,53,32,53,96,113,52,96,117,49,112,48,49,49,53,116,37,53,33,49,
- 49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,
- 97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,
- 112,112,96,117,37,37,52,52,52,100,100,36,113,48,97,100,100,52,52,52,
- 37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,36,37,37,116,
- 52,97,97,97,97,100,100,48,53,100,96,100,116,96,97,97,100,33,97,97,
- 112,112,112,48,49,49,113,32,36,48,49,113,112,48,113,112,96,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,52,
- 33,37,49,49,49,101,85,176,241,96,36,100,48,113,48,116,100,100,32,36,
- 53,33,37,116,100,100,101,32,49,48,49,100,116,32,100,100,100,48,36,
- 116,96,53,116,49,97,100,96,101,96,100,100,113,96,33,53,100,101,48,
- 112,52,112,48,49,49,53,112,49,48,49,113,49,97,52,49,37,97,52,37,112,
- 33,100,100,48,49,96,36,100,48,113,36,112,48,48,117,36,52,33,37,37,
- 49,49,49,37,53,33,49,49,101,33,37,101,33,36,113,112,96,113,96,100,
- 100,100,100,101,96,48,49,53,100,36,48,117,100,112,112,112,112,48,49,
- 49,113,113,113,48,49,97,37,96,37,112,96,48,112,117,36,52,100,100,100,
- 101,116,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,
- 97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,
- 49,37,37,101,53,37,36,37,97,97,97,97,100,100,100,97,101,96,100,36,
- 101,100,96,97,33,53,101,112,112,112,48,49,49,100,36,97,100,100,48,
- 112,112,112,112,96,48,49,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,101,100,48,49,49,37,37,37,53,
- 97,113,97,36,37,97,97,100,100,100,101,29,68,36,112,33,49,100,52,53,
- 53,49,49,32,97,101,96,33,53,49,49,100,96,101,96,36,49,53,32,49,49,
- 49,36,97,52,112,97,36,49,53,49,36,117,49,49,113,52,112,96,37,113,96,
- 37,52,37,52,100,100,100,37,113,33,49,49,97,100,48,101,100,52,48,101,
- 33,116,32,49,49,100,116,49,100,100,101,52,33,52,53,100,53,33,101,96,
- 97,97,100,100,100,49,52,100,100,100,113,96,97,113,37,97,52,52,112,
- 52,48,49,49,49,53,117,48,100,100,37,49,33,100,53,49,52,52,32,33,100,
- 100,100,52,116,36,100,100,112,33,112,33,52,101,33,116,96,33,37,49,
- 49,113,33,101,112,49,48,49,113,112,112,112,112,96,101,37,52,100,52,
- 100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,
- 100,100,100,32,53,33,49,49,37,37,37,37,116,117,112,96,97,97,97,100,
- 100,48,101,32,53,49,49,96,97,113,96,33,97,97,112,112,112,48,49,49,
- 113,52,52,48,49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,116,
- 97,36,100,100,37,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,
- 97,97,97,101,112,116,48,113,117,113,48,49,49,113,112,46,57,117,37,
- 49,113,49,101,96,101,100,36,96,112,49,112,112,48,49,97,100,117,52,
- 48,97,100,37,96,100,100,36,97,96,37,52,117,97,100,101,36,101,113,49,
- 49,33,37,52,112,97,52,112,33,101,33,37,49,49,113,49,96,101,100,100,
- 48,49,100,49,49,37,100,113,32,53,96,100,36,49,49,100,53,113,49,101,
- 32,101,32,113,101,112,52,112,112,48,49,49,113,97,96,101,100,36,52,
- 112,112,52,96,48,37,52,52,37,100,100,100,100,116,36,36,49,113,97,100,
- 32,113,101,36,37,37,116,32,49,49,49,53,48,37,49,49,116,32,116,32,101,
- 113,32,117,37,97,97,100,100,116,116,49,116,36,100,100,52,52,52,52,
- 52,112,113,33,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,
- 112,96,100,33,53,49,49,49,96,101,96,100,100,97,97,97,33,117,53,52,
- 112,112,112,48,49,49,100,113,32,48,49,113,112,112,52,112,96,112,48,
- 52,52,52,100,100,100,52,48,32,100,100,112,100,116,52,52,112,113,36,
- 37,37,37,49,49,97,36,48,33,49,113,33,37,37,37,37,36,49,97,97,97,97,
- 100,100,100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,
- 49,49,113,96,101,100,100,36,112,112,112,49,52,53,100,100,116,52,100,
- 100,100,116,53,227,102,36,49,48,97,100,49,112,49,49,33,48,116,36,52,
- 32,49,49,53,113,97,36,100,48,113,33,48,49,49,97,48,100,33,117,117,
- 49,113,49,33,53,33,49,49,101,33,37,116,48,37,116,96,116,96,97,100,
- 100,116,96,101,96,100,100,48,113,112,100,100,33,49,53,96,37,48,49,
- 97,100,37,49,48,97,100,49,96,49,112,36,48,112,36,52,52,100,100,100,
- 52,116,36,100,100,52,37,52,52,37,48,100,97,33,101,33,49,49,49,49,53,
- 33,97,100,116,48,49,96,116,49,97,97,33,53,96,100,100,100,97,101,96,
- 100,36,53,32,53,96,113,52,112,96,113,113,48,49,49,53,100,36,53,33,
- 49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,
- 100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,
- 112,112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,
- 52,52,37,100,48,52,36,37,49,37,49,49,49,37,53,33,49,49,52,49,33,37,
- 37,96,52,97,97,97,97,100,100,48,101,49,48,49,97,96,97,97,97,33,97,
- 97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,
- 48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,
- 49,36,37,49,49,49,101,68,176,177,53,36,49,53,113,36,116,100,100,32,
- 36,53,33,37,96,100,100,101,116,48,33,49,100,116,32,100,100,49,37,36,
- 113,96,97,37,100,116,100,52,36,96,100,100,113,96,33,53,100,33,53,112,
- 96,37,48,49,49,53,33,52,48,49,113,49,97,52,49,113,96,52,37,112,33,
- 100,100,48,49,96,36,100,48,113,36,112,36,48,117,36,52,36,37,37,49,
- 49,49,101,33,37,49,49,101,33,37,101,33,36,113,112,96,113,96,100,100,
- 100,100,101,96,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,
- 112,49,48,49,97,37,96,37,112,52,37,112,117,36,52,100,100,100,101,48,
- 97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,49,100,100,100,
- 32,37,101,33,37,36,37,97,97,97,97,100,100,100,53,53,96,100,36,101,
- 100,96,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,
- 97,100,100,96,97,100,100,100,112,24,68,100,48,33,49,100,52,33,53,49,
- 49,32,97,101,96,97,97,100,36,49,101,53,100,36,49,53,32,49,49,49,36,
- 97,52,112,113,49,49,53,49,112,49,48,49,113,52,112,96,37,113,96,37,
- 52,37,52,100,100,100,37,116,36,100,100,116,100,48,101,100,32,48,101,
- 33,116,32,49,49,100,116,49,117,100,101,52,33,52,33,100,53,33,101,101,
- 97,97,100,100,100,97,101,96,100,100,113,96,97,113,32,97,52,100,112,
- 52,48,49,49,49,113,49,48,100,100,37,49,33,100,53,49,52,52,112,33,100,
- 100,100,52,113,116,100,100,112,33,112,33,52,101,33,96,53,33,37,49,
- 49,113,33,52,112,49,48,49,113,112,112,112,112,96,101,37,52,100,52,
- 100,100,100,112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,
- 100,100,100,32,53,33,49,49,37,37,37,37,116,117,112,96,97,97,97,100,
- 100,48,53,100,96,100,100,97,97,113,96,33,97,33,113,112,112,48,49,49,
- 113,112,49,48,49,97,49,96,37,112,96,101,49,52,52,52,100,100,36,113,
- 96,112,49,49,36,52,52,52,100,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,37,37,37,37,37,36,37,97,97,97,97,100,100,100,49,49,97,100,100,97,
- 97,97,101,112,116,48,49,49,112,48,49,49,113,96,43,57,37,100,96,36,
- 49,101,96,101,100,36,96,112,49,112,96,101,100,36,49,113,37,49,97,100,
- 37,96,100,100,36,97,48,37,116,100,96,100,101,100,117,36,100,100,52,
- 37,52,112,97,52,112,33,101,33,37,49,49,113,49,101,116,100,100,48,49,
- 100,49,49,37,100,113,32,53,96,100,36,49,53,100,96,36,49,101,32,101,
- 32,113,101,96,49,48,113,48,49,49,49,113,49,48,49,113,52,112,112,52,
- 96,48,37,37,52,52,100,100,100,100,116,36,36,49,113,97,100,32,113,101,
- 36,37,37,116,32,49,49,49,101,37,32,49,49,116,32,116,32,101,113,32,
- 117,101,96,97,100,100,116,52,37,116,36,100,100,52,52,52,52,52,112,
- 113,33,37,49,37,49,49,49,116,48,33,49,49,37,53,49,36,37,116,112,96,
- 100,33,53,49,49,49,96,101,96,100,100,97,97,97,33,117,53,52,112,112,
- 112,48,49,49,100,33,32,48,49,113,112,112,52,112,96,112,48,52,52,52,
- 100,100,100,116,113,116,100,100,112,100,36,52,52,112,113,36,37,37,
- 37,49,49,97,36,48,33,49,113,33,37,37,37,37,36,37,97,97,97,97,100,100,
- 100,97,101,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 116,49,49,49,113,112,112,112,49,52,48,100,100,36,52,100,100,100,116,
- 113,226,102,52,52,100,116,100,49,112,49,49,33,48,116,36,52,112,49,
- 49,53,48,97,36,100,48,113,33,48,49,49,97,48,100,33,97,100,101,36,49,
- 97,101,96,100,100,96,33,37,116,48,37,116,96,49,97,97,100,100,116,96,
- 101,96,100,100,101,36,113,100,100,33,49,53,96,37,48,49,97,100,113,
- 100,101,116,100,49,96,49,96,116,49,112,36,52,52,100,100,100,52,117,
- 52,100,100,52,37,52,52,37,48,100,97,33,101,53,49,49,49,49,53,33,97,
- 100,116,48,49,96,116,49,97,97,33,53,96,100,100,100,97,101,96,100,36,
- 53,32,53,96,113,52,96,53,48,112,48,49,49,53,52,36,53,33,49,49,37,37,
- 37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,
- 48,52,36,49,37,37,49,49,49,37,53,33,49,49,52,49,53,37,37,116,52,97,
- 97,97,97,100,100,48,37,116,96,100,116,96,97,97,97,36,97,97,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,
- 49,49,49,101,65,176,177,97,36,100,48,113,36,116,100,100,32,36,53,33,
- 37,116,100,100,101,116,48,33,49,100,116,32,100,100,100,48,36,113,96,
- 113,36,100,116,100,100,113,96,100,100,113,96,33,53,100,33,53,112,116,
- 113,48,49,49,53,112,49,48,49,113,49,97,52,49,113,96,52,37,112,33,100,
- 100,48,113,97,36,100,48,113,36,112,36,48,117,36,52,33,49,37,49,49,
- 49,49,53,33,49,49,101,33,37,101,33,36,113,112,96,113,96,100,100,100,
- 100,101,96,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,113,
- 33,100,100,116,37,96,37,112,52,37,112,117,36,52,100,100,100,101,36,
- 97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,
- 48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,
- 100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,97,36,49,49,37,
- 37,101,33,37,36,49,97,97,97,97,100,100,100,97,101,96,100,36,101,100,
- 96,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,101,32,32,49,49,37,37,37,53,97,113,97,100,
- 100,96,97,100,100,100,101,24,68,100,48,33,49,100,52,33,53,49,49,32,
- 97,101,96,33,53,49,113,49,37,52,100,36,49,53,32,49,49,49,36,97,52,
- 112,49,33,49,53,49,112,49,48,49,113,52,112,96,37,113,96,37,52,37,52,
- 100,100,100,37,116,36,100,100,116,100,48,101,100,52,48,101,33,116,
- 32,49,49,100,52,116,96,100,101,52,33,52,33,100,53,33,101,96,97,97,
- 100,100,100,49,116,101,100,100,113,96,97,113,32,97,52,52,112,116,49,
- 49,49,49,113,49,48,100,100,37,49,33,100,53,49,52,52,112,33,100,100,
- 100,52,116,36,100,100,112,33,112,33,52,101,33,116,53,33,37,49,49,49,
- 116,116,37,49,48,49,113,112,112,112,112,96,101,37,52,100,52,100,100,
- 100,112,97,36,100,100,52,116,100,48,52,112,97,33,49,37,116,100,100,
- 100,32,53,33,49,49,37,37,37,37,116,117,112,96,97,97,97,100,100,48,
- 53,100,96,100,100,97,97,113,96,33,97,97,112,112,112,48,49,49,113,112,
- 49,48,49,97,49,49,112,112,96,101,49,52,52,52,100,100,36,113,116,37,
- 100,100,37,52,52,52,100,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,37,37,36,37,97,97,97,97,100,100,100,97,101,96,100,100,97,
- 97,97,101,112,116,48,49,49,48,49,49,49,113,48,126,108,100,100,100,
- 100,100,49,97,49,53,36,49,113,100,112,112,48,96,100,100,100,100,100,
- 100,36,112,112,100,117,53,49,101,36,33,113,37,48,49,49,49,49,49,49,
- 33,49,52,52,52,97,100,32,101,36,37,33,100,100,100,100,100,100,100,
- 96,116,48,112,48,100,100,49,97,97,97,32,49,49,49,49,49,49,49,48,97,
- 49,97,49,100,36,100,112,112,48,96,100,100,100,100,100,100,36,100,112,
- 112,100,48,49,33,49,52,49,100,100,100,100,100,100,100,100,52,52,113,
- 101,49,100,100,32,37,37,37,33,100,100,100,100,100,100,100,32,37,37,
- 37,101,48,49,96,49,97,97,32,49,49,37,117,49,49,49,49,33,52,52,52,52,
- 100,100,32,37,49,37,33,100,100,100,100,100,100,100,32,101,116,37,37,
- 49,49,96,100,97,97,32,49,49,49,49,49,49,49,96,97,97,97,97,100,36,112,
- 112,112,48,96,100,100,100,100,100,100,36,112,112,100,112,48,49,33,
- 52,52,52,36,48,49,49,49,49,49,49,33,49,49,52,52,100,100,32,37,37,37,
- 33,100,100,100,100,100,100,100,32,37,37,37,37,49,49,96,97,97,97,32,
- 49,49,49,49,49,49,49,96,97,97,97,97,97,36,112,112,112,48,96,100,100,
- 100,100,100,100,36,112,112,112,100,36,49,33,49,49,52,36,48,49,113,
- 112,183,51,49,49,49,49,113,48,49,113,48,113,32,100,100,100,100,100,
- 100,100,100,100,100,100,100,116,101,100,100,100,52,32,49,49,49,117,
- 49,49,49,49,49,49,49,49,49,117,37,49,33,100,97,100,100,117,100,100,
- 100,100,100,100,100,100,100,100,100,100,97,100,97,36,53,49,49,49,49,
- 49,49,49,49,49,49,113,48,49,49,49,113,32,100,100,52,100,52,100,100,
- 100,100,100,100,100,100,116,37,32,52,100,100,32,49,49,37,49,49,49,
- 49,49,49,49,49,37,49,117,49,49,49,96,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,97,100,97,36,53,49,49,49,49,49,49,37,116,
- 100,100,100,100,32,49,49,49,49,37,49,49,49,49,116,32,49,49,49,49,49,
- 49,49,96,117,100,100,100,33,48,113,48,32,48,96,100,100,100,100,100,
- 100,36,117,117,117,53,113,48,49,97,117,37,96,101,100,100,100,100,100,
- 100,116,53,52,100,100,100,100,100,100,100,32,33,100,100,100,100,100,
- 100,100,32,49,49,37,49,37,49,96,97,117,32,96,100,100,100,100,100,100,
- 100,97,100,100,100,100,97,36,53,32,112,112,48,49,49,49,49,49,49,113,
- 48,49,49,96,33,48,113,112,112,32,116,101,100,100,100,100,100,100,36,
- 112,112,32,116,101,100,112,117,117,49,33,100,100,36,64,229,228,100,
- 100,100,100,100,116,117,117,117,101,100,112,117,117,117,117,49,49,
- 49,49,49,49,49,117,117,117,117,117,49,49,33,117,117,100,117,100,100,
- 100,100,100,100,100,117,100,100,117,97,100,36,117,53,113,117,53,49,
- 49,49,49,49,49,113,117,117,117,53,37,49,33,100,113,117,117,101,100,
- 100,100,100,100,100,100,116,117,117,117,101,100,112,117,49,117,49,
- 49,49,49,49,49,49,49,117,49,49,117,49,49,49,49,33,117,100,117,100,
- 100,100,100,100,100,100,117,117,100,117,117,100,36,117,117,117,117,
- 53,49,49,49,49,49,49,49,101,53,101,112,53,49,49,49,112,117,101,97,
- 100,36,117,53,49,49,49,49,49,116,117,117,117,100,36,117,117,53,113,
- 48,49,49,49,49,49,49,33,100,100,96,117,53,49,97,117,101,116,101,100,
- 100,100,100,100,100,100,100,100,100,100,116,101,100,112,49,49,49,49,
- 49,49,49,49,49,49,49,49,37,37,113,116,49,49,116,117,117,100,100,100,
- 100,100,100,100,100,100,100,52,117,100,52,100,100,100,100,32,49,49,
- 49,49,49,49,49,49,49,113,117,117,117,53,49,49,49,33,52,52,100,100,
- 100,100,100,100,100,52,116,117,101,100,100,100,100,100,100,112,49,
- 49,49,49,49,49,49,49,49,49,49,96,100,100,100,100,100,100,117,100,100,
- 100,112,93,17,49,49,49,49,49,49,49,37,37,116,100,100,97,100,33,48,
- 49,49,49,49,49,49,49,113,48,96,36,112,48,49,49,101,100,48,33,100,100,
- 100,100,100,100,100,52,100,100,112,33,100,100,32,33,100,32,37,49,49,
- 49,49,49,49,49,49,49,33,100,100,97,100,100,36,48,49,49,49,49,49,49,
- 49,49,49,49,101,53,52,48,49,49,113,37,116,53,52,100,100,100,100,100,
- 100,36,53,49,33,117,100,100,100,100,48,48,97,33,49,49,49,49,49,49,
- 113,112,48,113,116,49,49,33,52,112,33,52,100,100,100,100,100,100,100,
- 100,113,101,113,96,97,100,100,36,97,116,113,48,49,49,112,101,100,100,
- 100,100,100,97,97,97,97,100,100,36,112,53,49,96,100,100,100,100,100,
- 100,100,97,100,100,97,100,100,52,33,112,48,113,48,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,37,33,52,100,52,100,100,100,100,100,100,100,100,
- 117,117,52,117,100,36,117,101,96,32,49,49,49,49,49,49,49,49,37,49,
- 49,37,49,49,49,96,97,97,100,100,100,100,100,100,100,100,100,101,49,
- 52,112,48,49,49,49,37,37,101,48,49,49,49,49,49,49,101,32,117,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 52,100,100,100,100,100,36,53,37,49,49,33,127,108,100,100,100,100,36,
- 117,101,32,117,53,49,97,49,96,49,96,101,100,100,100,100,100,100,116,
- 49,52,52,96,101,100,112,117,36,37,112,49,49,49,49,49,49,49,117,36,
- 112,117,117,96,100,53,33,116,53,97,48,49,49,49,49,49,49,52,33,116,
- 53,33,49,113,101,32,117,101,96,100,100,100,100,100,100,36,117,101,
- 112,112,96,100,116,49,52,96,49,48,49,49,49,49,49,49,97,49,96,53,113,
- 101,100,112,117,117,36,112,96,100,100,100,100,100,100,112,117,36,112,
- 36,100,100,53,33,116,53,97,48,49,49,49,49,49,49,116,32,116,49,53,48,
- 113,117,117,37,33,53,49,49,101,116,49,49,49,49,117,33,49,49,49,97,
- 100,117,96,100,33,116,100,100,100,100,100,100,100,117,117,117,112,
- 37,49,49,32,101,32,117,53,49,49,49,49,49,49,113,117,117,117,53,116,
- 100,36,96,117,117,117,101,100,100,100,100,100,100,116,37,112,96,37,
- 48,49,33,52,116,113,117,49,49,49,49,49,49,49,117,117,33,112,117,49,
- 49,116,117,117,117,117,100,100,100,100,100,100,100,117,32,37,37,53,
- 48,113,117,53,96,33,36,49,49,49,49,49,49,113,112,117,117,117,53,49,
- 97,117,117,53,113,101,100,100,100,100,100,100,116,117,117,117,117,
- 101,100,112,117,117,33,112,49,49,113,100,183,59,49,37,9,102,97,52,
- 48,33,49,49,49,37,37,37,37,116,52,100,97,100,97,100,100,36,97,32,97,
- 100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,117,49,48,49,
- 113,112,112,112,96,37,48,48,52,52,52,100,100,36,49,101,53,100,100,
- 52,52,52,37,52,116,49,36,37,37,37,49,49,49,101,116,49,49,49,52,49,
- 36,37,37,116,52,97,97,97,97,100,100,48,101,96,97,100,100,97,97,97,
- 97,33,33,52,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,
- 112,96,37,37,52,52,52,100,100,100,116,52,48,49,49,33,52,52,116,36,
- 101,101,101,100,116,32,49,49,49,117,17,177,177,37,96,100,116,36,37,
- 116,100,100,32,36,53,33,37,116,100,100,101,116,33,48,49,100,116,32,
- 100,100,100,48,36,113,96,101,36,100,116,100,116,101,96,100,100,113,
- 96,97,97,101,33,53,112,52,112,48,49,49,53,37,49,100,100,36,97,33,53,
- 116,36,97,52,112,117,33,100,100,116,113,97,36,100,116,36,37,112,36,
- 48,117,36,52,33,37,37,49,49,49,101,112,36,49,49,101,33,37,101,33,36,
- 113,112,96,113,96,100,100,100,116,112,101,48,49,53,112,36,48,117,100,
- 112,112,96,37,48,49,49,113,113,52,48,49,97,37,96,37,112,52,37,112,
- 117,36,52,100,100,100,101,101,32,100,96,100,100,100,97,97,97,33,53,
- 37,113,48,113,48,49,49,97,48,96,48,49,113,112,49,97,112,96,37,37,100,
- 52,112,49,49,49,97,117,36,100,100,52,52,52,52,112,33,36,36,37,37,37,
- 49,49,97,100,113,37,49,49,37,37,101,33,37,117,36,97,97,97,97,100,100,
- 100,49,117,100,100,36,101,36,97,97,33,53,101,112,112,112,48,49,49,
- 100,49,112,48,49,113,112,112,112,112,96,32,37,52,52,52,100,100,100,
- 116,117,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,53,37,
- 100,100,100,32,37,37,53,97,113,113,49,49,53,96,100,100,100,117,76,
- 102,32,113,33,37,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,
- 36,53,100,96,100,100,100,32,96,97,33,53,52,48,113,96,101,100,100,36,
- 52,112,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,101,49,33,37,37,96,52,97,97,97,97,100,100,48,53,100,96,100,116,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,116,32,48,49,113,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,
- 52,116,36,101,37,49,49,33,37,49,49,49,101,16,177,177,97,36,100,48,
- 113,36,116,100,100,96,32,53,33,37,116,100,100,101,116,48,33,49,100,
- 116,32,100,100,100,96,36,113,96,101,36,100,116,100,48,53,53,49,49,
- 97,96,33,53,97,33,53,112,52,48,49,49,49,97,37,49,48,49,113,96,52,116,
- 52,113,96,52,49,112,33,100,100,32,36,97,117,100,48,113,36,112,36,48,
- 117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,37,101,33,36,116,
- 112,96,113,96,100,100,100,100,101,96,48,49,53,100,36,48,117,112,112,
- 112,96,37,48,49,49,113,112,49,48,49,113,112,96,37,112,52,37,112,117,
- 36,52,100,100,100,37,97,116,96,97,100,100,97,97,97,97,33,53,53,112,
- 48,113,48,49,49,97,37,49,48,49,49,49,32,112,112,96,37,37,100,52,112,
- 49,49,49,33,37,52,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,116,48,33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,97,
- 101,96,100,100,113,100,96,97,33,48,101,112,112,112,48,49,49,100,37,
- 49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,53,32,
- 100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,
- 37,37,53,97,113,97,100,100,96,97,100,100,100,49,76,102,117,36,97,48,
- 49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,49,36,49,49,49,
- 96,101,36,97,33,53,113,48,113,96,101,100,100,36,96,117,101,100,36,
- 112,112,112,96,117,37,37,52,52,52,100,100,36,49,100,36,49,49,33,52,
- 52,37,52,48,52,36,37,37,37,49,49,49,117,53,33,49,49,101,49,33,37,37,
- 96,52,97,97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,33,52,
- 112,112,112,48,49,49,113,52,100,48,49,113,112,112,112,112,96,48,49,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,
- 33,37,49,49,49,53,16,177,241,96,36,100,48,113,36,52,96,117,117,36,
- 53,33,37,116,100,100,101,36,48,33,49,112,33,37,52,101,100,48,36,113,
- 49,100,36,100,36,101,116,101,96,100,100,113,96,33,53,100,33,53,112,
- 52,112,48,49,49,53,117,49,48,49,113,100,100,52,112,113,96,52,112,33,
- 52,100,100,96,36,37,37,49,49,36,37,112,36,96,112,36,52,33,37,37,49,
- 49,49,53,52,36,49,49,101,33,37,101,33,36,113,112,96,113,96,100,100,
- 100,32,100,96,100,96,53,100,36,48,117,100,112,112,96,37,48,49,49,113,
- 113,116,100,100,100,36,96,37,112,52,37,112,117,36,52,100,100,100,101,
- 96,116,48,100,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,
- 36,97,100,100,36,112,49,97,112,96,101,52,100,52,112,49,49,49,33,112,
- 117,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,97,36,49,97,100,
- 100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,117,101,96,100,100,
- 113,100,96,97,33,48,101,112,112,112,48,49,49,100,37,49,48,49,53,112,
- 112,112,112,96,32,37,52,52,52,100,100,100,52,37,49,100,100,52,52,52,
- 52,52,48,100,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,
- 97,100,100,96,97,100,100,100,37,76,102,52,100,48,33,49,49,49,37,37,
- 37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,100,117,97,
- 97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,49,113,112,112,96,
- 117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,116,
- 49,36,37,37,37,49,49,49,101,33,37,49,49,52,49,33,37,37,116,52,97,97,
- 97,97,100,100,48,117,53,96,100,100,97,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,32,49,49,49,49,33,52,116,36,101,37,49,49,33,37,49,49,49,
- 37,64,228,228,32,116,100,48,113,36,116,48,101,32,36,53,33,37,116,100,
- 100,101,52,53,116,100,112,116,32,36,48,49,37,36,37,97,101,36,100,52,
- 48,117,101,96,100,100,116,96,33,53,97,33,53,112,52,48,49,49,49,97,
- 97,33,49,49,113,37,117,32,36,37,97,52,49,32,33,100,100,52,49,116,36,
- 100,48,48,36,112,36,112,32,36,101,33,37,37,49,49,49,37,53,33,49,49,
- 113,33,37,101,33,36,113,112,96,116,96,100,100,100,52,36,48,53,37,97,
- 101,36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,
- 37,112,52,37,112,117,36,52,100,100,100,37,32,49,100,96,100,100,100,
- 97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,49,113,117,112,
- 112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,100,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,117,36,
- 97,97,97,97,100,100,100,113,96,97,100,36,101,100,96,97,33,53,101,112,
- 112,112,48,49,49,100,117,37,48,49,113,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,
- 37,49,49,49,37,96,100,100,100,100,32,37,53,97,113,97,100,100,96,97,
- 100,100,100,33,24,51,48,52,48,33,49,49,49,37,37,37,37,116,116,96,97,
- 100,97,100,100,36,49,33,96,100,100,97,101,36,97,33,53,52,48,113,96,
- 101,100,100,36,52,32,100,100,36,112,112,112,96,117,37,37,52,52,52,
- 100,100,36,49,36,117,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,
- 49,101,48,49,49,49,96,33,33,37,37,116,52,97,97,97,97,100,100,48,53,
- 100,96,100,100,97,97,97,97,33,97,97,112,112,112,48,49,49,113,36,32,
- 48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,117,64,228,164,
- 96,36,100,48,113,36,116,112,100,32,36,53,33,37,116,100,100,101,100,
- 53,100,100,48,48,37,36,49,101,48,36,113,49,100,36,100,52,49,117,101,
- 96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,101,113,96,100,
- 100,36,117,100,100,33,36,97,52,37,112,33,100,100,112,37,116,37,100,
- 116,53,37,112,36,96,117,36,32,33,37,37,49,49,49,101,96,96,100,100,
- 96,33,37,101,33,117,112,48,97,113,96,100,100,100,32,100,96,48,101,
- 96,101,36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,49,113,
- 96,37,112,52,37,112,49,36,52,100,100,100,101,33,37,100,96,100,100,
- 100,97,97,97,33,53,53,112,48,113,48,49,49,97,100,32,48,49,113,112,
- 49,97,112,96,37,37,100,52,112,49,49,49,33,37,32,49,49,33,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,36,97,117,100,100,32,37,101,33,37,
- 36,37,97,97,97,97,100,100,100,49,100,100,100,36,112,96,96,97,33,53,
- 101,112,112,112,48,49,49,100,37,49,48,49,113,112,112,112,112,96,112,
- 48,52,52,52,100,100,100,52,33,32,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,
- 100,100,100,53,24,51,117,113,53,49,49,49,37,37,37,37,37,116,116,101,
- 97,100,97,100,100,36,53,100,96,100,100,97,101,101,97,97,97,53,48,113,
- 96,101,100,100,36,112,49,48,49,113,48,113,112,96,117,37,37,52,52,52,
- 100,100,36,113,97,36,100,100,52,52,52,37,52,116,49,36,37,37,37,49,
- 49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,112,
- 48,49,97,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,
- 49,48,49,49,113,112,112,112,96,112,48,52,52,52,100,100,100,52,112,
- 96,100,100,52,100,52,116,36,101,37,49,49,33,37,49,49,49,101,21,177,
- 177,116,37,100,48,113,36,52,101,112,32,36,53,33,37,116,100,100,101,
- 116,48,33,49,96,117,32,52,100,49,37,36,37,97,101,36,100,36,100,37,
- 48,53,49,49,97,96,33,53,97,33,53,112,52,48,49,49,49,117,113,49,48,
- 49,113,116,116,112,97,36,97,52,37,112,33,100,100,36,37,116,36,100,
- 32,116,37,112,36,112,32,36,101,33,37,37,49,49,49,37,53,33,49,49,101,
- 33,37,101,33,36,113,112,96,113,96,100,100,100,52,113,101,52,101,96,
- 101,36,48,117,100,112,112,96,37,48,49,49,113,100,117,48,49,97,37,96,
- 37,112,52,37,112,117,36,52,100,100,100,37,117,116,101,100,100,100,
- 97,97,97,97,33,53,117,113,48,113,48,49,49,97,37,49,48,49,113,112,113,
- 113,112,112,112,37,100,52,112,49,49,49,33,116,36,100,100,52,100,52,
- 52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,
- 117,36,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,
- 101,112,112,112,48,49,49,52,100,100,48,49,53,112,112,112,112,96,112,
- 48,52,52,52,100,100,100,52,116,36,100,100,100,52,52,52,52,48,52,36,
- 37,37,37,49,49,49,37,52,48,49,49,37,49,37,53,97,113,97,100,100,96,
- 97,100,100,100,113,77,102,37,116,113,37,49,49,37,37,37,37,37,37,97,
- 96,97,100,97,100,100,36,97,33,49,49,49,96,101,36,97,97,97,53,48,113,
- 96,101,100,100,36,100,32,100,100,36,112,112,112,96,117,37,37,52,52,
- 52,100,100,36,49,96,36,100,100,100,52,52,37,52,48,52,36,37,37,37,49,
- 49,49,37,52,36,49,49,52,49,33,49,37,116,52,97,97,97,97,100,100,48,
- 101,101,100,100,36,53,96,97,97,33,33,52,112,112,112,48,49,49,113,113,
- 96,100,100,36,112,112,112,112,96,112,53,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,53,21,177,177,
- 97,36,100,48,113,36,116,100,49,117,36,53,33,37,116,100,100,101,100,
- 37,48,49,113,33,37,100,53,101,48,36,113,96,101,36,100,116,53,101,112,
- 96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,49,48,
- 49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,101,37,100,96,
- 116,36,112,36,48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,
- 37,101,33,117,112,112,96,113,96,100,100,100,36,97,48,53,49,48,100,
- 36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,37,
- 112,52,37,112,117,36,52,100,100,100,101,116,112,116,97,100,100,97,
- 97,97,97,97,97,48,112,48,113,48,49,49,97,112,96,100,100,36,112,49,
- 97,112,112,112,37,100,52,112,49,49,49,33,49,32,49,49,33,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,36,48,33,49,49,49,37,101,33,37,36,37,97,
- 97,97,97,100,100,100,33,37,97,100,36,101,100,96,100,33,53,101,112,
- 112,112,48,49,49,100,113,49,49,49,97,37,112,112,112,96,32,37,52,52,
- 52,100,100,100,116,52,48,49,49,33,52,52,52,52,48,116,37,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 101,77,102,36,48,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,
- 100,36,53,100,96,100,100,97,97,37,97,33,53,52,48,113,96,101,100,100,
- 36,112,49,48,49,113,112,48,113,96,117,37,37,52,52,52,100,100,36,113,
- 52,36,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,53,100,96,100,116,
- 96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,48,
- 113,112,112,32,113,48,52,52,52,100,100,100,52,49,32,49,49,33,52,100,
- 116,36,101,37,49,49,33,37,49,49,49,37,5,177,177,36,37,100,48,113,36,
- 52,96,117,117,36,53,33,37,116,100,100,101,116,48,33,49,36,100,32,116,
- 53,49,37,36,113,96,101,36,100,100,53,53,100,96,100,100,116,96,33,53,
- 97,33,53,112,52,48,49,49,49,53,52,37,100,100,36,48,37,53,49,113,96,
- 52,37,112,33,100,100,48,113,97,36,100,112,48,37,112,36,48,117,36,52,
- 33,37,37,49,49,49,37,36,117,100,100,96,33,37,101,33,36,113,112,96,
- 113,96,100,100,100,100,101,96,100,96,53,100,36,48,117,100,112,112,
- 96,37,48,49,49,113,32,96,48,49,33,36,96,101,36,52,37,112,117,36,52,
- 100,100,100,37,52,100,101,96,100,100,97,97,97,97,33,53,53,112,48,113,
- 48,49,49,97,37,49,48,49,113,112,112,97,112,96,37,37,100,52,112,49,
- 49,49,33,116,36,100,100,52,52,100,52,112,117,97,33,37,37,37,49,49,
- 97,52,37,97,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,
- 97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,
- 37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,
- 36,100,100,52,100,52,52,52,96,52,36,37,37,37,49,49,49,101,36,96,100,
- 100,32,37,49,53,97,113,97,100,100,96,97,100,100,100,97,73,102,33,32,
- 49,97,100,100,32,37,37,37,37,37,97,96,97,100,97,100,100,36,101,96,
- 97,100,100,97,101,36,97,33,53,32,48,113,96,101,100,100,36,96,33,49,
- 49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,36,52,100,
- 100,52,52,52,37,52,112,97,33,37,37,49,49,49,49,37,53,33,49,49,52,101,
- 116,32,49,116,52,100,100,97,97,100,100,116,48,100,100,100,52,97,97,
- 97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,37,52,100,100,52,52,52,100,100,
- 52,36,48,49,49,37,49,49,49,117,5,177,177,116,37,100,116,53,37,116,
- 36,101,32,36,53,53,37,116,100,100,113,116,48,33,49,100,116,32,100,
- 100,100,48,36,113,96,101,36,100,116,100,116,101,96,100,100,113,96,
- 33,53,52,36,117,113,52,112,48,49,49,53,117,49,48,49,113,49,97,52,49,
- 113,96,52,37,112,33,100,100,48,49,96,36,100,48,113,36,112,36,116,32,
- 36,52,33,37,37,49,49,49,53,116,96,100,100,32,116,32,101,33,36,113,
- 112,96,113,96,100,100,100,36,113,96,48,113,96,113,53,48,112,100,112,
- 112,96,37,48,49,49,113,36,36,100,100,52,36,32,36,112,100,37,112,37,
- 117,33,100,100,100,113,53,96,100,48,49,49,96,97,97,97,97,97,48,112,
- 48,113,48,49,49,97,49,112,48,49,113,112,49,97,112,96,37,32,100,52,
- 112,49,49,49,33,112,96,100,100,52,52,52,52,112,117,97,33,37,37,37,
- 49,49,97,52,33,37,49,49,37,37,101,33,37,116,112,96,97,97,100,100,100,
- 100,97,101,96,100,36,101,49,53,96,36,53,37,49,113,112,48,49,49,53,
- 36,49,49,49,101,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,33,37,
- 49,49,37,37,37,49,49,37,33,100,100,100,97,100,100,100,117,73,102,96,
- 48,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,
- 96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,
- 49,113,112,112,48,97,117,37,37,52,52,52,100,100,36,113,97,36,100,100,
- 52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,116,32,49,49,116,32,116,
- 32,37,116,52,97,97,97,97,100,100,96,53,100,96,100,116,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,36,113,48,49,113,112,112,48,113,
- 96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,101,4,177,177,97,36,100,32,116,37,116,100,
- 32,117,36,53,36,37,116,100,100,101,52,113,37,49,100,116,32,100,100,
- 100,48,36,113,96,101,36,100,100,100,33,97,48,49,49,97,96,33,53,53,
- 36,101,112,52,48,49,49,49,53,116,32,48,49,49,49,37,117,37,36,97,100,
- 117,112,49,49,49,49,49,52,32,100,96,113,36,112,36,112,32,36,52,33,
- 37,37,49,49,49,37,53,33,49,49,101,33,37,101,33,36,113,32,53,112,96,
- 100,100,100,100,101,96,36,49,53,116,117,112,32,100,112,112,96,37,48,
- 49,49,113,112,49,48,49,97,37,96,37,112,52,37,112,117,36,52,100,100,
- 100,37,49,100,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,
- 49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,100,112,117,97,33,37,37,37,49,49,97,116,48,
- 33,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,33,53,96,100,
- 36,53,32,53,96,33,53,101,112,112,112,48,49,49,112,37,49,48,49,53,112,
- 112,112,112,96,112,48,52,52,52,100,100,100,52,97,52,100,100,52,52,
- 52,100,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,
- 113,97,100,100,96,97,100,100,100,49,73,102,53,32,97,117,100,100,32,
- 37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,101,113,49,49,113,112,112,
- 112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,
- 52,112,97,33,37,37,49,49,49,49,37,53,33,49,49,52,49,33,37,49,116,52,
- 100,100,97,97,100,100,48,49,101,96,100,116,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,100,52,36,48,49,49,
- 37,49,49,49,53,4,177,177,97,36,100,48,113,36,116,49,97,117,36,53,33,
- 37,116,100,100,101,36,48,33,49,100,116,32,100,100,112,48,36,113,96,
- 101,36,100,116,100,48,48,48,49,49,112,96,33,53,36,32,53,112,52,112,
- 48,49,49,53,117,49,48,49,113,49,97,52,49,113,96,52,37,112,33,100,100,
- 48,49,96,36,100,48,113,36,112,36,48,117,36,52,33,37,37,49,49,49,37,
- 112,116,100,100,32,37,37,101,33,36,113,48,97,113,96,100,100,100,100,
- 101,96,96,52,53,100,36,48,117,100,112,112,96,37,48,49,49,113,32,101,
- 101,100,116,37,96,37,112,96,48,52,32,117,33,100,100,100,113,48,96,
- 112,53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,
- 49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,97,113,116,100,100,
- 52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,
- 101,33,37,116,112,96,97,97,100,100,100,100,97,101,96,100,36,101,100,
- 96,97,36,53,37,49,113,112,48,49,49,100,100,49,48,49,53,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,
- 48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,49,37,33,100,
- 100,100,97,100,100,100,37,73,102,116,101,48,33,49,49,37,37,37,37,37,
- 37,97,96,97,100,97,100,100,36,117,53,96,100,100,97,101,36,97,33,53,
- 32,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,
- 37,100,52,52,100,100,36,53,117,33,100,100,52,52,52,37,52,48,52,36,
- 37,37,37,49,49,49,101,33,49,49,49,52,101,116,32,37,116,52,97,97,97,
- 97,100,100,116,96,101,96,100,116,101,97,97,97,33,97,97,112,112,112,
- 48,49,49,113,100,48,49,49,113,112,112,112,48,97,112,48,52,52,52,100,
- 100,100,52,112,33,100,100,52,52,52,36,113,100,37,49,49,33,37,49,49,
- 49,37,84,228,228,53,53,49,53,113,36,36,101,100,32,48,53,33,37,116,
- 100,100,101,52,116,116,100,52,32,37,116,100,101,48,100,117,97,53,113,
- 49,49,49,96,101,96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,
- 49,53,32,36,48,49,49,49,37,117,37,36,97,100,117,112,49,49,49,49,49,
- 37,33,100,112,36,37,112,36,112,32,36,52,33,37,37,49,49,49,37,53,33,
- 49,49,101,53,37,101,33,116,113,112,96,113,96,100,100,100,36,113,49,
- 53,101,96,101,36,48,117,36,113,48,97,37,48,49,49,113,112,49,48,49,
- 33,36,32,36,112,52,32,32,117,36,52,100,100,100,37,112,49,100,96,100,
- 100,97,97,97,97,97,97,48,112,48,113,48,49,49,97,117,37,48,49,113,112,
- 49,97,112,96,37,32,100,52,112,49,49,49,33,116,36,100,100,52,52,52,
- 52,112,117,97,33,49,37,37,49,49,97,101,117,32,49,49,37,37,101,33,37,
- 36,37,97,97,97,97,100,100,100,113,96,100,100,36,101,49,53,96,33,53,
- 101,112,112,112,48,49,49,53,112,49,48,49,117,113,112,112,112,96,112,
- 48,52,52,52,100,100,100,52,49,100,100,100,52,52,52,52,100,48,52,36,
- 37,37,37,49,49,49,37,116,32,49,49,37,37,37,97,52,113,97,100,100,96,
- 97,100,100,100,33,29,51,112,53,48,33,49,49,37,37,37,37,37,116,116,
- 96,97,100,100,100,100,36,97,53,96,100,100,97,101,36,97,33,53,52,48,
- 49,97,101,100,100,100,116,32,48,49,113,112,112,112,96,117,37,37,100,
- 52,52,100,100,36,53,97,36,100,100,52,52,52,37,52,48,96,33,37,37,37,
- 49,49,49,101,33,37,49,49,116,100,117,32,49,116,52,100,100,97,97,100,
- 100,48,113,116,97,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,
- 113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,52,100,52,36,48,49,49,37,49,49,49,117,84,
- 228,228,32,37,49,49,36,49,116,36,101,32,36,53,48,37,116,100,100,53,
- 113,53,33,49,100,116,32,100,100,52,37,36,113,96,101,36,100,116,100,
- 96,101,96,100,100,113,96,33,53,36,32,53,112,52,112,48,49,49,53,117,
- 49,48,49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,49,96,36,100,
- 48,113,36,112,36,48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,37,
- 96,32,101,33,116,113,48,97,113,96,100,100,100,100,101,96,48,113,96,
- 97,37,112,113,100,112,112,96,37,48,49,49,113,112,49,48,49,33,36,32,
- 36,112,96,53,32,37,36,52,100,100,100,113,113,37,100,96,100,100,97,
- 97,97,97,33,53,53,112,48,49,49,49,49,97,112,37,48,49,113,112,49,97,
- 112,96,37,37,100,100,112,49,49,49,49,53,32,100,100,52,52,52,52,112,
- 117,97,33,49,37,37,49,49,97,101,48,33,49,49,37,37,101,33,37,36,112,
- 96,97,97,97,100,100,100,113,96,97,100,36,53,113,53,96,36,53,37,49,
- 113,112,48,49,49,100,52,117,48,49,53,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,37,37,49,37,33,100,100,100,97,100,
- 100,100,53,29,51,53,112,37,97,100,100,32,37,37,37,37,116,116,96,97,
- 100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,96,53,100,49,52,52,52,100,
- 100,36,113,36,100,100,100,52,52,52,37,52,112,53,36,37,37,49,49,49,
- 49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,48,
- 100,96,100,116,96,97,97,97,97,53,117,112,112,112,48,49,49,113,52,52,
- 48,49,113,112,112,112,112,96,112,96,52,52,52,100,100,100,52,37,100,
- 100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,101,1,177,177,
- 97,36,100,48,48,37,33,48,49,117,36,53,33,37,116,100,100,101,116,53,
- 33,49,33,32,37,116,100,101,48,100,117,97,37,37,100,100,100,33,97,53,
- 49,49,112,96,33,53,100,33,53,112,52,112,48,49,49,53,36,53,48,49,49,
- 49,37,117,37,36,97,100,117,112,49,49,49,49,49,96,37,100,48,116,36,
- 112,36,112,32,36,52,33,37,37,49,49,49,101,49,36,49,49,101,36,37,101,
- 33,36,113,112,96,113,96,100,100,100,116,53,100,112,53,53,100,101,48,
- 117,100,112,112,96,37,48,49,49,113,52,97,48,49,97,37,96,37,112,52,
- 37,52,112,117,33,100,100,100,37,37,116,97,48,49,49,96,97,97,97,33,
- 53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,
- 100,52,52,100,100,100,52,116,36,100,100,52,52,52,52,112,37,113,36,
- 37,37,37,49,49,97,52,33,49,49,49,37,37,101,33,37,116,37,97,97,97,100,
- 100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,
- 49,49,36,36,49,48,49,53,112,112,112,112,112,101,53,52,52,52,100,100,
- 100,52,37,37,100,100,52,52,52,52,52,48,52,48,37,37,37,49,49,49,101,
- 33,49,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,113,72,
- 102,101,53,48,33,49,49,37,37,37,37,37,96,116,96,97,100,97,100,100,
- 36,33,100,96,100,100,97,101,36,97,33,53,52,48,49,49,49,49,49,49,100,
- 49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,
- 100,100,52,52,52,37,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,
- 52,49,33,37,49,116,52,97,97,97,97,100,100,48,97,100,48,49,97,96,97,
- 97,97,97,53,117,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 116,36,49,36,49,49,33,37,49,49,49,53,1,177,241,96,36,100,48,113,36,
- 116,52,49,112,36,53,33,37,116,100,100,101,36,48,33,49,100,116,32,100,
- 100,36,49,36,113,96,101,36,100,116,100,100,37,48,49,49,32,53,32,53,
- 100,33,53,112,52,112,48,49,49,53,117,49,48,49,113,49,97,52,49,113,
- 96,52,37,112,33,100,100,48,49,96,36,100,48,113,36,112,36,48,117,36,
- 52,33,37,37,49,49,49,117,53,33,49,49,101,33,37,101,33,36,113,112,96,
- 113,96,100,100,100,32,100,96,48,97,53,100,36,48,117,100,112,112,32,
- 36,48,49,49,113,112,49,48,49,33,36,32,36,112,52,32,112,37,36,52,100,
- 100,100,113,36,32,100,96,100,100,97,97,97,97,33,48,53,112,48,113,48,
- 49,49,97,32,49,48,49,113,112,49,97,112,96,37,37,100,100,100,100,100,
- 100,36,113,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,
- 116,48,33,49,49,37,37,101,33,37,116,112,96,97,97,97,100,100,100,97,
- 101,96,100,36,101,100,96,97,36,53,101,112,112,112,48,49,49,100,48,
- 49,100,100,48,112,112,112,112,112,101,53,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,53,97,36,97,100,100,96,97,100,100,100,101,72,102,100,33,101,
- 96,100,100,32,37,37,37,37,116,36,53,96,100,97,100,100,36,37,48,48,
- 49,49,96,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,
- 113,112,112,112,32,116,37,53,33,100,52,100,100,100,112,48,100,100,
- 100,52,52,52,37,52,48,52,36,37,37,49,49,49,49,101,97,36,49,49,52,49,
- 33,37,37,116,52,100,100,97,97,100,100,48,53,100,96,100,116,96,97,97,
- 97,33,97,97,112,112,112,48,49,49,113,96,113,49,49,113,112,112,112,
- 112,96,112,48,100,52,52,100,100,100,52,37,49,100,100,52,52,52,116,
- 36,101,37,49,49,33,37,49,49,49,37,1,228,228,97,100,100,48,113,36,116,
- 48,48,117,36,53,33,37,116,100,100,101,52,96,116,100,52,32,37,116,100,
- 101,48,100,117,97,101,113,49,49,49,96,101,96,100,100,113,96,33,53,
- 100,33,53,112,52,112,48,49,49,53,32,52,100,100,100,100,32,117,37,36,
- 97,100,117,112,49,49,49,49,49,37,37,49,53,37,37,112,36,112,32,36,52,
- 33,37,37,49,49,49,37,48,100,100,100,96,36,37,101,33,36,113,112,96,
- 113,96,100,100,100,36,53,49,53,37,100,101,36,48,117,100,112,112,96,
- 37,48,49,49,113,100,37,100,100,116,37,96,37,112,52,37,112,117,36,52,
- 100,100,100,37,36,96,49,48,49,49,96,97,97,97,33,53,97,37,48,113,48,
- 49,49,97,33,36,100,100,36,112,49,97,112,96,37,37,100,52,112,49,49,
- 49,33,116,36,100,100,52,52,52,52,32,117,97,101,32,49,37,49,49,49,52,
- 36,49,49,49,37,37,101,33,37,36,37,97,97,97,100,100,100,100,113,48,
- 97,100,36,101,100,96,97,33,53,37,49,113,112,48,49,49,100,37,49,48,
- 49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,112,116,100,
- 100,52,52,52,52,52,48,52,36,49,37,37,49,49,49,101,97,36,49,49,37,37,
- 37,53,97,113,97,100,100,96,97,100,100,100,97,8,51,96,49,48,33,49,49,
- 37,37,37,37,37,116,116,96,97,100,97,100,100,100,113,101,100,100,100,
- 97,101,36,97,33,53,52,48,49,97,101,100,100,36,100,53,49,49,113,112,
- 112,112,96,117,37,53,33,100,52,100,100,100,112,97,36,100,100,52,52,
- 52,37,52,48,96,33,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,
- 116,52,97,100,97,97,100,100,48,97,112,53,49,97,96,97,97,97,97,53,97,
- 112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,
- 52,52,52,100,100,100,52,97,100,100,100,52,52,52,116,36,113,37,49,49,
- 33,37,49,49,49,117,1,228,228,116,36,100,48,113,36,116,100,100,32,36,
- 53,33,37,116,100,100,101,100,52,33,49,100,116,32,100,100,100,48,100,
- 37,97,101,36,100,116,100,32,52,53,49,49,96,97,33,53,100,33,53,112,
- 112,112,48,49,49,53,117,49,48,49,113,49,97,52,49,113,96,52,37,112,
- 33,100,100,48,49,96,36,100,48,113,36,112,36,48,112,36,32,33,37,37,
- 49,49,49,117,32,33,49,49,101,53,37,101,33,36,113,112,96,113,96,100,
- 100,100,32,100,96,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,
- 113,112,49,48,49,97,37,96,37,112,52,32,112,117,36,52,100,100,100,101,
- 37,36,100,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,113,
- 116,49,49,49,113,112,49,97,112,96,37,37,100,100,112,49,49,49,33,113,
- 101,100,100,52,52,52,52,112,117,97,101,32,49,37,49,49,49,116,48,33,
- 49,49,37,37,101,33,37,36,112,96,97,97,97,100,100,100,97,101,96,100,
- 36,101,100,96,97,33,53,101,48,113,112,48,49,49,100,48,116,101,100,
- 48,112,112,112,112,112,101,48,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,48,49,49,49,37,37,37,
- 53,97,116,97,100,100,96,97,100,100,100,117,8,51,37,32,113,116,100,
- 100,32,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,
- 97,101,36,97,33,53,52,48,113,32,100,100,100,36,112,49,48,49,113,112,
- 112,112,96,53,100,49,52,52,52,100,100,36,113,36,49,100,100,52,52,52,
- 37,52,112,53,36,37,37,37,49,49,49,101,48,37,49,49,52,49,33,37,37,116,
- 52,100,97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,97,117,
- 112,112,112,48,49,49,113,32,116,101,100,36,112,112,112,112,96,112,
- 48,52,100,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,
- 49,49,33,37,49,49,49,101,0,228,228,49,100,100,48,113,36,116,100,36,
- 33,36,53,33,37,116,100,100,101,116,48,33,49,33,32,37,116,100,97,49,
- 36,33,96,101,48,100,100,100,97,101,96,100,100,113,101,33,53,100,33,
- 53,112,116,113,48,49,49,53,36,32,48,49,49,49,37,117,37,36,97,100,117,
- 112,49,49,49,49,49,32,32,100,48,33,36,112,36,48,117,36,101,33,37,37,
- 49,49,49,37,53,33,49,49,101,33,37,101,33,36,113,112,96,113,96,100,
- 100,100,52,52,97,48,49,53,101,113,53,117,100,48,113,96,101,100,100,
- 100,100,112,100,101,100,116,37,96,37,112,52,37,112,117,36,52,100,100,
- 100,37,33,96,52,53,49,49,96,97,97,97,33,53,53,112,48,113,48,49,49,
- 97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,32,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,37,113,36,37,37,37,49,49,97,52,97,36,49,
- 49,37,37,101,33,37,116,37,97,97,97,97,100,100,100,49,100,97,100,36,
- 101,100,96,97,33,53,37,113,112,112,48,49,49,100,37,49,48,49,53,112,
- 112,112,112,96,112,53,52,52,52,100,100,100,52,32,117,49,49,33,52,52,
- 52,52,48,52,36,37,49,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,
- 97,100,100,96,97,100,100,100,49,8,51,116,49,48,33,49,49,37,37,37,37,
- 37,116,52,97,97,100,97,100,100,100,52,100,100,100,100,97,101,36,97,
- 33,53,52,48,113,96,101,100,100,100,33,49,48,49,113,112,112,112,96,
- 117,37,37,52,52,52,100,100,36,113,116,100,100,100,52,52,52,37,52,112,
- 97,33,37,37,37,49,49,49,53,116,37,49,49,52,49,33,37,37,116,52,97,97,
- 97,97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,33,49,113,112,
- 48,49,49,113,37,96,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,49,49,100,100,52,52,52,52,37,101,37,52,49,33,37,49,49,49,
- 53,0,228,228,116,36,100,48,113,36,116,100,36,33,36,53,33,37,116,100,
- 100,101,36,48,33,49,100,116,32,100,100,100,48,36,113,96,101,36,100,
- 116,100,96,101,96,100,100,33,48,32,53,100,33,53,112,32,36,48,49,49,
- 53,112,49,48,49,113,113,101,100,101,36,97,52,37,32,33,100,100,48,53,
- 53,32,100,48,113,36,112,36,48,53,37,52,33,37,37,49,49,49,53,116,37,
- 49,49,101,33,37,101,33,36,33,101,96,113,96,100,100,100,32,100,96,48,
- 49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,32,117,100,100,
- 116,37,96,37,112,116,48,112,117,36,52,100,100,100,101,32,36,100,96,
- 100,100,97,97,97,97,33,53,101,112,48,113,48,49,49,49,37,49,49,49,113,
- 112,49,97,112,96,37,37,100,52,112,49,49,49,113,96,36,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,52,53,49,49,49,37,37,101,33,
- 37,116,112,96,97,97,97,100,100,100,37,117,97,100,36,101,100,96,97,
- 33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,112,96,100,52,52,100,100,100,116,33,48,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,101,100,36,49,49,37,37,37,101,97,113,33,101,
- 100,96,97,100,100,100,37,8,51,33,97,97,32,49,49,37,37,37,49,49,116,
- 116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,
- 48,113,32,100,100,100,36,96,48,100,100,36,112,112,112,96,117,37,37,
- 52,100,52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,
- 37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,37,49,96,97,97,97,100,
- 100,48,101,97,48,49,97,96,97,97,97,33,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,112,32,113,48,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,37,16,228,
- 228,101,33,49,53,113,36,116,100,100,37,36,53,33,37,116,100,100,101,
- 116,37,97,100,52,32,37,116,100,101,48,36,33,96,101,116,100,100,100,
- 113,36,97,100,100,49,97,33,53,100,33,53,112,100,112,48,49,49,53,52,
- 52,48,49,113,96,52,116,37,36,97,52,37,52,52,100,100,32,36,116,36,100,
- 48,113,36,112,36,48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,
- 33,37,101,33,36,113,112,101,113,96,100,100,100,116,112,101,48,49,53,
- 117,36,48,117,100,112,112,96,101,100,100,100,100,36,49,48,49,97,37,
- 96,37,112,52,37,112,117,36,52,100,100,100,37,96,112,48,96,100,100,
- 97,97,97,100,36,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,32,49,49,49,33,48,36,49,49,33,52,52,52,112,
- 117,97,33,37,49,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,
- 97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,97,97,36,112,
- 112,112,48,49,49,100,113,48,100,100,48,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,96,52,36,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,
- 100,100,33,12,51,48,97,48,33,49,49,37,37,37,37,37,116,116,96,97,100,
- 97,100,100,36,101,48,100,100,100,97,101,36,97,33,53,52,48,113,96,101,
- 100,100,36,49,117,48,49,113,112,112,112,96,117,37,32,52,52,52,100,
- 100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,
- 117,48,97,100,100,53,49,33,37,37,116,52,97,97,97,97,100,100,48,33,
- 100,96,100,116,96,97,97,97,33,117,97,112,112,112,48,49,49,113,52,36,
- 49,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,52,52,112,113,36,116,117,32,49,49,49,117,16,228,228,
- 96,37,100,96,116,36,116,100,100,32,36,53,36,37,116,100,100,113,116,
- 37,97,100,53,53,37,100,116,101,48,36,113,96,101,36,100,116,116,117,
- 101,96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,113,112,
- 101,100,36,49,117,52,49,113,96,52,37,112,33,100,100,48,113,32,33,49,
- 53,113,117,117,117,53,117,36,116,117,32,37,49,49,49,37,53,33,49,49,
- 101,33,49,101,33,36,113,112,96,113,96,100,100,100,32,100,96,48,49,
- 53,100,36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,
- 96,37,112,52,37,112,117,36,52,100,100,100,101,97,48,100,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,49,36,49,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,97,100,53,100,100,52,52,52,52,
- 112,117,33,32,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,
- 37,97,97,97,97,100,100,100,53,100,48,49,113,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,117,48,
- 52,52,52,100,100,100,52,37,97,100,100,52,52,52,52,52,48,52,36,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,37,37,37,116,52,33,117,53,96,100,
- 100,100,53,12,51,117,32,112,48,49,49,37,37,37,37,37,116,116,96,97,
- 100,97,100,100,36,48,100,96,100,100,97,97,100,97,33,53,52,48,113,96,
- 101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,
- 100,100,36,113,53,53,49,49,33,52,52,37,52,96,52,36,37,37,37,49,49,
- 49,37,53,33,49,49,52,49,33,37,37,37,49,96,97,97,97,100,100,48,101,
- 33,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,
- 48,49,113,112,112,112,112,32,113,48,52,52,52,100,100,100,52,49,100,
- 100,100,52,52,52,116,116,101,37,101,117,101,32,49,49,49,101,5,228,
- 228,116,36,100,112,48,37,116,100,100,32,36,53,33,37,116,100,100,101,
- 116,48,33,49,33,32,37,36,48,49,37,36,113,96,101,36,100,52,48,117,100,
- 53,49,49,48,97,33,53,100,33,53,112,52,112,48,49,49,53,112,49,48,49,
- 113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,100,48,113,
- 36,112,36,48,117,36,52,33,37,37,49,49,49,101,32,100,100,100,96,33,
- 37,101,33,36,113,112,96,113,96,100,100,100,116,96,97,48,49,53,53,116,
- 53,117,100,112,112,96,37,48,49,49,49,97,37,48,49,97,101,116,37,112,
- 52,37,112,117,36,52,100,100,100,49,53,32,52,100,100,100,97,97,97,97,
- 33,53,53,112,48,113,48,49,49,33,36,49,48,49,113,112,48,113,112,96,
- 37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,
- 33,37,37,37,49,49,97,116,101,101,100,100,32,37,101,33,37,48,37,97,
- 97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,97,97,36,112,112,
- 112,48,49,49,100,113,32,48,49,53,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,96,52,36,37,37,37,49,
- 49,49,101,36,49,49,49,37,37,37,53,117,113,97,113,117,49,96,100,100,
- 100,113,9,51,36,113,48,100,100,100,32,37,37,37,37,96,116,96,97,100,
- 97,100,100,36,113,112,96,100,100,97,113,113,49,32,53,52,48,113,96,
- 101,100,100,36,101,96,100,100,36,112,112,112,96,117,37,37,52,52,52,
- 100,100,36,113,52,33,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,
- 49,117,96,117,100,100,53,49,33,37,37,37,33,97,97,97,97,100,100,48,
- 101,48,97,100,116,96,97,97,97,33,100,97,112,112,112,48,49,49,113,117,
- 49,48,49,113,112,112,112,112,96,112,48,52,52,100,100,100,100,52,32,
- 116,100,100,52,52,52,116,113,100,37,113,100,116,32,49,49,49,53,5,228,
- 164,37,100,100,48,113,36,116,100,100,32,36,53,33,37,116,100,100,101,
- 36,53,53,49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,
- 53,97,97,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,
- 49,48,49,113,49,97,52,49,113,49,33,37,112,33,100,100,48,113,101,113,
- 49,53,113,117,117,117,53,117,36,116,117,100,32,49,49,49,49,53,33,49,
- 49,101,33,37,101,33,116,113,112,96,113,96,100,100,100,32,100,96,48,
- 49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,37,48,48,49,97,
- 37,96,37,112,52,37,112,117,36,52,100,100,100,101,52,52,36,49,49,49,
- 96,97,97,97,33,48,53,112,48,113,48,49,49,97,52,52,48,49,113,112,116,
- 116,36,96,37,37,100,52,112,49,49,49,97,49,48,49,49,33,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,52,101,96,100,100,32,37,101,33,37,36,37,
- 97,97,97,97,100,100,100,53,112,53,49,113,101,100,96,97,97,97,96,112,
- 112,112,48,49,49,100,49,100,48,49,53,112,112,112,112,32,113,48,52,
- 52,52,100,100,100,116,117,36,100,100,52,52,52,52,52,48,52,36,37,37,
- 49,49,49,49,37,32,53,49,49,37,37,37,117,52,113,97,52,49,53,96,100,
- 100,100,101,9,51,113,53,53,33,49,49,37,37,37,37,37,116,116,96,97,100,
- 97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,
- 100,100,36,112,49,48,49,113,112,112,112,96,117,37,32,52,52,52,100,
- 100,36,113,97,36,100,100,52,100,52,37,52,48,52,36,37,37,37,49,49,49,
- 37,53,33,49,49,52,49,33,37,37,116,100,97,97,97,97,100,100,48,53,100,
- 96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,32,32,49,
- 49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,37,85,177,177,97,36,
- 100,96,113,36,116,100,100,32,36,97,116,100,117,100,100,101,116,48,
- 33,49,100,116,32,100,100,96,49,100,37,97,101,36,100,116,100,96,101,
- 96,100,100,113,101,33,53,100,33,53,112,52,112,48,49,49,53,36,37,49,
- 49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,100,48,
- 113,36,112,36,48,117,36,52,33,37,37,49,49,49,101,101,116,100,100,96,
- 33,37,101,33,36,113,112,96,113,96,100,100,100,52,97,97,48,49,53,53,
- 37,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,112,112,
- 112,52,37,112,117,36,52,100,100,100,37,116,101,101,96,100,100,97,97,
- 97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,
- 33,32,37,37,37,49,49,97,116,48,33,49,49,37,49,101,33,37,36,37,97,97,
- 97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,113,112,112,
- 112,48,49,49,100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,32,96,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,
- 49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 97,93,102,33,37,48,33,49,49,37,37,37,37,37,116,52,97,97,100,97,100,
- 100,36,101,52,53,49,49,96,53,37,97,33,53,52,48,113,96,101,100,100,
- 36,37,96,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 32,33,49,49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,101,100,36,49,
- 49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,101,49,48,49,97,96,
- 97,97,97,33,97,97,112,112,112,48,49,49,113,117,49,48,49,113,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,116,117,36,100,100,52,52,52,
- 116,36,101,37,49,49,33,37,49,49,49,117,85,177,241,96,36,100,48,113,
- 36,116,100,100,32,36,53,33,37,116,100,100,101,100,113,37,49,100,116,
- 32,100,100,100,53,36,113,96,101,36,100,116,100,96,101,96,100,100,113,
- 96,36,53,100,33,53,112,52,112,48,49,49,53,100,101,101,100,36,49,97,
- 52,49,113,96,52,37,112,33,100,100,48,113,97,36,100,48,113,36,112,36,
- 48,117,36,52,33,37,37,49,49,49,49,53,33,49,49,101,33,37,101,33,116,
- 113,48,97,113,96,100,100,100,112,116,97,48,49,53,100,36,48,53,101,
- 112,112,96,37,48,49,49,113,97,52,48,49,97,37,48,113,112,52,37,112,
- 117,36,52,100,100,100,101,117,33,100,96,100,100,97,97,97,97,33,53,
- 101,112,48,113,48,49,49,97,49,101,101,100,36,112,101,97,112,96,37,
- 37,100,52,112,49,49,49,97,33,48,100,100,52,52,52,52,112,117,97,33,
- 37,37,37,49,49,97,52,96,96,100,100,32,37,101,33,37,36,37,97,97,97,
- 97,100,100,100,49,49,97,100,36,101,100,96,97,33,53,101,112,112,112,
- 48,49,49,100,113,36,100,100,48,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,116,117,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,117,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,
- 100,117,93,102,96,117,48,116,100,100,32,49,49,49,49,116,116,96,100,
- 100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,
- 101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,100,
- 100,100,36,113,97,36,100,100,52,52,100,37,52,48,52,36,37,37,37,49,
- 49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,100,97,100,100,48,
- 53,100,96,100,116,96,97,100,97,33,97,97,112,48,113,48,49,49,113,52,
- 112,48,49,113,48,113,112,112,96,112,48,52,52,100,100,100,100,52,117,
- 49,100,100,52,52,52,116,48,101,37,49,113,116,32,49,49,49,101,84,177,
- 177,96,112,49,117,36,37,116,100,100,32,36,97,116,32,116,100,100,101,
- 116,48,33,49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,
- 32,36,96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,
- 49,48,49,113,49,97,96,100,36,97,52,37,112,33,100,100,48,113,100,48,
- 100,48,113,117,117,117,53,117,36,116,117,100,32,49,49,49,101,116,96,
- 100,100,96,33,37,101,33,36,113,112,96,113,96,100,100,100,100,101,96,
- 48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,
- 97,37,96,37,112,52,37,112,117,36,52,100,100,100,37,113,53,36,53,49,
- 49,96,100,100,100,36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,
- 49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,
- 52,112,117,97,33,37,37,49,49,49,97,116,48,33,49,49,37,37,113,33,37,
- 36,37,97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,
- 101,112,48,113,48,49,49,100,37,49,48,49,53,112,48,113,112,96,112,48,
- 52,100,52,100,100,100,52,37,52,100,100,52,100,52,52,52,48,52,36,37,
- 37,49,49,49,49,101,117,36,49,49,37,37,37,53,100,113,97,100,52,53,96,
- 100,100,100,49,93,102,53,37,48,33,49,49,37,37,37,37,37,116,52,97,97,
- 100,97,100,100,36,37,49,100,100,100,97,53,37,97,33,53,52,48,113,96,
- 101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,
- 100,100,36,113,96,100,100,100,52,52,52,37,52,48,52,36,37,37,49,49,
- 49,49,117,53,33,49,49,52,49,33,37,37,116,52,97,97,100,97,100,100,48,
- 37,48,48,49,97,96,97,97,97,33,97,97,112,112,112,48,49,49,113,97,117,
- 48,49,113,112,112,112,112,112,101,48,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,116,116,101,37,49,49,33,37,49,49,49,53,84,177,241,
- 96,36,100,48,113,36,116,100,100,32,36,53,33,37,116,100,100,101,100,
- 33,49,49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,52,
- 101,101,100,100,113,96,33,53,100,33,101,112,52,112,48,49,49,117,48,
- 33,48,49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,
- 100,48,113,117,117,117,53,117,36,116,117,32,37,49,49,49,37,112,101,
- 100,100,96,33,37,101,33,48,113,112,96,113,96,100,100,100,116,36,100,
- 48,49,53,52,116,117,32,100,112,112,96,37,48,49,49,113,112,49,48,49,
- 97,37,48,113,112,52,37,112,117,36,52,100,100,100,116,112,33,100,96,
- 100,100,97,97,97,97,33,53,101,112,48,113,48,49,49,97,97,36,49,49,113,
- 112,101,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,
- 52,52,112,117,97,33,37,37,37,49,49,97,52,48,49,49,49,37,37,101,33,
- 37,36,37,97,97,97,100,100,100,100,117,101,96,100,36,101,100,96,97,
- 33,53,101,112,48,113,48,49,49,100,33,36,100,100,48,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,116,112,53,100,100,52,52,52,52,52,116,
- 49,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,117,113,97,100,
- 100,96,97,100,100,100,37,93,102,116,32,112,33,49,49,37,37,49,49,49,
- 116,116,96,100,100,97,100,100,36,53,100,96,100,100,97,37,117,97,33,
- 53,52,48,113,96,101,100,100,36,116,100,101,100,36,112,112,112,96,117,
- 37,37,52,52,52,100,100,100,100,116,36,100,100,52,52,52,37,52,48,52,
- 36,37,37,37,49,49,49,101,117,36,49,49,52,49,33,37,37,116,52,97,97,
- 97,97,100,100,48,53,100,96,100,116,96,100,97,97,33,97,97,112,112,48,
- 49,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,37,32,49,49,33,52,52,116,36,101,37,49,49,33,37,49,49,49,
- 37,4,228,228,117,100,100,48,116,36,116,100,100,32,36,53,33,37,116,
- 100,100,101,116,48,33,49,100,116,100,101,100,100,48,36,113,96,48,113,
- 49,97,100,96,101,96,100,100,113,96,97,97,113,33,53,112,52,112,48,49,
- 49,97,37,49,48,49,113,49,97,52,49,116,96,52,37,112,33,100,100,48,113,
- 53,116,49,53,113,36,112,36,48,117,36,52,33,37,37,49,49,49,37,53,33,
- 49,49,101,33,37,101,33,36,113,112,96,113,96,100,100,100,100,101,96,
- 48,49,53,36,49,48,117,100,112,112,96,37,48,49,49,113,96,96,100,100,
- 116,37,96,37,112,52,37,112,117,36,52,100,100,100,37,48,32,116,96,100,
- 100,97,97,100,100,36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,
- 97,117,112,96,37,37,100,52,112,49,49,49,33,53,113,49,49,33,52,52,52,
- 112,117,97,33,37,37,37,49,49,49,49,53,33,49,49,37,37,101,33,37,36,
- 37,97,97,97,97,100,100,100,113,53,97,100,36,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,100,37,49,48,49,53,48,113,112,112,96,112,48,52,
- 52,100,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,
- 37,49,49,49,101,33,96,100,100,32,37,37,53,97,113,97,100,100,96,97,
- 100,100,100,33,9,51,112,48,48,33,49,49,37,37,37,37,37,116,52,97,97,
- 100,97,100,100,36,117,37,97,100,100,97,101,36,97,33,53,52,48,113,96,
- 101,100,100,36,37,33,48,49,113,112,112,112,96,117,37,37,52,52,52,100,
- 100,36,52,49,32,100,100,52,52,52,112,33,48,52,36,37,37,37,49,49,49,
- 37,32,53,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,101,33,
- 96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,37,49,100,
- 100,36,112,112,112,112,96,112,48,52,52,52,100,100,100,52,49,117,100,
- 100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,117,4,228,164,33,96,
- 100,48,113,36,116,100,100,32,36,53,33,37,116,100,100,101,36,48,33,
- 49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,96,101,96,
- 100,100,113,96,33,48,52,36,53,112,52,112,48,49,49,101,37,37,100,100,
- 36,49,97,52,49,32,97,52,37,112,33,100,100,48,49,36,48,100,48,113,48,
- 112,36,48,117,36,52,33,37,37,49,49,49,101,37,32,49,49,101,33,37,101,
- 33,36,113,112,96,113,96,100,100,100,32,100,96,48,49,53,100,36,48,117,
- 100,112,112,96,37,48,49,49,113,97,117,48,49,97,37,48,113,112,52,37,
- 112,117,36,52,100,100,100,101,49,36,100,96,100,100,97,97,97,97,33,
- 53,101,112,48,113,48,49,49,97,117,97,48,49,113,112,49,97,112,96,37,
- 37,100,52,112,49,49,49,97,97,32,100,100,52,52,52,52,112,117,97,33,
- 37,37,37,49,49,33,101,36,32,49,49,37,37,37,116,32,36,37,97,97,97,97,
- 100,100,100,33,96,101,100,36,101,100,96,97,33,53,101,112,112,112,48,
- 49,49,100,113,32,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,
- 100,116,97,36,49,49,33,52,52,52,52,48,52,36,37,37,37,49,49,49,101,
- 100,53,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,53,9,
- 51,53,117,117,33,49,49,37,37,37,49,49,116,116,96,100,100,97,100,100,
- 36,53,100,96,100,100,97,37,117,97,33,53,52,48,113,96,101,100,100,36,
- 112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,100,37,
- 116,36,100,100,52,52,52,97,52,48,116,37,37,37,37,49,49,49,37,53,33,
- 49,49,52,49,33,37,37,116,52,97,97,100,97,100,100,48,53,100,96,100,
- 116,96,97,97,97,33,97,97,112,112,112,48,49,49,49,113,49,48,49,113,
- 112,112,112,112,112,101,48,52,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,116,36,48,112,49,49,33,37,49,49,49,101,81,177,177,97,36,100,
- 48,37,37,116,100,100,32,36,53,33,37,116,100,100,101,52,48,116,100,
- 101,116,100,101,100,100,48,36,113,96,48,113,49,97,100,112,53,100,100,
- 100,113,96,33,53,112,33,101,112,52,112,48,49,49,33,36,49,48,49,113,
- 49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,100,48,113,116,
- 112,36,48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,37,113,
- 33,36,113,112,96,113,96,100,100,100,36,32,100,48,49,53,100,116,48,
- 117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,37,112,52,
- 37,112,117,36,52,100,100,100,117,101,117,117,96,100,100,97,97,97,100,
- 36,53,53,48,49,113,48,49,49,97,37,49,48,49,113,112,97,117,112,96,37,
- 37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,
- 37,37,37,49,49,113,33,53,33,49,49,37,37,101,48,37,36,117,97,97,97,
- 97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,48,113,
- 48,49,49,100,37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,100,116,36,100,100,52,52,52,52,52,116,49,36,37,37,37,49,49,
- 49,37,53,33,49,49,37,37,37,53,33,36,116,100,100,96,97,100,100,100,
- 113,92,102,101,48,37,117,100,100,32,37,37,37,37,116,116,96,97,100,
- 97,100,100,36,33,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,
- 100,100,36,117,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,
- 100,36,49,52,48,49,49,33,52,52,49,52,48,52,36,37,37,37,49,49,49,117,
- 53,33,49,49,52,49,33,37,37,116,52,97,97,97,100,100,100,48,53,100,96,
- 100,116,96,97,97,97,33,33,52,112,112,112,48,49,49,113,37,116,101,100,
- 36,112,112,112,112,112,101,48,52,52,52,100,100,100,52,37,49,100,100,
- 52,52,52,116,36,96,112,97,97,33,37,49,49,49,53,81,177,241,113,49,49,
- 53,113,36,116,100,100,32,36,53,33,37,116,100,100,101,36,48,33,49,100,
- 116,32,100,100,100,48,36,113,96,101,36,100,116,100,32,113,96,100,100,
- 113,96,33,48,100,33,117,113,52,112,48,49,49,53,112,49,48,49,113,49,
- 97,52,49,113,96,52,37,112,33,100,100,48,49,96,36,100,48,113,48,112,
- 36,48,117,36,52,33,37,37,49,49,49,117,100,101,100,100,96,33,37,101,
- 33,36,113,112,96,113,96,100,100,100,32,100,96,48,49,53,100,36,116,
- 32,100,112,112,96,37,48,49,49,113,52,112,48,49,97,37,96,37,112,52,
- 37,112,117,36,52,100,100,100,101,100,97,97,53,49,49,96,97,97,97,33,
- 53,53,112,48,113,48,49,49,97,32,49,48,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,97,117,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,36,37,100,100,100,32,37,101,36,37,36,37,97,97,97,97,
- 100,100,100,117,101,96,100,36,101,100,96,97,33,53,101,112,112,48,49,
- 49,49,100,37,49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,
- 100,116,33,117,49,49,33,52,52,52,52,116,49,36,37,37,37,49,49,49,101,
- 97,36,49,49,37,37,37,53,33,48,116,112,112,96,97,100,100,100,101,92,
- 102,100,32,53,33,49,49,37,37,37,49,49,116,52,97,100,100,97,100,100,
- 36,101,96,97,100,100,97,101,36,100,33,48,52,48,113,96,101,100,100,
- 36,36,36,100,100,36,112,112,112,32,116,37,37,52,52,52,100,100,36,36,
- 97,36,100,100,52,52,52,32,33,48,116,37,37,37,37,49,49,49,101,37,97,
- 100,100,53,49,33,37,37,116,52,97,97,97,97,100,100,48,101,96,100,100,
- 116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,116,36,101,37,116,36,117,32,49,49,49,37,81,176,177,97,36,100,
- 48,33,36,116,100,100,32,36,53,33,37,116,100,100,101,52,53,49,49,100,
- 116,100,101,100,100,48,36,113,96,48,113,49,97,100,96,101,96,100,100,
- 113,96,33,53,112,33,101,112,52,112,48,49,49,53,32,96,48,49,113,49,
- 97,52,49,37,97,52,37,112,33,100,100,48,113,52,33,49,53,113,116,112,
- 36,48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,37,37,116,
- 37,49,113,96,33,53,49,49,49,113,101,96,48,49,53,100,36,96,117,100,
- 112,112,96,37,48,49,49,113,112,49,48,49,97,37,32,36,112,52,37,112,
- 117,36,100,100,100,100,37,100,97,101,96,100,100,97,97,97,100,36,53,
- 101,48,49,113,48,49,49,97,49,112,48,49,113,112,49,33,113,32,36,37,
- 100,52,112,49,49,49,33,33,33,49,49,33,52,52,52,32,117,97,33,37,37,
- 37,49,49,33,97,48,33,49,49,37,37,37,96,32,36,117,97,97,97,97,100,100,
- 100,113,97,48,49,113,101,100,96,97,33,53,101,112,112,112,48,49,49,
- 100,49,48,49,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,37,53,97,113,33,53,97,53,96,100,100,100,97,28,102,97,
- 112,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,33,
- 100,96,100,100,97,101,36,97,36,53,52,48,113,96,101,100,100,36,33,112,
- 101,100,36,112,112,112,96,117,37,37,52,52,52,100,100,36,97,36,48,100,
- 100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,116,96,101,96,100,116,96,97,97,
- 97,33,33,52,112,112,112,48,49,49,113,117,49,48,49,113,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,100,116,36,100,100,52,52,52,116,
- 36,101,37,101,100,116,32,49,49,49,117,81,176,241,96,36,100,48,113,
- 36,116,100,100,32,36,117,116,32,116,100,100,37,117,37,32,49,100,116,
- 32,112,100,100,48,36,113,96,101,36,100,116,100,52,112,53,49,49,112,
- 96,33,53,100,33,53,112,52,112,48,49,49,53,36,36,100,100,36,49,97,52,
- 49,37,97,52,37,112,33,100,100,48,113,112,101,100,48,113,36,32,36,48,
- 117,48,52,33,37,49,49,49,49,37,53,33,49,49,101,33,37,37,37,36,113,
- 112,96,113,96,100,100,100,32,100,96,48,49,53,100,36,96,117,100,112,
- 112,96,37,48,49,49,113,33,117,49,49,97,37,96,37,48,53,37,112,117,48,
- 52,100,100,100,101,101,117,101,96,100,100,97,97,97,97,33,53,53,112,
- 48,113,48,49,49,97,32,49,48,49,113,112,49,97,48,97,37,37,100,52,112,
- 49,49,49,97,32,116,49,49,33,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,48,33,36,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,97,
- 101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,53,112,
- 49,48,49,53,112,112,112,112,96,32,37,52,52,52,100,100,100,116,117,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,49,53,33,49,49,
- 37,37,37,53,97,113,97,49,49,53,96,100,100,100,117,28,102,32,37,32,
- 53,49,49,37,37,37,37,49,116,52,97,97,100,97,100,100,36,117,32,100,
- 100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,
- 113,112,112,112,96,117,37,37,52,52,52,100,100,36,37,116,36,100,100,
- 52,52,52,37,52,48,52,36,37,37,37,49,49,49,113,36,49,49,49,52,101,116,
- 32,49,116,52,97,97,97,97,100,100,48,37,97,100,100,116,96,97,97,97,
- 33,97,97,112,112,112,48,49,49,113,116,48,100,100,36,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,112,117,49,49,33,52,52,116,36,101,
- 37,49,49,33,37,49,49,49,101,80,176,177,52,32,100,48,113,117,97,100,
- 100,32,36,101,33,37,116,100,100,48,33,53,33,49,100,116,32,53,49,49,
- 37,36,113,96,101,36,100,116,100,96,101,96,100,100,113,96,33,53,100,
- 33,97,37,52,112,48,49,49,53,112,49,48,49,113,49,97,52,49,113,96,52,
- 37,112,33,100,100,48,113,97,36,100,48,113,36,52,37,48,117,36,52,33,
- 37,37,49,49,49,101,100,33,49,49,101,33,37,101,53,36,113,112,96,113,
- 96,100,100,100,52,53,53,53,49,53,100,36,116,32,100,112,112,96,37,48,
- 49,49,113,112,49,48,49,97,37,96,37,112,52,37,112,117,116,52,100,100,
- 100,37,97,33,96,101,100,100,97,97,97,97,36,53,101,112,48,113,48,49,
- 49,97,53,32,49,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,
- 116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,33,53,33,
- 49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,52,97,100,100,
- 36,101,49,53,96,36,53,101,112,112,112,48,49,49,100,97,48,49,49,53,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,53,36,49,49,33,52,
- 52,52,52,48,52,36,37,37,37,49,49,49,37,116,117,100,100,32,37,37,53,
- 97,113,97,100,100,96,97,100,100,100,49,28,102,117,112,53,33,49,49,
- 37,37,37,37,37,116,116,96,97,100,97,100,100,36,49,101,96,100,100,97,
- 101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,
- 112,112,96,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,112,
- 33,48,52,36,37,37,37,49,49,49,101,53,49,49,49,52,116,116,32,49,116,
- 52,97,97,97,97,100,100,48,53,100,96,100,116,96,97,97,97,33,33,52,112,
- 112,112,48,49,49,113,117,49,48,49,113,112,112,112,112,96,32,37,52,
- 52,52,100,100,100,52,37,117,100,100,52,52,52,116,36,101,37,49,49,33,
- 37,49,49,49,53,80,176,241,96,36,100,48,113,36,116,100,100,32,36,101,
- 33,37,116,100,100,101,49,112,53,49,100,116,32,100,100,100,48,36,113,
- 96,101,36,100,116,100,116,101,96,100,100,113,96,33,53,100,33,53,112,
- 52,112,48,49,49,53,32,101,101,100,36,49,97,52,49,37,97,52,37,112,33,
- 100,100,48,49,96,36,100,48,113,36,112,36,48,117,36,52,36,37,49,49,
- 49,49,101,48,96,100,100,96,33,37,101,36,36,113,117,96,49,97,100,100,
- 100,96,101,101,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,
- 96,32,48,49,97,37,96,37,48,53,53,117,117,36,52,100,100,100,101,96,
- 117,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,100,
- 49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,
- 100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,97,116,48,33,49,49,
- 37,37,37,116,32,36,37,97,97,97,97,100,100,100,113,101,100,100,36,37,
- 53,53,96,36,53,101,112,112,112,48,49,49,100,37,49,48,49,53,112,112,
- 112,112,96,32,37,52,52,52,100,100,100,116,117,36,100,100,52,52,52,
- 52,52,48,96,33,37,37,37,49,49,49,101,97,53,49,49,37,37,37,53,97,113,
- 97,100,100,96,97,100,100,100,37,28,102,52,96,48,49,49,49,37,37,37,
- 37,37,116,52,97,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,
- 33,53,116,100,36,96,101,100,100,36,36,37,49,49,113,112,112,112,96,
- 117,37,37,52,52,52,100,100,36,113,117,37,49,49,33,52,52,37,52,48,52,
- 36,37,37,37,49,49,49,37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,
- 97,100,100,52,113,48,97,100,116,96,97,97,97,33,97,97,112,112,112,48,
- 49,49,113,116,36,100,100,36,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,116,36,101,37,97,49,33,37,49,49,
- 49,37,0,176,177,37,33,100,48,113,117,97,100,100,32,36,117,116,32,116,
- 100,100,48,33,53,33,49,100,116,32,53,49,49,37,36,113,96,101,36,100,
- 116,100,48,117,100,100,100,113,96,33,53,53,36,53,112,52,48,49,49,49,
- 53,112,49,48,49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,
- 32,36,49,53,113,36,52,37,48,117,36,52,53,37,37,49,49,49,37,53,33,49,
- 49,101,33,37,37,116,37,49,113,96,33,53,49,49,49,49,100,96,48,49,53,
- 100,36,36,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,
- 37,112,52,37,112,117,36,52,100,100,100,37,32,48,100,100,100,100,97,
- 97,97,97,33,53,101,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,
- 112,96,37,53,49,33,112,49,49,49,33,97,97,100,100,52,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,116,117,97,100,100,32,37,101,33,37,36,37,97,
- 97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,
- 112,112,48,49,49,101,52,100,48,49,53,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,53,33,49,49,33,52,52,52,52,48,52,36,37,37,37,
- 49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,112,100,96,97,100,100,
- 100,33,8,102,49,48,37,117,100,100,32,37,37,37,37,116,52,97,97,100,
- 97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,
- 100,100,36,113,96,100,100,36,112,112,112,112,96,37,37,52,52,52,100,
- 100,36,113,97,36,100,100,52,52,52,49,52,48,52,36,37,37,37,49,49,49,
- 53,97,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,100,36,36,
- 49,49,97,96,97,97,97,33,97,97,112,112,112,48,49,49,113,117,49,48,49,
- 113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,32,33,100,100,
- 52,52,52,116,36,101,37,49,101,116,32,49,49,49,117,0,176,241,97,116,
- 49,53,113,116,116,100,100,32,36,53,33,37,116,100,100,101,36,33,36,
- 49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,116,101,
- 96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,49,48,
- 49,113,49,97,52,49,37,97,52,37,112,33,100,100,48,49,96,36,100,48,113,
- 36,112,48,48,117,36,52,33,37,37,49,49,49,53,52,53,49,49,101,33,37,
- 101,33,36,113,112,96,113,96,100,100,100,52,37,100,48,49,53,100,36,
- 48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,37,112,
- 100,37,112,117,117,33,100,100,100,101,33,100,97,53,49,49,96,97,97,
- 97,33,53,101,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,37,100,52,112,49,49,49,97,52,48,49,49,33,52,52,52,52,112,97,
- 33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,36,37,36,37,97,97,97,
- 97,100,100,100,101,112,96,100,36,101,100,96,97,33,53,101,112,112,112,
- 48,49,49,49,33,97,100,100,48,112,112,112,112,96,112,48,52,52,52,100,
- 100,100,116,117,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,
- 49,37,96,32,49,49,37,37,37,53,97,113,97,100,49,53,96,100,100,100,53,
- 8,102,112,37,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,
- 36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,
- 112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,
- 48,97,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,53,33,49,
- 49,52,49,36,37,37,116,52,97,97,97,97,100,100,48,53,100,96,100,116,
- 96,97,97,100,33,97,97,112,112,112,48,49,49,113,32,36,48,49,113,112,
- 48,113,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,
- 52,116,36,101,37,49,52,33,37,49,49,49,101,85,176,177,97,36,100,48,
- 113,117,97,100,100,32,36,37,116,32,116,100,100,112,49,53,33,49,100,
- 116,32,112,100,100,48,36,113,96,101,36,100,116,100,32,113,96,100,100,
- 113,96,33,53,53,36,53,112,52,112,48,49,49,53,52,97,48,49,113,49,97,
- 52,49,113,96,52,37,112,33,100,100,48,113,32,33,49,53,113,36,32,116,
- 48,117,36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,37,101,36,36,
- 113,117,96,52,97,100,100,100,100,101,96,48,49,53,100,36,48,117,100,
- 112,112,112,112,48,49,49,113,96,112,101,100,116,37,96,37,112,52,37,
- 112,117,36,52,100,100,100,37,117,97,101,96,100,100,97,97,97,97,33,
- 53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,
- 100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,
- 37,37,49,49,97,52,100,48,49,49,37,37,101,33,37,36,37,97,97,97,97,100,
- 100,100,97,101,96,100,36,101,36,97,97,33,53,101,112,112,112,48,49,
- 49,100,37,49,48,49,53,112,112,48,113,96,112,48,52,52,52,100,100,100,
- 52,32,33,100,100,52,52,100,52,52,48,52,36,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,37,53,97,113,97,36,101,96,97,100,100,100,113,29,102,
- 37,32,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,
- 100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,
- 49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,
- 100,100,52,52,52,117,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 52,49,33,37,37,116,52,97,97,97,97,100,100,48,49,36,49,49,97,96,97,
- 97,97,33,97,100,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,96,112,48,52,52,52,100,100,100,52,49,97,100,100,52,52,52,116,
- 36,101,37,49,52,36,37,49,49,49,53,85,176,241,96,36,100,48,113,48,116,
- 100,100,32,36,53,33,37,116,100,100,101,32,49,48,49,100,116,32,100,
- 100,100,48,36,116,96,53,116,49,97,100,96,101,96,100,100,113,96,33,
- 53,100,101,48,112,52,112,48,49,49,53,112,49,48,49,113,49,97,52,49,
- 37,97,52,37,112,33,100,100,48,49,96,36,100,48,113,36,112,48,48,117,
- 36,52,33,37,37,49,49,49,37,53,33,49,49,101,33,37,101,33,36,113,112,
- 96,113,96,100,100,100,100,101,96,48,49,53,100,36,48,117,100,112,112,
- 112,112,48,49,49,113,113,113,48,49,97,37,96,37,112,96,48,112,117,36,
- 52,100,100,100,101,116,97,101,96,100,100,97,97,97,97,33,53,53,112,
- 48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,116,48,33,49,49,37,37,101,53,37,36,37,97,97,97,97,100,100,100,97,
- 101,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,100,36,
- 97,100,100,48,112,112,112,112,96,48,49,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,101,100,48,49,
- 49,37,37,37,53,97,113,97,36,37,97,97,100,100,100,101,29,102,36,36,
- 53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,
- 96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,
- 49,113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,36,112,49,
- 49,33,52,52,37,52,48,52,36,37,37,37,49,49,49,101,97,33,49,49,52,49,
- 33,37,37,116,52,97,97,97,97,100,100,96,53,100,96,100,116,96,97,97,
- 97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,116,
- 36,101,37,49,117,53,37,49,49,49,37,69,176,177,96,37,100,48,113,116,
- 116,100,100,32,36,53,33,37,116,100,100,48,33,53,33,49,100,116,32,100,
- 100,100,48,36,113,96,37,49,100,116,100,48,116,101,100,100,113,96,33,
- 53,100,33,53,112,52,112,48,49,49,53,100,37,100,100,36,49,97,52,49,
- 113,96,52,37,112,33,100,100,48,113,101,48,49,53,113,36,112,116,48,
- 117,36,52,33,37,37,49,49,49,101,112,48,49,49,101,33,37,101,53,36,113,
- 112,96,113,96,100,100,100,116,116,97,48,49,53,100,36,48,117,100,112,
- 112,32,36,48,49,49,113,112,49,48,49,97,37,96,37,112,52,37,112,33,37,
- 52,100,100,100,37,52,97,101,96,100,100,97,97,97,97,33,53,53,112,48,
- 113,48,49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,
- 49,49,49,33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,
- 97,52,33,116,100,100,32,37,101,33,37,36,37,97,97,97,97,100,100,100,
- 113,112,96,100,36,101,100,96,97,33,53,101,112,112,112,48,49,49,112,
- 37,49,48,49,53,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,53,97,113,97,100,117,101,97,100,100,100,97,25,102,33,36,53,
- 33,49,49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,
- 100,100,97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,
- 113,112,112,112,96,117,37,37,52,52,52,100,100,36,113,52,32,100,100,
- 52,52,52,37,52,48,52,36,37,37,37,49,49,49,37,36,32,49,49,52,49,53,
- 37,37,116,52,97,97,97,97,100,100,48,33,100,96,100,116,96,97,97,97,
- 33,97,100,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,112,49,49,49,33,52,52,116,36,101,
- 37,49,49,53,37,49,49,49,117,69,176,241,117,48,49,53,113,36,116,100,
- 100,32,36,53,33,37,37,49,49,100,116,101,33,49,100,116,32,100,100,100,
- 48,36,116,96,113,53,100,116,100,112,52,53,49,49,112,96,33,53,100,33,
- 53,112,52,112,48,49,49,53,33,116,100,100,36,49,97,52,49,113,96,52,
- 37,112,33,100,100,48,49,97,116,49,53,113,36,112,36,48,117,36,101,33,
- 37,37,49,49,49,53,36,116,100,100,96,33,37,101,33,36,113,96,97,113,
- 96,100,100,100,100,101,96,48,49,53,100,36,48,117,100,112,112,96,37,
- 48,49,49,113,33,113,48,49,97,37,96,37,112,52,37,112,117,48,52,100,
- 100,100,101,53,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,
- 49,49,97,37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,
- 33,116,36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,52,37,
- 32,49,49,37,37,101,33,37,36,37,97,97,97,97,100,100,100,33,33,96,100,
- 36,101,100,101,97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,
- 112,112,112,112,96,48,49,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,37,116,100,100,100,32,37,37,
- 53,97,113,97,100,100,101,97,100,100,100,117,25,102,96,36,53,33,49,
- 49,37,37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,
- 97,101,36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,
- 112,112,96,117,37,37,52,52,52,100,100,36,113,97,36,100,100,52,52,52,
- 37,100,48,52,36,37,49,37,49,49,49,37,53,33,49,49,52,49,33,37,37,96,
- 52,97,97,97,97,100,100,48,101,49,48,49,97,96,97,97,97,33,97,97,112,
- 112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,36,
- 37,49,49,49,101,68,176,177,97,36,100,48,113,36,116,100,100,32,36,53,
- 33,37,96,100,100,101,116,48,33,49,100,116,32,100,100,100,48,36,113,
- 96,117,117,100,116,100,96,101,96,100,100,113,96,33,53,100,33,53,48,
- 53,112,48,49,49,53,112,49,48,49,49,100,52,52,49,113,96,100,37,112,
- 33,100,100,48,113,97,36,100,48,113,36,112,36,52,33,36,52,33,37,37,
- 49,49,49,37,53,33,49,49,101,33,37,101,33,36,113,112,96,113,96,100,
- 100,100,100,101,96,48,49,53,100,36,48,117,100,112,112,96,37,48,49,
- 49,113,112,49,48,49,97,37,96,37,112,52,37,52,112,116,52,100,100,100,
- 37,49,97,101,96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,
- 37,49,48,49,113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,
- 36,100,100,52,52,52,52,112,117,97,33,37,37,37,49,49,97,116,48,33,49,
- 49,37,37,101,33,49,36,37,97,97,100,97,100,100,100,97,101,96,100,36,
- 101,100,96,97,33,48,101,112,112,112,48,49,49,100,113,36,100,100,48,
- 112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,
- 97,113,97,100,36,97,97,100,100,100,49,25,102,53,36,53,33,49,49,37,
- 37,37,37,37,116,116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,
- 36,97,33,53,52,48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,
- 96,117,37,37,52,52,52,100,100,36,113,101,48,49,49,33,52,52,37,52,48,
- 52,36,37,37,37,49,49,49,117,116,32,49,49,52,49,33,37,37,116,52,97,
- 97,97,97,100,100,48,33,100,96,100,116,96,97,97,97,33,97,97,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,48,52,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,116,36,101,37,49,49,33,37,
- 49,49,49,97,65,176,177,53,36,49,53,113,36,116,100,100,32,36,53,33,
- 37,96,100,100,101,116,48,33,49,100,116,32,100,100,49,37,36,113,96,
- 97,37,100,116,100,52,36,96,100,100,113,96,33,53,100,33,53,112,96,37,
- 48,49,49,53,33,52,48,49,113,49,97,52,49,113,96,52,37,112,33,100,100,
- 48,49,96,36,100,48,113,36,112,36,48,117,36,52,36,37,37,49,49,49,101,
- 33,37,49,49,101,33,37,101,33,36,113,112,96,113,96,100,100,100,100,
- 101,96,48,49,53,100,36,48,117,100,112,112,96,37,48,49,49,113,112,49,
- 48,49,97,37,96,37,112,52,37,112,117,36,52,100,100,100,101,48,97,101,
- 96,100,100,97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,
- 113,112,49,97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,
- 52,52,52,112,117,97,33,37,37,37,49,49,97,116,49,100,100,100,32,37,
- 101,33,37,36,37,97,97,97,97,100,100,100,53,53,96,100,36,101,100,96,
- 97,33,53,101,112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,
- 96,112,48,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 52,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,
- 96,97,100,100,100,112,24,102,116,33,53,33,49,49,37,37,37,37,37,116,
- 116,96,97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,
- 48,113,96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,
- 52,52,52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,48,37,37,
- 37,49,49,49,37,53,33,49,49,52,33,116,32,37,116,52,97,97,97,97,100,
- 100,48,37,36,53,49,97,96,97,97,97,36,97,97,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,
- 49,49,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,37,20,176,
- 177,97,36,100,48,113,36,116,100,100,32,36,53,33,37,37,49,49,100,52,
- 117,48,49,100,116,32,100,100,100,48,36,113,96,101,101,100,116,100,
- 96,101,96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,
- 49,48,49,113,49,97,52,49,33,96,52,37,112,33,100,100,48,113,101,116,
- 49,53,113,36,112,36,48,117,36,52,53,37,37,49,49,49,37,53,33,49,49,
- 101,33,37,101,33,36,113,48,97,113,96,100,100,100,100,101,96,48,49,
- 53,100,36,48,117,100,112,112,96,37,48,49,49,113,100,113,49,49,97,37,
- 96,37,112,52,37,32,117,36,52,100,100,100,37,112,96,101,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,
- 37,100,97,97,97,100,100,100,97,101,96,100,36,101,32,53,96,33,53,101,
- 112,112,112,48,49,49,100,33,97,101,100,48,112,112,112,48,97,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,101,100,36,49,49,37,37,37,53,97,113,97,100,100,96,97,
- 100,100,100,33,13,102,113,33,53,33,49,49,37,37,37,37,37,116,116,96,
- 97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,
- 96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,
- 52,100,100,36,113,32,32,100,100,52,52,52,37,52,48,52,36,37,37,37,49,
- 49,49,117,52,53,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,
- 33,100,96,100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,
- 49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,117,
- 100,100,100,52,52,52,116,36,37,36,49,49,33,37,49,49,49,117,20,176,
- 241,96,36,100,48,113,36,116,100,100,32,36,53,33,37,116,100,100,48,
- 49,117,48,49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,
- 116,101,96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,113,
- 100,101,100,36,49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,
- 100,48,113,36,112,36,48,117,36,52,33,49,37,49,49,49,49,53,33,49,49,
- 101,33,37,101,33,36,113,112,96,97,97,100,100,100,100,101,96,48,49,
- 53,100,36,48,117,100,112,112,96,37,48,49,49,113,116,32,48,49,97,37,
- 96,37,112,52,37,112,117,36,52,100,100,100,101,113,96,101,96,100,100,
- 97,97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,
- 97,112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,
- 112,117,97,33,37,37,37,49,49,97,52,32,32,49,49,37,37,101,33,37,36,
- 37,97,97,97,97,100,100,100,53,101,101,100,36,101,100,96,97,33,53,101,
- 112,112,112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,112,48,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,
- 37,37,49,49,49,101,53,49,49,49,37,37,37,53,97,33,97,100,100,96,97,
- 100,100,100,53,13,102,48,36,53,33,49,49,37,37,37,37,37,116,116,96,
- 97,100,97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,
- 96,101,100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,
- 52,100,100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,49,37,37,49,
- 49,49,37,53,33,49,49,52,49,53,37,37,116,52,97,97,97,97,100,100,48,
- 37,116,96,100,116,96,97,97,97,36,97,97,112,112,112,48,49,49,113,112,
- 49,48,49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,116,36,101,37,49,49,33,37,49,49,49,101,65,176,
- 177,37,37,49,53,113,36,116,100,100,32,36,53,33,37,116,100,100,37,100,
- 48,33,49,100,116,32,100,100,100,48,36,113,96,48,113,49,97,100,112,
- 49,48,49,49,112,96,33,53,100,33,53,112,100,112,48,49,49,53,112,49,
- 48,49,113,49,97,52,49,113,96,100,37,112,33,100,100,48,113,52,113,49,
- 53,113,36,112,36,48,117,36,52,33,37,37,49,49,49,101,53,37,49,49,101,
- 33,37,101,33,36,113,112,96,113,101,100,100,100,100,101,96,48,49,53,
- 100,36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,
- 37,112,52,37,112,37,36,52,100,100,100,37,37,97,101,96,100,100,97,97,
- 97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,97,100,
- 97,97,100,100,100,97,101,96,100,36,101,100,101,97,33,53,101,112,112,
- 112,48,49,49,100,33,53,48,49,53,112,112,112,48,97,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,100,
- 113,24,102,101,33,53,33,49,49,37,37,37,37,37,116,116,96,97,100,97,
- 100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,100,
- 100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,100,
- 36,113,36,49,100,100,52,52,52,37,52,48,100,36,37,37,37,49,49,49,37,
- 53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,33,100,96,
- 100,116,96,97,97,97,33,97,97,112,112,112,48,49,49,113,112,49,48,49,
- 113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,33,32,100,100,
- 52,52,52,116,36,101,37,49,49,33,37,49,49,49,53,65,176,177,97,36,100,
- 48,113,36,116,100,100,32,36,53,33,37,116,100,100,101,116,48,33,49,
- 100,116,32,100,100,100,48,36,113,96,113,36,100,116,100,100,113,96,
- 100,100,113,96,33,53,100,33,53,112,116,113,48,49,49,53,112,49,48,49,
- 113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,97,36,100,48,113,
- 36,112,36,48,117,36,52,33,49,37,49,49,49,49,53,33,49,49,101,33,37,
- 101,33,36,113,112,96,113,96,100,100,100,100,101,96,48,49,53,100,36,
- 48,117,100,112,112,96,37,48,49,49,113,113,33,100,100,116,37,96,37,
- 112,52,37,112,117,36,52,100,100,100,101,36,97,101,96,100,100,97,97,
- 97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,112,
- 96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,117,
- 97,33,37,37,37,49,49,97,52,97,36,49,49,37,37,101,33,37,36,49,97,97,
- 97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,112,
- 112,48,49,49,100,32,49,48,49,53,112,112,112,112,96,112,48,52,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,49,
- 49,49,101,32,32,49,49,37,37,37,53,97,113,97,100,100,96,97,100,100,
- 100,101,24,102,100,117,48,33,49,49,37,37,37,37,37,116,116,96,97,100,
- 97,100,100,36,53,100,96,100,100,97,101,36,97,33,53,52,48,113,96,101,
- 100,100,36,112,49,48,49,113,112,112,112,96,117,37,37,52,52,52,100,
- 100,36,113,97,36,100,100,52,52,52,37,52,48,52,36,37,37,37,49,49,49,
- 37,53,33,49,49,52,49,33,37,37,116,52,97,97,97,97,100,100,48,101,117,
- 96,100,116,96,97,97,97,36,97,97,112,112,112,48,49,49,113,112,49,48,
- 49,113,112,112,112,112,96,112,48,52,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,116,36,101,37,49,49,33,49,49,49,49,37,65,229,228,116,
- 36,100,48,113,36,116,100,100,32,36,53,33,37,116,100,100,101,52,112,
- 48,49,100,116,32,100,100,100,48,36,113,96,101,36,100,116,100,96,101,
- 96,100,100,113,96,33,53,100,33,53,112,52,112,48,49,49,53,112,49,48,
- 49,113,49,97,52,49,113,96,52,37,112,33,100,100,48,113,112,33,49,53,
- 113,36,112,36,48,117,36,52,33,37,37,49,49,49,101,112,53,49,49,101,
- 33,37,101,33,36,113,112,96,113,101,100,100,100,100,101,96,48,49,53,
- 100,36,48,117,100,112,112,96,37,48,49,49,113,112,49,48,49,97,37,96,
- 37,112,52,37,112,117,36,52,100,100,100,112,113,53,100,96,100,100,97,
- 97,97,97,33,53,53,112,48,113,48,49,49,97,37,49,48,49,113,112,49,97,
- 112,96,37,37,100,52,112,49,49,49,33,116,36,100,100,52,52,52,52,112,
- 117,97,33,37,37,37,49,49,97,116,48,33,49,49,37,37,101,33,37,36,37,
- 97,97,97,97,100,100,100,97,101,96,100,36,101,100,96,97,33,53,101,112,
- 112,112,48,49,49,100,113,53,48,49,53,112,112,112,48,97,112,48,52,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,52,36,37,37,37,
- 49,49,49,37,53,33,49,49,37,37,37,53,97,113,97,100,100,96,100,100,100,
- 100,97,88,51,96,117,100,100,100,100,32,37,37,37,37,49,49,96,97,100,
- 97,32,49,49,49,49,49,49,49,96,49,117,97,97,100,36,48,113,112,48,96,
- 100,100,100,100,100,100,36,112,112,112,112,48,49,33,52,52,52,36,48,
- 49,49,49,49,49,49,33,52,52,49,52,100,100,32,37,37,37,33,100,100,100,
- 100,100,100,100,96,100,36,37,37,49,49,96,97,97,97,32,49,49,49,49,49,
- 49,49,96,97,97,97,97,100,36,112,112,112,48,96,100,100,100,100,100,
- 100,36,112,112,112,112,112,48,33,52,52,52,36,48,49,49,49,49,49,49,
- 33,52,52,52,49,97,100,96,100,36,37,33,100,100,52,84,229,228,100,100,
- 100,100,52,49,52,113,97,48,49,101,36,37,37,33,100,100,100,100,100,
- 100,100,32,37,101,116,117,49,113,100,48,48,117,32,49,49,49,49,49,49,
- 49,48,97,97,97,49,100,36,112,100,112,48,96,100,100,100,100,100,100,
- 36,100,37,33,37,97,100,52,49,52,52,36,48,49,49,49,49,49,49,33,49,52,
- 49,52,97,100,96,36,37,37,33,100,100,100,100,100,100,100,96,36,37,101,
- 36,49,49,48,97,49,97,100,100,100,100,100,100,100,100,97,49,117,52,
- 97,100,36,112,112,112,48,96,100,100,100,100,100,100,36,112,112,112,
- 112,36,49,33,52,49,52,36,48,49,113,112,53,49,49,49,49,96,97,97,97,
- 97,100,36,112,48,113,48,96,100,100,100,100,100,100,36,112,100,117,
- 112,48,49,33,100,52,52,36,48,49,49,49,49,49,49,33,52,52,52,52,100,
- 100,32,37,37,37,33,100,100,100,100,100,100,100,32,37,101,36,37,49,
- 49,96,97,97,97,32,49,49,49,49,49,49,49,48,49,97,97,97,100,36,112,112,
- 112,48,96,100,100,100,100,100,100,36,112,112,112,112,48,49,33,52,52,
- 52,36,48,49,49,49,49,49,49,33,52,52,52,52,52,100,32,37,37,37,33,100,
- 100,100,100,100,100,100,32,37,37,101,100,48,49,48,49,97,97,32,49,49,
- 37,93,51,37,116,100,100,100,100,32,49,49,49,49,37,49,49,49,49,116,
- 32,49,49,49,49,49,49,49,96,117,100,100,100,33,48,113,48,32,48,96,100,
- 100,100,100,100,100,36,117,117,117,53,113,48,49,97,117,37,96,101,100,
- 100,100,100,100,100,116,53,52,100,100,100,100,100,100,100,32,33,100,
- 100,100,100,100,100,100,32,49,49,37,49,37,49,96,97,117,32,96,100,100,
- 100,100,100,100,100,97,100,100,100,100,97,36,53,32,112,112,48,49,49,
- 49,49,49,49,113,48,49,49,96,33,48,113,112,112,32,116,101,100,100,100,
- 100,100,100,36,112,112,32,116,101,100,112,117,117,49,33,100,100,36,
- 64,229,228,100,100,100,100,52,100,100,52,100,52,32,49,49,49,49,49,
- 49,49,49,49,49,49,49,117,49,49,49,49,37,96,100,100,100,117,100,100,
- 100,100,100,100,100,100,100,117,97,100,32,113,48,49,113,53,49,49,49,
- 49,49,49,49,49,49,49,49,113,48,113,48,97,101,100,100,100,100,100,100,
- 100,100,100,100,52,100,100,100,100,52,32,49,49,37,49,37,49,49,49,49,
- 49,49,49,49,117,33,32,37,49,49,96,100,100,97,100,100,100,100,100,100,
- 100,100,97,100,117,100,100,36,48,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,113,48,113,48,97,101,100,100,100,100,100,100,33,53,49,49,
- 49,49,96,100,100,100,100,97,100,100,100,36,53,96,100,100,100,100,100,
- 100,36,112,53,49,49,113,32,100,52,36,32,36,48,49,49,49,49,49,49,97,
- 117,117,117,101,52,100,100,112,117,33,112,49,49,49,49,49,49,49,117,
- 37,37,49,49,49,49,49,49,49,96,32,49,49,49,49,49,49,49,96,100,100,97,
- 100,97,36,112,112,53,32,48,49,49,49,49,49,49,113,48,49,49,49,113,48,
- 97,37,32,52,52,100,100,100,100,100,100,100,52,100,100,36,112,32,100,
- 52,52,52,32,117,49,49,49,49,49,49,49,33,52,52,32,117,49,49,116,117,
- 117,100,32,49,49,33,88,51,116,117,100,100,100,100,100,112,117,117,
- 117,49,49,116,117,117,100,97,100,100,100,100,100,100,36,48,49,33,117,
- 117,100,36,117,53,113,53,49,49,49,49,49,49,49,49,49,49,49,113,53,49,
- 97,101,100,100,100,100,100,100,100,100,100,100,100,52,52,100,113,101,
- 100,112,117,117,49,49,49,49,49,49,49,49,49,49,113,116,49,113,48,49,
- 49,49,33,100,100,100,100,100,100,100,100,100,100,117,117,117,117,100,
- 100,100,36,112,112,48,49,49,49,49,49,49,113,112,117,53,49,49,49,49,
- 49,49,97,101,100,100,100,100,100,100,100,100,100,100,32,49,49,49,49,
- 49,49,117,49,49,49,97,85,229,228,100,100,100,100,100,116,117,117,117,
- 101,100,112,117,117,117,117,49,49,49,49,49,49,49,117,117,117,117,117,
- 49,49,33,117,117,100,117,100,100,100,100,100,100,100,117,100,100,117,
- 97,100,36,117,53,113,117,53,49,49,49,49,49,49,113,117,117,117,53,37,
- 49,33,100,113,117,117,101,100,100,100,100,100,100,100,116,117,117,
- 117,101,100,112,117,49,117,49,49,49,49,49,49,49,49,117,49,49,117,49,
- 49,49,49,33,117,100,117,100,100,100,100,100,100,100,117,117,100,117,
- 117,100,36,117,117,117,117,53,49,49,49,49,49,49,49,101,53,101,112,
- 53,49,49,49,112,117,101,97,100,36,117,53,49,49,49,49,49,116,117,117,
- 117,100,36,117,117,53,113,48,49,49,49,49,49,49,33,100,100,96,117,53,
- 49,97,117,101,116,101,100,100,100,100,100,100,100,100,100,100,100,
- 116,101,100,112,49,49,49,49,49,49,49,49,49,49,49,49,37,37,113,116,
- 49,49,116,117,117,100,100,100,100,100,100,100,100,100,100,52,117,100,
- 52,100,100,100,100,32,49,49,49,49,49,49,49,49,49,113,117,117,117,53,
- 49,49,49,33,52,52,100,100,100,100,100,100,100,52,116,117,101,100,100,
- 100,100,100,100,112,49,49,49,49,49,49,49,49,49,49,49,96,100,100,100,
- 100,100,100,117,100,100,100,112,93,51,33,117,100,100,100,100,100,52,
- 52,52,52,100,100,100,32,117,49,33,100,100,100,100,100,100,100,52,100,
- 100,52,100,100,100,49,32,37,49,37,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,113,48,96,97,100,97,100,100,100,100,100,100,100,116,117,101,
- 113,101,100,112,117,36,36,48,49,49,49,49,49,49,49,113,48,49,113,48,
- 49,49,33,52,52,100,100,100,100,100,100,100,100,100,116,52,97,33,37,
- 49,49,49,113,112,112,36,49,49,49,49,49,49,113,36,112,101,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,97,
- 100,100,100,100,100,112,113,48,49,49,80,229,228,100,100,100,100,100,
- 100,52,52,112,49,49,37,49,37,96,100,100,100,100,100,100,100,100,97,
- 32,49,96,97,100,100,52,49,97,36,48,49,49,49,49,49,49,113,48,49,97,
- 37,48,49,33,36,48,33,52,100,100,100,100,100,100,100,100,100,36,48,
- 49,37,49,49,49,96,100,100,100,100,100,100,100,100,100,100,52,117,112,
- 96,100,100,100,53,112,117,112,48,49,49,49,49,49,49,116,100,36,116,
- 49,49,49,49,97,96,36,37,100,100,100,100,100,100,100,97,97,100,113,
- 101,100,36,112,96,37,112,48,49,49,49,49,49,49,49,101,53,101,33,37,
- 49,49,49,36,113,101,97,100,100,96,53,49,49,49,49,49,37,37,37,37,49,
- 49,49,96,117,100,32,49,49,49,49,49,49,49,37,49,49,37,49,49,113,36,
- 96,97,100,97,100,100,100,100,100,100,100,100,100,100,100,100,100,52,
- 36,112,48,113,48,49,49,49,49,49,49,49,117,117,113,116,49,49,116,53,
- 33,33,100,100,100,100,100,100,100,100,52,100,100,52,100,100,100,32,
- 37,37,49,49,49,49,49,49,49,49,49,53,101,112,96,97,100,100,100,52,52,
- 52,97,100,100,100,100,100,100,52,33,116,49,49,49,49,49,49,49,49,49,
- 49,49,49,49,49,49,49,49,49,49,113,48,49,49,49,49,49,116,52,100,100,
- 36,92,51,48,117,100,100,100,100,117,96,100,100,100,48,113,53,48,113,
- 32,53,49,49,49,49,49,49,113,117,117,53,116,97,100,36,96,49,96,117,
- 101,100,100,100,100,100,100,116,117,117,117,37,53,49,33,112,117,117,
- 117,49,49,49,49,49,49,49,117,33,52,112,33,100,100,32,37,117,116,117,
- 100,100,100,100,100,100,100,117,117,32,116,117,100,36,117,117,117,
- 117,53,49,49,49,49,49,49,113,53,96,97,97,37,100,116,117,37,112,32,
- 97,100,100,100,100,100,100,52,116,117,117,117,101,100,112,117,117,
- 101,116,49,49,49,49,49,49,49,117,117,117,117,117,49,49,116,117,117,
- 32,116,100,100,52,81,229,228,100,100,100,100,112,117,36,112,117,49,
- 49,52,33,52,33,116,100,100,100,100,100,100,100,53,97,97,33,116,100,
- 36,117,101,112,32,53,49,49,49,49,49,49,113,101,32,117,117,37,100,116,
- 49,96,117,49,36,49,49,49,49,49,49,97,49,96,117,49,48,49,117,36,112,
- 117,36,100,100,100,100,100,100,100,112,117,36,37,37,100,100,53,97,
- 33,52,33,49,49,49,49,49,49,49,52,33,116,49,117,100,36,117,117,101,
- 32,37,100,100,100,100,100,100,36,117,101,32,101,96,100,116,49,96,117,
- 49,36,49,49,49,49,49,49,97,37,96,53,113,33,49,117,117,117,48,112,49,
- 49,113,100,53,49,49,49,113,53,48,49,49,49,100,116,37,100,52,96,101,
- 100,100,100,100,100,100,116,117,117,37,117,48,49,33,112,36,112,117,
- 49,49,49,49,49,49,49,117,117,117,117,97,101,100,32,116,117,117,117,
- 100,100,100,100,100,100,100,117,32,37,116,32,49,49,96,97,53,117,53,
- 49,49,49,49,49,49,113,117,53,32,117,53,49,97,117,117,117,117,101,100,
- 100,100,100,100,100,116,37,112,112,112,33,49,117,117,33,52,96,48,49,
- 49,49,49,49,49,37,117,117,117,117,49,49,116,117,117,49,117,100,100,
- 100,100,100,100,100,117,117,117,117,117,100,36,117,117,53,32,53,49,
- 49,101,92,59,101,113,12,110,48,49,89,27,179,};
diff --git a/sys/dev/ctau/ctaureg.h b/sys/dev/ctau/ctaureg.h
deleted file mode 100644
index 3cd2ce21cedd..000000000000
--- a/sys/dev/ctau/ctaureg.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/*-
- * Defines for Cronyx-Tau adapter, based on Hitachi HD64570 controller.
- *
- * Copyright (C) 1996 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: ctaureg.h,v 1.1.2.1 2003/11/12 17:16:10 rik Exp $
- * $FreeBSD$
- */
-
-/*
- * Chip register address, B is chip base port, R is chip register number.
- */
-#define R(b,r) ((b) | 0x8000 | (((r)<<6 & 0x3c00) | ((r) & 0xf)))
-
-/*
- * Interface board registers, R is register number 0..7.
- */
-#define GR(p,r) ((p) | 0x0010 | (r)<<1)
-
-/*------------------------------------------------------------
- * Basic Tau model.
- */
-#define BSR0(p) (p) /* board status register 0, read only */
-#define BSR1(p) ((p) | 0x2000) /* board status register 1, read only */
-#define BSR2(p) ((p) | 0x4010) /* board status register 2, read only */
-#define BSR3(p) ((p) | 0x4000) /* board status register 3, read only */
-#define BCR0(p) (p) /* board command register 0, write only */
-#define BCR1(p) ((p) | 0x2000) /* board command register 1, write only */
-#define BCR2(p) ((p) | 0x4010) /* board command register 2, write only */
-#define BCR3(p) ((p) | 0x4000) /* board command register 3, write only */
-#define IACK(p) ((p) | 0x6000) /* interrupt acknowledge register, ro */
-
-/*
- * Board status register 0 bits.
- */
-#define BSR0_INTR 0x01 /* interrupt pending flag */
-#define BSR0_HDINT 0x02 /* HD64570 interrupt pending */
-#define BSR0_GINT 0x04 /* interface board interrupt pending */
-#define BSR0_RDYERR 0x10 /* HD64570 reg.i/o error - not ready */
-
-#define BSR0_TE1 0x02 /* 0 - E1 daughter board installed */
-#define BSR0_T703 0x04 /* 0 - G.703 daughter board installed */
-
-/*
- * Board status register 1 bits.
- */
-#define BSR1_DSR0 0x01 /* DSR from channel 0 */
-#define BSR1_DSR1 0x02 /* DSR from channel 1 */
-
-#define BSR1_CH0_CABLE 0x0c /* channel 0 cable type mask */
-#define BSR1_CH0_V35 0x0c /* channel 0 is V.35 */
-#define BSR1_CH0_RS232 0x08 /* channel 0 is RS-232 or not connected */
-#define BSR1_CH0_X21 0x04 /* channel 0 is X.21 */
-#define BSR1_CH0_RS530 0x00 /* channel 0 is RS-530 */
-
-#define BSR1_CH1_CABLE 0x30 /* channel 1 cable type mask */
-#define BSR1_CH1_SHIFT 2
-#define BSR1_CH1_V35 0x0c /* channel 1 is V.35 */
-#define BSR1_CH1_RS232 0x08 /* channel 1 is RS-232 or not connected */
-#define BSR1_CH1_X21 0x04 /* channel 1 is X.21 */
-#define BSR1_CH1_RS530 0x00 /* channel 1 is RS-530 */
-
-/*
- * Board status register 2 bits.
- */
-#define BSR2_GINT0 0x08 /* interface board chan0 interrupt pending */
-#define BSR2_GINT1 0x40 /* interface board chan1 interrupt pending */
-#define BSR2_LERR 0x80 /* firmware download error signal */
-
-/*
- * Board status register 3 bits.
- */
-#define BSR3_IB 0x08 /* identification bit */
-#define BSR3_NSTATUS 0x10 /* firmware download status */
-#define BSR3_CONF_DN 0x20 /* firmware download done */
-#define BSR3_IB_NEG 0x40 /* negated identification bit */
-#define BSR3_ZERO 0x80 /* always zero */
-
-/*
- * Board control register 0 bits.
- */
-#define BCR0_IRQ_DIS 0x00 /* no interrupt generated */
-#define BCR0_IRQ_3 0x01 /* select IRQ number 3 */
-#define BCR0_IRQ_5 0x02 /* select IRQ number 5 */
-#define BCR0_IRQ_7 0x03 /* select IRQ number 7 */
-#define BCR0_IRQ_10 0x04 /* select IRQ number 10 */
-#define BCR0_IRQ_11 0x05 /* select IRQ number 11 */
-#define BCR0_IRQ_12 0x06 /* select IRQ number 12 */
-#define BCR0_IRQ_15 0x07 /* select IRQ number 15 */
-#define BCR0_IRQ_MASK 0x07 /* IRQ mask */
-
-#define BCR0_HDRUN 0x08 /* inverted board reset flag */
-
-#define BCR0_DMA_DIS 0x00 /* no interrupt generated */
-#define BCR0_DMA_5 0x10 /* select DMA channel 5 */
-#define BCR0_DMA_6 0x20 /* select DMA channel 6 */
-#define BCR0_DMA_7 0x30 /* select DMA channel 7 */
-
-#define BCR0_TCK 0x80 /* firmware download TCK signal */
-
-/*
- * Board control register 1 bits.
- */
-#define BCR1_DTR0 0x01 /* channel 0 DTR enable */
-#define BCR1_DTR1 0x02 /* channel 1 DTR enable */
-
-#define BCR1_TXCOUT0 0x10 /* channel 0 TXCOUT enable */
-#define BCR1_TXCOUT1 0x20 /* channel 1 TXCOUT enable */
-
-#define BCR1_TMS 0x08 /* firmware download TMS signal */
-#define BCR1_TDI 0x80 /* firmware download TDI signal */
-
-#define BCR1_NCONFIGI 0x08 /* firmware download start */
-#define BCR1_DCLK 0x40 /* firmware download clock */
-#define BCR1_1KDAT 0x80 /* firmware download data */
-
-/*
- * Board control register 2 bits -- see ctau.h.
- */
-
-#define IMVR(b) R(b,HD_IMVR) /* interrupt modified vector reg. */
-#define ITCR(b) R(b,HD_ITCR) /* interrupt control register */
-#define ISR0(b) R(b,HD_ISR0) /* interrupt status register 0, ro */
-#define ISR1(b) R(b,HD_ISR1) /* interrupt status register 1, ro */
-#define ISR2(b) R(b,HD_ISR2) /* interrupt status register 2, ro */
-#define IER0(b) R(b,HD_IER0) /* interrupt enable register 0 */
-#define IER1(b) R(b,HD_IER1) /* interrupt enable register 1 */
-#define IER2(b) R(b,HD_IER2) /* interrupt enable register 2 */
-#define PCR(b) R(b,HD_PCR) /* DMA priority control register */
-#define DMER(b) R(b,HD_DMER) /* DMA master enable register */
-#define WCRL(b) R(b,HD_WCRL) /* wait control register L */
-#define WCRM(b) R(b,HD_WCRM) /* wait control register M */
-#define WCRH(b) R(b,HD_WCRH) /* wait control register H */
-
-/*------------------------------------------------------------
- * Tau/E1 model.
- */
-#define E1CFG(p) GR(p,0) /* control register 0, write only */
-#define E1SR(p) GR(p,0) /* status register, read only */
-#define E1CS2(p) GR(p,1) /* chip select 2/IACK, read/write */
-#define E1SYN(p) GR(p,3) /* sync mode enable, write only */
-#define E1CS0(p) GR(p,4) /* chip select 0, write only */
-#define E1CS1(p) GR(p,5) /* chip select 1, write only */
-#define E1DAT(p) GR(p,7) /* selected chip read/write */
-
-/*
- * Tau/E1 CS2/IACK register bits.
- */
-#define E1CS2_IACK 0x08 /* serial controller interrupt acknowledge */
-#define E1CS2_SCC 0x04 /* serial controller select */
-#define E1CS2_AB 0x02 /* serial controller A/B signal */
-#define E1CS2_DC 0x01 /* serial controller D/C signal */
-
-/*
- * Tau/E1 control register bits.
- */
-#define E1CFG_II 0x00 /* configuration II */
-#define E1CFG_K 0x01 /* configuration K */
-#define E1CFG_HI 0x02 /* configuration HI */
-#define E1CFG_D 0x03 /* configuration D */
-
-#define E1CFG_CLK0_INT 0x00 /* channel E0 transmit clock - internal */
-#define E1CFG_CLK0_RCV 0x04 /* channel E0 transmit clock - RCLK0 */
-#define E1CFG_CLK0_RCLK1 0x08 /* channel E0 transmit clock - RCLK1 */
-
-#define E1CFG_CLK1_INT 0x00 /* channel E1 transmit clock - internal */
-#define E1CFG_CLK1_RCLK0 0x10 /* channel E1 transmit clock - RCLK0 */
-#define E1CFG_CLK1_RCV 0x20 /* channel E1 transmit clock - RCLK1 */
-
-#define E1CFG_LED 0x40 /* LED control */
-#define E1CFG_GRUN 0x80 /* global run flag */
-
-/*
- * Tau/E1 sync control register bits.
- */
-#define E1SYN_ENS0 0x01 /* enable channel 0 sync mode */
-#define E1SYN_ENS1 0x02 /* enable channel 1 sync mode */
-
-/*
- * Tau/E1 status register bits.
- */
-#define E1SR_E0_IRQ0 0x01 /* E0 controller interrupt 0 */
-#define E1SR_E0_IRQ1 0x02 /* E0 controller interrupt 1 */
-#define E1SR_E1_IRQ0 0x04 /* E1 controller interrupt 0 */
-#define E1SR_E1_IRQ1 0x08 /* E1 controller interrupt 1 */
-#define E1SR_SCC_IRQ 0x10 /* serial controller interrupt */
-#define E1SR_TP0 0x20 /* channel 0 is twisted pair */
-#define E1SR_TP1 0x40 /* channel 1 is twisted pair */
-#define E1SR_REV 0x80 /* Tau/E1 revision */
-
-/*
- * Tau/E1 serial memory register bits.
- */
-
-/*------------------------------------------------------------
- * Tau/G.703 model.
- */
-#define GLCR0(p) GR(p,3) /* line control register 0, write only */
-#define GMD0(p) GR(p,4) /* mode register 0, write only */
-#define GMD1(p) GR(p,5) /* mode register 1, write only */
-#define GMD2(p) GR(p,6) /* mode register 2, write only */
-#define GLCR1(p) GR(p,7) /* line control register 1, write only */
-#define GERR(p) GR(p,0) /* error register, read/write */
-#define GLQ(p) GR(p,1) /* line quality register, read only */
-#define GLDR(p) GR(p,2) /* loop detect request, read only */
-
-/*
- * Tau/G.703 mode register 0/1 bits.
- */
-#define GMD_2048 0x00 /* 2048 kbit/sec */
-#define GMD_1024 0x02 /* 1024 kbit/sec */
-#define GMD_512 0x03 /* 512 kbit/sec */
-#define GMD_256 0x04 /* 256 kbit/sec */
-#define GMD_128 0x05 /* 128 kbit/sec */
-#define GMD_64 0x06 /* 64 kbit/sec */
-
-#define GMD_RSYNC 0x08 /* receive synchronization */
-#define GMD_PCE_PCM2 0x10 /* precoder enable, mode PCM2 */
-#define GMD_PCE_PCM2D 0x20 /* precoder enable, mode PCM2D */
-
-#define GMD0_SDI 0x40 /* serial data input */
-#define GMD0_SCLK 0x80 /* serial data clock */
-
-#define GMD1_NCS0 0x40 /* chip select 0 inverted */
-#define GMD1_NCS1 0x80 /* chip select 1 inverted */
-
-/*
- * Tau/G.703 mode register 2 bits.
- */
-#define GMD2_SERIAL 0x01 /* channel 1 serial interface V.35/RS-232/etc */
-#define GMD2_LED 0x02 /* LED control */
-#define GMD2_RAW0 0x04 /* channel 0 raw mode (byte-sync) */
-#define GMD2_RAW1 0x08 /* channel 1 raw mode (byte-sync) */
-
-/*
- * Tau/G.703 interrupt status register bits.
- */
-#define GERR_BPV0 0x01 /* channel 0 bipolar violation */
-#define GERR_ERR0 0x02 /* channel 0 test error */
-#define GERR_BPV1 0x04 /* channel 1 bipolar violation */
-#define GERR_ERR1 0x08 /* channel 1 test error */
-
-/*
- * Tau/G.703 line quality register bits.
- */
-#define GLQ_MASK 0x03 /* channel 0 mask */
-#define GLQ_SHIFT 2 /* channel 1 shift */
-
-#define GLQ_DB0 0x00 /* channel 0 level 0.0 dB */
-#define GLQ_DB95 0x01 /* channel 0 level -9.5 dB */
-#define GLQ_DB195 0x02 /* channel 0 level -19.5 dB */
-#define GLQ_DB285 0x03 /* channel 0 level -28.5 dB */
-
-/*
- * Tau/G.703 serial data output register bits.
- */
-#define GLDR_C0 0x01 /* chip 0 serial data output */
-#define GLDR_LREQ0 0x02 /* channel 0 remote loop request */
-#define GLDR_C1 0x04 /* chip 1 serial data output */
-#define GLDR_LREQ1 0x08 /* channel 1 remote loop request */
-
-/*
- * Tau/G.703 line control register 0/1 bits.
- */
-#define GLCR_RENABLE 0x00 /* normal mode, auto remote loop enabled */
-#define GLCR_RDISABLE 0x01 /* normal mode, auto remote loop disabled */
-#define GLCR_RREFUSE 0x02 /* send the remote loop request sequence */
-#define GLCR_RREQUEST 0x03 /* send the remote loop refuse sequence */
diff --git a/sys/dev/ctau/ctddk.c b/sys/dev/ctau/ctddk.c
deleted file mode 100644
index bab8a5fd6231..000000000000
--- a/sys/dev/ctau/ctddk.c
+++ /dev/null
@@ -1,1162 +0,0 @@
-/*-
- * DDK library for Cronyx-Tau adapters.
- *
- * Copyright (C) 1998-1999 Cronyx Engineering.
- * Author: Alexander Kvitchenko, <aak@cronyx.ru>
- *
- * Copyright (C) 1999-2003 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * This source is derived from
- * Diagnose utility for Cronyx-Tau adapter:
- * by Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: ctddk.c,v 1.1.2.3 2003/11/14 16:55:36 rik Exp $
- */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <dev/cx/machdep.h>
-#include <dev/ctau/ctddk.h>
-#include <dev/ctau/ctaureg.h>
-#include <dev/ctau/hdc64570.h>
-#include <dev/ctau/ds2153.h>
-#include <dev/ctau/am8530.h>
-#include <dev/ctau/lxt318.h>
-#include <dev/cx/cronyxfw.h>
-#include <dev/ctau/ctaufw.h>
-#include <dev/ctau/ctau2fw.h>
-
-#ifndef CT_DDK_NO_G703
-#include <dev/ctau/ctaug7fw.h>
-#endif
-
-#ifndef CT_DDK_NO_E1
-#include <dev/ctau/ctaue1fw.h>
-#endif
-
-static void ct_hdlc_interrupt (ct_chan_t *c, int imvr);
-static void ct_e1_interrupt (ct_board_t *b);
-static void ct_scc_interrupt (ct_board_t *b);
-static void ct_e1timer_interrupt (ct_chan_t *c);
-
-static short porttab [] = { /* standard base port set */
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
-};
-
-int ct_find (port_t *board_ports)
-{
- int i, n;
-
- for (i=0, n=0; porttab[i] && n<NBRD; i++)
- if (ct_probe_board (porttab[i], -1, -1))
- board_ports[n++] = porttab[i];
- return n;
-}
-
-int ct_open_board (ct_board_t *b, int num, port_t port, int irq, int dma)
-{
- ct_chan_t *c;
- const unsigned char *fw;
- const cr_dat_tst_t *ft;
- long flen;
-
- if (num >= NBRD || ! ct_probe_board (port, irq, dma))
- return 0;
-
- /* init callback pointers */
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->call_on_tx = 0;
- c->call_on_rx = 0;
- c->call_on_msig = 0;
- c->call_on_scc = 0;
- c->call_on_err = 0;
- }
-
- /* init DDK channel variables */
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->sccrx_empty = c->scctx_empty = 1;
- c->sccrx_b = c->sccrx_e = 0;
- c->scctx_b = c->scctx_e = 0;
- c->e1_first_int = 1;
- }
-
- /* init board structure */
- ct_init (b, num, port, irq, dma, ctau_fw_data,
- ctau_fw_len, ctau_fw_tvec, ctau2_fw_data);
-
- /* determine which firmware should be loaded */
- fw = ctau_fw_data;
- flen = ctau_fw_len;
- ft = ctau_fw_tvec;
- switch (b->type) {
- case B_TAU2:
- case B_TAU2_G703:
- case B_TAU2_E1:
- case B_TAU2_E1D:
- fw = ctau2_fw_data;
- flen = 0;
- ft = NULL;
- break;
-#ifndef CT_DDK_NO_G703
- case B_TAU_G703:
- fw = ctaug703_fw_data;
- flen = ctaug703_fw_len;
- ft = ctaug703_fw_tvec;
- break;
-#endif
-#ifndef CT_DDK_NO_E1
- case B_TAU_E1:
- fw = ctaue1_fw_data;
- flen = ctaue1_fw_len;
- ft = ctaue1_fw_tvec;
- break;
-#endif
- }
- /* Load firmware and set up board */
- return ct_setup_board (b, fw, flen, ft);
-}
-
-/*
- * must be called on the exit
- */
-void ct_close_board (ct_board_t *b)
-{
- ct_setup_board (b, 0, 0, 0);
-
- /* Reset the controller. */
- outb (BCR0(b->port), 0);
-
- /* Disable DMA channel. */
- ct_disable_dma (b);
-
- ct_led (b, 0);
-}
-
-static void ct_g703_rate (ct_chan_t *c, unsigned long rate)
-{
- c->gopt.rate = rate;
- ct_setup_g703 (c->board);
-}
-
-/*
- * Set up baud rate.
- */
-static void ct_chan_baud (ct_chan_t *c, unsigned long baud)
-{
- c->baud = baud;
- if (baud) {
- c->hopt.txs = CLK_INT;
- } else {
- ct_set_dpll (c, 0);
- c->hopt.txs = CLK_LINE;
- }
- ct_update_chan (c);
-}
-
-void ct_set_baud (ct_chan_t *c, unsigned long baud)
-{
- unsigned long r;
-
- if (c->mode == M_E1)
- return;
- if (c->mode == M_G703) {
- if (baud >= 2048000) r = 2048;
- else if (baud >= 1024000) r = 1024;
- else if (baud >= 512000) r = 512;
- else if (baud >= 256000) r = 256;
- else if (baud >= 128000) r = 128;
- else r = 64;
- ct_g703_rate (c, r);
- } else
- ct_chan_baud (c, baud);
-}
-
-/*
- * Configure Tau/E1 board.
- */
-static void ct_e1_config (ct_board_t *b, unsigned char cfg)
-{
- if (cfg == b->opt.cfg)
- return;
-
- if (cfg == CFG_B)
- b->chan[1].mode = M_HDLC;
- else
- b->chan[1].mode = M_E1;
-
- /* Recovering synchronization */
- if (b->opt.cfg == CFG_B) {
- ct_chan_baud (b->chan+1, 0);
- ct_set_invtxc (b->chan+1, 0);
- ct_set_invrxc (b->chan+1, 0);
- ct_set_nrzi (b->chan+1, 0);
- }
- b->opt.cfg = cfg;
- ct_setup_e1 (b);
-}
-
-/*
- * Config Tau/G.703 board
- */
-static void ct_g703_config (ct_board_t *b, unsigned char cfg)
-{
- if (cfg == b->opt.cfg)
- return;
-
- if (cfg == CFG_B)
- b->chan[1].mode = M_HDLC;
- else
- b->chan[1].mode = M_G703;
-
- /* Recovering synchronization */
- if (b->opt.cfg == CFG_B) {
- ct_chan_baud (b->chan+1, 0);
- ct_set_invtxc (b->chan+1, 0);
- ct_set_invrxc (b->chan+1, 0);
- ct_set_nrzi (b->chan+1, 0);
- }
- b->opt.cfg = cfg;
- ct_setup_g703 (b);
-}
-
-int ct_set_clk (ct_chan_t *c, int clk)
-{
- if (c->num)
- c->board->opt.clk1 = clk;
- else
- c->board->opt.clk0 = clk;
- if (c->mode == M_E1) {
- ct_setup_e1 (c->board);
- return 0;
- } else if (c->mode == M_G703) {
- ct_setup_g703 (c->board);
- return 0;
- } else
- return -1;
-}
-
-int ct_get_clk (ct_chan_t *c)
-{
- return c->num ? c->board->opt.clk1 : c->board->opt.clk0;
-}
-
-int ct_set_ts (ct_chan_t *c, unsigned long ts)
-{
- if (! (c->mode == M_E1))
- return -1;
- if (c->num)
- c->board->opt.s1 = ts;
- else
- c->board->opt.s0 = ts;
- ct_setup_e1 (c->board);
- return 0;
-}
-
-int ct_set_subchan (ct_board_t *b, unsigned long ts)
-{
- if (b->chan[0].mode != M_E1)
- return -1;
- b->opt.s2 = ts;
- ct_setup_e1 (b);
- return 0;
-}
-
-int ct_set_higain (ct_chan_t *c, int on)
-{
- if (! (c->mode == M_E1))
- return -1;
- c->gopt.higain = on ? 1 : 0;
- ct_setup_e1 (c->board);
- return 0;
-}
-
-/*
- * Start service channel.
- */
-void ct_start_scc (ct_chan_t *c, char *rxbuf, char *txbuf)
-{
- c->sccrx = rxbuf;
- c->scctx = txbuf;
-
- /* Enable interrupts from service channel. */
- if (c->board->type != B_TAU_E1 && c->board->type != B_TAU_E1C &&
- c->board->type != B_TAU2_E1)
- return;
-
- cte_out2 (c->board->port, c->num ? AM_IMR : AM_IMR | AM_A,
- IMR_TX | IMR_RX_ALL);
- cte_out2 (c->board->port, AM_MICR, MICR_MIE);
-}
-
-/*
- * Start HDLC channel.
- */
-void ct_start_chan (ct_chan_t *c, ct_buf_t *cb, unsigned long phys)
-{
- int i, ier0;
- unsigned long bound;
-
- if (cb) {
- /* Set up descriptors, align to 64k boundary.
- * If 64k boundary is inside buffers
- * buffers will begin on this boundary
- * (there were allocated additional space for this) */
- c->tdesc = cb->descbuf;
- c->tdphys[0] = phys + ((char*)c->tdesc - (char*)cb);
- bound = ((c->tdphys[0] + 0xffff) & ~(0xffffUL));
- if (bound < c->tdphys[0] + 2*NBUF*sizeof(ct_desc_t)) {
- c->tdesc = (ct_desc_t*) ((char*) c->tdesc +
- (bound - c->tdphys[0]));
- c->tdphys[0] = bound;
- }
- c->rdesc = c->tdesc + NBUF;
-
- /* Set buffers. */
- for (i=0; i<NBUF; ++i) {
- c->rbuf[i] = cb->rbuffer[i];
- c->tbuf[i] = cb->tbuffer[i];
- }
-
- /* Set buffer physical addresses */
- for (i=0; i<NBUF; ++i) {
- c->rphys[i] = phys + ((char*)c->rbuf[i] - (char*)cb);
- c->tphys[i] = phys + ((char*)c->tbuf[i] - (char*)cb);
- c->rdphys[i] = phys + ((char*)(c->rdesc+i) - (char*)cb);
- c->tdphys[i] = phys + ((char*)(c->tdesc+i) - (char*)cb);
- }
- }
- /* Set up block chains. */
- /* receive buffers */
- for (i=0; i<NBUF; ++i) {
- B_NEXT (c->rdesc[i]) = c->rdphys[(i+1) % NBUF] & 0xffff;
- B_PTR (c->rdesc[i]) = c->rphys[i];
- B_LEN (c->rdesc[i]) = DMABUFSZ;
- B_STATUS (c->rdesc[i]) = 0;
- }
- /* transmit buffers */
- for (i=0; i<NBUF; ++i) {
- B_NEXT (c->tdesc[i]) = c->tdphys[(i+1) % NBUF] & 0xffff;
- B_PTR (c->tdesc[i]) = c->tphys[i];
- B_LEN (c->tdesc[i]) = DMABUFSZ;
- B_STATUS (c->tdesc[i]) = FST_EOM;
- c->attach[i] = 0;
- }
-
- if (c->type & T_E1) {
- c->mode = M_E1;
- if (c->num && c->board->opt.cfg == CFG_B)
- c->mode = M_HDLC;
- }
- if (c->type & T_G703) {
- c->mode = M_G703;
- if (c->num && c->board->opt.cfg == CFG_B)
- c->mode = M_HDLC;
- }
- ct_update_chan (c);
-
- /* enable receiver */
- c->rn = 0;
- ct_start_receiver (c, 1 , c->rphys[0], DMABUFSZ, c->rdphys[0],
- c->rdphys[NBUF-1]);
- outb (c->IE1, inb (c->IE1) | IE1_CDCDE);
- outb (c->IE0, inb (c->IE0) | IE0_RX_INTE);
- ier0 = inb (IER0(c->board->port));
- ier0 |= c->num ? IER0_RX_INTE_1 : IER0_RX_INTE_0;
- outb (IER0(c->board->port), ier0);
-
- /* Enable transmitter */
- c->tn = 0;
- c->te = 0;
- ct_start_transmitter (c, 1 , c->tphys[0], DMABUFSZ, c->tdphys[0],
- c->tdphys[0]);
- outb (c->TX.DIR, DIR_CHAIN_EOME | DIR_CHAIN_BOFE | DIR_CHAIN_COFE);
-
- /* Clear DTR and RTS */
- ct_set_dtr (c, 0);
- ct_set_rts (c, 0);
-}
-
-/*
- * Turn receiver on/off
- */
-void ct_enable_receive (ct_chan_t *c, int on)
-{
- unsigned char st3, ier0, ier1;
-
- st3 = inb (c->ST3);
- /* enable or disable receiver */
- if (on && ! (st3 & ST3_RX_ENABLED)) {
- c->rn = 0;
- ct_start_receiver (c, 1 , c->rphys[0], DMABUFSZ, c->rdphys[0],
- c->rdphys[NBUF-1]);
- /* enable status interrupt */
- outb (c->IE1, inb (c->IE1) | IE1_CDCDE);
- outb (c->IE0, inb (c->IE0) | IE0_RX_INTE);
- ier0 = inb (IER0(c->board->port));
- ier0 |= c->num ? IER0_RX_INTE_1 : IER0_RX_INTE_0;
- outb (IER0(c->board->port), ier0);
- ct_set_rts (c, 1);
- } else if (! on && (st3 & ST3_RX_ENABLED)) {
- ct_set_rts (c, 0);
- outb (c->CMD, CMD_RX_DISABLE);
-
- ier0 = inb (IER0(c->board->port));
- ier0 &= c->num ? ~(IER0_RX_INTE_1 | IER0_RX_RDYE_1) :
- ~(IER0_RX_INTE_0 | IER0_RX_RDYE_0);
- outb (IER0(c->board->port), ier0);
-
- ier1 = inb (IER1(c->board->port));
- ier1 &= c->num ? ~(IER1_RX_DMERE_1 | IER1_RX_DME_1) :
- ~(IER1_RX_DMERE_0 | IER1_RX_DME_0);
- outb (IER1(c->board->port), ier1);
- }
-
-}
-
-/*
- * Turn transmitter on/off
- */
-void ct_enable_transmit (ct_chan_t *c, int on)
-{
- unsigned char st3, ier0, ier1;
-
- st3 = inb (c->ST3);
- /* enable or disable receiver */
- if (on && ! (st3 & ST3_TX_ENABLED)) {
- c->tn = 0;
- c->te = 0;
- ct_start_transmitter (c, 1 , c->tphys[0], DMABUFSZ,
- c->tdphys[0], c->tdphys[0]);
- outb (c->TX.DIR,
- DIR_CHAIN_EOME | DIR_CHAIN_BOFE | DIR_CHAIN_COFE);
- } else if (! on && (st3 & ST3_TX_ENABLED)) {
- outb (c->CMD, CMD_TX_DISABLE);
-
- ier0 = inb (IER0(c->board->port));
- ier0 &= c->num ? ~(IER0_TX_INTE_1 | IER0_TX_RDYE_1) :
- ~(IER0_TX_INTE_0 | IER0_TX_RDYE_0);
- outb (IER0(c->board->port), ier0);
-
- ier1 = inb (IER1(c->board->port));
- ier1 &= c->num ? ~(IER1_TX_DMERE_1 | IER1_TX_DME_1) :
- ~(IER1_TX_DMERE_0 | IER1_TX_DME_0);
- outb (IER1(c->board->port), ier1);
- }
-
-}
-
-int ct_set_config (ct_board_t *b, int cfg)
-{
- if (b->opt.cfg == cfg)
- return 0;
- switch (b->type) {
- case B_TAU_G703:
- case B_TAU_G703C:
- case B_TAU2_G703:
- if (cfg == CFG_C)
- return -1;
- ct_g703_config (b, cfg);
- return 0;
- case B_TAU_E1:
- case B_TAU_E1C:
- case B_TAU_E1D:
- case B_TAU2_E1:
- case B_TAU2_E1D:
- ct_e1_config (b, cfg);
- return 0;
- default:
- return cfg == CFG_A ? 0 : -1;
- }
-}
-
-int ct_get_dpll (ct_chan_t *c)
-{
- return (c->hopt.rxs == CLK_RXS_DPLL_INT);
-}
-
-void ct_set_dpll (ct_chan_t *c, int on)
-{
- if (on && ct_get_baud (c))
- c->hopt.rxs = CLK_RXS_DPLL_INT;
- else
- c->hopt.rxs = CLK_LINE;
- ct_update_chan (c);
-}
-
-int ct_get_nrzi (ct_chan_t *c)
-{
- return (c->opt.md2.encod == MD2_ENCOD_NRZI);
-}
-
-/*
- * Change line encoding to NRZI, default is NRZ
- */
-void ct_set_nrzi (ct_chan_t *c, int on)
-{
- c->opt.md2.encod = on ? MD2_ENCOD_NRZI : MD2_ENCOD_NRZ;
- outb (c->MD2, *(unsigned char*)&c->opt.md2);
-}
-
-/*
- * Transmit clock inversion
- */
-void ct_set_invtxc (ct_chan_t *c, int on)
-{
- if (on) c->board->bcr2 |= (c->num ? BCR2_INVTXC1 : BCR2_INVTXC0);
- else c->board->bcr2 &= ~(c->num ? BCR2_INVTXC1 : BCR2_INVTXC0);
- outb (BCR2(c->board->port), c->board->bcr2);
-}
-
-int ct_get_invtxc (ct_chan_t *c)
-{
- return (c->board->bcr2 & (c->num ? BCR2_INVTXC1 : BCR2_INVTXC0)) != 0;
-}
-
-/*
- * Receive clock inversion
- */
-void ct_set_invrxc (ct_chan_t *c, int on)
-{
- if (on) c->board->bcr2 |= (c->num ? BCR2_INVRXC1 : BCR2_INVRXC0);
- else c->board->bcr2 &= ~(c->num ? BCR2_INVRXC1 : BCR2_INVRXC0);
- outb (BCR2(c->board->port), c->board->bcr2);
-}
-
-int ct_get_invrxc (ct_chan_t *c)
-{
- return (c->board->bcr2 & (c->num ? BCR2_INVRXC1 : BCR2_INVRXC0)) != 0;
-}
-
-/*
- * Main interrupt handler
- */
-void ct_int_handler (ct_board_t *b)
-{
- unsigned char bsr0, imvr;
- ct_chan_t *c;
-
- while ((bsr0 = inb (BSR0(b->port))) & BSR0_INTR) {
- if (bsr0 & BSR0_RDYERR) {
- outb (BCR1(b->port), b->bcr1);
- } else if (bsr0 & BSR0_GINT) {
- if (b->type == B_TAU_E1 || b->type == B_TAU_E1C ||
- b->type == B_TAU_E1D || b->type == B_TAU2_E1 ||
- b->type == B_TAU2_E1D)
- ct_e1_interrupt (b);
- } else if (bsr0 & BSR0_HDINT) {
- /* Read the interrupt modified vector register. */
- imvr = inb (IACK(b->port));
- c = b->chan + (imvr & IMVR_CHAN1 ? 1 : 0);
- ct_hdlc_interrupt (c, imvr);
- }
- }
-}
-
-static void ct_e1_interrupt (ct_board_t *b)
-{
- unsigned char sr;
-
- sr = inb (E1SR(b->port));
-
- if (sr & E1SR_SCC_IRQ) ct_scc_interrupt (b);
- if (sr & E1SR_E0_IRQ1) ct_e1timer_interrupt (b->chan + 0);
- if (sr & E1SR_E1_IRQ1) ct_e1timer_interrupt (b->chan + 1);
-}
-
-static void ct_scc_interrupt (ct_board_t *b)
-{
- unsigned char rsr;
- unsigned char ivr, a = AM_A; /* assume channel A */
- ct_chan_t *c = b->chan;
-
- ivr = cte_in2 (b->port, AM_IVR);
- if (! (ivr & IVR_A))
- ++c, a = 0; /* really channel B */
-
- switch (ivr & IVR_REASON) {
- case IVR_TXRDY: /* transmitter empty */
- c->scctx_b = (c->scctx_b + 1) % SCCBUFSZ;
- if (c->scctx_b == c->scctx_e) {
- c->scctx_empty = 1;
- cte_out2c (c, AM_CR | CR_RST_TXINT);
- } else
- cte_out2d (c, c->scctx[c->scctx_b]);
- break;
-
- case IVR_RXERR: /* receive error */
- case IVR_RX: /* receive character available */
- rsr = cte_in2 (b->port, a|AM_RSR);
-
- if (rsr & RSR_RXOVRN) { /* rx overrun */
- if (c->call_on_err)
- c->call_on_err (c, CT_SCC_OVERRUN);
- } else if (rsr & RSR_FRME) { /* frame error */
- if (c->call_on_err)
- c->call_on_err (c, CT_SCC_FRAME);
- } else {
- c->sccrx[c->sccrx_e] = cte_in2d (c);
- c->sccrx_e = (c->sccrx_e + 1) % SCCBUFSZ;
- c->sccrx_empty &= 0;
- if (c->call_on_scc)
- c->call_on_scc (c);
- if (c->sccrx_e == c->sccrx_b && ! c->sccrx_empty)
- if (c->call_on_err)
- c->call_on_err (c, CT_SCC_OVERFLOW);
- }
- if (rsr)
- cte_out2c (c, CR_RST_ERROR);
- break;
-
- case IVR_STATUS: /* external status interrupt */
- /* Unexpected SCC status interrupt. */
- cte_out2c (c, CR_RST_EXTINT);
- break;
- }
-}
-
-/*
- * G.703 mode channel: process 1-second timer interrupts.
- * Read error and request registers, and fill the status field.
- */
-void ct_g703_timer (ct_chan_t *c)
-{
- int bpv, cd, tsterr, tstreq;
-
- /* Count seconds.
- * During the first second after the channel startup
- * the status registers are not stable yet,
- * we will so skip the first second. */
- ++c->cursec;
- if (c->mode != M_G703)
- return;
- if (c->totsec + c->cursec <= 1)
- return;
- c->status = 0;
-
- cd = ct_get_cd (c);
-
- bpv = inb (GERR (c->board->port)) & (c->num ? GERR_BPV1 : GERR_BPV0);
- outb (GERR (c->board->port), bpv);
-
- tsterr = inb (GERR (c->board->port)) & (c->num ? GERR_ERR1 : GERR_ERR0);
- outb (GERR (c->board->port), tsterr);
-
- tstreq = inb (GLDR (c->board->port)) &
- (c->num ? GLDR_LREQ1 : GLDR_LREQ0);
- outb (GLDR (c->board->port), tstreq);
-
- /* Compute the SNMP-compatible channel status. */
- if (bpv)
- ++c->currnt.bpv; /* bipolar violation */
- if (! cd)
- c->status |= ESTS_LOS; /* loss of signal */
- if (tsterr)
- c->status |= ESTS_TSTERR; /* test error */
- if (tstreq)
- c->status |= ESTS_TSTREQ; /* test code detected */
-
- if (! c->status)
- c->status = ESTS_NOALARM;
-
- /* Unavaiable second -- loss of carrier, or receiving test code. */
- if ((! cd) || tstreq)
- /* Unavailable second -- no other counters. */
- ++c->currnt.uas;
- else {
- /* Line errored second -- any BPV. */
- if (bpv)
- ++c->currnt.les;
-
- /* Collect data for computing
- * degraded minutes. */
- ++c->degsec;
- if (cd && bpv)
- ++c->degerr;
- }
-
- /* Degraded minutes -- having more than 50% error intervals. */
- if (c->cursec / 60 == 0) {
- if (c->degerr*2 > c->degsec)
- ++c->currnt.dm;
- c->degsec = 0;
- c->degerr = 0;
- }
-
- /* Rotate statistics every 15 minutes. */
- if (c->cursec > 15*60) {
- int i;
-
- for (i=47; i>0; --i)
- c->interval[i] = c->interval[i-1];
- c->interval[0] = c->currnt;
-
- /* Accumulate total statistics. */
- c->total.bpv += c->currnt.bpv;
- c->total.fse += c->currnt.fse;
- c->total.crce += c->currnt.crce;
- c->total.rcrce += c->currnt.rcrce;
- c->total.uas += c->currnt.uas;
- c->total.les += c->currnt.les;
- c->total.es += c->currnt.es;
- c->total.bes += c->currnt.bes;
- c->total.ses += c->currnt.ses;
- c->total.oofs += c->currnt.oofs;
- c->total.css += c->currnt.css;
- c->total.dm += c->currnt.dm;
- memset (&c->currnt, 0, sizeof (c->currnt));
-
- c->totsec += c->cursec;
- c->cursec = 0;
- }
-}
-
-static void ct_e1timer_interrupt (ct_chan_t *c)
-{
- unsigned short port;
- unsigned char sr1, sr2, ssr;
- unsigned long bpv, fas, crc4, ebit, pcv, oof;
-
- port = c->num ? E1CS1(c->board->port) : E1CS0(c->board->port);
-
- sr2 = cte_ins (port, DS_SR2, 0xff);
- /* is it timer interrupt ? */
- if (! (sr2 & SR2_SEC))
- return;
-
- /* first interrupts should be ignored */
- if (c->e1_first_int > 0) {
- c->e1_first_int --;
- return;
- }
-
- ++c->cursec;
- c->status = 0;
-
- /* Compute the SNMP-compatible channel status. */
- sr1 = cte_ins (port, DS_SR1, 0xff);
- ssr = cte_in (port, DS_SSR);
- oof = 0;
-
- if (sr1 & (SR1_RCL | SR1_RLOS))
- c->status |= ESTS_LOS; /* loss of signal */
- if (sr1 & SR1_RUA1)
- c->status |= ESTS_AIS; /* receiving all ones */
- if (c->gopt.cas && (sr1 & SR1_RSA1))
- c->status |= ESTS_AIS16; /* signaling all ones */
- if (c->gopt.cas && (sr1 & SR1_RDMA))
- c->status |= ESTS_FARLOMF; /* alarm in timeslot 16 */
- if (sr1 & SR1_RRA)
- c->status |= ESTS_FARLOF; /* far loss of framing */
-
- /* Controlled slip second -- any slip event. */
- if (sr1 & SR1_RSLIP) {
- ++c->currnt.css;
- }
-
- if (ssr & SSR_SYNC) {
- c->status |= ESTS_LOF; /* loss of framing */
- ++oof; /* out of framing */
- }
- if ((c->gopt.cas && (ssr & SSR_SYNC_CAS)) ||
- (c->gopt.crc4 && (ssr & SSR_SYNC_CRC4))) {
- c->status |= ESTS_LOMF; /* loss of multiframing */
- ++oof; /* out of framing */
- }
-
- if (! c->status)
- c->status = ESTS_NOALARM;
-
- /* Get error counters. */
- bpv = VCR (cte_in (port, DS_VCR1), cte_in (port, DS_VCR2));
- fas = FASCR (cte_in (port, DS_FASCR1), cte_in (port, DS_FASCR2));
- crc4 = CRCCR (cte_in (port, DS_CRCCR1), cte_in (port, DS_CRCCR2));
- ebit = EBCR (cte_in (port, DS_EBCR1), cte_in (port, DS_EBCR2));
-
- c->currnt.bpv += bpv;
- c->currnt.fse += fas;
- if (c->gopt.crc4) {
- c->currnt.crce += crc4;
- c->currnt.rcrce += ebit;
- }
-
- /* Path code violation is frame sync error if CRC4 disabled,
- * or CRC error if CRC4 enabled. */
- pcv = fas;
- if (c->gopt.crc4)
- pcv += crc4;
-
- /* Unavaiable second -- receiving all ones, or
- * loss of carrier, or loss of signal. */
- if (sr1 & (SR1_RUA1 | SR1_RCL | SR1_RLOS))
- /* Unavailable second -- no other counters. */
- ++c->currnt.uas;
- else {
- /* Line errored second -- any BPV. */
- if (bpv)
- ++c->currnt.les;
-
- /* Errored second -- any PCV, or out of frame sync,
- * or any slip events. */
- if (pcv || oof || (sr1 & SR1_RSLIP))
- ++c->currnt.es;
-
- /* Severely errored framing second -- out of frame sync. */
- if (oof)
- ++c->currnt.oofs;
-
- /* Severely errored seconds --
- * 832 or more PCVs, or 2048 or more BPVs. */
- if (bpv >= 2048 || pcv >= 832)
- ++c->currnt.ses;
- else {
- /* Bursty errored seconds --
- * no SES and more than 1 PCV. */
- if (pcv > 1)
- ++c->currnt.bes;
-
- /* Collect data for computing
- * degraded minutes. */
- ++c->degsec;
- c->degerr += bpv + pcv;
- }
- }
-
- /* Degraded minutes -- having error rate more than 10e-6,
- * not counting unavailable and severely errored seconds. */
- if (c->cursec / 60 == 0) {
- if (c->degerr > c->degsec * 2048 / 1000)
- ++c->currnt.dm;
- c->degsec = 0;
- c->degerr = 0;
- }
-
- /* Rotate statistics every 15 minutes. */
- if (c->cursec > 15*60) {
- int i;
-
- for (i=47; i>0; --i)
- c->interval[i] = c->interval[i-1];
- c->interval[0] = c->currnt;
-
- /* Accumulate total statistics. */
- c->total.bpv += c->currnt.bpv;
- c->total.fse += c->currnt.fse;
- c->total.crce += c->currnt.crce;
- c->total.rcrce += c->currnt.rcrce;
- c->total.uas += c->currnt.uas;
- c->total.les += c->currnt.les;
- c->total.es += c->currnt.es;
- c->total.bes += c->currnt.bes;
- c->total.ses += c->currnt.ses;
- c->total.oofs += c->currnt.oofs;
- c->total.css += c->currnt.css;
- c->total.dm += c->currnt.dm;
- for (i=0; i<sizeof (c->currnt); ++i)
- *(((char *)(&c->currnt))+i)=0;
-
- c->totsec += c->cursec;
- c->cursec = 0;
- }
-}
-
-static void ct_hdlc_interrupt (ct_chan_t *c, int imvr)
-{
- int i, dsr, st1, st2, cda;
-
- switch (imvr & IMVR_VECT_MASK) {
- case IMVR_RX_DMOK: /* receive DMA normal end */
- dsr = inb (c->RX.DSR);
- cda = inw (c->RX.CDA);
- for (i=0; i<NBUF; ++i)
- if (cda == (unsigned short) c->rdphys[i])
- break;
- if (i >= NBUF)
- i = c->rn; /* cannot happen */
- while (c->rn != i) {
- int cst = B_STATUS (c->rdesc[c->rn]);
- if (cst == FST_EOM) {
- /* process data */
- if (c->call_on_rx)
- c->call_on_rx (c, c->rbuf[c->rn],
- B_LEN(c->rdesc[c->rn]));
- ++c->ipkts;
- c->ibytes += B_LEN(c->rdesc[c->rn]);
- } else if (cst & ST2_OVRN) {
- /* Receive overrun error */
- if (c->call_on_err)
- c->call_on_err (c, CT_OVERRUN);
- ++c->ierrs;
- } else if (cst & (ST2_HDLC_RBIT |
- ST2_HDLC_ABT | ST2_HDLC_SHRT)) {
- /* Receive frame error */
- if (c->call_on_err)
- c->call_on_err (c, CT_FRAME);
- ++c->ierrs;
- } else if ((cst & ST2_HDLC_EOM)
- && (cst & ST2_HDLC_CRCE)) {
- /* Receive CRC error */
- if (c->call_on_err)
- c->call_on_err (c, CT_CRC);
- ++c->ierrs;
- } else if (! (cst & ST2_HDLC_EOM)) {
- /* Frame dose not fit in the buffer.*/
- if (c->call_on_err)
- c->call_on_err (c, CT_OVERFLOW);
- ++c->ierrs;
- }
-
- B_NEXT (c->rdesc[c->rn]) =
- c->rdphys[(c->rn+1) % NBUF] & 0xffff;
- B_PTR (c->rdesc[c->rn]) = c->rphys[c->rn];
- B_LEN (c->rdesc[c->rn]) = DMABUFSZ;
- B_STATUS (c->rdesc[c->rn]) = 0;
- c->rn = (c->rn + 1) % NBUF;
- }
- outw (c->RX.EDA, (unsigned short) c->rdphys[(i+NBUF-1)%NBUF]);
- /* Clear DMA interrupt. */
- if (inb (c->RX.DSR) & DSR_DMA_ENABLE) {
- outb (c->RX.DSR, dsr);
- } else {
- outb (c->RX.DSR, (dsr & 0xfc) | DSR_DMA_ENABLE);
- }
- ++c->rintr;
- break;
-
- case IMVR_RX_INT: /* receive status */
- st1 = inb (c->ST1);
- st2 = inb (c->ST2);
- if (st1 & ST1_CDCD){
- if (c->call_on_msig)
- c->call_on_msig (c);
- ++c->mintr;
- }
- /* Clear interrupt. */
- outb (c->ST1, st1);
- outb (c->ST2, st2);
- ++c->rintr;
- break;
-
- case IMVR_RX_DMERR: /* receive DMA error */
- dsr = inb (c->RX.DSR);
- if (dsr & (DSR_CHAIN_BOF | DSR_CHAIN_COF)) {
- if (c->call_on_err)
- c->call_on_err (c, CT_OVERFLOW);
- ++c->ierrs;
- for (i=0; i<NBUF; ++i) {
- B_LEN (c->rdesc[i]) = DMABUFSZ;
- B_STATUS (c->rdesc[i]) = 0;
- }
- ct_start_receiver (c, 1, c->rphys[0], DMABUFSZ,
- c->rdphys[0], c->rdphys[NBUF-1]);
- c->rn = 0;
- }
- /* Clear DMA interrupt. */
- outb (c->RX.DSR, dsr);
- ++c->rintr;
- break;
-
- case IMVR_TX_DMOK: /* transmit DMA normal end */
- case IMVR_TX_DMERR: /* transmit DMA error */
- dsr = inb (c->TX.DSR);
- cda = inw (c->TX.CDA);
-
- for (i=0; i<NBUF && cda != (unsigned short)c->tdphys[i]; ++i)
- continue;
- if (i >= NBUF)
- i = 1; /* cannot happen */
- if (dsr & DSR_CHAIN_COF) {
- if (c->call_on_err)
- c->call_on_err (c, CT_UNDERRUN);
- ++c->oerrs;
- }
- while (c->tn != i) {
- if (c->call_on_tx)
- c->call_on_tx (c, c->attach[c->tn],
- B_LEN(c->tdesc[c->tn]));
- ++c->opkts;
- c->obytes += B_LEN(c->tdesc[c->tn]);
-
- c->tn = (c->tn + 1) % NBUF;
- /* Clear DMA interrupt. */
- outb (c->TX.DSR, DSR_CHAIN_EOM | DSR_DMA_CONTINUE);
- }
- outb (c->TX.DSR, dsr & ~DSR_CHAIN_EOM);
- ++c->tintr;
- break;
-
- case IMVR_TX_INT: /* transmit error, HDLC only */
- st1 = inb (c->ST1);
- if (st1 & ST1_HDLC_UDRN) {
- if (c->call_on_err)
- c->call_on_err (c, CT_UNDERRUN);
- ++c->oerrs;
- }
- outb (c->ST1, st1);
- ++c->tintr;
- break;
-
- default:
- /* Unknown interrupt - cannot happen. */
- break;
- }
-}
-
-int ct_receive_enabled (ct_chan_t *c)
-{
- int st3;
-
- st3 = inb (c->ST3);
- return (st3 & ST3_RX_ENABLED) ? 1 : 0;
-}
-
-int ct_transmit_enabled (ct_chan_t *c)
-{
- int st3;
-
- st3 = inb (c->ST3);
- return (st3 & ST3_TX_ENABLED) ? 1 : 0;
-}
-
-int ct_buf_free (ct_chan_t *c)
-{
- return (NBUF + c->tn - c->te - 1) % NBUF;
-}
-
-int ct_send_packet (ct_chan_t *c, unsigned char *data, int len,
- void *attachment)
-{
- int dsr, ne;
-
- if (len > DMABUFSZ)
- return -2;
-
- /* Is it really free? */
- ne = (c->te+1) % NBUF;
- if (ne == c->tn)
- return -1;
-
- /* Set up the tx descriptor. */
- B_LEN (c->tdesc[c->te]) = len;
- B_STATUS (c->tdesc[c->te]) = FST_EOM;
- c->attach[c->te] = attachment;
- if (c->tbuf[c->te] != data)
- memcpy (c->tbuf[c->te], data, len);
-
- /* Start the transmitter. */
- c->te = ne;
- outw (c->TX.EDA, (unsigned short) c->tdphys[ne]);
- dsr = inb (c->TX.DSR);
- if (! (dsr & DSR_DMA_ENABLE))
- outb (c->TX.DSR, DSR_DMA_ENABLE);
- return 0;
-}
-
-int scc_write (ct_chan_t *c, unsigned char *d, int len)
-{
- int i, free;
-
- /* determining free place in buffer */
- if (c->scctx_empty)
- free = SCCBUFSZ;
- else
- free = (SCCBUFSZ + c->scctx_b - c->scctx_e) % SCCBUFSZ;
-
- if (len > free)
- return -1;
-
- for (i=0; i<len; i++){
- c->scctx[c->scctx_e] = d[i];
- c->scctx_e = (c->scctx_e+1) % SCCBUFSZ;
- }
- if (c->scctx_empty && len) {
- cte_out2d (c, c->scctx[c->scctx_b]);
- c->scctx_empty = 0;
- }
- return 0;
-}
-
-int scc_read (ct_chan_t *c, unsigned char *d, int len)
-{
- int i, bytes;
-
- if (c->sccrx_empty)
- bytes = 0;
- else
- bytes = (SCCBUFSZ + c->sccrx_e - 1 - c->sccrx_b) %
- SCCBUFSZ + 1;
- if (len > bytes)
- return -1;
-
- for (i=0; i<len; i++){
- d[i] = c->sccrx[c->sccrx_b];
- c->sccrx_b = (c->sccrx_b+1) % SCCBUFSZ;
- }
- if (c->sccrx_b==c->sccrx_e)
- c->sccrx_empty = 1;
- return 0;
-}
-
-int sccrx_check (ct_chan_t *c)
-{
- int bytes;
-
- if (c->sccrx_empty)
- bytes = 0;
- else
- bytes = (SCCBUFSZ + c->sccrx_e - 1 - c->sccrx_b) %
- SCCBUFSZ + 1;
- return bytes;
-}
-
-int scc_read_byte (ct_chan_t *c)
-{
- unsigned char a;
-
- if (scc_read (c, &a, 1) < 0)
- return -1;
- return a;
-}
-
-int scc_write_byte (ct_chan_t *c, unsigned char b)
-{
- if (scc_write (c, &b, 1) < 0)
- return -1;
- return b;
-}
-
-/*
- * Register event processing functions
- */
-void ct_register_transmit (ct_chan_t *c, void (*func) (ct_chan_t*, void*, int))
-{
- c->call_on_tx = func;
-}
-
-void ct_register_receive (ct_chan_t *c, void (*func) (ct_chan_t*, char*, int))
-{
- c->call_on_rx = func;
-}
-
-void ct_register_error (ct_chan_t *c, void (*func) (ct_chan_t*, int))
-{
- c->call_on_err = func;
-}
-
-void ct_register_scc (ct_chan_t *c, void (*func) (ct_chan_t*))
-{
- c->call_on_scc = func;
-}
-
-void ct_register_modem (ct_chan_t *c, void (*func) (ct_chan_t*))
-{
- c->call_on_msig = func;
-}
diff --git a/sys/dev/ctau/ctddk.h b/sys/dev/ctau/ctddk.h
deleted file mode 100644
index 2d53deeab008..000000000000
--- a/sys/dev/ctau/ctddk.h
+++ /dev/null
@@ -1,607 +0,0 @@
-/*-
- * Defines for Cronyx-Tau adapter driver.
- *
- * Copyright (C) 1994-2003 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: ctddk.h,v 1.1.2.3 2003/12/11 17:33:44 rik Exp $
- * $FreeBSD$
- */
-#define NBRD 3 /* the maximum number of installed boards */
-#define NPORT 32 /* the number of i/o ports per board */
-#define NCHAN 2 /* the number of channels on the board */
-#define NBUF 4 /* the number of buffers per direction */
-#define DMABUFSZ 1600 /* buffer size */
-#define SCCBUFSZ 50
-
-#ifndef port_t
-# ifdef _M_ALPHA /* port address on Alpha under */
-# define port_t unsigned long /* Windows NT is 32 bit long */
-# else
-# define port_t unsigned short /* all other architectures */
-# endif /* have 16-bit port addresses */
-#endif
-
-/*
- * There are tree models of Tau adapters.
- * Each of two channels of the adapter is assigned a type:
- *
- * Channel 0 Channel 1
- * ------------------------------------------
- * Tau T_SERIAL T_SERIAL
- * Tau/E1 T_E1 T_E1_SERIAL
- * Tau/G703 T_G703 T_G703_SERIAL
- *
- * Each channel could work in one of several modes:
- *
- * Channel 0 Channel 1
- * ------------------------------------------
- * Tau M_ASYNC, M_ASYNC,
- * M_HDLC M_HDLC
- * ------------------------------------------
- * Tau/E1 M_E1, M_E1,
- * M_E1 & CFG_D, M_E1 & CFG_D,
- * M_ASYNC,
- * M_HDLC
- * ------------------------------------------
- * Tau/G703 M_G703, M_G703,
- * M_ASYNC,
- * M_HDLC
- * ------------------------------------------
- */
-#define B_TAU 0 /* Tau - basic model */
-#define B_TAU_E1 1 /* Tau/E1 */
-#define B_TAU_G703 2 /* Tau/G.703 */
-#define B_TAU_E1C 3 /* Tau/E1 revision C */
-#define B_TAU_E1D 4 /* Tau/E1 revision C with phony mode support */
-#define B_TAU_G703C 5 /* Tau/G.703 revision C */
-#define B_TAU2 6 /* Tau2 - basic model */
-#define B_TAU2_E1 7 /* Tau2/E1 */
-#define B_TAU2_E1D 8 /* Tau2/E1 with phony mode support */
-#define B_TAU2_G703 9 /* Tau2/G.703 */
-
-#define T_SERIAL 1
-#define T_E1 2
-#define T_G703 4
-#define T_E1_SERIAL (T_E1 | T_SERIAL)
-#define T_G703_SERIAL (T_G703 | T_SERIAL)
-
-#define M_ASYNC 0 /* asynchronous mode */
-#define M_HDLC 1 /* bit-sync mode (HDLC) */
-#define M_G703 2
-#define M_E1 3
-
-#define CFG_A 0
-#define CFG_B 1
-#define CFG_C 2
-#define CFG_D 3
-
-/* E1/G.703 interfaces - i0, i1
- * Digital interface - d0
- *
- *
- * Configuration
- * ---------------------------------------------------
- * CFG_A | i0<->ct0 i1<->ct1
- * ---------------------------------------------------
- * CFG_B | i0<->ct0 d0<->ct1
- * | ^
- * | |
- * | v
- * | i1
- * ---------------------------------------------------
- * CFG_C | ct0<->i0<->ct1
- * | ^
- * | |
- * | v
- * | i1
- * ---------------------------------------------------
- * CFG_D | i0(e1)<->hdlc<->hdlc<->ct0(e1)
- * ONLY TAU/E1 | i1(e1)<->hdlc<->hdlc<->ct1(e1)
- * |
- */
-
-/*
- * Mode register 0 (MD0) bits.
- */
-#define MD0_STOPB_1 0 /* 1 stop bit */
-#define MD0_STOPB_15 1 /* 1.5 stop bits */
-#define MD0_STOPB_2 2 /* 2 stop bits */
-
-#define MD0_MODE_ASYNC 0 /* asynchronous mode */
-#define MD0_MODE_EXTSYNC 3 /* external byte-sync mode */
-#define MD0_MODE_HDLC 4 /* HDLC mode */
-
-typedef struct {
- unsigned stopb : 2; /* stop bit length */
- unsigned : 2;
- unsigned cts_rts_dcd : 1; /* auto-enable CTS/DCD/RTS */
- unsigned mode : 3; /* protocol mode */
-} ct_md0_async_t;
-
-typedef struct {
- unsigned crcpre : 1; /* CRC preset 1s / 0s */
- unsigned ccitt : 1; /* CRC-CCITT / CRC-16 */
- unsigned crc : 1; /* CRC enable */
- unsigned : 1;
- unsigned cts_dcd : 1; /* auto-enable CTS/DCD */
- unsigned mode : 3; /* protocol mode */
-} ct_md0_hdlc_t;
-
-/*
- * Mode register 1 (MD1) bits.
- */
-#define MD1_PAR_NO 0 /* no parity */
-#define MD1_PAR_CMD 1 /* parity bit appended by command */
-#define MD1_PAR_EVEN 2 /* even parity */
-#define MD1_PAR_ODD 3 /* odd parity */
-
-#define MD1_CLEN_8 0 /* 8 bits/character */
-#define MD1_CLEN_7 1 /* 7 bits/character */
-#define MD1_CLEN_6 2 /* 6 bits/character */
-#define MD1_CLEN_5 3 /* 5 bits/character */
-
-#define MD1_CLK_1 0 /* 1/1 clock rate */
-#define MD1_CLK_16 1 /* 1/16 clock rate */
-#define MD1_CLK_32 2 /* 1/32 clock rate */
-#define MD1_CLK_64 3 /* 1/64 clock rate */
-
-#define MD1_ADDR_NOCHK 0 /* do not check address field */
-#define MD1_ADDR_SNGLE1 1 /* single address 1 */
-#define MD1_ADDR_SNGLE2 2 /* single address 2 */
-#define MD1_ADDR_DUAL 3 /* dual address */
-
-typedef struct {
- unsigned parmode : 2; /* parity mode */
- unsigned rxclen : 2; /* receive character length */
- unsigned txclen : 2; /* transmit character length */
- unsigned clk : 2; /* clock rate */
-} ct_md1_async_t;
-
-typedef struct {
- unsigned : 6;
- unsigned addr : 2; /* address field check */
-} ct_md1_hdlc_t;
-
-/*
- * Mode register 2 (MD2) bits.
- */
-#define MD2_FDX 0 /* full duplex communication */
-#define MD2_RLOOP 1 /* remote loopback (auto echo) */
-#define MD2_LLOOP 3 /* local+remote loopback */
-
-#define MD2_DPLL_CLK_8 0 /* x8 ADPLL clock rate */
-#define MD2_DPLL_CLK_16 1 /* x16 ADPLL clock rate */
-#define MD2_DPLL_CLK_32 2 /* x32 ADPLL clock rate */
-
-#define MD2_ENCOD_NRZ 0 /* NRZ encoding */
-#define MD2_ENCOD_NRZI 1 /* NRZI encoding */
-#define MD2_ENCOD_MANCHESTER 4 /* Manchester encoding */
-#define MD2_ENCOD_FM0 5 /* FM0 encoding */
-#define MD2_ENCOD_FM1 6 /* FM1 encoding */
-
-typedef struct {
- unsigned loop : 2; /* loopback mode */
- unsigned : 1;
- unsigned dpll_clk : 2; /* ADPLL clock rate */
- unsigned encod : 3; /* signal encoding NRZ/NRZI/etc. */
-} ct_md2_t;
-
-/*
- * DMA priority control register (PCR) values.
- */
-#define PCR_PRIO_0_1 0 /* priority c0r > c0t > c1r > c1t */
-#define PCR_PRIO_1_0 1 /* priority c1r > c1t > c0r > c0t */
-#define PCR_PRIO_RX_TX 2 /* priority c0r > c1r > c0t > c1t */
-#define PCR_PRIO_TX_RX 3 /* priority c0t > c1t > c0r > c1r */
-#define PCR_PRIO_ROTATE 4 /* rotation priority -c0r-c0t-c1r-c1t- */
-
-typedef struct {
- unsigned prio : 3; /* priority of channels */
- unsigned noshare : 1; /* 1 - chan holds the bus until end of data */
- /* 0 - all channels share the bus hold */
- unsigned release : 1; /* 1 - release the bus between transfers */
- /* 0 - hold the bus until all transfers done */
-} ct_pcr_t;
-
-typedef struct { /* hdlc channel options */
- ct_md0_hdlc_t md0; /* mode register 0 */
- ct_md1_hdlc_t md1; /* mode register 1 */
- unsigned char ctl; /* control register */
- unsigned char sa0; /* sync/address register 0 */
- unsigned char sa1; /* sync/address register 1 */
- unsigned char rxs; /* receive clock source */
- unsigned char txs; /* transmit clock source */
-} ct_opt_hdlc_t;
-
-typedef struct {
- ct_md2_t md2; /* mode register 2 */
- unsigned char dma_rrc; /* DMA mode receive FIFO ready level */
- unsigned char dma_trc0; /* DMA mode transmit FIFO empty mark */
- unsigned char dma_trc1; /* DMA mode transmit FIFO full mark */
- unsigned char pio_rrc; /* port i/o mode receive FIFO ready level */
- unsigned char pio_trc0; /* port i/o transmit FIFO empty mark */
- unsigned char pio_trc1; /* port i/o transmit FIFO full mark */
-} ct_chan_opt_t;
-
-/*
- * Option CLK is valid for both E1 and G.703 models.
- * Options RATE, PCE, TEST are for G.703 only.
- */
-#define GCLK_INT 0 /* internal transmit clock source */
-#define GCLK_RCV 1 /* transmit clock source = receive */
-#define GCLK_RCLKO 2 /* tclk = receive clock of another channel */
-
-#define GTEST_DIS 0 /* test disabled, normal operation */
-#define GTEST_0 1 /* test "all zeros" */
-#define GTEST_1 2 /* test "all ones" */
-#define GTEST_01 3 /* test "0/1" */
-
-typedef struct { /* E1/G.703 channel options */
- unsigned char hdb3; /* encoding HDB3/AMI */
- unsigned char pce; /* precoder enable */
- unsigned char test; /* test mode 0/1/01/disable */
- unsigned char crc4; /* E1 CRC4 enable */
- unsigned char cas; /* E1 signalling mode CAS/CCS */
- unsigned char higain; /* E1 high gain amplifier (30 dB) */
- unsigned char phony; /* E1 phony mode */
- unsigned char pce2; /* old PCM2 precoder compatibility */
- unsigned long rate; /* data rate 2048/1024/512/256/128/64 kbit/s */
- unsigned short level; /* G.703 input signal level, -cB */
-} ct_opt_g703_t;
-
-typedef struct {
- unsigned char bcr2; /* board control register 2 */
- ct_pcr_t pcr; /* DMA priority control register */
- unsigned char clk0; /* E1/G.703 chan 0 txclk src int/rcv/rclki */
- unsigned char clk1; /* E1/G.703 chan 1 txclk src int/rcv/rclki */
- unsigned char cfg; /* E1 configuration II/HI/K */
- unsigned long s0; /* E1 channel 0 timeslot mask */
- unsigned long s1; /* E1 channel 1 timeslot mask */
- unsigned long s2; /* E1 subchannel pass-through timeslot mask */
-} ct_board_opt_t;
-
-/*
- * Board control register 2 bits.
- */
-#define BCR2_INVTXC0 0x10 /* channel 0 invert transmit clock */
-#define BCR2_INVTXC1 0x20 /* channel 1 invert transmit clock */
-#define BCR2_INVRXC0 0x40 /* channel 0 invert receive clock */
-#define BCR2_INVRXC1 0x80 /* channel 1 invert receive clock */
-
-#define BCR2_BUS_UNLIM 0x01 /* unlimited DMA master burst length */
-#define BCR2_BUS_RFST 0x02 /* fast read cycle bus timing */
-#define BCR2_BUS_WFST 0x04 /* fast write cycle bus timing */
-
-/*
- * Receive/transmit clock source register (RXS/TXS) bits - from hdc64570.h.
- */
-#define CLK_MASK 0x70 /* RXC/TXC clock input mask */
-#define CLK_LINE 0x00 /* RXC/TXC line input */
-#define CLK_INT 0x40 /* internal baud rate generator */
-
-#define CLK_RXS_LINE_NS 0x20 /* RXC line with noise suppression */
-#define CLK_RXS_DPLL_INT 0x60 /* ADPLL based on internal BRG */
-#define CLK_RXS_DPLL_LINE 0x70 /* ADPLL based on RXC line */
-
-#define CLK_TXS_RECV 0x60 /* receive clock */
-
-/*
- * Control register (CTL) bits - from hdc64570.h.
- */
-#define CTL_RTS_INV 0x01 /* RTS control bit (inverted) */
-#define CTL_SYNCLD 0x04 /* load SYN characters */
-#define CTL_BRK 0x08 /* async: send break */
-#define CTL_IDLE_MARK 0 /* HDLC: when idle, transmit mark */
-#define CTL_IDLE_PTRN 0x10 /* HDLC: when idle, transmit an idle pattern */
-#define CTL_UDRN_ABORT 0 /* HDLC: on underrun - abort */
-#define CTL_UDRN_FCS 0x20 /* HDLC: on underrun - send FCS/flag */
-
-typedef struct {
- unsigned long bpv; /* bipolar violations */
- unsigned long fse; /* frame sync errors */
- unsigned long crce; /* CRC errors */
- unsigned long rcrce; /* remote CRC errors (E-bit) */
- unsigned long uas; /* unavailable seconds */
- unsigned long les; /* line errored seconds */
- unsigned long es; /* errored seconds */
- unsigned long bes; /* bursty errored seconds */
- unsigned long ses; /* severely errored seconds */
- unsigned long oofs; /* out of frame seconds */
- unsigned long css; /* controlled slip seconds */
- unsigned long dm; /* degraded minutes */
-} ct_gstat_t;
-
-#define ESTS_NOALARM 0x0001 /* no alarm present */
-#define ESTS_FARLOF 0x0002 /* receiving far loss of framing */
-#define ESTS_AIS 0x0008 /* receiving all ones */
-#define ESTS_LOF 0x0020 /* loss of framing */
-#define ESTS_LOS 0x0040 /* loss of signal */
-#define ESTS_AIS16 0x0100 /* receiving all ones in timeslot 16 */
-#define ESTS_FARLOMF 0x0200 /* receiving alarm in timeslot 16 */
-#define ESTS_LOMF 0x0400 /* loss of multiframe sync */
-#define ESTS_TSTREQ 0x0800 /* test code detected */
-#define ESTS_TSTERR 0x1000 /* test error */
-
-typedef struct {
- unsigned char data[10];
-} ct_desc_t;
-
-typedef struct {
- unsigned char tbuffer [NBUF] [DMABUFSZ]; /* transmit buffers */
- unsigned char rbuffer [NBUF] [DMABUFSZ]; /* receive buffers */
- ct_desc_t descbuf [4*NBUF]; /* descriptors */
- /* double size for alignment */
-} ct_buf_t;
-
-#define B_NEXT(b) (*(unsigned short*)(b).data) /* next descriptor ptr */
-#define B_PTR(b) (*(unsigned long*) ((b).data+2)) /* ptr to data buffer */
-#define B_LEN(b) (*(unsigned short*)((b).data+6)) /* data buffer length */
-#define B_STATUS(b) (*(unsigned short*)((b).data+8)) /* buf status, see FST */
-
-typedef struct {
- port_t DAR, DARB, SAR, SARB, CDA, EDA, BFL, BCR, DSR,
- DMR, FCT, DIR, DCR, TCNT, TCONR, TCSR, TEPR;
-} ct_dmareg_t;
-
-#ifdef NDIS_MINIPORT_DRIVER
-typedef struct _ct_queue_t { /* packet queue */
- PNDIS_WAN_PACKET head; /* first packet in queue */
- PNDIS_WAN_PACKET tail; /* last packet in queue */
-} ct_queue_t;
-#endif
-
-typedef struct _ct_chan_t {
- port_t MD0, MD1, MD2, CTL, RXS, TXS, TMC, CMD, ST0,
- ST1, ST2, ST3, FST, IE0, IE1, IE2, FIE, SA0,
- SA1, IDL, TRB, RRC, TRC0, TRC1, CST;
- ct_dmareg_t RX; /* RX DMA/timer registers */
- ct_dmareg_t TX; /* TX DMA/timer registers */
-
- unsigned char num; /* channel number, 0..1 */
- struct _ct_board_t *board; /* board pointer */
- unsigned long baud; /* data rate */
- unsigned char type; /* channel type */
- unsigned char mode; /* channel mode */
- ct_chan_opt_t opt; /* common channel options */
- ct_opt_hdlc_t hopt; /* hdlc mode options */
- ct_opt_g703_t gopt; /* E1/G.703 options */
- unsigned char dtr; /* DTR signal value */
- unsigned char rts; /* RTS signal value */
- unsigned char lx; /* LXT input bit settings */
-
- unsigned char *tbuf [NBUF]; /* transmit buffer */
- ct_desc_t *tdesc; /* transmit buffer descriptors */
- unsigned long tphys [NBUF]; /* transmit buffer phys address */
- unsigned long tdphys [NBUF]; /* transmit descr phys addresses */
- int tn; /* first active transmit buffer */
- int te; /* first active transmit buffer */
-
- unsigned char *rbuf [NBUF]; /* receive buffers */
- ct_desc_t *rdesc; /* receive buffer descriptors */
- unsigned long rphys [NBUF]; /* receive buffer phys address */
- unsigned long rdphys [NBUF]; /* receive descr phys addresses */
- int rn; /* first active receive buffer */
-
- unsigned long rintr; /* receive interrupts */
- unsigned long tintr; /* transmit interrupts */
- unsigned long mintr; /* modem interrupts */
- unsigned long ibytes; /* input bytes */
- unsigned long ipkts; /* input packets */
- unsigned long ierrs; /* input errors */
- unsigned long obytes; /* output bytes */
- unsigned long opkts; /* output packets */
- unsigned long oerrs; /* output errors */
-
- unsigned short status; /* line status bit mask */
- unsigned long totsec; /* total seconds elapsed */
- unsigned long cursec; /* total seconds elapsed */
- unsigned long degsec; /* degraded seconds */
- unsigned long degerr; /* errors during degraded seconds */
- ct_gstat_t currnt; /* current 15-min interval data */
- ct_gstat_t total; /* total statistics data */
- ct_gstat_t interval [48]; /* 12 hour period data */
-
- void *attach [NBUF]; /* system dependent data per buffer */
- void *sys; /* system dependent data per channel */
- int debug;
- int debug_shadow;
-
- int e1_first_int;
- unsigned char *sccrx, *scctx; /* pointers to SCC rx and tx buffers */
- int sccrx_empty, scctx_empty; /* flags : set when buffer is empty */
- int sccrx_b, scctx_b; /* first byte in queue */
- int sccrx_e, scctx_e; /* first free byte in queue */
-
- /* pointers to callback functions */
- void (*call_on_tx) (struct _ct_chan_t*, void*, int);
- void (*call_on_rx) (struct _ct_chan_t*, char*, int);
- void (*call_on_msig) (struct _ct_chan_t*);
- void (*call_on_scc) (struct _ct_chan_t*);
- void (*call_on_err) (struct _ct_chan_t*, int);
-
-#ifdef NDIS_MINIPORT_DRIVER /* NDIS 3 - WinNT/Win95 */
- HTAPI_LINE htline; /* TAPI line descriptor */
- HTAPI_CALL htcall; /* TAPI call descriptor */
- NDIS_HANDLE connect; /* WAN connection context */
- ct_queue_t sendq; /* packets to transmit queue */
- ct_queue_t busyq; /* transmit busy queue */
- UINT state; /* line state mask */
- int timo; /* state timeout counter */
-#endif
-} ct_chan_t;
-
-typedef struct _ct_board_t {
- port_t port; /* base board port, 200..3e0 */
- unsigned short num; /* board number, 0..2 */
- unsigned char irq; /* intterupt request {3 5 7 10 11 12 15} */
- unsigned char dma; /* DMA request {5 6 7} */
- unsigned long osc; /* oscillator frequency: 10MHz or 8.192 */
- unsigned char type; /* board type Tau/TauE1/TauG703 */
- char name[16]; /* board version name */
- unsigned char bcr0; /* BCR0 image */
- unsigned char bcr1; /* BCR1 image */
- unsigned char bcr2; /* BCR2 image */
- unsigned char gmd0; /* G.703 MD0 register image */
- unsigned char gmd1; /* G.703 MD1 register image */
- unsigned char gmd2; /* G.703 MD2 register image */
- unsigned char e1cfg; /* E1 CFG register image */
- unsigned char e1syn; /* E1 SYN register image */
- ct_board_opt_t opt; /* board options */
- ct_chan_t chan[NCHAN]; /* channel structures */
-#ifdef NDIS_MINIPORT_DRIVER /* NDIS 3 - WinNT/Win95 */
- PVOID ioaddr; /* mapped i/o port address */
- NDIS_HANDLE mh; /* miniport adapter handler */
- NDIS_MINIPORT_INTERRUPT irqh; /* interrupt handler */
- NDIS_HANDLE dmah; /* dma channel handler */
- ULONG bufsz; /* size of shared memory buffer */
- PVOID buf; /* shared memory for adapter */
- NDIS_PHYSICAL_ADDRESS bphys; /* shared memory phys address */
- NDIS_SPIN_LOCK lock; /* lock descriptor */
- ULONG debug; /* debug flags */
- ULONG idbase; /* TAPI device identifier base number */
- ULONG anum; /* adapter number, from inf setup script */
- NDIS_MINIPORT_TIMER timer; /* periodic timer structure */
-#endif
-} ct_board_t;
-
-extern long ct_baud;
-extern unsigned char ct_chan_mode;
-
-extern ct_board_opt_t ct_board_opt_dflt; /* default board options */
-extern ct_chan_opt_t ct_chan_opt_dflt; /* default channel options */
-extern ct_opt_hdlc_t ct_opt_hdlc_dflt; /* default hdlc mode options */
-extern ct_opt_g703_t ct_opt_g703_dflt; /* default E1/G.703 options */
-
-struct _cr_dat_tst;
-int ct_probe_board (port_t port, int irq, int dma);
-void ct_init (ct_board_t *b, int num, port_t port, int irq, int dma,
- const unsigned char *firmware, long bits,
- const struct _cr_dat_tst *tst, const unsigned char *firmware2);
-void ct_init_board (ct_board_t *b, int num, port_t port, int irq, int dma,
- int type, long osc);
-int ct_download (port_t port, const unsigned char *firmware, long bits,
- const struct _cr_dat_tst *tst);
-int ct_download2 (port_t port, const unsigned char *firmware);
-int ct_setup_board (ct_board_t *b, const unsigned char *firmware,
- long bits, const struct _cr_dat_tst *tst);
-void ct_setup_e1 (ct_board_t *b);
-void ct_setup_g703 (ct_board_t *b);
-void ct_setup_chan (ct_chan_t *c);
-void ct_update_chan (ct_chan_t *c);
-void ct_start_receiver (ct_chan_t *c, int dma, unsigned long buf1,
- unsigned len, unsigned long buf, unsigned long lim);
-void ct_start_transmitter (ct_chan_t *c, int dma, unsigned long buf1,
- unsigned len, unsigned long buf, unsigned long lim);
-void ct_set_dtr (ct_chan_t *c, int on);
-void ct_set_rts (ct_chan_t *c, int on);
-void ct_set_brk (ct_chan_t *c, int on);
-void ct_led (ct_board_t *b, int on);
-void ct_cmd (port_t base, int cmd);
-void ct_disable_dma (ct_board_t *b);
-void ct_reinit_board (ct_board_t *b);
-void ct_reinit_chan (ct_chan_t *c);
-int ct_get_dsr (ct_chan_t *c);
-int ct_get_cd (ct_chan_t *c);
-int ct_get_cts (ct_chan_t *c);
-int ct_get_lq (ct_chan_t *c);
-void ct_compute_clock (long hz, long baud, int *txbr, int *tmc);
-unsigned char cte_in (port_t base, unsigned char reg);
-void cte_out (port_t base, unsigned char reg, unsigned char val);
-unsigned char cte_ins (port_t base, unsigned char reg,
- unsigned char mask);
-unsigned char cte_in2 (port_t base, unsigned char reg);
-void cte_out2 (port_t base, unsigned char reg, unsigned char val);
-void ctg_outx (ct_chan_t *c, unsigned char reg, unsigned char val);
-unsigned char ctg_inx (ct_chan_t *c, unsigned char reg);
-unsigned char cte_in2d (ct_chan_t *c);
-void cte_out2d (ct_chan_t *c, unsigned char val);
-void cte_out2c (ct_chan_t *c, unsigned char val);
-
-/* functions dealing with interrupt vector in DOS */
-#if defined (MSDOS) || defined (__MSDOS__)
-int ddk_int_alloc (int irq, void (*func)(), void *arg);
-int ddk_int_restore (int irq);
-#endif
-
-int ct_probe_irq (ct_board_t *b, int irq);
-void ct_int_handler (ct_board_t *b);
-void ct_g703_timer (ct_chan_t *c);
-
-/* DDK errors */
-#define CT_FRAME 1
-#define CT_CRC 2
-#define CT_OVERRUN 3
-#define CT_OVERFLOW 4
-#define CT_UNDERRUN 5
-#define CT_SCC_OVERRUN 6
-#define CT_SCC_FRAME 7
-#define CT_SCC_OVERFLOW 8
-
-int ct_open_board (ct_board_t *b, int num, port_t port, int irq, int dma);
-void ct_close_board (ct_board_t *b);
-int ct_find (port_t *board_ports);
-
-int ct_set_config (ct_board_t *b, int cfg);
-int ct_set_clk (ct_chan_t *c, int clk);
-int ct_set_ts (ct_chan_t *c, unsigned long ts);
-int ct_set_subchan (ct_board_t *b, unsigned long ts);
-int ct_set_higain (ct_chan_t *c, int on);
-void ct_set_phony (ct_chan_t *c, int on);
-
-#define ct_get_config(b) ((b)->opt.cfg)
-#define ct_get_subchan(b) ((b)->opt.s2)
-#define ct_get_higain(c) ((c)->gopt.higain)
-#define ct_get_phony(c) ((c)->gopt.phony)
-int ct_get_clk (ct_chan_t *c);
-unsigned long ct_get_ts (ct_chan_t *c);
-
-void ct_start_chan (ct_chan_t *c, ct_buf_t *cb, unsigned long phys);
-void ct_enable_receive (ct_chan_t *c, int on);
-void ct_enable_transmit (ct_chan_t *c, int on);
-int ct_receive_enabled (ct_chan_t *c);
-int ct_transmit_enabled (ct_chan_t *c);
-
-void ct_set_baud (ct_chan_t *c, unsigned long baud);
-unsigned long ct_get_baud (ct_chan_t *c);
-
-void ct_set_dpll (ct_chan_t *c, int on);
-int ct_get_dpll (ct_chan_t *c);
-
-void ct_set_nrzi (ct_chan_t *c, int on);
-int ct_get_nrzi (ct_chan_t *c);
-
-void ct_set_loop (ct_chan_t *c, int on);
-int ct_get_loop (ct_chan_t *c);
-
-void ct_set_invtxc (ct_chan_t *c, int on);
-int ct_get_invtxc (ct_chan_t *c);
-void ct_set_invrxc (ct_chan_t *c, int on);
-int ct_get_invrxc (ct_chan_t *c);
-
-int ct_buf_free (ct_chan_t *c);
-int ct_send_packet (ct_chan_t *c, unsigned char *data, int len,
- void *attachment);
-
-void ct_start_scc (ct_chan_t *c, char *rxbuf, char * txbuf);
-int sccrx_check (ct_chan_t *c);
-int scc_read (ct_chan_t *c, unsigned char *d, int len);
-int scc_write (ct_chan_t *c, unsigned char *d, int len);
-int scc_read_byte (ct_chan_t *c);
-int scc_write_byte (ct_chan_t *c, unsigned char b);
-
-void ct_register_transmit (ct_chan_t *c,
- void (*func) (ct_chan_t*, void *attachment, int len));
-void ct_register_receive (ct_chan_t *c,
- void (*func) (ct_chan_t*, char *data, int len));
-void ct_register_error (ct_chan_t *c,
- void (*func) (ct_chan_t *c, int data));
-void ct_register_modem (ct_chan_t *c, void (*func) (ct_chan_t *c));
-void ct_register_scc (ct_chan_t *c, void (*func) (ct_chan_t *c));
diff --git a/sys/dev/ctau/ds2153.h b/sys/dev/ctau/ds2153.h
deleted file mode 100644
index 44ab02d41fe9..000000000000
--- a/sys/dev/ctau/ds2153.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/*-
- * Dallas DS2153, DS21x54 single-chip E1 tranceiver registers.
- *
- * Copyright (C) 1996 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: ds2153.h,v 1.2.4.1 2003/11/12 17:22:33 rik Exp $
- * $FreeBSD$
- */
-
-/*
- * Control and test registers
- */
-#define DS_RCR1 0x10 /* rw - receive control 1 */
-#define DS_RCR2 0x11 /* rw - receive control 2 */
-#define DS_TCR1 0x12 /* rw - transmit control 1 */
-#define DS_TCR2 0x13 /* rw - transmit control 2 */
-#define DS_CCR1 0x14 /* rw - common control 1 */
-#define DS_CCR2 0x1a /* rw - common control 2 */
-#define DS_CCR3 0x1b /* rw - common control 3 */
-#define DS_LICR 0x18 /* rw - line interface control */
-#define DS_IMR1 0x16 /* rw - interrupt mask 1 */
-#define DS_IMR2 0x17 /* rw - interrupt mask 2 */
-#define DS_TEST1 0x15 /* rw - test 1 */
-#define DS_TEST2 0x19 /* rw - test 2 */
-
-/*
- * Status and information registers
- */
-#define DS_RIR 0x08 /* r - receive information */
-#define DS_SSR 0x1e /* r - synchronizer status */
-#define DS_SR1 0x06 /* r - status 1 */
-#define DS_SR2 0x07 /* r - status 2 */
-
-/*
- * Error count registers
- */
-#define DS_VCR1 0x00 /* r - BPV or code violation count 1 */
-#define DS_VCR2 0x01 /* r - BPV or code violation count 2 */
-#define DS_CRCCR1 0x02 /* r - CRC4 error count 1 */
-#define DS_CRCCR2 0x03 /* r - CRC4 error count 2 */
-#define DS_EBCR1 0x04 /* r - E-bit count 1 */
-#define DS_EBCR2 0x05 /* r - E-bit count 2 */
-#define DS_FASCR1 0x02 /* r - FAS error count 1 */
-#define DS_FASCR2 0x04 /* r - FAS error count 2 */
-
-/*
- * Signaling registers
- */
-#define DS_RS 0x30 /* r - receive signaling 1..16 */
-#define DS_TS 0x40 /* rw - transmit signaling 1..16 */
-
-/*
- * Transmit idle registers
- */
-#define DS_TIR 0x26 /* rw - transmit idle 1..4 */
-#define DS_TIDR 0x2a /* rw - transmit idle definition */
-
-/*
- * Clock blocking registers
- */
-#define DS_RCBR 0x2b /* rw - receive channel blocking 1..4 */
-#define DS_TCBR 0x22 /* rw - transmit channel blocking 1..4 */
-
-/*
- * Slot 0 registers
- */
-#define DS_RAF 0x2f /* r - receive align frame */
-#define DS_RNAF 0x1f /* r - receive non-align frame */
-#define DS_TAF 0x20 /* rw - transmit align frame */
-#define DS_TNAF 0x21 /* rw - transmit non-align frame */
-
-/*----------------------------------------------
- * Receive control register 1
- */
-#define RCR1_RSO 0x00 /* RSYNC outputs frame boundaries */
-#define RCR1_RSI 0x20 /* RSYNC is input (elastic store) */
-#define RCR1_RSO_CAS 0x40 /* RSYNC outputs CAS multiframe boundaries */
-#define RCR1_RSO_CRC4 0xc0 /* RSYNC outputs CRC4 multiframe boundaries */
-
-#define RCR1_FRC 0x04 /* frame resync criteria */
-#define RCR1_SYNCD 0x02 /* auto resync disable */
-#define RCR1_RESYNC 0x01 /* force resync */
-
-/*
- * Receive control register 2
- */
-#define RCR2_SA_8 0x80 /* output Sa8 bit at RLINK pin */
-#define RCR2_SA_7 0x40 /* output Sa7 bit at RLINK pin */
-#define RCR2_SA_6 0x20 /* output Sa6 bit at RLINK pin */
-#define RCR2_SA_5 0x10 /* output Sa5 bit at RLINK pin */
-#define RCR2_SA_4 0x08 /* output Sa4 bit at RLINK pin */
-#define RCR2_RSCLKM 0x04 /* receive side SYSCLK mode 2048 */
-#define RCR2_RESE 0x02 /* receive side elastic store enable */
-
-/*
- * Transmit control register 1
- */
-#define TCR1_TFPT 0x40 /* source timeslot 0 from TSER pin */
-#define TCR1_T16S 0x20 /* source timeslot 16 from TS1..TS16 regs */
-#define TCR1_TUA1 0x10 /* transmit unframed all ones */
-#define TCR1_TSIS 0x08 /* source Si bits from TAF/TNAF registers */
-#define TCR1_TSA1 0x04 /* transmit timeslot 16 all ones */
-
-#define TCR1_TSI 0x00 /* TSYNC is input */
-#define TCR1_TSO 0x01 /* TSYNC outputs frame boundaries */
-#define TCR1_TSO_MF 0x03 /* TSYNC outputs CAS/CRC4 m/f boundaries */
-
-/*
- * Transmit control register 2
- */
-#define TCR2_SA_8 0x80 /* source Sa8 bit from TLINK pin */
-#define TCR2_SA_7 0x40 /* source Sa7 bit from TLINK pin */
-#define TCR2_SA_6 0x20 /* source Sa6 bit from TLINK pin */
-#define TCR2_SA_5 0x10 /* source Sa5 bit from TLINK pin */
-#define TCR2_SA_4 0x08 /* source Sa4 bit from TLINK pin */
-#define TCR2_AEBE 0x02 /* automatic E-bit enable */
-#define TCR2_P16F 0x01 /* pin 16 is Loss of Transmit Clock */
-
-/*
- * Common control register 1
- */
-#define CCR1_FLOOP 0x80 /* enable framer loopback */
-#define CCR1_THDB3 0x40 /* enable transmit HDB3 */
-#define CCR1_TG802 0x20 /* enable transmit G.802 */
-#define CCR1_TCRC4 0x10 /* enable transmit CRC4 */
-#define CCR1_CCS 0x08 /* common channel signaling mode */
-#define CCR1_RHDB3 0x04 /* enable receive HDB3 */
-#define CCR1_RG802 0x02 /* enable receive G.802 */
-#define CCR1_RCRC4 0x01 /* enable receive CRC4 */
-
-/*
- * Common control register 2
- */
-#define CCR2_EC625 0x80 /* update error counters every 62.5 ms */
-#define CCR2_CNTCV 0x40 /* count code violations */
-#define CCR2_AUTOAIS 0x20 /* automatic AIS generation */
-#define CCR2_AUTORA 0x10 /* automatic remote alarm generation */
-#define CCR2_LOFA1 0x08 /* force RSER to 1 under loss of frame align */
-#define CCR2_TRCLK 0x04 /* switch transmitter to RCLK if TCLK stops */
-#define CCR2_RLOOP 0x02 /* enable remote loopback */
-#define CCR2_LLOOP 0x01 /* enable local loopback */
-
-/*
- * Common control register 3
- */
-#define CCR3_TESE 0x80 /* enable transmit elastic store */
-#define CCR3_TCBFS 0x40 /* TCBRs define signaling bits to insert */
-#define CCR3_TIRSER 0x20 /* TIRs define data channels from RSER pin */
-#define CCR3_ESRESET 0x10 /* elastic store reset */
-#define CCR3_LIRESET 0x08 /* line interface reset */
-#define CCR3_THSE 0x04 /* insert signaling from TSIG into TSER */
-#define CCR3_TSCLKM 0x02 /* transmit backplane clock 2048 */
-
-/*
- * Line interface control register
- */
-#define LICR_DB21 0x80 /* return loss 21 dB */
-
-#define LICR_LB75 0x00 /* 75 Ohm normal */
-#define LICR_LB120 0x20 /* 120 Ohm normal */
-#define LICR_LB75P 0x40 /* 75 Ohm protected */
-#define LICR_LB120P 0x60 /* 120 Ohm protected */
-
-#define LICR_HIGAIN 0x10 /* receive gain 30 dB */
-#define LICR_JA_TX 0x08 /* transmit side jitter attenuator select */
-#define LICR_JA_LOW 0x04 /* low jitter attenuator depth (32 bits) */
-#define LICR_JA_DISABLE 0x02 /* disable jitter attenuator */
-#define LICR_POWERDOWN 0x01 /* transmit power down */
-
-/*----------------------------------------------
- * Receive information register
- */
-#define RIR_TES_FULL 0x80 /* transmit elastic store full */
-#define RIR_TES_EMPTY 0x40 /* transmit elastic store empty */
-#define RIR_JALT 0x20 /* jitter attenuation limit trip */
-#define RIR_ES_FULL 0x10 /* elastic store full */
-#define RIR_ES_EMPTY 0x08 /* elastic store empty */
-#define RIR_RESYNC_CRC 0x04 /* CRC4 resync (915/1000 errors) */
-#define RIR_RESYNC 0x02 /* frame resync (three consec errors) */
-#define RIR_RESYNC_CAS 0x01 /* CAS resync (two consec errors) */
-
-/*
- * Synchronizer status register
- */
-#define SSR_CSC(v) (((v) >> 2) & 0x3c | ((v) >> 3) & 1)
- /* CRC4 sync counter (6 bits, bit 1 n/a) */
-#define SSR_SYNC 0x04 /* frame alignment sync active */
-#define SSR_SYNC_CAS 0x02 /* CAS multiframe sync active */
-#define SSR_SYNC_CRC4 0x01 /* CRC4 multiframe sync active */
-
-/*
- * Status register 1
- */
-#define SR1_RSA1 0x80 /* receive signaling all ones */
-#define SR1_RDMA 0x40 /* receive distant multiframe alarm */
-#define SR1_RSA0 0x20 /* receive signaling all zeros */
-#define SR1_RSLIP 0x10 /* receive elastic store slip event */
-#define SR1_RUA1 0x08 /* receive unframed all ones */
-#define SR1_RRA 0x04 /* receive remote alarm */
-#define SR1_RCL 0x02 /* receive carrier loss */
-#define SR1_RLOS 0x01 /* receive loss of sync */
-
-/*
- * Status register 2
- */
-#define SR2_RMF 0x80 /* receive CAS multiframe (every 2 ms) */
-#define SR2_RAF 0x40 /* receive align frame (every 250 us) */
-#define SR2_TMF 0x20 /* transmit multiframe (every 2 ms) */
-#define SR2_SEC 0x10 /* one second timer (or 62.5 ms) */
-#define SR2_TAF 0x08 /* transmit align frame (every 250 us) */
-#define SR2_LOTC 0x04 /* loss of transmit clock */
-#define SR2_RCMF 0x02 /* receive CRC4 multiframe (every 2 ms) */
-#define SR2_TSLIP 0x01 /* transmit elastic store slip event */
-
-/*
- * Error count registers
- */
-#define VCR(h,l) (((short) (h) << 8) | (l)) /* 16-bit code violation */
-#define CRCCR(h,l) (((short) (h) << 8 & 0x300) | (l)) /* 10-bit CRC4 error count */
-#define EBCR(h,l) (((short) (h) << 8 & 0x300) | (l)) /* 10-bit E-bit count */
-#define FASCR(h,l) (((short) (h) << 4 & 0xfc0) | (l) >> 2) /* 12-bit FAS error count */
-
-#define FASCRH(h) ((h) << 4) /* 12-bit FAS error count */
-#define FASCRL(l) ((l) >> 2) /* 12-bit FAS error count */
-
-/*
- * DS21x54 additional registers
- */
-#define DS_IDR 0x0f /* r - device id */
-#define DS_TSACR 0x1c /* rw - transmit Sa bit control */
-#define DS_CCR6 0x1d /* rw - common control 6 */
-
-#define DS_TSIAF 0x50 /* rw - transmit Si bits align frame */
-#define DS_TSINAF 0x51 /* rw - transmit Si bits non-align frame */
-#define DS_TRA 0x52 /* rw - transmit remote alarm bits */
-#define DS_TSA4 0x53 /* rw - transmit Sa4 bits */
-#define DS_TSA5 0x54 /* rw - transmit Sa5 bits */
-#define DS_TSA6 0x55 /* rw - transmit Sa6 bits */
-#define DS_TSA7 0x56 /* rw - transmit Sa7 bits */
-#define DS_TSA8 0x57 /* rw - transmit Sa8 bits */
-#define DS_RSIAF 0x58 /* r - receive Si bits align frame */
-#define DS_RSINAF 0x59 /* r - receive Si bits non-align frame */
-#define DS_RRA 0x5a /* r - receive remote alarm bits */
-#define DS_RSA4 0x5b /* r - receive Sa4 bits */
-#define DS_RSA5 0x5c /* r - receive Sa5 bits */
-#define DS_RSA6 0x5d /* r - receive Sa6 bits */
-#define DS_RSA7 0x5e /* r - receive Sa7 bits */
-#define DS_RSA8 0x5f /* r - receive Sa8 bits */
-
-#define DS_TCC1 0xa0 /* rw - transmit channel control 1 */
-#define DS_TCC2 0xa1 /* rw - transmit channel control 2 */
-#define DS_TCC3 0xa2 /* rw - transmit channel control 3 */
-#define DS_TCC4 0xa3 /* rw - transmit channel control 4 */
-#define DS_RCC1 0xa4 /* rw - receive channel control 1 */
-#define DS_RCC2 0xa5 /* rw - receive channel control 2 */
-#define DS_RCC3 0xa6 /* rw - receive channel control 3 */
-#define DS_RCC4 0xa7 /* rw - receive channel control 4 */
-
-#define DS_CCR4 0xa8 /* rw - common control 4 */
-#define DS_TDS0M 0xa9 /* r - transmit ds0 monitor */
-#define DS_CCR5 0xaa /* rw - common control 5 */
-#define DS_RDS0M 0xab /* r - receive ds0 monitor */
-#define DS_TEST3 0xac /* rw - test 3, set to 00h */
-
-#define DS_HCR 0xb0 /* rw - hdlc control */
-#define DS_HSR 0xb1 /* rw - hdlc status */
-#define DS_HIMR 0xb2 /* rw - hdlc interrupt mask */
-#define DS_RHIR 0xb3 /* rw - receive hdlc information */
-#define DS_RHFR 0xb4 /* rw - receive hdlc fifo */
-#define DS_IBO 0xb5 /* rw - interleave bus operation */
-#define DS_THIR 0xb6 /* rw - transmit hdlc information */
-#define DS_THFR 0xb7 /* rw - transmit hdlc fifo */
-#define DS_RDC1 0xb8 /* rw - receive hdlc ds0 control 1 */
-#define DS_RDC2 0xb9 /* rw - receive hdlc ds0 control 2 */
-#define DS_TDC1 0xba /* rw - transmit hdlc ds0 control 1 */
-#define DS_TDC2 0xbb /* rw - transmit hdlc ds0 control 2 */
-
-#define CCR4_RLB 0x80 /* enable remote loopback */
-#define CCR4_LLB 0x40 /* enable local loopback */
-#define CCR5_LIRST 0x80 /* line interface reset */
-#define CCR6_RESR 0x02 /* receive elastic store reset */
-#define CCR6_TESR 0x01 /* transmit elastic store reset */
diff --git a/sys/dev/ctau/hdc64570.h b/sys/dev/ctau/hdc64570.h
deleted file mode 100644
index 29d28cddb04c..000000000000
--- a/sys/dev/ctau/hdc64570.h
+++ /dev/null
@@ -1,492 +0,0 @@
-/*-
- * Hitachi HD64570 serial communications adaptor registers.
- *
- * Copyright (C) 1996 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: hdc64570.h,v 1.1.2.2 2003/11/12 17:31:21 rik Exp $
- * $FreeBSD$
- */
-
-/*
- * Low power mode control register.
- */
-#define HD_LPR 0x00 /* low power register */
-
-/*
- * Interrupt control registers.
- */
-#define HD_IVR 0x1a /* interrupt vector register */
-#define HD_IMVR 0x1c /* interrupt modified vector register */
-#define HD_ITCR 0x18 /* interrupt control register */
-#define HD_ISR0 0x10 /* interrupt status register 0, ro */
-#define HD_ISR1 0x11 /* interrupt status register 1, ro */
-#define HD_ISR2 0x12 /* interrupt status register 2, ro */
-#define HD_IER0 0x14 /* interrupt enable register 0 */
-#define HD_IER1 0x15 /* interrupt enable register 1 */
-#define HD_IER2 0x16 /* interrupt enable register 2 */
-
-/*
- * Multiprotocol serial communication interface registers.
- */
-#define HD_MD0_0 0x2e /* mode register 0 chan 0 */
-#define HD_MD0_1 0x4e /* mode register 0 chan 1 */
-#define HD_MD1_0 0x2f /* mode register 1 chan 0 */
-#define HD_MD1_1 0x4f /* mode register 1 chan 1 */
-#define HD_MD2_0 0x30 /* mode register 2 chan 0 */
-#define HD_MD2_1 0x50 /* mode register 2 chan 1 */
-#define HD_CTL_0 0x31 /* control register chan 0 */
-#define HD_CTL_1 0x51 /* control register chan 1 */
-#define HD_RXS_0 0x36 /* RX clock source register chan 0 */
-#define HD_RXS_1 0x56 /* RX clock source register chan 1 */
-#define HD_TXS_0 0x37 /* TX clock source register chan 0 */
-#define HD_TXS_1 0x57 /* TX clock source register chan 1 */
-#define HD_TMC_0 0x35 /* time constant register chan 0 */
-#define HD_TMC_1 0x55 /* time constant register chan 1 */
-#define HD_CMD_0 0x2c /* command register chan 0, wo */
-#define HD_CMD_1 0x4c /* command register chan 1, wo */
-#define HD_ST0_0 0x22 /* status register 0 chan 0, ro */
-#define HD_ST0_1 0x42 /* status register 0 chan 1, ro */
-#define HD_ST1_0 0x23 /* status register 1 chan 0 */
-#define HD_ST1_1 0x43 /* status register 1 chan 1 */
-#define HD_ST2_0 0x24 /* status register 2 chan 0 */
-#define HD_ST2_1 0x44 /* status register 2 chan 1 */
-#define HD_ST3_0 0x25 /* status register 3 chan 0, ro */
-#define HD_ST3_1 0x45 /* status register 3 chan 1, ro */
-#define HD_FST_0 0x26 /* frame status register chan 0 */
-#define HD_FST_1 0x46 /* frame status register chan 1 */
-#define HD_IE0_0 0x28 /* interrupt enable register 0 chan 0 */
-#define HD_IE0_1 0x48 /* interrupt enable register 0 chan 1 */
-#define HD_IE1_0 0x29 /* interrupt enable register 1 chan 0 */
-#define HD_IE1_1 0x49 /* interrupt enable register 1 chan 1 */
-#define HD_IE2_0 0x2a /* interrupt enable register 2 chan 0 */
-#define HD_IE2_1 0x4a /* interrupt enable register 2 chan 1 */
-#define HD_FIE_0 0x2b /* frame interrupt enable register chan 0 */
-#define HD_FIE_1 0x4b /* frame interrupt enable register chan 1 */
-#define HD_SA0_0 0x32 /* sync/address register 0 chan 0 */
-#define HD_SA0_1 0x52 /* sync/address register 0 chan 1 */
-#define HD_SA1_0 0x33 /* sync/address register 1 chan 0 */
-#define HD_SA1_1 0x53 /* sync/address register 1 chan 1 */
-#define HD_IDL_0 0x34 /* idle pattern register chan 0 */
-#define HD_IDL_1 0x54 /* idle pattern register chan 1 */
-#define HD_TRB_0 0x20 /* TX/RX buffer register chan 0 */
-#define HD_TRB_1 0x40 /* TX/RX buffer register chan 1 */
-#define HD_RRC_0 0x3a /* RX ready control register chan 0 */
-#define HD_RRC_1 0x5a /* RX ready control register chan 1 */
-#define HD_TRC0_0 0x38 /* TX ready control register 0 chan 0 */
-#define HD_TRC0_1 0x58 /* TX ready control register 0 chan 1 */
-#define HD_TRC1_0 0x39 /* TX ready control register 1 chan 0 */
-#define HD_TRC1_1 0x59 /* TX ready control register 1 chan 1 */
-#define HD_CST_0 0x3c /* current status register chan 0 */
-#define HD_CST_1 0x5c /* current status register chan 1 */
-
-/*
- * DMA controller registers.
- */
-#define HD_PCR 0x08 /* DMA priority control register */
-#define HD_DMER 0x09 /* DMA master enable register */
-
-#define HD_DAR_0R 0x80 /* destination address chan 0rx */
-#define HD_DAR_0T 0xa0 /* destination address chan 0tx */
-#define HD_DAR_1R 0xc0 /* destination address chan 1rx */
-#define HD_DAR_1T 0xe0 /* destination address chan 1tx */
-#define HD_DARB_0R 0x82 /* destination address B chan 0rx */
-#define HD_DARB_0T 0xa2 /* destination address B chan 0tx */
-#define HD_DARB_1R 0xc2 /* destination address B chan 1rx */
-#define HD_DARB_1T 0xe2 /* destination address B chan 1tx */
-#define HD_SAR_0R 0x84 /* source address chan 0rx */
-#define HD_SAR_0T 0xa4 /* source address chan 0tx */
-#define HD_SAR_1R 0xc4 /* source address chan 1rx */
-#define HD_SAR_1T 0xe4 /* source address chan 1tx */
-#define HD_SARB_0R 0x86 /* source address B chan 0rx */
-#define HD_SARB_0T 0xa6 /* source address B chan 0tx */
-#define HD_SARB_1R 0xc6 /* source address B chan 1rx */
-#define HD_SARB_1T 0xe6 /* source address B chan 1tx */
-#define HD_CDA_0R 0x88 /* current descriptor address chan 0rx */
-#define HD_CDA_0T 0xa8 /* current descriptor address chan 0tx */
-#define HD_CDA_1R 0xc8 /* current descriptor address chan 1rx */
-#define HD_CDA_1T 0xe8 /* current descriptor address chan 1tx */
-#define HD_EDA_0R 0x8a /* error descriptor address chan 0rx */
-#define HD_EDA_0T 0xaa /* error descriptor address chan 0tx */
-#define HD_EDA_1R 0xca /* error descriptor address chan 1rx */
-#define HD_EDA_1T 0xea /* error descriptor address chan 1tx */
-#define HD_BFL_0R 0x8c /* receive buffer length chan 0rx */
-#define HD_BFL_1R 0xcc /* receive buffer length chan 1rx */
-#define HD_BCR_0R 0x8e /* byte count register chan 0rx */
-#define HD_BCR_0T 0xae /* byte count register chan 0tx */
-#define HD_BCR_1R 0xce /* byte count register chan 1rx */
-#define HD_BCR_1T 0xee /* byte count register chan 1tx */
-#define HD_DSR_0R 0x90 /* DMA status register chan 0rx */
-#define HD_DSR_0T 0xb0 /* DMA status register chan 0tx */
-#define HD_DSR_1R 0xd0 /* DMA status register chan 1rx */
-#define HD_DSR_1T 0xf0 /* DMA status register chan 1tx */
-#define HD_DMR_0R 0x91 /* DMA mode register chan 0rx */
-#define HD_DMR_0T 0xb1 /* DMA mode register chan 0tx */
-#define HD_DMR_1R 0xd1 /* DMA mode register chan 1rx */
-#define HD_DMR_1T 0xf1 /* DMA mode register chan 1tx */
-#define HD_FCT_0R 0x93 /* end-of-frame intr counter chan 0rx, ro */
-#define HD_FCT_0T 0xb3 /* end-of-frame intr counter chan 0tx, ro */
-#define HD_FCT_1R 0xd3 /* end-of-frame intr counter chan 1rx, ro */
-#define HD_FCT_1T 0xf3 /* end-of-frame intr counter chan 1tx, ro */
-#define HD_DIR_0R 0x94 /* DMA interrupt enable register chan 0rx */
-#define HD_DIR_0T 0xb4 /* DMA interrupt enable register chan 0tx */
-#define HD_DIR_1R 0xd4 /* DMA interrupt enable register chan 1rx */
-#define HD_DIR_1T 0xf4 /* DMA interrupt enable register chan 1tx */
-#define HD_DCR_0R 0x95 /* DMA command register chan 0rx, wo */
-#define HD_DCR_0T 0xb5 /* DMA command register chan 0tx, wo */
-#define HD_DCR_1R 0xd5 /* DMA command register chan 1rx, wo */
-#define HD_DCR_1T 0xf5 /* DMA command register chan 1tx, wo */
-
-/*
- * Timer registers.
- */
-#define HD_TCNT_0R 0x60 /* timer up counter chan 0rx */
-#define HD_TCNT_0T 0x68 /* timer up counter chan 0tx */
-#define HD_TCNT_1R 0x70 /* timer up counter chan 1rx */
-#define HD_TCNT_1T 0x78 /* timer up counter chan 1tx */
-#define HD_TCONR_0R 0x62 /* timer constant register chan 0rx, wo */
-#define HD_TCONR_0T 0x6a /* timer constant register chan 0tx, wo */
-#define HD_TCONR_1R 0x72 /* timer constant register chan 1rx, wo */
-#define HD_TCONR_1T 0x7a /* timer constant register chan 1tx, wo */
-#define HD_TCSR_0R 0x64 /* timer control/status register chan 0rx */
-#define HD_TCSR_0T 0x6c /* timer control/status register chan 0tx */
-#define HD_TCSR_1R 0x74 /* timer control/status register chan 1rx */
-#define HD_TCSR_1T 0x7c /* timer control/status register chan 1tx */
-#define HD_TEPR_0R 0x65 /* timer expand prescale register chan 0rx */
-#define HD_TEPR_0T 0x6d /* timer expand prescale register chan 0tx */
-#define HD_TEPR_1R 0x75 /* timer expand prescale register chan 1rx */
-#define HD_TEPR_1T 0x7d /* timer expand prescale register chan 1tx */
-
-/*
- * Wait controller registers.
- */
-#define HD_PABR0 0x02 /* physical address boundary register 0 */
-#define HD_PABR1 0x03 /* physical address boundary register 1 */
-#define HD_WCRL 0x04 /* wait control register L */
-#define HD_WCRM 0x05 /* wait control register M */
-#define HD_WCRH 0x06 /* wait control register H */
-
-/*
- * Interrupt modified vector register (IMVR) bits.
- */
-#define IMVR_CHAN1 040 /* channel 1 vector bit */
-#define IMVR_VECT_MASK 037 /* interrupt reason mask */
-
-#define IMVR_RX_RDY 004 /* receive buffer ready */
-#define IMVR_RX_INT 010 /* receive status */
-#define IMVR_RX_DMERR 024 /* receive DMA error */
-#define IMVR_RX_DMOK 026 /* receive DMA normal end */
-#define IMVR_RX_TIMER 034 /* timer 0/2 count match */
-
-#define IMVR_TX_RDY 006 /* transmit buffer ready */
-#define IMVR_TX_INT 012 /* transmit status */
-#define IMVR_TX_DMERR 030 /* transmit DMA error */
-#define IMVR_TX_DMOK 032 /* transmit DMA normal end */
-#define IMVR_TX_TIMER 036 /* timer 1/3 count match */
-
-/*
- * Interrupt control register (ITCR) bits.
- */
-#define ITCR_PRIO_DMAC 0x80 /* DMA priority higher than MSCI */
-#define ITCR_CYCLE_VOID 0x00 /* non-acknowledge cycle */
-#define ITCR_CYCLE_SINGLE 0x20 /* single acknowledge cycle */
-#define ITCR_CYCLE_DOUBLE 0x40 /* double acknowledge cycle */
-#define ITCR_VECT_MOD 0x10 /* interrupt modified vector flag */
-
-/*
- * Interrupt status register 0 (ISR0) bits.
- */
-#define ISR0_RX_RDY_0 0x01 /* channel 0 receiver ready */
-#define ISR0_TX_RDY_0 0x02 /* channel 0 transmitter ready */
-#define ISR0_RX_INT_0 0x04 /* channel 0 receiver status */
-#define ISR0_TX_INT_0 0x08 /* channel 0 transmitter status */
-#define ISR0_RX_RDY_1 0x10 /* channel 1 receiver ready */
-#define ISR0_TX_RDY_1 0x20 /* channel 1 transmitter ready */
-#define ISR0_RX_INT_1 0x40 /* channel 1 receiver status */
-#define ISR0_TX_INT_1 0x80 /* channel 1 transmitter status */
-
-/*
- * Interrupt status register 1 (ISR1) bits.
- */
-#define ISR1_RX_DMERR_0 0x01 /* channel 0 receive DMA error */
-#define ISR1_RX_DMOK_0 0x02 /* channel 0 receive DMA finished */
-#define ISR1_TX_DMERR_0 0x04 /* channel 0 transmit DMA error */
-#define ISR1_TX_DMOK_0 0x08 /* channel 0 transmit DMA finished */
-#define ISR1_RX_DMERR_1 0x10 /* channel 1 receive DMA error */
-#define ISR1_RX_DMOK_1 0x20 /* channel 1 receive DMA finished */
-#define ISR1_TX_DMERR_1 0x40 /* channel 1 transmit DMA error */
-#define ISR1_TX_DMOK_1 0x80 /* channel 1 transmit DMA finished */
-
-/*
- * Interrupt status register 2 (ISR2) bits.
- */
-#define ISR2_RX_TIMER_0 0x10 /* channel 0 receive timer */
-#define ISR2_TX_TIMER_0 0x20 /* channel 0 transmit timer */
-#define ISR2_RX_TIMER_1 0x40 /* channel 1 receive timer */
-#define ISR2_TX_TIMER_1 0x80 /* channel 1 transmit timer */
-
-/*
- * Interrupt enable register 0 (IER0) bits.
- */
-#define IER0_RX_RDYE_0 0x01 /* channel 0 receiver ready enable */
-#define IER0_TX_RDYE_0 0x02 /* channel 0 transmitter ready enable */
-#define IER0_RX_INTE_0 0x04 /* channel 0 receiver status enable */
-#define IER0_TX_INTE_0 0x08 /* channel 0 transmitter status enable */
-#define IER0_RX_RDYE_1 0x10 /* channel 1 receiver ready enable */
-#define IER0_TX_RDYE_1 0x20 /* channel 1 transmitter ready enable */
-#define IER0_RX_INTE_1 0x40 /* channel 1 receiver status enable */
-#define IER0_TX_INTE_1 0x80 /* channel 1 transmitter status enable */
-#define IER0_MASK_0 0x0f /* channel 0 bits */
-#define IER0_MASK_1 0xf0 /* channel 1 bits */
-
-/*
- * Interrupt enable register 1 (IER1) bits.
- */
-#define IER1_RX_DMERE_0 0x01 /* channel 0 receive DMA error enable */
-#define IER1_RX_DME_0 0x02 /* channel 0 receive DMA finished enable */
-#define IER1_TX_DMERE_0 0x04 /* channel 0 transmit DMA error enable */
-#define IER1_TX_DME_0 0x08 /* channel 0 transmit DMA finished enable */
-#define IER1_RX_DMERE_1 0x10 /* channel 1 receive DMA error enable */
-#define IER1_RX_DME_1 0x20 /* channel 1 receive DMA finished enable */
-#define IER1_TX_DMERE_1 0x40 /* channel 1 transmit DMA error enable */
-#define IER1_TX_DME_1 0x80 /* channel 1 transmit DMA finished enable */
-#define IER1_MASK_0 0x0f /* channel 0 bits */
-#define IER1_MASK_1 0xf0 /* channel 1 bits */
-
-/*
- * Interrupt enable register 2 (IER2) bits.
- */
-#define IER2_RX_TME_0 0x10 /* channel 0 receive timer enable */
-#define IER2_TX_TME_0 0x20 /* channel 0 transmit timer enable */
-#define IER2_RX_TME_1 0x40 /* channel 1 receive timer enable */
-#define IER2_TX_TME_1 0x80 /* channel 1 transmit timer enable */
-#define IER2_MASK_0 0x30 /* channel 0 bits */
-#define IER2_MASK_1 0xc0 /* channel 1 bits */
-
-/*
- * Control register (CTL) bits.
- */
-#define CTL_RTS_INV 0x01 /* RTS control bit (inverted) */
-#define CTL_SYNCLD 0x04 /* load SYN characters */
-#define CTL_BRK 0x08 /* async: send break */
-#define CTL_IDLE_MARK 0 /* HDLC: when idle, transmit mark */
-#define CTL_IDLE_PTRN 0x10 /* HDLC: when idle, transmit an idle pattern */
-#define CTL_UDRN_ABORT 0 /* HDLC: on underrun - abort */
-#define CTL_UDRN_FCS 0x20 /* HDLC: on underrun - send FCS/flag */
-
-/*
- * Command register (CMD) values.
- */
-#define CMD_TX_RESET 001 /* reset: disable, clear buffer/status/BRK */
-#define CMD_TX_ENABLE 002 /* transmitter enable */
-#define CMD_TX_DISABLE 003 /* transmitter disable */
-#define CMD_TX_CRC_INIT 004 /* initialize CRC calculator */
-#define CMD_TX_EOM_CHAR 006 /* set end-of-message char */
-#define CMD_TX_ABORT 007 /* abort transmission (HDLC mode) */
-#define CMD_TX_MPON 010 /* transmit char with MP bit on (async) */
-#define CMD_TX_CLEAR 011 /* clear the transmit buffer */
-
-#define CMD_RX_RESET 021 /* reset: disable, clear buffer/status */
-#define CMD_RX_ENABLE 022 /* receiver enable */
-#define CMD_RX_DISABLE 023 /* receiver disable */
-#define CMD_RX_CRC_INIT 024 /* initialize CRC calculator */
-#define CMD_RX_REJECT 025 /* reject current message (sync mode) */
-#define CMD_RX_SRCH_MP 026 /* skip all until the char witn MP bit on */
-
-#define CMD_NOOP 000 /* continue current operation */
-#define CMD_CHAN_RESET 041 /* init registers, disable/clear RX/TX */
-#define CMD_SEARCH_MODE 061 /* set the ADPLL to search mode */
-
-/*
- * Status register 0 (ST0) bits.
- */
-#define ST0_RX_RDY 0x01 /* receiver ready */
-#define ST0_TX_RDY 0x02 /* transmitter ready */
-#define ST0_RX_INT 0x40 /* receiver status interrupt */
-#define ST0_TX_INT 0x80 /* transmitter status interrupt */
-
-/*
- * Status register 1 (ST1) bits.
- */
-#define ST1_CDCD 0x04 /* carrier changed */
-#define ST1_CCTS 0x08 /* CTS changed */
-#define ST1_IDL 0x40 /* transmitter idle, ro */
-
-#define ST1_ASYNC_BRKE 0x01 /* break end detected */
-#define ST1_ASYNC_BRKD 0x02 /* break start detected */
-#define ST1_ASYNC_BITS "\20\1brke\2brkd\3cdcd\4ccts\7idl"
-
-#define ST1_HDLC_IDLD 0x01 /* idle sequence start detected */
-#define ST1_HDLC_ABTD 0x02 /* abort sequence start detected */
-#define ST1_HDLC_FLGD 0x10 /* flag detected */
-#define ST1_HDLC_UDRN 0x80 /* underrun detected */
-#define ST1_HDLC_BITS "\20\1idld\2abtd\3cdcd\4ccts\5flgd\7idl\10udrn"
-
-/*
- * Status register 2 (ST2) bits.
- */
-#define ST2_OVRN 0x08 /* overrun error detected */
-
-#define ST2_ASYNC_FRME 0x10 /* framing error detected */
-#define ST2_ASYNC_PE 0x20 /* parity error detected */
-#define ST2_ASYNC_PMP 0x40 /* parity/MP bit = 1 */
-#define ST2_ASYNC_BITS "\20\4ovrn\5frme\6pe\7pmp"
-
-#define ST2_HDLC_CRCE 0x04 /* CRC error detected */
-#define ST2_HDLC_RBIT 0x10 /* residual bit frame detected */
-#define ST2_HDLC_ABT 0x20 /* frame with abort end detected */
-#define ST2_HDLC_SHRT 0x40 /* short frame detected */
-#define ST2_HDLC_EOM 0x80 /* receive frame end detected */
-#define ST2_HDLC_BITS "\20\3crce\4ovrn\5rbit\6abt\7shrt\10eom"
-
-/*
- * Status register 3 (ST3) bits.
- */
-#define ST3_RX_ENABLED 0x01 /* receiver is enabled */
-#define ST3_TX_ENABLED 0x02 /* transmitter is enabled */
-#define ST3_DCD_INV 0x04 /* DCD input line inverted */
-#define ST3_CTS_INV 0x08 /* CTS input line inverted */
-#define ST3_ASYNC_BITS "\20\1rx\2tx\3nodcd\4nocts"
-
-#define ST3_HDLC_SEARCH 0x10 /* ADPLL search mode */
-#define ST3_HDLC_TX 0x20 /* channel is transmitting data */
-#define ST3_HDLC_BITS "\20\1rx\2tx\3nodcd\4nocts\5search\6txact"
-
-/*
- * Frame status register (FST) bits, HDLC mode only.
- */
-#define FST_CRCE 0x04 /* CRC error detected */
-#define FST_OVRN 0x08 /* overrun error detected */
-#define FST_RBIT 0x10 /* residual bit frame detected */
-#define FST_ABT 0x20 /* frame with abort end detected */
-#define FST_SHRT 0x40 /* short frame detected */
-#define FST_EOM 0x80 /* frame end flag */
-
-#define FST_EOT 0x01 /* end of transfer, transmit only */
-
-/*
- * Interrupt enable register 0 (IE0) bits.
- */
-#define IE0_RX_RDYE 0x01 /* receiver ready interrupt enable */
-#define IE0_TX_RDYE 0x02 /* transmitter ready interrupt enable */
-#define IE0_RX_INTE 0x40 /* receiver status interrupt enable */
-#define IE0_TX_INTE 0x80 /* transmitter status interrupt enable */
-
-/*
- * Interrupt enable register 1 (IE1) bits.
- */
-#define IE1_CDCDE 0x04 /* carrier changed */
-#define IE1_CCTSE 0x08 /* CTS changed */
-#define IE1_IDLE 0x40 /* transmitter idle, ro */
-
-#define IE1_ASYNC_BRKEE 0x01 /* break end detected */
-#define IE1_ASYNC_BRKDE 0x02 /* break start detected */
-
-#define IE1_HDLC_IDLDE 0x01 /* idle sequence start detected */
-#define IE1_HDLC_ABTDE 0x02 /* abort sequence start detected */
-#define IE1_HDLC_FLGDE 0x10 /* flag detected */
-#define IE1_HDLC_UDRNE 0x80 /* underrun detected */
-
-/*
- * Interrupt enable register 2 (IE2) bits.
- */
-#define IE2_OVRNE 0x08 /* overrun error detected */
-
-#define IE2_ASYNC_FRMEE 0x10 /* framing error detected */
-#define IE2_ASYNC_PEE 0x20 /* parity error detected */
-#define IE2_ASYNC_PMPE 0x40 /* parity/MP bit = 1 */
-
-#define IE2_HDLC_CRCEE 0x04 /* CRC error detected */
-#define IE2_HDLC_RBITE 0x10 /* residual bit frame detected */
-#define IE2_HDLC_ABTE 0x20 /* frame with abort end detected */
-#define IE2_HDLC_SHRTE 0x40 /* short frame detected */
-#define IE2_HDLC_EOME 0x80 /* receive frame end detected */
-
-/*
- * Frame interrupt enable register (FIE) bits, HDLC mode only.
- */
-#define FIE_EOMFE 0x80 /* receive frame end detected */
-
-/*
- * Current status register (CST0,CST1) bits.
- * For other bits, see ST2.
- */
-#define CST0_CDE 0x0001 /* data present on top of FIFO */
-#define CST1_CDE 0x0100 /* data present on second stage of FIFO */
-
-/*
- * Receive/transmit clock source register (RXS/TXS) bits.
- */
-#define CLK_MASK 0x70 /* RXC/TXC clock input mask */
-#define CLK_LINE 0x00 /* RXC/TXC line input */
-#define CLK_INT 0x40 /* internal baud rate generator */
-
-#define CLK_RXS_LINE_NS 0x20 /* RXC line with noise suppression */
-#define CLK_RXS_DPLL_INT 0x60 /* ADPLL based on internal BRG */
-#define CLK_RXS_DPLL_LINE 0x70 /* ADPLL based on RXC line */
-
-#define CLK_TXS_RECV 0x60 /* receive clock */
-
-/*
- * DMA status register (DSR) bits.
- */
-#define DSR_DMA_DISABLE 0x00 /* disable DMA channel */
-#define DSR_DMA_ENABLE 0x02 /* enable DMA channel */
-#define DSR_DMA_CONTINUE 0x01 /* do not enable/disable DMA channel */
-#define DSR_CHAIN_COF 0x10 /* counter overflow */
-#define DSR_CHAIN_BOF 0x20 /* buffer overflow/underflow */
-#define DSR_CHAIN_EOM 0x40 /* frame transfer completed */
-#define DSR_EOT 0x80 /* transfer completed */
-#define DSR_BITS "\20\1cont\2enab\5cof\6bof\7eom\10eot"
-
-/*
- * DMA mode register (DMR) bits.
- */
-#define DMR_CHAIN_CNTE 0x02 /* enable frame interrupt counter (FCT) */
-#define DMR_CHAIN_NF 0x04 /* multi-frame block chain */
-#define DMR_TMOD 0x10 /* chained-block transfer mode */
-
-/*
- * DMA interrupt enable register (DIR) bits.
- */
-#define DIR_CHAIN_COFE 0x10 /* counter overflow */
-#define DIR_CHAIN_BOFE 0x20 /* buffer overflow/underflow */
-#define DIR_CHAIN_EOME 0x40 /* frame transfer completed */
-#define DIR_EOTE 0x80 /* transfer completed */
-
-/*
- * DMA command register (DCR) values.
- */
-#define DCR_ABORT 1 /* software abort: initialize DMA channel */
-#define DCR_CLEAR 2 /* clear FCT and EOM bit of DSR */
-
-/*
- * DMA master enable register (DME) bits.
- */
-#define DME_ENABLE 0x80 /* enable DMA master operation */
-
-/*
- * Timer control/status register (TCSR) bits.
- */
-#define TCSR_ENABLE 0x10 /* timer starts incrementing */
-#define TCSR_INTR 0x40 /* timer interrupt enable */
-#define TCSR_MATCH 0x80 /* TCNT and TCONR are equal */
-
-/*
- * Timer expand prescale register (TEPR) values.
- */
-#define TEPR_1 0 /* sysclk/8 */
-#define TEPR_2 1 /* sysclk/8/2 */
-#define TEPR_4 2 /* sysclk/8/4 */
-#define TEPR_8 3 /* sysclk/8/8 */
-#define TEPR_16 4 /* sysclk/8/16 */
-#define TEPR_32 5 /* sysclk/8/32 */
-#define TEPR_64 6 /* sysclk/8/64 */
-#define TEPR_128 7 /* sysclk/8/128 */
diff --git a/sys/dev/ctau/if_ct.c b/sys/dev/ctau/if_ct.c
deleted file mode 100644
index 540842511f10..000000000000
--- a/sys/dev/ctau/if_ct.c
+++ /dev/null
@@ -1,2207 +0,0 @@
-/*-
- * Cronyx-Tau adapter driver for FreeBSD.
- * Supports PPP/HDLC and Cisco/HDLC protocol in synchronous mode,
- * and asynchronous channels with full modem control.
- * Keepalive protocol implemented in both Cisco and PPP modes.
- *
- * Copyright (C) 1994-2002 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * Copyright (C) 1999-2004 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations a permission to use,
- * modify and redistribute this software in source and binary forms,
- * as long as this message is kept with the software, all derivative
- * works or modified versions.
- *
- * Cronyx Id: if_ct.c,v 1.1.2.31 2004/06/23 17:09:13 rik Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/proc.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/mbuf.h>
-#include <sys/sockio.h>
-#include <sys/malloc.h>
-#include <sys/priv.h>
-#include <sys/socket.h>
-#include <sys/sysctl.h>
-#include <sys/conf.h>
-#include <sys/errno.h>
-#include <sys/tty.h>
-#include <sys/bus.h>
-#include <machine/bus.h>
-#include <sys/rman.h>
-#include <isa/isavar.h>
-#include <sys/interrupt.h>
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <net/if.h>
-#include <net/if_var.h>
-#include <machine/cpufunc.h>
-#include <machine/cserial.h>
-#include <machine/resource.h>
-#include <dev/cx/machdep.h>
-#include <dev/ctau/ctddk.h>
-#include <dev/cx/cronyxfw.h>
-#include "opt_ng_cronyx.h"
-#ifdef NETGRAPH_CRONYX
-# include "opt_netgraph.h"
-# include <netgraph/ng_message.h>
-# include <netgraph/netgraph.h>
-# include <dev/ctau/ng_ct.h>
-#else
-# include <net/if_types.h>
-# include <net/if_sppp.h>
-# define PP_CISCO IFF_LINK2
-# include <net/bpf.h>
-#endif
-
-#define NCTAU 1
-
-/* If we don't have Cronyx's sppp version, we don't have fr support via sppp */
-#ifndef PP_FR
-#define PP_FR 0
-#endif
-
-#define CT_DEBUG(d,s) ({if (d->chan->debug) {\
- printf ("%s: ", d->name); printf s;}})
-#define CT_DEBUG2(d,s) ({if (d->chan->debug>1) {\
- printf ("%s: ", d->name); printf s;}})
-
-#define CT_LOCK_NAME "ctX"
-
-#define CT_LOCK(_bd) mtx_lock (&(_bd)->ct_mtx)
-#define CT_UNLOCK(_bd) mtx_unlock (&(_bd)->ct_mtx)
-#define CT_LOCK_ASSERT(_bd) mtx_assert (&(_bd)->ct_mtx, MA_OWNED)
-
-static void ct_identify __P((driver_t *, device_t));
-static int ct_probe __P((device_t));
-static int ct_attach __P((device_t));
-static int ct_detach __P((device_t));
-
-static device_method_t ct_isa_methods [] = {
- DEVMETHOD(device_identify, ct_identify),
- DEVMETHOD(device_probe, ct_probe),
- DEVMETHOD(device_attach, ct_attach),
- DEVMETHOD(device_detach, ct_detach),
-
- DEVMETHOD_END
-};
-
-typedef struct _ct_dma_mem_t {
- unsigned long phys;
- void *virt;
- size_t size;
- bus_dma_tag_t dmat;
- bus_dmamap_t mapp;
-} ct_dma_mem_t;
-
-typedef struct _drv_t {
- char name [8];
- ct_chan_t *chan;
- ct_board_t *board;
- struct _bdrv_t *bd;
- ct_dma_mem_t dmamem;
- int running;
-#ifdef NETGRAPH
- char nodename [NG_NODESIZ];
- hook_p hook;
- hook_p debug_hook;
- node_p node;
- struct ifqueue queue;
- struct ifqueue hi_queue;
-#else
- struct ifqueue queue;
- struct ifnet *ifp;
-#endif
- short timeout;
- struct callout timeout_handle;
- struct cdev *devt;
-} drv_t;
-
-typedef struct _bdrv_t {
- ct_board_t *board;
- struct resource *base_res;
- struct resource *drq_res;
- struct resource *irq_res;
- int base_rid;
- int drq_rid;
- int irq_rid;
- void *intrhand;
- drv_t channel [NCHAN];
- struct mtx ct_mtx;
-} bdrv_t;
-
-static driver_t ct_isa_driver = {
- "ct",
- ct_isa_methods,
- sizeof (bdrv_t),
-};
-
-static devclass_t ct_devclass;
-
-static void ct_receive (ct_chan_t *c, char *data, int len);
-static void ct_transmit (ct_chan_t *c, void *attachment, int len);
-static void ct_error (ct_chan_t *c, int data);
-static void ct_up (drv_t *d);
-static void ct_start (drv_t *d);
-static void ct_down (drv_t *d);
-static void ct_watchdog (drv_t *d);
-static void ct_watchdog_timer (void *arg);
-#ifdef NETGRAPH
-extern struct ng_type typestruct;
-#else
-static void ct_ifstart (struct ifnet *ifp);
-static void ct_tlf (struct sppp *sp);
-static void ct_tls (struct sppp *sp);
-static int ct_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data);
-static void ct_initialize (void *softc);
-#endif
-
-static ct_board_t *adapter [NCTAU];
-static drv_t *channel [NCTAU*NCHAN];
-static struct callout led_timo [NCTAU];
-static struct callout timeout_handle;
-
-static int ct_open (struct cdev *dev, int oflags, int devtype, struct thread *td);
-static int ct_close (struct cdev *dev, int fflag, int devtype, struct thread *td);
-static int ct_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td);
-static struct cdevsw ct_cdevsw = {
- .d_version = D_VERSION,
- .d_open = ct_open,
- .d_close = ct_close,
- .d_ioctl = ct_ioctl,
- .d_name = "ct",
-};
-
-/*
- * Make an mbuf from data.
- */
-static struct mbuf *makembuf (void *buf, u_int len)
-{
- struct mbuf *m;
-
- MGETHDR (m, M_NOWAIT, MT_DATA);
- if (! m)
- return 0;
- if (!(MCLGET(m, M_NOWAIT))) {
- m_freem (m);
- return 0;
- }
- m->m_pkthdr.len = m->m_len = len;
- bcopy (buf, mtod (m, caddr_t), len);
- return m;
-}
-
-static void ct_timeout (void *arg)
-{
- drv_t *d;
- int s, i, k;
-
- for (i = 0; i < NCTAU; ++i) {
- if (adapter[i] == NULL)
- continue;
- for (k = 0; k < NCHAN; k++) {
- d = channel[i * NCHAN + k];
- if (! d)
- continue;
- if (d->chan->mode != M_G703)
- continue;
- s = splimp ();
- CT_LOCK ((bdrv_t *)d->bd);
- ct_g703_timer (d->chan);
- CT_UNLOCK ((bdrv_t *)d->bd);
- splx (s);
- }
- }
-
- callout_reset (&timeout_handle, hz, ct_timeout, 0);
-}
-
-static void ct_led_off (void *arg)
-{
- ct_board_t *b = arg;
- bdrv_t *bd = ((drv_t *)b->chan->sys)->bd;
- int s = splimp ();
-
- CT_LOCK (bd);
- ct_led (b, 0);
- CT_UNLOCK (bd);
- splx (s);
-}
-
-/*
- * Activate interrupt handler from DDK.
- */
-static void ct_intr (void *arg)
-{
- bdrv_t *bd = arg;
- ct_board_t *b = bd->board;
-#ifndef NETGRAPH
- int i;
-#endif
- int s = splimp ();
-
- CT_LOCK (bd);
- /* Turn LED on. */
- ct_led (b, 1);
-
- ct_int_handler (b);
-
- /* Turn LED off 50 msec later. */
- callout_reset (&led_timo[b->num], hz/20, ct_led_off, b);
- CT_UNLOCK (bd);
- splx (s);
-
-#ifndef NETGRAPH
- /* Pass packets in a lock-free state */
- for (i = 0; i < NCHAN && b->chan[i].type; i++) {
- drv_t *d = b->chan[i].sys;
- struct mbuf *m;
- if (!d || !d->running)
- continue;
- while (_IF_QLEN(&d->queue)) {
- IF_DEQUEUE (&d->queue,m);
- if (!m)
- continue;
- sppp_input (d->ifp, m);
- }
- }
-#endif
-}
-
-static int probe_irq (ct_board_t *b, int irq)
-{
- int mask, busy, cnt;
-
- /* Clear pending irq, if any. */
- ct_probe_irq (b, -irq);
- DELAY (100);
- for (cnt=0; cnt<5; ++cnt) {
- /* Get the mask of pending irqs, assuming they are busy.
- * Activate the adapter on given irq. */
- busy = ct_probe_irq (b, irq);
- DELAY (1000);
-
- /* Get the mask of active irqs.
- * Deactivate our irq. */
- mask = ct_probe_irq (b, -irq);
- DELAY (100);
- if ((mask & ~busy) == 1 << irq) {
- ct_probe_irq (b, 0);
- /* printf ("ct%d: irq %d ok, mask=0x%04x, busy=0x%04x\n",
- b->num, irq, mask, busy); */
- return 1;
- }
- }
- /* printf ("ct%d: irq %d not functional, mask=0x%04x, busy=0x%04x\n",
- b->num, irq, mask, busy); */
- ct_probe_irq (b, 0);
- return 0;
-}
-
-static short porttab [] = {
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
- };
-static char dmatab [] = { 7, 6, 5, 0 };
-static char irqtab [] = { 5, 10, 11, 7, 3, 15, 12, 0 };
-
-static int ct_is_free_res (device_t dev, int rid, int type, rman_res_t start,
- rman_res_t end, rman_res_t count)
-{
- struct resource *res;
-
- if (!(res = bus_alloc_resource (dev, type, &rid, start, end, count, 0)))
- return 0;
-
- bus_release_resource (dev, type, rid, res);
-
- return 1;
-}
-
-static void ct_identify (driver_t *driver, device_t dev)
-{
- rman_res_t iobase, rescount;
- int devcount;
- device_t *devices;
- device_t child;
- devclass_t my_devclass;
- int i, k;
-
- if ((my_devclass = devclass_find ("ct")) == NULL)
- return;
-
- devclass_get_devices (my_devclass, &devices, &devcount);
-
- if (devcount == 0) {
- /* We should find all devices by our self. We could alter other
- * devices, but we don't have a choise
- */
- for (i = 0; (iobase = porttab [i]) != 0; i++) {
- if (!ct_is_free_res (dev, 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT))
- continue;
- if (ct_probe_board (iobase, -1, -1) == 0)
- continue;
-
- devcount++;
- child = BUS_ADD_CHILD (dev, ISA_ORDER_SPECULATIVE, "ct",
- -1);
-
- if (child == NULL)
- return;
-
- device_set_desc_copy (child, "Cronyx Tau-ISA");
- device_set_driver (child, driver);
- bus_set_resource (child, SYS_RES_IOPORT, 0,
- iobase, NPORT);
-
- if (devcount >= NCTAU)
- break;
- }
- } else {
- static short porttab [] = {
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
- };
- /* Lets check user choise.
- */
- for (k = 0; k < devcount; k++) {
- if (bus_get_resource (devices[k], SYS_RES_IOPORT, 0,
- &iobase, &rescount) != 0)
- continue;
-
- for (i = 0; porttab [i] != 0; i++) {
- if (porttab [i] != iobase)
- continue;
-
- if (!ct_is_free_res (devices[k], 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT))
- continue;
-
- if (ct_probe_board (iobase, -1, -1) == 0)
- continue;
- porttab [i] = -1;
- device_set_desc_copy (devices[k], "Cronyx Tau-ISA");
- break;
- }
- if (porttab [i] == 0) {
- device_delete_child (
- device_get_parent (devices[k]),
- devices [k]);
- devices[k] = 0;
- continue;
- }
- }
- for (k = 0; k < devcount; k++) {
- if (devices[k] == 0)
- continue;
- if (bus_get_resource (devices[k], SYS_RES_IOPORT, 0,
- &iobase, &rescount) == 0)
- continue;
- for (i = 0; (iobase = porttab [i]) != 0; i++) {
- if (porttab [i] == -1)
- continue;
- if (!ct_is_free_res (devices[k], 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT))
- continue;
- if (ct_probe_board (iobase, -1, -1) == 0)
- continue;
-
- bus_set_resource (devices[k], SYS_RES_IOPORT, 0,
- iobase, NPORT);
- porttab [i] = -1;
- device_set_desc_copy (devices[k], "Cronyx Tau-ISA");
- break;
- }
- if (porttab [i] == 0) {
- device_delete_child (
- device_get_parent (devices[k]),
- devices [k]);
- }
- }
- free (devices, M_TEMP);
- }
-
- return;
-}
-
-static int ct_probe (device_t dev)
-{
- int unit = device_get_unit (dev);
- rman_res_t iobase, rescount;
-
- if (!device_get_desc (dev) ||
- strcmp (device_get_desc (dev), "Cronyx Tau-ISA"))
- return ENXIO;
-
-/* KASSERT ((bd != NULL), ("ct%d: NULL device softc\n", unit));*/
- if (bus_get_resource (dev, SYS_RES_IOPORT, 0, &iobase, &rescount) != 0) {
- printf ("ct%d: Couldn't get IOPORT\n", unit);
- return ENXIO;
- }
-
- if (!ct_is_free_res (dev, 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT)) {
- printf ("ct%d: Resource IOPORT isn't free\n", unit);
- return ENXIO;
- }
-
- if (!ct_probe_board (iobase, -1, -1)) {
- printf ("ct%d: probing for Tau-ISA at %jx faild\n", unit, iobase);
- return ENXIO;
- }
-
- return 0;
-}
-
-static void
-ct_bus_dmamap_addr (void *arg, bus_dma_segment_t *segs, int nseg, int error)
-{
- unsigned long *addr;
-
- if (error)
- return;
-
- KASSERT(nseg == 1, ("too many DMA segments, %d should be 1", nseg));
- addr = arg;
- *addr = segs->ds_addr;
-}
-
-static int
-ct_bus_dma_mem_alloc (int bnum, int cnum, ct_dma_mem_t *dmem)
-{
- int error;
-
- error = bus_dma_tag_create (NULL, 16, 0, BUS_SPACE_MAXADDR_24BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, dmem->size, 1,
- dmem->size, 0, NULL, NULL, &dmem->dmat);
- if (error) {
- if (cnum >= 0) printf ("ct%d-%d: ", bnum, cnum);
- else printf ("ct%d: ", bnum);
- printf ("couldn't allocate tag for dma memory\n");
- return 0;
- }
- error = bus_dmamem_alloc (dmem->dmat, (void **)&dmem->virt,
- BUS_DMA_NOWAIT | BUS_DMA_ZERO, &dmem->mapp);
- if (error) {
- if (cnum >= 0) printf ("ct%d-%d: ", bnum, cnum);
- else printf ("ct%d: ", bnum);
- printf ("couldn't allocate mem for dma memory\n");
- bus_dma_tag_destroy (dmem->dmat);
- return 0;
- }
- error = bus_dmamap_load (dmem->dmat, dmem->mapp, dmem->virt,
- dmem->size, ct_bus_dmamap_addr, &dmem->phys, 0);
- if (error) {
- if (cnum >= 0) printf ("ct%d-%d: ", bnum, cnum);
- else printf ("ct%d: ", bnum);
- printf ("couldn't load mem map for dma memory\n");
- bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp);
- bus_dma_tag_destroy (dmem->dmat);
- return 0;
- }
- return 1;
-}
-
-static void
-ct_bus_dma_mem_free (ct_dma_mem_t *dmem)
-{
- bus_dmamap_unload (dmem->dmat, dmem->mapp);
- bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp);
- bus_dma_tag_destroy (dmem->dmat);
-}
-
-/*
- * The adapter is present, initialize the driver structures.
- */
-static int ct_attach (device_t dev)
-{
- bdrv_t *bd = device_get_softc (dev);
- rman_res_t iobase, drq, irq, rescount;
- int unit = device_get_unit (dev);
- char *ct_ln = CT_LOCK_NAME;
- ct_board_t *b;
- ct_chan_t *c;
- drv_t *d;
- int i;
- int s;
-
- KASSERT ((bd != NULL), ("ct%d: NULL device softc\n", unit));
-
- bus_get_resource (dev, SYS_RES_IOPORT, 0, &iobase, &rescount);
- bd->base_rid = 0;
- bd->base_res = bus_alloc_resource (dev, SYS_RES_IOPORT, &bd->base_rid,
- iobase, iobase + NPORT, NPORT, RF_ACTIVE);
- if (! bd->base_res) {
- printf ("ct%d: cannot alloc base address\n", unit);
- return ENXIO;
- }
-
- if (bus_get_resource (dev, SYS_RES_DRQ, 0, &drq, &rescount) != 0) {
- for (i = 0; (drq = dmatab [i]) != 0; i++) {
- if (!ct_is_free_res (dev, 0, SYS_RES_DRQ,
- drq, drq + 1, 1))
- continue;
- bus_set_resource (dev, SYS_RES_DRQ, 0, drq, 1);
- break;
- }
-
- if (dmatab[i] == 0) {
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- printf ("ct%d: Couldn't get DRQ\n", unit);
- return ENXIO;
- }
- }
-
- bd->drq_rid = 0;
- bd->drq_res = bus_alloc_resource (dev, SYS_RES_DRQ, &bd->drq_rid,
- drq, drq + 1, 1, RF_ACTIVE);
- if (! bd->drq_res) {
- printf ("ct%d: cannot allocate drq\n", unit);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
-
- if (bus_get_resource (dev, SYS_RES_IRQ, 0, &irq, &rescount) != 0) {
- for (i = 0; (irq = irqtab [i]) != 0; i++) {
- if (!ct_is_free_res (dev, 0, SYS_RES_IRQ,
- irq, irq + 1, 1))
- continue;
- bus_set_resource (dev, SYS_RES_IRQ, 0, irq, 1);
- break;
- }
-
- if (irqtab[i] == 0) {
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- printf ("ct%d: Couldn't get IRQ\n", unit);
- return ENXIO;
- }
- }
-
- bd->irq_rid = 0;
- bd->irq_res = bus_alloc_resource (dev, SYS_RES_IRQ, &bd->irq_rid,
- irq, irq + 1, 1, RF_ACTIVE);
- if (! bd->irq_res) {
- printf ("ct%d: Couldn't allocate irq\n", unit);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
-
- b = malloc (sizeof (ct_board_t), M_DEVBUF, M_WAITOK);
- if (!b) {
- printf ("ct:%d: Couldn't allocate memory\n", unit);
- return (ENXIO);
- }
- adapter[unit] = b;
- bzero (b, sizeof(ct_board_t));
-
- if (! ct_open_board (b, unit, iobase, irq, drq)) {
- printf ("ct%d: error loading firmware\n", unit);
- free (b, M_DEVBUF);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid,
- bd->irq_res);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
-
- bd->board = b;
-
- ct_ln[2] = '0' + unit;
- mtx_init (&bd->ct_mtx, ct_ln, MTX_NETWORK_LOCK, MTX_DEF|MTX_RECURSE);
- if (! probe_irq (b, irq)) {
- printf ("ct%d: irq %jd not functional\n", unit, irq);
- bd->board = 0;
- adapter [unit] = 0;
- free (b, M_DEVBUF);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid,
- bd->irq_res);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- mtx_destroy (&bd->ct_mtx);
- return ENXIO;
- }
-
- callout_init (&led_timo[unit], 1);
- s = splimp ();
- if (bus_setup_intr (dev, bd->irq_res,
- INTR_TYPE_NET|INTR_MPSAFE,
- NULL, ct_intr, bd, &bd->intrhand)) {
- printf ("ct%d: Can't setup irq %jd\n", unit, irq);
- bd->board = 0;
- adapter [unit] = 0;
- free (b, M_DEVBUF);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid,
- bd->irq_res);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- mtx_destroy (&bd->ct_mtx);
- splx (s);
- return ENXIO;
- }
-
- CT_LOCK (bd);
- ct_init_board (b, b->num, b->port, irq, drq, b->type, b->osc);
- ct_setup_board (b, 0, 0, 0);
- CT_UNLOCK (bd);
-
- printf ("ct%d: <Cronyx-%s>, clock %s MHz\n", b->num, b->name,
- b->osc == 20000000 ? "20" : "16.384");
-
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- d = &bd->channel[c->num];
- d->dmamem.size = sizeof(ct_buf_t);
- if (! ct_bus_dma_mem_alloc (unit, c->num, &d->dmamem))
- continue;
- d->board = b;
- d->chan = c;
- d->bd = bd;
- c->sys = d;
- channel [b->num*NCHAN + c->num] = d;
- sprintf (d->name, "ct%d.%d", b->num, c->num);
- callout_init (&d->timeout_handle, 1);
-
-#ifdef NETGRAPH
- if (ng_make_node_common (&typestruct, &d->node) != 0) {
- printf ("%s: cannot make common node\n", d->name);
- channel [b->num*NCHAN + c->num] = 0;
- c->sys = 0;
- ct_bus_dma_mem_free (&d->dmamem);
- continue;
- }
- NG_NODE_SET_PRIVATE (d->node, d);
- sprintf (d->nodename, "%s%d", NG_CT_NODE_TYPE,
- c->board->num*NCHAN + c->num);
- if (ng_name_node (d->node, d->nodename)) {
- printf ("%s: cannot name node\n", d->nodename);
- NG_NODE_UNREF (d->node);
- channel [b->num*NCHAN + c->num] = 0;
- c->sys = 0;
- ct_bus_dma_mem_free (&d->dmamem);
- continue;
- }
- d->queue.ifq_maxlen = ifqmaxlen;
- d->hi_queue.ifq_maxlen = ifqmaxlen;
- mtx_init (&d->queue.ifq_mtx, "ct_queue", NULL, MTX_DEF);
- mtx_init (&d->hi_queue.ifq_mtx, "ct_queue_hi", NULL, MTX_DEF);
-#else /*NETGRAPH*/
- d->ifp = if_alloc(IFT_PPP);
- if (d->ifp == NULL) {
- printf ("%s: cannot if_alloc common interface\n",
- d->name);
- channel [b->num*NCHAN + c->num] = 0;
- c->sys = 0;
- ct_bus_dma_mem_free (&d->dmamem);
- continue;
- }
- d->ifp->if_softc = d;
- if_initname (d->ifp, "ct", b->num * NCHAN + c->num);
- d->ifp->if_mtu = PP_MTU;
- d->ifp->if_flags = IFF_POINTOPOINT | IFF_MULTICAST;
- d->ifp->if_ioctl = ct_sioctl;
- d->ifp->if_start = ct_ifstart;
- d->ifp->if_init = ct_initialize;
- d->queue.ifq_maxlen = NBUF;
- mtx_init (&d->queue.ifq_mtx, "ct_queue", NULL, MTX_DEF);
- sppp_attach (d->ifp);
- if_attach (d->ifp);
- IFP2SP(d->ifp)->pp_tlf = ct_tlf;
- IFP2SP(d->ifp)->pp_tls = ct_tls;
- /* If BPF is in the kernel, call the attach for it.
- * Header size is 4 bytes. */
- bpfattach (d->ifp, DLT_PPP, 4);
-#endif /*NETGRAPH*/
- CT_LOCK (bd);
- ct_start_chan (c, d->dmamem.virt, d->dmamem.phys);
- ct_register_receive (c, &ct_receive);
- ct_register_transmit (c, &ct_transmit);
- ct_register_error (c, &ct_error);
- CT_UNLOCK (bd);
- d->devt = make_dev (&ct_cdevsw, b->num*NCHAN+c->num, UID_ROOT,
- GID_WHEEL, 0600, "ct%d", b->num*NCHAN+c->num);
- }
- splx (s);
-
- gone_in_dev(dev, 13, "sync serial (T1/E1) ISA card drivers");
- return 0;
-}
-
-static int ct_detach (device_t dev)
-{
- bdrv_t *bd = device_get_softc (dev);
- ct_board_t *b = bd->board;
- ct_chan_t *c;
- int s;
-
- KASSERT (mtx_initialized (&bd->ct_mtx), ("ct mutex not initialized"));
-
- s = splimp ();
- CT_LOCK (bd);
- /* Check if the device is busy (open). */
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = (drv_t*) c->sys;
-
- if (!d || !d->chan->type)
- continue;
-
- if (d->running) {
- CT_UNLOCK (bd);
- splx (s);
- return EBUSY;
- }
- }
-
- /* Deactivate the timeout routine. */
- callout_stop (&led_timo[b->num]);
-
- CT_UNLOCK (bd);
-
- bus_teardown_intr (dev, bd->irq_res, bd->intrhand);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid, bd->irq_res);
-
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid, bd->drq_res);
-
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid, bd->base_res);
-
- CT_LOCK (bd);
- ct_close_board (b);
- CT_UNLOCK (bd);
-
- /* Detach the interfaces, free buffer memory. */
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = (drv_t*) c->sys;
-
- if (!d || !d->chan->type)
- continue;
-
- callout_stop (&d->timeout_handle);
-#ifdef NETGRAPH
- if (d->node) {
- ng_rmnode_self (d->node);
- NG_NODE_UNREF (d->node);
- d->node = NULL;
- }
- mtx_destroy (&d->queue.ifq_mtx);
- mtx_destroy (&d->hi_queue.ifq_mtx);
-#else
- /* Detach from the packet filter list of interfaces. */
- bpfdetach (d->ifp);
-
- /* Detach from the sync PPP list. */
- sppp_detach (d->ifp);
-
- if_detach (d->ifp);
- if_free (d->ifp);
- IF_DRAIN (&d->queue);
- mtx_destroy (&d->queue.ifq_mtx);
-#endif
- destroy_dev (d->devt);
- }
-
- CT_LOCK (bd);
- ct_led_off (b);
- CT_UNLOCK (bd);
- callout_drain (&led_timo[b->num]);
- splx (s);
-
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = (drv_t*) c->sys;
-
- if (!d || !d->chan->type)
- continue;
- callout_drain(&d->timeout_handle);
-
- /* Deallocate buffers. */
- ct_bus_dma_mem_free (&d->dmamem);
- }
- bd->board = NULL;
- adapter [b->num] = NULL;
- free (b, M_DEVBUF);
-
- mtx_destroy (&bd->ct_mtx);
-
- return 0;
-}
-
-#ifndef NETGRAPH
-static void ct_ifstart (struct ifnet *ifp)
-{
- drv_t *d = ifp->if_softc;
- bdrv_t *bd = d->bd;
-
- CT_LOCK (bd);
- ct_start (d);
- CT_UNLOCK (bd);
-}
-
-static void ct_tlf (struct sppp *sp)
-{
- drv_t *d = SP2IFP(sp)->if_softc;
-
- CT_DEBUG (d, ("ct_tlf\n"));
-/* ct_set_dtr (d->chan, 0);*/
-/* ct_set_rts (d->chan, 0);*/
- if (!(sp->pp_flags & PP_FR) && !(d->ifp->if_flags & PP_CISCO))
- sp->pp_down (sp);
-}
-
-static void ct_tls (struct sppp *sp)
-{
- drv_t *d = SP2IFP(sp)->if_softc;
-
- CT_DEBUG (d, ("ct_tls\n"));
- if (!(sp->pp_flags & PP_FR) && !(d->ifp->if_flags & PP_CISCO))
- sp->pp_up (sp);
-}
-
-/*
- * Initialization of interface.
- * Ii seems to be never called by upper level.
- */
-static void ct_initialize (void *softc)
-{
- drv_t *d = softc;
-
- CT_DEBUG (d, ("ct_initialize\n"));
-}
-
-/*
- * Process an ioctl request.
- */
-static int ct_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
-{
- drv_t *d = ifp->if_softc;
- bdrv_t *bd = d->bd;
- int error, s, was_up, should_be_up;
-
- was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
- error = sppp_ioctl (ifp, cmd, data);
- if (error)
- return error;
-
- if (! (ifp->if_flags & IFF_DEBUG))
- d->chan->debug = 0;
- else
- d->chan->debug = d->chan->debug_shadow;
-
- switch (cmd) {
- default: CT_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
- case SIOCADDMULTI: CT_DEBUG2 (d, ("SIOCADDMULTI\n")); return 0;
- case SIOCDELMULTI: CT_DEBUG2 (d, ("SIOCDELMULTI\n")); return 0;
- case SIOCSIFFLAGS: CT_DEBUG2 (d, ("SIOCSIFFLAGS\n")); break;
- case SIOCSIFADDR: CT_DEBUG2 (d, ("SIOCSIFADDR\n")); break;
- }
-
- /* We get here only in case of SIFFLAGS or SIFADDR. */
- s = splimp ();
- CT_LOCK (bd);
- should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
- if (! was_up && should_be_up) {
- /* Interface goes up -- start it. */
- ct_up (d);
- ct_start (d);
- } else if (was_up && ! should_be_up) {
- /* Interface is going down -- stop it. */
- /* if ((IFP2SP(d->ifp)->pp_flags & PP_FR) || (ifp->if_flags & PP_CISCO))*/
- ct_down (d);
- }
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-}
-#endif /*NETGRAPH*/
-
-/*
- * Stop the interface. Called on splimp().
- */
-static void ct_down (drv_t *d)
-{
- int s = splimp ();
- CT_DEBUG (d, ("ct_down\n"));
- ct_set_dtr (d->chan, 0);
- ct_set_rts (d->chan, 0);
- d->running = 0;
- callout_stop (&d->timeout_handle);
- splx (s);
-}
-
-/*
- * Start the interface. Called on splimp().
- */
-static void ct_up (drv_t *d)
-{
- int s = splimp ();
- CT_DEBUG (d, ("ct_up\n"));
- ct_set_dtr (d->chan, 1);
- ct_set_rts (d->chan, 1);
- d->running = 1;
- splx (s);
-}
-
-/*
- * Start output on the (slave) interface. Get another datagram to send
- * off of the interface queue, and copy it to the interface
- * before starting the output.
- */
-static void ct_send (drv_t *d)
-{
- struct mbuf *m;
- u_short len;
-
- CT_DEBUG2 (d, ("ct_send, tn=%d\n", d->chan->tn));
-
- /* No output if the interface is down. */
- if (! d->running)
- return;
-
- /* No output if the modem is off. */
- if (! ct_get_dsr (d->chan) && !ct_get_loop (d->chan))
- return;
-
- while (ct_buf_free (d->chan)) {
- /* Get the packet to send. */
-#ifdef NETGRAPH
- IF_DEQUEUE (&d->hi_queue, m);
- if (! m)
- IF_DEQUEUE (&d->queue, m);
-#else
- m = sppp_dequeue (d->ifp);
-#endif
- if (! m)
- return;
-#ifndef NETGRAPH
- BPF_MTAP (d->ifp, m);
-#endif
- len = m_length (m, NULL);
- if (! m->m_next)
- ct_send_packet (d->chan, (u_char*)mtod (m, caddr_t),
- len, 0);
- else {
- m_copydata (m, 0, len, d->chan->tbuf[d->chan->te]);
- ct_send_packet (d->chan, d->chan->tbuf[d->chan->te],
- len, 0);
- }
- m_freem (m);
-
- /* Set up transmit timeout, if the transmit ring is not empty.
- * Transmit timeout is 10 seconds. */
- d->timeout = 10;
- }
-#ifndef NETGRAPH
- d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-#endif
-}
-
-/*
- * Start output on the interface.
- * Always called on splimp().
- */
-static void ct_start (drv_t *d)
-{
- int s = splimp ();
-
- if (d->running) {
- if (! d->chan->dtr)
- ct_set_dtr (d->chan, 1);
- if (! d->chan->rts)
- ct_set_rts (d->chan, 1);
- ct_send (d);
- callout_reset (&d->timeout_handle, hz, ct_watchdog_timer, d);
- }
-
- splx (s);
-}
-
-/*
- * Handle transmit timeouts.
- * Recover after lost transmit interrupts.
- * Always called on splimp().
- */
-static void ct_watchdog (drv_t *d)
-{
-
- CT_DEBUG (d, ("device timeout\n"));
- if (d->running) {
- ct_setup_chan (d->chan);
- ct_start_chan (d->chan, 0, 0);
- ct_set_dtr (d->chan, 1);
- ct_set_rts (d->chan, 1);
- ct_start (d);
- }
-}
-
-static void ct_watchdog_timer (void *arg)
-{
- drv_t *d = arg;
- bdrv_t *bd = d->bd;
-
- CT_LOCK (bd);
- if (d->timeout == 1)
- ct_watchdog (d);
- if (d->timeout)
- d->timeout--;
- callout_reset (&d->timeout_handle, hz, ct_watchdog_timer, d);
- CT_UNLOCK (bd);
-}
-
-/*
- * Transmit callback function.
- */
-static void ct_transmit (ct_chan_t *c, void *attachment, int len)
-{
- drv_t *d = c->sys;
-
- if (!d)
- return;
- d->timeout = 0;
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_OPACKETS, 1);
- d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-#endif
- ct_start (d);
-}
-
-/*
- * Process the received packet.
- */
-static void ct_receive (ct_chan_t *c, char *data, int len)
-{
- drv_t *d = c->sys;
- struct mbuf *m;
-#ifdef NETGRAPH
- int error;
-#endif
-
- if (!d || !d->running)
- return;
-
- m = makembuf (data, len);
- if (! m) {
- CT_DEBUG (d, ("no memory for packet\n"));
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_IQDROPS, 1);
-#endif
- return;
- }
- if (c->debug > 1)
- m_print (m, 0);
-#ifdef NETGRAPH
- m->m_pkthdr.rcvif = 0;
- NG_SEND_DATA_ONLY (error, d->hook, m);
-#else
- if_inc_counter(d->ifp, IFCOUNTER_IPACKETS, 1);
- m->m_pkthdr.rcvif = d->ifp;
- /* Check if there's a BPF listener on this interface.
- * If so, hand off the raw packet to bpf. */
- BPF_MTAP(d->ifp, m);
- IF_ENQUEUE (&d->queue, m);
-#endif
-}
-
-/*
- * Error callback function.
- */
-static void ct_error (ct_chan_t *c, int data)
-{
- drv_t *d = c->sys;
-
- if (!d)
- return;
-
- switch (data) {
- case CT_FRAME:
- CT_DEBUG (d, ("frame error\n"));
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CT_CRC:
- CT_DEBUG (d, ("crc error\n"));
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CT_OVERRUN:
- CT_DEBUG (d, ("overrun error\n"));
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_COLLISIONS, 1);
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CT_OVERFLOW:
- CT_DEBUG (d, ("overflow error\n"));
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CT_UNDERRUN:
- CT_DEBUG (d, ("underrun error\n"));
- d->timeout = 0;
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_OERRORS, 1);
- d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-#endif
- ct_start (d);
- break;
- default:
- CT_DEBUG (d, ("error #%d\n", data));
- }
-}
-
-static int ct_open (struct cdev *dev, int oflags, int devtype, struct thread *td)
-{
- drv_t *d;
-
- if (dev2unit(dev) >= NCTAU*NCHAN || ! (d = channel[dev2unit(dev)]))
- return ENXIO;
-
- CT_DEBUG2 (d, ("ct_open\n"));
- return 0;
-}
-
-static int ct_close (struct cdev *dev, int fflag, int devtype, struct thread *td)
-{
- drv_t *d = channel [dev2unit(dev)];
-
- if (!d)
- return 0;
-
- CT_DEBUG2 (d, ("ct_close\n"));
- return 0;
-}
-
-static int ct_modem_status (ct_chan_t *c)
-{
- drv_t *d = c->sys;
- bdrv_t *bd;
- int status, s;
-
- if (!d)
- return 0;
-
- bd = d->bd;
-
- status = d->running ? TIOCM_LE : 0;
- s = splimp ();
- CT_LOCK (bd);
- if (ct_get_cd (c)) status |= TIOCM_CD;
- if (ct_get_cts (c)) status |= TIOCM_CTS;
- if (ct_get_dsr (c)) status |= TIOCM_DSR;
- if (c->dtr) status |= TIOCM_DTR;
- if (c->rts) status |= TIOCM_RTS;
- CT_UNLOCK (bd);
- splx (s);
- return status;
-}
-
-/*
- * Process an ioctl request on /dev/cronyx/ctauN.
- */
-static int ct_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
-{
- drv_t *d = channel [dev2unit (dev)];
- bdrv_t *bd;
- ct_chan_t *c;
- struct serial_statistics *st;
- struct e1_statistics *opte1;
- int error, s;
- char mask[16];
-
- if (!d || !d->chan)
- return 0;
-
- bd = d->bd;
- c = d->chan;
-
- switch (cmd) {
- case SERIAL_GETREGISTERED:
- bzero (mask, sizeof(mask));
- for (s=0; s<NCTAU*NCHAN; ++s)
- if (channel [s])
- mask [s/8] |= 1 << (s & 7);
- bcopy (mask, data, sizeof (mask));
- return 0;
-
-#ifndef NETGRAPH
- case SERIAL_GETPROTO:
- strcpy ((char*)data, (IFP2SP(d->ifp)->pp_flags & PP_FR) ? "fr" :
- (d->ifp->if_flags & PP_CISCO) ? "cisco" : "ppp");
- return 0;
-
- case SERIAL_SETPROTO:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (d->ifp->if_drv_flags & IFF_DRV_RUNNING)
- return EBUSY;
- if (! strcmp ("cisco", (char*)data)) {
- IFP2SP(d->ifp)->pp_flags &= ~(PP_FR);
- IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE;
- d->ifp->if_flags |= PP_CISCO;
- } else if (! strcmp ("fr", (char*)data)) {
- d->ifp->if_flags &= ~(PP_CISCO);
- IFP2SP(d->ifp)->pp_flags |= PP_FR | PP_KEEPALIVE;
- } else if (! strcmp ("ppp", (char*)data)) {
- IFP2SP(d->ifp)->pp_flags &= ~(PP_FR | PP_KEEPALIVE);
- d->ifp->if_flags &= ~(PP_CISCO);
- } else
- return EINVAL;
- return 0;
-
- case SERIAL_GETKEEPALIVE:
- if ((IFP2SP(d->ifp)->pp_flags & PP_FR) ||
- (d->ifp->if_flags & PP_CISCO))
- return EINVAL;
- *(int*)data = (IFP2SP(d->ifp)->pp_flags & PP_KEEPALIVE) ? 1 : 0;
- return 0;
-
- case SERIAL_SETKEEPALIVE:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if ((IFP2SP(d->ifp)->pp_flags & PP_FR) ||
- (d->ifp->if_flags & PP_CISCO))
- return EINVAL;
- if (*(int*)data)
- IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE;
- else
- IFP2SP(d->ifp)->pp_flags &= ~PP_KEEPALIVE;
- return 0;
-#endif /*NETGRAPH*/
-
- case SERIAL_GETMODE:
- *(int*)data = SERIAL_HDLC;
- return 0;
-
- case SERIAL_GETCFG:
- if (c->mode == M_HDLC)
- return EINVAL;
- switch (ct_get_config (c->board)) {
- default: *(char*)data = 'a'; break;
- case CFG_B: *(char*)data = 'b'; break;
- case CFG_C: *(char*)data = 'c'; break;
- }
- return 0;
-
- case SERIAL_SETCFG:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_HDLC)
- return EINVAL;
- s = splimp ();
- CT_LOCK (bd);
- switch (*(char*)data) {
- case 'a': ct_set_config (c->board, CFG_A); break;
- case 'b': ct_set_config (c->board, CFG_B); break;
- case 'c': ct_set_config (c->board, CFG_C); break;
- }
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETSTAT:
- st = (struct serial_statistics*) data;
- st->rintr = c->rintr;
- st->tintr = c->tintr;
- st->mintr = c->mintr;
- st->ibytes = c->ibytes;
- st->ipkts = c->ipkts;
- st->ierrs = c->ierrs;
- st->obytes = c->obytes;
- st->opkts = c->opkts;
- st->oerrs = c->oerrs;
- return 0;
-
- case SERIAL_GETESTAT:
- opte1 = (struct e1_statistics*)data;
- opte1->status = c->status;
- opte1->cursec = c->cursec;
- opte1->totsec = c->totsec + c->cursec;
-
- opte1->currnt.bpv = c->currnt.bpv;
- opte1->currnt.fse = c->currnt.fse;
- opte1->currnt.crce = c->currnt.crce;
- opte1->currnt.rcrce = c->currnt.rcrce;
- opte1->currnt.uas = c->currnt.uas;
- opte1->currnt.les = c->currnt.les;
- opte1->currnt.es = c->currnt.es;
- opte1->currnt.bes = c->currnt.bes;
- opte1->currnt.ses = c->currnt.ses;
- opte1->currnt.oofs = c->currnt.oofs;
- opte1->currnt.css = c->currnt.css;
- opte1->currnt.dm = c->currnt.dm;
-
- opte1->total.bpv = c->total.bpv + c->currnt.bpv;
- opte1->total.fse = c->total.fse + c->currnt.fse;
- opte1->total.crce = c->total.crce + c->currnt.crce;
- opte1->total.rcrce = c->total.rcrce + c->currnt.rcrce;
- opte1->total.uas = c->total.uas + c->currnt.uas;
- opte1->total.les = c->total.les + c->currnt.les;
- opte1->total.es = c->total.es + c->currnt.es;
- opte1->total.bes = c->total.bes + c->currnt.bes;
- opte1->total.ses = c->total.ses + c->currnt.ses;
- opte1->total.oofs = c->total.oofs + c->currnt.oofs;
- opte1->total.css = c->total.css + c->currnt.css;
- opte1->total.dm = c->total.dm + c->currnt.dm;
- for (s=0; s<48; ++s) {
- opte1->interval[s].bpv = c->interval[s].bpv;
- opte1->interval[s].fse = c->interval[s].fse;
- opte1->interval[s].crce = c->interval[s].crce;
- opte1->interval[s].rcrce = c->interval[s].rcrce;
- opte1->interval[s].uas = c->interval[s].uas;
- opte1->interval[s].les = c->interval[s].les;
- opte1->interval[s].es = c->interval[s].es;
- opte1->interval[s].bes = c->interval[s].bes;
- opte1->interval[s].ses = c->interval[s].ses;
- opte1->interval[s].oofs = c->interval[s].oofs;
- opte1->interval[s].css = c->interval[s].css;
- opte1->interval[s].dm = c->interval[s].dm;
- }
- return 0;
-
- case SERIAL_CLRSTAT:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- c->rintr = 0;
- c->tintr = 0;
- c->mintr = 0;
- c->ibytes = 0;
- c->ipkts = 0;
- c->ierrs = 0;
- c->obytes = 0;
- c->opkts = 0;
- c->oerrs = 0;
- bzero (&c->currnt, sizeof (c->currnt));
- bzero (&c->total, sizeof (c->total));
- bzero (c->interval, sizeof (c->interval));
- return 0;
-
- case SERIAL_GETBAUD:
- *(long*)data = ct_get_baud(c);
- return 0;
-
- case SERIAL_SETBAUD:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_baud (c, *(long*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETLOOP:
- *(int*)data = ct_get_loop (c);
- return 0;
-
- case SERIAL_SETLOOP:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_loop (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETDPLL:
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- *(int*)data = ct_get_dpll (c);
- return 0;
-
- case SERIAL_SETDPLL:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_dpll (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETNRZI:
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- *(int*)data = ct_get_nrzi (c);
- return 0;
-
- case SERIAL_SETNRZI:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_nrzi (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETDEBUG:
- *(int*)data = c->debug;
- return 0;
-
- case SERIAL_SETDEBUG:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
-#ifndef NETGRAPH
- /*
- * The debug_shadow is always greater than zero for logic
- * simplicity. For switching debug off the IFF_DEBUG is
- * responsible.
- */
- c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
- if (d->ifp->if_flags & IFF_DEBUG)
- c->debug = c->debug_shadow;
-#else
- c->debug = *(int*)data;
-#endif
- return 0;
-
- case SERIAL_GETHIGAIN:
- if (c->mode != M_E1)
- return EINVAL;
- *(int*)data = ct_get_higain (c);
- return 0;
-
- case SERIAL_SETHIGAIN:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_higain (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETPHONY:
- CT_DEBUG2 (d, ("ioctl: getphony\n"));
- if (c->mode != M_E1)
- return EINVAL;
- *(int*)data = c->gopt.phony;
- return 0;
-
- case SERIAL_SETPHONY:
- CT_DEBUG2 (d, ("ioctl: setphony\n"));
- if (c->mode != M_E1)
- return EINVAL;
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_phony (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETCLK:
- if (c->mode != M_E1 && c->mode != M_G703)
- return EINVAL;
- switch (ct_get_clk(c)) {
- default: *(int*)data = E1CLK_INTERNAL; break;
- case GCLK_RCV: *(int*)data = E1CLK_RECEIVE; break;
- case GCLK_RCLKO: *(int*)data = c->num ?
- E1CLK_RECEIVE_CHAN0 : E1CLK_RECEIVE_CHAN1; break;
- }
- return 0;
-
- case SERIAL_SETCLK:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- switch (*(int*)data) {
- default: ct_set_clk (c, GCLK_INT); break;
- case E1CLK_RECEIVE: ct_set_clk (c, GCLK_RCV); break;
- case E1CLK_RECEIVE_CHAN0:
- case E1CLK_RECEIVE_CHAN1:
- ct_set_clk (c, GCLK_RCLKO); break;
- }
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETTIMESLOTS:
- if (c->mode != M_E1)
- return EINVAL;
- *(long*)data = ct_get_ts (c);
- return 0;
-
- case SERIAL_SETTIMESLOTS:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_ts (c, *(long*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETSUBCHAN:
- if (c->mode != M_E1)
- return EINVAL;
- *(long*)data = ct_get_subchan (c->board);
- return 0;
-
- case SERIAL_SETSUBCHAN:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_subchan (c->board, *(long*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETINVCLK:
- case SERIAL_GETINVTCLK:
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- *(int*)data = ct_get_invtxc (c);
- return 0;
-
- case SERIAL_GETINVRCLK:
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- *(int*)data = ct_get_invrxc (c);
- return 0;
-
- case SERIAL_SETINVCLK:
- case SERIAL_SETINVTCLK:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_invtxc (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETINVRCLK:
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_E1 || c->mode == M_G703)
- return EINVAL;
- s = splimp ();
- CT_LOCK (bd);
- ct_set_invrxc (c, *(int*)data);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETLEVEL:
- if (c->mode != M_G703)
- return EINVAL;
- s = splimp ();
- CT_LOCK (bd);
- *(int*)data = ct_get_lq (c);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCSDTR: /* Set DTR */
- s = splimp ();
- CT_LOCK (bd);
- ct_set_dtr (c, 1);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCCDTR: /* Clear DTR */
- s = splimp ();
- CT_LOCK (bd);
- ct_set_dtr (c, 0);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMSET: /* Set DTR/RTS */
- s = splimp ();
- CT_LOCK (bd);
- ct_set_dtr (c, (*(int*)data & TIOCM_DTR) ? 1 : 0);
- ct_set_rts (c, (*(int*)data & TIOCM_RTS) ? 1 : 0);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMBIS: /* Add DTR/RTS */
- s = splimp ();
- CT_LOCK (bd);
- if (*(int*)data & TIOCM_DTR) ct_set_dtr (c, 1);
- if (*(int*)data & TIOCM_RTS) ct_set_rts (c, 1);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMBIC: /* Clear DTR/RTS */
- s = splimp ();
- CT_LOCK (bd);
- if (*(int*)data & TIOCM_DTR) ct_set_dtr (c, 0);
- if (*(int*)data & TIOCM_RTS) ct_set_rts (c, 0);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMGET: /* Get modem status */
- *(int*)data = ct_modem_status (c);
- return 0;
- }
- return ENOTTY;
-}
-
-#ifdef NETGRAPH
-static int ng_ct_constructor (node_p node)
-{
- drv_t *d = NG_NODE_PRIVATE (node);
- CT_DEBUG (d, ("Constructor\n"));
- return EINVAL;
-}
-
-static int ng_ct_newhook (node_p node, hook_p hook, const char *name)
-{
- int s;
- drv_t *d = NG_NODE_PRIVATE (node);
-
- if (!d)
- return EINVAL;
-
- bdrv_t *bd = d->bd;
-
- /* Attach debug hook */
- if (strcmp (name, NG_CT_HOOK_DEBUG) == 0) {
- NG_HOOK_SET_PRIVATE (hook, NULL);
- d->debug_hook = hook;
- return 0;
- }
-
- /* Check for raw hook */
- if (strcmp (name, NG_CT_HOOK_RAW) != 0)
- return EINVAL;
-
- NG_HOOK_SET_PRIVATE (hook, d);
- d->hook = hook;
- s = splimp ();
- CT_LOCK (bd);
- ct_up (d);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-}
-
-static char *format_timeslots (u_long s)
-{
- static char buf [100];
- char *p = buf;
- int i;
-
- for (i=1; i<32; ++i)
- if ((s >> i) & 1) {
- int prev = (i > 1) & (s >> (i-1));
- int next = (i < 31) & (s >> (i+1));
-
- if (prev) {
- if (next)
- continue;
- *p++ = '-';
- } else if (p > buf)
- *p++ = ',';
-
- if (i >= 10)
- *p++ = '0' + i / 10;
- *p++ = '0' + i % 10;
- }
- *p = 0;
- return buf;
-}
-
-static int print_modems (char *s, ct_chan_t *c, int need_header)
-{
- int status = ct_modem_status (c);
- int length = 0;
-
- if (need_header)
- length += sprintf (s + length, " LE DTR DSR RTS CTS CD\n");
- length += sprintf (s + length, "%4s %4s %4s %4s %4s %4s\n",
- status & TIOCM_LE ? "On" : "-",
- status & TIOCM_DTR ? "On" : "-",
- status & TIOCM_DSR ? "On" : "-",
- status & TIOCM_RTS ? "On" : "-",
- status & TIOCM_CTS ? "On" : "-",
- status & TIOCM_CD ? "On" : "-");
- return length;
-}
-
-static int print_stats (char *s, ct_chan_t *c, int need_header)
-{
- struct serial_statistics st;
- int length = 0;
-
- st.rintr = c->rintr;
- st.tintr = c->tintr;
- st.mintr = c->mintr;
- st.ibytes = c->ibytes;
- st.ipkts = c->ipkts;
- st.ierrs = c->ierrs;
- st.obytes = c->obytes;
- st.opkts = c->opkts;
- st.oerrs = c->oerrs;
- if (need_header)
- length += sprintf (s + length, " Rintr Tintr Mintr Ibytes Ipkts Ierrs Obytes Opkts Oerrs\n");
- length += sprintf (s + length, "%7ld %7ld %7ld %8ld %7ld %7ld %8ld %7ld %7ld\n",
- st.rintr, st.tintr, st.mintr, st.ibytes, st.ipkts,
- st.ierrs, st.obytes, st.opkts, st.oerrs);
- return length;
-}
-
-static char *format_e1_status (u_char status)
-{
- static char buf [80];
-
- if (status & E1_NOALARM)
- return "Ok";
- buf[0] = 0;
- if (status & E1_LOS) strcat (buf, ",LOS");
- if (status & E1_AIS) strcat (buf, ",AIS");
- if (status & E1_LOF) strcat (buf, ",LOF");
- if (status & E1_LOMF) strcat (buf, ",LOMF");
- if (status & E1_FARLOF) strcat (buf, ",FARLOF");
- if (status & E1_AIS16) strcat (buf, ",AIS16");
- if (status & E1_FARLOMF) strcat (buf, ",FARLOMF");
- if (status & E1_TSTREQ) strcat (buf, ",TSTREQ");
- if (status & E1_TSTERR) strcat (buf, ",TSTERR");
- if (buf[0] == ',')
- return buf+1;
- return "Unknown";
-}
-
-static int print_frac (char *s, int leftalign, u_long numerator, u_long divider)
-{
- int n, length = 0;
-
- if (numerator < 1 || divider < 1) {
- length += sprintf (s+length, leftalign ? "/- " : " -");
- return length;
- }
- n = (int) (0.5 + 1000.0 * numerator / divider);
- if (n < 1000) {
- length += sprintf (s+length, leftalign ? "/.%-3d" : " .%03d", n);
- return length;
- }
- *(s + length) = leftalign ? '/' : ' ';
- length ++;
-
- if (n >= 1000000) n = (n+500) / 1000 * 1000;
- else if (n >= 100000) n = (n+50) / 100 * 100;
- else if (n >= 10000) n = (n+5) / 10 * 10;
-
- switch (n) {
- case 1000: length += printf (s+length, ".999"); return length;
- case 10000: n = 9990; break;
- case 100000: n = 99900; break;
- case 1000000: n = 999000; break;
- }
- if (n < 10000) length += sprintf (s+length, "%d.%d", n/1000, n/10%100);
- else if (n < 100000) length += sprintf (s+length, "%d.%d", n/1000, n/100%10);
- else if (n < 1000000) length += sprintf (s+length, "%d.", n/1000);
- else length += sprintf (s+length, "%d", n/1000);
-
- return length;
-}
-
-static int print_e1_stats (char *s, ct_chan_t *c)
-{
- struct e1_counters total;
- u_long totsec;
- int length = 0;
-
- totsec = c->totsec + c->cursec;
- total.bpv = c->total.bpv + c->currnt.bpv;
- total.fse = c->total.fse + c->currnt.fse;
- total.crce = c->total.crce + c->currnt.crce;
- total.rcrce = c->total.rcrce + c->currnt.rcrce;
- total.uas = c->total.uas + c->currnt.uas;
- total.les = c->total.les + c->currnt.les;
- total.es = c->total.es + c->currnt.es;
- total.bes = c->total.bes + c->currnt.bes;
- total.ses = c->total.ses + c->currnt.ses;
- total.oofs = c->total.oofs + c->currnt.oofs;
- total.css = c->total.css + c->currnt.css;
- total.dm = c->total.dm + c->currnt.dm;
-
- length += sprintf (s + length, " Unav/Degr Bpv/Fsyn CRC/RCRC Err/Lerr Sev/Bur Oof/Slp Status\n");
-
- /* Unavailable seconds, degraded minutes */
- length += print_frac (s + length, 0, c->currnt.uas, c->cursec);
- length += print_frac (s + length, 1, 60 * c->currnt.dm, c->cursec);
-
- /* Bipolar violations, frame sync errors */
- length += print_frac (s + length, 0, c->currnt.bpv, c->cursec);
- length += print_frac (s + length, 1, c->currnt.fse, c->cursec);
-
- /* CRC errors, remote CRC errors (E-bit) */
- length += print_frac (s + length, 0, c->currnt.crce, c->cursec);
- length += print_frac (s + length, 1, c->currnt.rcrce, c->cursec);
-
- /* Errored seconds, line errored seconds */
- length += print_frac (s + length, 0, c->currnt.es, c->cursec);
- length += print_frac (s + length, 1, c->currnt.les, c->cursec);
-
- /* Severely errored seconds, burst errored seconds */
- length += print_frac (s + length, 0, c->currnt.ses, c->cursec);
- length += print_frac (s + length, 1, c->currnt.bes, c->cursec);
-
- /* Out of frame seconds, controlled slip seconds */
- length += print_frac (s + length, 0, c->currnt.oofs, c->cursec);
- length += print_frac (s + length, 1, c->currnt.css, c->cursec);
-
- length += sprintf (s + length, " %s\n", format_e1_status (c->status));
-
- /* Print total statistics. */
- length += print_frac (s + length, 0, total.uas, totsec);
- length += print_frac (s + length, 1, 60 * total.dm, totsec);
-
- length += print_frac (s + length, 0, total.bpv, totsec);
- length += print_frac (s + length, 1, total.fse, totsec);
-
- length += print_frac (s + length, 0, total.crce, totsec);
- length += print_frac (s + length, 1, total.rcrce, totsec);
-
- length += print_frac (s + length, 0, total.es, totsec);
- length += print_frac (s + length, 1, total.les, totsec);
-
- length += print_frac (s + length, 0, total.ses, totsec);
- length += print_frac (s + length, 1, total.bes, totsec);
-
- length += print_frac (s + length, 0, total.oofs, totsec);
- length += print_frac (s + length, 1, total.css, totsec);
-
- length += sprintf (s + length, " -- Total\n");
- return length;
-}
-
-static int print_chan (char *s, ct_chan_t *c)
-{
- drv_t *d = c->sys;
- bdrv_t *bd = d->bd;
- int length = 0;
-
- length += sprintf (s + length, "ct%d", c->board->num * NCHAN + c->num);
- if (d->chan->debug)
- length += sprintf (s + length, " debug=%d", d->chan->debug);
-
- switch (ct_get_config (c->board)) {
- case CFG_A: length += sprintf (s + length, " cfg=A"); break;
- case CFG_B: length += sprintf (s + length, " cfg=B"); break;
- case CFG_C: length += sprintf (s + length, " cfg=C"); break;
- default: length += sprintf (s + length, " cfg=unknown"); break;
- }
-
- if (ct_get_baud (c))
- length += sprintf (s + length, " %ld", ct_get_baud (c));
- else
- length += sprintf (s + length, " extclock");
-
- if (c->mode == M_E1 || c->mode == M_G703)
- switch (ct_get_clk(c)) {
- case GCLK_INT : length += sprintf (s + length, " syn=int"); break;
- case GCLK_RCV : length += sprintf (s + length, " syn=rcv"); break;
- case GCLK_RCLKO : length += sprintf (s + length, " syn=xrcv"); break;
- }
- if (c->mode == M_HDLC) {
- length += sprintf (s + length, " dpll=%s", ct_get_dpll (c) ? "on" : "off");
- length += sprintf (s + length, " nrzi=%s", ct_get_nrzi (c) ? "on" : "off");
- length += sprintf (s + length, " invtclk=%s", ct_get_invtxc (c) ? "on" : "off");
- length += sprintf (s + length, " invrclk=%s", ct_get_invrxc (c) ? "on" : "off");
- }
- if (c->mode == M_E1)
- length += sprintf (s + length, " higain=%s", ct_get_higain (c)? "on" : "off");
-
- length += sprintf (s + length, " loop=%s", ct_get_loop (c) ? "on" : "off");
-
- if (c->mode == M_E1)
- length += sprintf (s + length, " ts=%s", format_timeslots (ct_get_ts(c)));
- if (c->mode == M_E1 && ct_get_config (c->board) != CFG_A)
- length += sprintf (s + length, " pass=%s", format_timeslots (ct_get_subchan(c->board)));
- if (c->mode == M_G703) {
- int lq, x;
-
- x = splimp ();
- CT_LOCK (bd);
- lq = ct_get_lq (c);
- CT_UNLOCK (bd);
- splx (x);
- length += sprintf (s + length, " (level=-%.1fdB)", lq / 10.0);
- }
- length += sprintf (s + length, "\n");
- return length;
-}
-
-static int ng_ct_rcvmsg (node_p node, item_p item, hook_p lasthook)
-{
- drv_t *d = NG_NODE_PRIVATE (node);
- struct ng_mesg *msg;
- struct ng_mesg *resp = NULL;
- int error = 0;
-
- if (!d)
- return EINVAL;
-
- CT_DEBUG (d, ("Rcvmsg\n"));
- NGI_GET_MSG (item, msg);
- switch (msg->header.typecookie) {
- default:
- error = EINVAL;
- break;
-
- case NGM_CT_COOKIE:
- printf ("Don't forget to implement\n");
- error = EINVAL;
- break;
-
- case NGM_GENERIC_COOKIE:
- switch (msg->header.cmd) {
- default:
- error = EINVAL;
- break;
-
- case NGM_TEXT_STATUS: {
- char *s;
- int l = 0;
- int dl = sizeof (struct ng_mesg) + 730;
-
- NG_MKRESPONSE (resp, msg, dl, M_NOWAIT);
- if (! resp) {
- error = ENOMEM;
- break;
- }
- s = (resp)->data;
- l += print_chan (s + l, d->chan);
- l += print_stats (s + l, d->chan, 1);
- l += print_modems (s + l, d->chan, 1);
- l += print_e1_stats (s + l, d->chan);
- strncpy ((resp)->header.cmdstr, "status", NG_CMDSTRSIZ);
- }
- break;
- }
- break;
- }
- NG_RESPOND_MSG (error, node, item, resp);
- NG_FREE_MSG (msg);
- return error;
-}
-
-static int ng_ct_rcvdata (hook_p hook, item_p item)
-{
- drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE(hook));
- struct mbuf *m;
- struct ng_tag_prio *ptag;
- bdrv_t *bd;
- struct ifqueue *q;
- int s;
-
- if (!d)
- return ENETDOWN;
-
- bd = d->bd;
- NGI_GET_M (item, m);
- NG_FREE_ITEM (item);
- if (! NG_HOOK_PRIVATE (hook) || ! d) {
- NG_FREE_M (m);
- return ENETDOWN;
- }
-
- /* Check for high priority data */
- if ((ptag = (struct ng_tag_prio *)m_tag_locate(m, NGM_GENERIC_COOKIE,
- NG_TAG_PRIO, NULL)) != NULL && (ptag->priority > NG_PRIO_CUTOFF) )
- q = &d->hi_queue;
- else
- q = &d->queue;
-
- s = splimp ();
- CT_LOCK (bd);
- IF_LOCK (q);
- if (_IF_QFULL (q)) {
- IF_UNLOCK (q);
- CT_UNLOCK (bd);
- splx (s);
- NG_FREE_M (m);
- return ENOBUFS;
- }
- _IF_ENQUEUE (q, m);
- IF_UNLOCK (q);
- ct_start (d);
- CT_UNLOCK (bd);
- splx (s);
- return 0;
-}
-
-static int ng_ct_rmnode (node_p node)
-{
- drv_t *d = NG_NODE_PRIVATE (node);
- bdrv_t *bd;
-
- CT_DEBUG (d, ("Rmnode\n"));
- if (d && d->running) {
- bd = d->bd;
- int s = splimp ();
- CT_LOCK (bd);
- ct_down (d);
- CT_UNLOCK (bd);
- splx (s);
- }
-#ifdef KLD_MODULE
- if (node->nd_flags & NGF_REALLY_DIE) {
- NG_NODE_SET_PRIVATE (node, NULL);
- NG_NODE_UNREF (node);
- }
- NG_NODE_REVIVE(node); /* Persistant node */
-#endif
- return 0;
-}
-
-static int ng_ct_connect (hook_p hook)
-{
- drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
-
- if (!d)
- return 0;
-
- callout_reset (&d->timeout_handle, hz, ct_watchdog_timer, d);
- return 0;
-}
-
-static int ng_ct_disconnect (hook_p hook)
-{
- drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
- bdrv_t *bd;
-
- if (!d)
- return 0;
-
- bd = d->bd;
-
- CT_LOCK (bd);
- if (NG_HOOK_PRIVATE (hook))
- ct_down (d);
- CT_UNLOCK (bd);
- /* If we were wait it than it reasserted now, just stop it. */
- if (!callout_drain (&d->timeout_handle))
- callout_stop (&d->timeout_handle);
- return 0;
-}
-#endif
-
-static int ct_modevent (module_t mod, int type, void *unused)
-{
- static int load_count = 0;
-
- switch (type) {
- case MOD_LOAD:
-#ifdef NETGRAPH
- if (ng_newtype (&typestruct))
- printf ("Failed to register ng_ct\n");
-#endif
- ++load_count;
- callout_init (&timeout_handle, 1);
- callout_reset (&timeout_handle, hz*5, ct_timeout, 0);
- break;
- case MOD_UNLOAD:
- if (load_count == 1) {
- printf ("Removing device entry for Tau-ISA\n");
-#ifdef NETGRAPH
- ng_rmtype (&typestruct);
-#endif
- }
- /* If we were wait it than it reasserted now, just stop it. */
- if (!callout_drain (&timeout_handle))
- callout_stop (&timeout_handle);
- --load_count;
- break;
- case MOD_SHUTDOWN:
- break;
- }
- return 0;
-}
-
-#ifdef NETGRAPH
-static struct ng_type typestruct = {
- .version = NG_ABI_VERSION,
- .name = NG_CT_NODE_TYPE,
- .constructor = ng_ct_constructor,
- .rcvmsg = ng_ct_rcvmsg,
- .shutdown = ng_ct_rmnode,
- .newhook = ng_ct_newhook,
- .connect = ng_ct_connect,
- .rcvdata = ng_ct_rcvdata,
- .disconnect = ng_ct_disconnect,
-};
-#endif /*NETGRAPH*/
-
-#ifdef NETGRAPH
-MODULE_DEPEND (ng_ct, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION);
-#else
-MODULE_DEPEND (ct, sppp, 1, 1, 1);
-#endif
-DRIVER_MODULE (ct, isa, ct_isa_driver, ct_devclass, ct_modevent, NULL);
-MODULE_VERSION (ct, 1);
diff --git a/sys/dev/ctau/lxt318.h b/sys/dev/ctau/lxt318.h
deleted file mode 100644
index a1064afca67c..000000000000
--- a/sys/dev/ctau/lxt318.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*-
- * Level One LXT318 E1 transceiver registers.
- * Crystal CS61318 E1 Line Interface Unit registers.
- * Crystal CS61581 T1/E1 Line Interface Unit registers.
- *
- * Copyright (C) 1996 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * Copyright (C) 2003 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: lxt318.h,v 1.2.4.4 2003/11/14 19:08:45 rik Exp $
- * $FreeBSD$
- */
-
-#define LX_WRITE 0x00
-#define LX_READ 0x01
-
-#define LX_CCR1 0x10
-#define LX_CCR2 0x11 /* CS61318 */
-#define LX_EQGAIN 0x12 /* CS61318 */
-#define LX_RAM 0x13 /* CS61318 */
-#define LX_CCR3 0x14 /* CS61581 */
-#define LX_DPEC 0x15 /* CS61581 */
-
-#define LX_LOS 0x01 /* loss of signal condition */
-#define LX_HDB3 0x04 /* HDB3 encoding enable */
-#define LX_RLOOP 0x20 /* remote loopback */
-#define LX_LLOOP 0x40 /* local loopback */
-#define LX_TAOS 0x80 /* transmit all ones */
-
-#define LX_RESET (LX_RLOOP | LX_LLOOP) /* reset the chip */
-
-#define LX_CCR2_LH 0x00 /* Long Haul mode */
-#define LX_CCR2_SH 0x01 /* Long Haul mode */
-
-#define LX_CCR3_E1_LH 0x60 /* Long Haul mode */
diff --git a/sys/dev/ctau/ng_ct.h b/sys/dev/ctau/ng_ct.h
deleted file mode 100644
index bd4d208e1204..000000000000
--- a/sys/dev/ctau/ng_ct.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*-
- * Defines for Cronyx-Tau adapter driver.
- *
- * Copyright (C) 1999-2004 Cronyx Engineering.
- * Author: Kurakin Roman, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations a permission to use,
- * modify and redistribute this software in source and binary forms,
- * as long as this message is kept with the software, all derivative
- * works or modified versions.
- *
- * Cronyx Id: ng_ct.h,v 1.1.2.3 2004/01/27 14:39:11 rik Exp $
- * $FreeBSD$
- */
-
-#ifdef NETGRAPH
-
-#ifndef _CT_NETGRAPH_H_
-#define _CT_NETGRAPH_H_
-
-#define NG_CT_NODE_TYPE "ct"
-#define NGM_CT_COOKIE 942835777
-#define NG_CT_HOOK_RAW "rawdata"
-#define NG_CT_HOOK_DEBUG "debug"
-
-#endif /* _CT_NETGRAPH_H_ */
-
-#endif /* NETGRAPH */
diff --git a/sys/dev/cx/cronyxfw.h b/sys/dev/cx/cronyxfw.h
deleted file mode 100644
index 56b2033b09ab..000000000000
--- a/sys/dev/cx/cronyxfw.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * Cronyx firmware definitions.
- *
- * Copyright (C) 1996 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: cronyxfw.h,v 1.1.2.1 2003/11/12 17:09:49 rik Exp $
- * $FreeBSD$
- */
-#define CRONYX_DAT_MAGIC 2001107011L /* firmware file magic */
-
-typedef struct _cr_dat_tst {
- long start; /* verify start */
- long end; /* verify end */
-} cr_dat_tst_t;
-
-typedef struct { /* firmware file header */
- unsigned long magic; /* firmware magic */
- long hdrsz; /* header size in bytes */
- long len; /* firmware data size in bits */
- long ntest; /* number of tests */
- unsigned long sum; /* header+tests+data checksum */
- char version[8]; /* firmware version number */
- char date[8]; /* date when compiled */
-} cr_dat_t;
diff --git a/sys/dev/cx/csigma.c b/sys/dev/cx/csigma.c
deleted file mode 100644
index b0e56e168fe3..000000000000
--- a/sys/dev/cx/csigma.c
+++ /dev/null
@@ -1,1438 +0,0 @@
-/*-
- * Low-level subroutines for Cronyx-Sigma adapter.
- *
- * Copyright (C) 1994-2000 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: csigma.c,v 1.1.2.1 2003/11/12 17:13:41 rik Exp $
- * $FreeBSD$
- */
-#include <dev/cx/machdep.h>
-#include <dev/cx/cxddk.h>
-#include <dev/cx/cxreg.h>
-#include <dev/cx/cronyxfw.h>
-
-#define DMA_MASK 0xd4 /* DMA mask register */
-#define DMA_MASK_CLEAR 0x04 /* DMA clear mask */
-#define DMA_MODE 0xd6 /* DMA mode register */
-#define DMA_MODE_MASTER 0xc0 /* DMA master mode */
-
-#define BYTE *(unsigned char*)&
-
-static unsigned char irqmask [] = {
- BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_3,
- BCR0_IRQ_DIS, BCR0_IRQ_5, BCR0_IRQ_DIS, BCR0_IRQ_7,
- BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_10, BCR0_IRQ_11,
- BCR0_IRQ_12, BCR0_IRQ_DIS, BCR0_IRQ_DIS, BCR0_IRQ_15,
-};
-
-static unsigned char dmamask [] = {
- BCR0_DMA_DIS, BCR0_DMA_DIS, BCR0_DMA_DIS, BCR0_DMA_DIS,
- BCR0_DMA_DIS, BCR0_DMA_5, BCR0_DMA_6, BCR0_DMA_7,
-};
-
-/* standard base port set */
-static short porttab [] = {
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
-};
-
-/* valid IRQs and DRQs */
-static short irqtab [] = { 3, 5, 7, 10, 11, 12, 15, 0 };
-static short dmatab [] = { 5, 6, 7, 0 };
-
-static int valid (short value, short *list)
-{
- while (*list)
- if (value == *list++)
- return 1;
- return 0;
-}
-
-long cx_rxbaud = 9600; /* receiver baud rate */
-long cx_txbaud = 9600; /* transmitter baud rate */
-
-int cx_univ_mode = M_HDLC; /* univ. chan. mode: async or sync */
-int cx_sync_mode = M_HDLC; /* sync. chan. mode: HDLC, Bisync or X.21 */
-int cx_iftype = 0; /* univ. chan. interface: upper/lower */
-
-static int cx_probe_chip (port_t base);
-static void cx_setup_chip (cx_chan_t *c);
-
-/*
- * Wait for CCR to clear.
- */
-void cx_cmd (port_t base, int cmd)
-{
- port_t port = CCR(base);
- int count;
-
- /* Wait 10 msec for the previous command to complete. */
- for (count=0; inb(port) && count<20000; ++count)
- continue;
-
- /* Issue the command. */
- outb (port, cmd);
-
- /* Wait 10 msec for the command to complete. */
- for (count=0; inb(port) && count<20000; ++count)
- continue;
-}
-
-/*
- * Reset the chip.
- */
-static int cx_reset (port_t port)
-{
- int count;
-
- /* Wait up to 10 msec for revision code to appear after reset. */
- for (count=0; count<20000; ++count)
- if (inb(GFRCR(port)) != 0)
- break;
-
- cx_cmd (port, CCR_RSTALL);
-
- /* Firmware revision code should clear immediately. */
- /* Wait up to 10 msec for revision code to appear again. */
- for (count=0; count<20000; ++count)
- if (inb(GFRCR(port)) != 0)
- return (1);
-
- /* Reset failed. */
- return (0);
-}
-
-int cx_download (port_t port, const unsigned char *firmware, long bits,
- const cr_dat_tst_t *tst)
-{
- unsigned char cr2, sr;
- long i, n, maxn = (bits + 7) / 8;
- int v, b;
-
- inb (BDET(port));
- for (i=n=0; n<maxn; ++n) {
- v = ((firmware[n] ^ ' ') << 1) | (firmware[n] >> 7 & 1);
- for (b=0; b<7; b+=2, i+=2) {
- if (i >= bits)
- break;
- cr2 = 0;
- if (v >> b & 1) cr2 |= BCR2_TMS;
- if (v >> b & 2) cr2 |= BCR2_TDI;
- outb (BCR2(port), cr2);
- sr = inb (BSR(port));
- outb (BCR0(port), BCR0800_TCK);
- outb (BCR0(port), 0);
- if (i >= tst->end)
- ++tst;
- if (i >= tst->start && (sr & BSR800_LERR))
- return (0);
- }
- }
- return (1);
-}
-
-/*
- * Check if the Sigma-XXX board is present at the given base port.
- */
-static int cx_probe_chained_board (port_t port, int *c0, int *c1)
-{
- int rev, i;
-
- /* Read and check the board revision code. */
- rev = inb (BSR(port));
- *c0 = *c1 = 0;
- switch (rev & BSR_VAR_MASK) {
- case CRONYX_100: *c0 = 1; break;
- case CRONYX_400: *c1 = 1; break;
- case CRONYX_500: *c0 = *c1 = 1; break;
- case CRONYX_410: *c0 = 1; break;
- case CRONYX_810: *c0 = *c1 = 1; break;
- case CRONYX_410s: *c0 = 1; break;
- case CRONYX_810s: *c0 = *c1 = 1; break;
- case CRONYX_440: *c0 = 1; break;
- case CRONYX_840: *c0 = *c1 = 1; break;
- case CRONYX_401: *c0 = 1; break;
- case CRONYX_801: *c0 = *c1 = 1; break;
- case CRONYX_401s: *c0 = 1; break;
- case CRONYX_801s: *c0 = *c1 = 1; break;
- case CRONYX_404: *c0 = 1; break;
- case CRONYX_703: *c0 = *c1 = 1; break;
- default: return (0); /* invalid variant code */
- }
-
- switch (rev & BSR_OSC_MASK) {
- case BSR_OSC_20: /* 20 MHz */
- case BSR_OSC_18432: /* 18.432 MHz */
- break;
- default:
- return (0); /* oscillator frequency does not match */
- }
-
- for (i=2; i<0x10; i+=2)
- if ((inb (BSR(port)+i) & BSR_REV_MASK) != (rev & BSR_REV_MASK))
- return (0); /* status changed? */
- return (1);
-}
-
-/*
- * Check if the Sigma-800 board is present at the given base port.
- * Read board status register 1 and check identification bits
- * which should invert every next read.
- */
-static int cx_probe_800_chained_board (port_t port)
-{
- unsigned char det, odet;
- int i;
-
- odet = inb (BDET(port));
- if ((odet & (BDET_IB | BDET_IB_NEG)) != BDET_IB &&
- (odet & (BDET_IB | BDET_IB_NEG)) != BDET_IB_NEG)
- return (0);
- for (i=0; i<100; ++i) {
- det = inb (BDET(port));
- if (((det ^ odet) & (BDET_IB | BDET_IB_NEG)) !=
- (BDET_IB | BDET_IB_NEG))
- return (0);
- odet = det;
- }
- /* Reset the controller. */
- outb (BCR0(port), 0);
- outb (BCR1(port), 0);
- outb (BCR2(port), 0);
- return (1);
-}
-
-/*
- * Check if the Sigma-2x board is present at the given base port.
- */
-static int cx_probe_2x_board (port_t port)
-{
- int rev, i;
-
- /* Read and check the board revision code. */
- rev = inb (BSR(port));
- if ((rev & BSR2X_VAR_MASK) != CRONYX_22 &&
- (rev & BSR2X_VAR_MASK) != CRONYX_24)
- return (0); /* invalid variant code */
-
- for (i=2; i<0x10; i+=2)
- if ((inb (BSR(port)+i) & BSR2X_REV_MASK) !=
- (rev & BSR2X_REV_MASK))
- return (0); /* status changed? */
- return (1);
-}
-
-/*
- * Check if the Cronyx-Sigma board is present at the given base port.
- */
-int cx_probe_board (port_t port, int irq, int dma)
-{
- int c0, c1, c2=0, c3=0, result;
-
- if (! valid (port, porttab))
- return 0;
-
- if (irq > 0 && ! valid (irq, irqtab))
- return 0;
-
- if (dma > 0 && ! valid (dma, dmatab))
- return 0;
-
- if (cx_probe_800_chained_board (port)) {
- /* Sigma-800 detected. */
- if (! (inb (BSR(port)) & BSR_NOCHAIN)) {
- /* chained board attached */
- if (! cx_probe_800_chained_board (port+0x10))
- /* invalid chained board? */
- return (0);
- if (! (inb (BSR(port+0x10)) & BSR_NOCHAIN))
- /* invalid chained board flag? */
- return (0);
- }
- return 1;
- }
- if (cx_probe_chained_board (port, &c0, &c1)) {
- /* Sigma-XXX detected. */
- if (! (inb (BSR(port)) & BSR_NOCHAIN)) {
- /* chained board attached */
- if (! cx_probe_chained_board (port+0x10, &c2, &c3))
- /* invalid chained board? */
- return (0);
- if (! (inb (BSR(port+0x10)) & BSR_NOCHAIN))
- /* invalid chained board flag? */
- return (0);
- }
- } else if (cx_probe_2x_board (port)) {
- c0 = 1; /* Sigma-2x detected. */
- c1 = 0;
- } else
- return (0); /* no board detected */
-
- /* Turn off the reset bit. */
- outb (BCR0(port), BCR0_NORESET);
- if (c2 || c3)
- outb (BCR0(port + 0x10), BCR0_NORESET);
-
- result = 1;
- if (c0 && ! cx_probe_chip (CS0(port)))
- result = 0; /* no CD2400 chip here */
- else if (c1 && ! cx_probe_chip (CS1A(port)) &&
- ! cx_probe_chip (CS1(port)))
- result = 0; /* no second CD2400 chip */
- else if (c2 && ! cx_probe_chip (CS0(port + 0x10)))
- result = 0; /* no CD2400 chip on the slave board */
- else if (c3 && ! cx_probe_chip (CS1(port + 0x10)))
- result = 0; /* no second CD2400 chip on the slave board */
-
- /* Reset the controller. */
- outb (BCR0(port), 0);
- if (c2 || c3)
- outb (BCR0(port + 0x10), 0);
-
- /* Yes, we really have valid Sigma board. */
- return (result);
-}
-
-/*
- * Check if the CD2400 chip is present at the given base port.
- */
-static int cx_probe_chip (port_t base)
-{
- int rev, newrev, count;
-
- /* Wait up to 10 msec for revision code to appear after reset. */
- rev = 0;
- for (count=0; rev==0; ++count) {
- if (count >= 20000)
- return (0); /* reset failed */
- rev = inb (GFRCR(base));
- }
-
- /* Read and check the global firmware revision code. */
- if (! (rev>=REVCL_MIN && rev<=REVCL_MAX) &&
- ! (rev>=REVCL31_MIN && rev<=REVCL31_MAX))
- return (0); /* CD2400/2431 revision does not match */
-
- /* Reset the chip. */
- if (! cx_reset (base))
- return (0);
-
- /* Read and check the new global firmware revision code. */
- newrev = inb (GFRCR(base));
- if (newrev != rev)
- return (0); /* revision changed */
-
- /* Yes, we really have CD2400/2431 chip here. */
- return (1);
-}
-
-/*
- * Check that the irq is functional.
- * irq>0 - activate the interrupt from the adapter (irq=on)
- * irq<0 - deactivate the interrupt (irq=off)
- * irq==0 - free the interrupt line (irq=tri-state)
- * Return the interrupt mask _before_ activating irq.
- */
-int cx_probe_irq (cx_board_t *b, int irq)
-{
- int mask, rev;
- port_t port;
-
- rev = inb (BSR(b->port));
- port = ((rev & BSR_VAR_MASK) != CRONYX_400) ? CS0(b->port) : CS1(b->port);
-
- outb (0x20, 0x0a);
- mask = inb (0x20);
- outb (0xa0, 0x0a);
- mask |= inb (0xa0) << 8;
-
- if (irq > 0) {
- outb (BCR0(b->port), BCR0_NORESET | irqmask[irq]);
- outb (CAR(port), 0);
- cx_cmd (port, CCR_CLRCH);
- outb (CMR(port), CMR_HDLC);
- outb (TCOR(port), 0);
- outb (TBPR(port), 1);
- cx_cmd (port, CCR_INITCH | CCR_ENTX);
- outb (IER(port), IER_TXMPTY);
- } else if (irq < 0) {
- cx_reset (port);
- if (-irq > 7) {
- outb (0xa0, 0x60 | ((-irq) & 7));
- outb (0x20, 0x62);
- } else
- outb (0x20, 0x60 | (-irq));
- } else
- outb (BCR0(b->port), 0);
- return mask;
-}
-
-static int cx_chip_revision (port_t port, int rev)
-{
- int count;
-
- /* Model 400 has no first chip. */
- port = ((rev & BSR_VAR_MASK) != CRONYX_400) ? CS0(port) : CS1(port);
-
- /* Wait up to 10 msec for revision code to appear after reset. */
- for (count=0; inb(GFRCR(port))==0; ++count)
- if (count >= 20000)
- return (0); /* reset failed */
-
- return inb (GFRCR (port));
-}
-
-/*
- * Probe and initialize the board structure.
- */
-void cx_init (cx_board_t *b, int num, port_t port, int irq, int dma)
-{
- int gfrcr, rev, chain, mod = 0, rev2 = 0, mod2 = 0;
-
- rev = inb (BSR(port));
- chain = ! (rev & BSR_NOCHAIN);
- if (cx_probe_800_chained_board (port)) {
- cx_init_800 (b, num, port, irq, dma, chain);
- return;
- }
- if ((rev & BSR2X_VAR_MASK) == CRONYX_22 ||
- (rev & BSR2X_VAR_MASK) == CRONYX_24) {
- cx_init_2x (b, num, port, irq, dma,
- (rev & BSR2X_VAR_MASK), (rev & BSR2X_OSC_33));
- return;
- }
-
- outb (BCR0(port), BCR0_NORESET);
- if (chain)
- outb (BCR0(port+0x10), BCR0_NORESET);
- gfrcr = cx_chip_revision (port, rev);
- if (gfrcr >= REVCL31_MIN && gfrcr <= REVCL31_MAX)
- mod = 1;
- if (chain) {
- rev2 = inb (BSR(port+0x10));
- gfrcr = cx_chip_revision (port+0x10, rev2);
- if (gfrcr >= REVCL31_MIN && gfrcr <= REVCL31_MAX)
- mod2 = 1;
- outb (BCR0(port+0x10), 0);
- }
- outb (BCR0(port), 0);
-
- cx_init_board (b, num, port, irq, dma, chain,
- (rev & BSR_VAR_MASK), (rev & BSR_OSC_MASK), mod,
- (rev2 & BSR_VAR_MASK), (rev2 & BSR_OSC_MASK), mod2);
-}
-
-/*
- * Initialize the board structure, given the type of the board.
- */
-void cx_init_board (cx_board_t *b, int num, port_t port, int irq, int dma,
- int chain, int rev, int osc, int mod, int rev2, int osc2, int mod2)
-{
- cx_chan_t *c;
- char *type;
- int i;
-
- /* Initialize board structure. */
- b->port = port;
- b->num = num;
- b->irq = irq;
- b->dma = dma;
- b->opt = board_opt_dflt;
-
- b->type = B_SIGMA_XXX;
- b->if0type = b->if8type = cx_iftype;
-
- /* Set channels 0 and 8 mode, set DMA and IRQ. */
- b->bcr0 = b->bcr0b = BCR0_NORESET | dmamask[b->dma] | irqmask[b->irq];
-
- /* Clear DTR[0..3] and DTR[8..12]. */
- b->bcr1 = b->bcr1b = 0;
-
- /*------------------ Master board -------------------*/
-
- /* Read and check the board revision code. */
- strcpy (b->name, mod ? "m" : "");
- switch (rev) {
- default: type = ""; break;
- case CRONYX_100: type = "100"; break;
- case CRONYX_400: type = "400"; break;
- case CRONYX_500: type = "500"; break;
- case CRONYX_410: type = "410"; break;
- case CRONYX_810: type = "810"; break;
- case CRONYX_410s: type = "410s"; break;
- case CRONYX_810s: type = "810s"; break;
- case CRONYX_440: type = "440"; break;
- case CRONYX_840: type = "840"; break;
- case CRONYX_401: type = "401"; break;
- case CRONYX_801: type = "801"; break;
- case CRONYX_401s: type = "401s"; break;
- case CRONYX_801s: type = "801s"; break;
- case CRONYX_404: type = "404"; break;
- case CRONYX_703: type = "703"; break;
- }
- strcat (b->name, type);
-
- switch (osc) {
- default:
- case BSR_OSC_20: /* 20 MHz */
- b->chan[0].oscfreq = b->chan[1].oscfreq =
- b->chan[2].oscfreq = b->chan[3].oscfreq =
- b->chan[4].oscfreq = b->chan[5].oscfreq =
- b->chan[6].oscfreq = b->chan[7].oscfreq =
- mod ? 33000000L : 20000000L;
- strcat (b->name, "a");
- break;
- case BSR_OSC_18432: /* 18.432 MHz */
- b->chan[0].oscfreq = b->chan[1].oscfreq =
- b->chan[2].oscfreq = b->chan[3].oscfreq =
- b->chan[4].oscfreq = b->chan[5].oscfreq =
- b->chan[6].oscfreq = b->chan[7].oscfreq =
- mod ? 20000000L : 18432000L;
- strcat (b->name, "b");
- break;
- }
-
- /*------------------ Slave board -------------------*/
-
- if (chain) {
- /* Read and check the board revision code. */
- strcat (b->name, mod2 ? "/m" : "/");
- switch (rev2) {
- default: type = ""; break;
- case CRONYX_100: type = "100"; break;
- case CRONYX_400: type = "400"; break;
- case CRONYX_500: type = "500"; break;
- case CRONYX_410: type = "410"; break;
- case CRONYX_810: type = "810"; break;
- case CRONYX_410s: type = "410s"; break;
- case CRONYX_810s: type = "810s"; break;
- case CRONYX_440: type = "440"; break;
- case CRONYX_840: type = "840"; break;
- case CRONYX_401: type = "401"; break;
- case CRONYX_801: type = "801"; break;
- case CRONYX_401s: type = "401s"; break;
- case CRONYX_801s: type = "801s"; break;
- case CRONYX_404: type = "404"; break;
- case CRONYX_703: type = "703"; break;
- }
- strcat (b->name, type);
-
- switch (osc2) {
- default:
- case BSR_OSC_20: /* 20 MHz */
- b->chan[8].oscfreq = b->chan[9].oscfreq =
- b->chan[10].oscfreq = b->chan[11].oscfreq =
- b->chan[12].oscfreq = b->chan[13].oscfreq =
- b->chan[14].oscfreq = b->chan[15].oscfreq =
- mod2 ? 33000000L : 20000000L;
- strcat (b->name, "a");
- break;
- case BSR_OSC_18432: /* 18.432 MHz */
- b->chan[8].oscfreq = b->chan[9].oscfreq =
- b->chan[10].oscfreq = b->chan[11].oscfreq =
- b->chan[12].oscfreq = b->chan[13].oscfreq =
- b->chan[14].oscfreq = b->chan[15].oscfreq =
- mod2 ? 20000000L : 18432000L;
- strcat (b->name, "b");
- break;
- }
- }
-
- /* Initialize channel structures. */
- for (i=0; i<4; ++i) {
- b->chan[i+0].port = CS0(port);
- b->chan[i+4].port = cx_probe_chip (CS1A(port)) ?
- CS1A(port) : CS1(port);
- b->chan[i+8].port = CS0(port+0x10);
- b->chan[i+12].port = CS1(port+0x10);
- }
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->board = b;
- c->num = c - b->chan;
- c->type = T_NONE;
- }
-
- /*------------------ Master board -------------------*/
-
- switch (rev) {
- case CRONYX_400:
- for (i=4; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_100:
- b->chan[0].type = T_UNIV_RS232;
- break;
- case CRONYX_500:
- b->chan[0].type = T_UNIV_RS232;
- for (i=4; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_410:
- b->chan[0].type = T_UNIV_V35;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_810:
- b->chan[0].type = T_UNIV_V35;
- for (i=1; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_410s:
- b->chan[0].type = T_UNIV_V35;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_RS232;
- break;
- case CRONYX_810s:
- b->chan[0].type = T_UNIV_V35;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_RS232;
- for (i=4; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_440:
- b->chan[0].type = T_UNIV_V35;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_V35;
- break;
- case CRONYX_840:
- b->chan[0].type = T_UNIV_V35;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_V35;
- for (i=4; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_401:
- b->chan[0].type = T_UNIV_RS449;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_801:
- b->chan[0].type = T_UNIV_RS449;
- for (i=1; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_401s:
- b->chan[0].type = T_UNIV_RS449;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_RS232;
- break;
- case CRONYX_801s:
- b->chan[0].type = T_UNIV_RS449;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_RS232;
- for (i=4; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_404:
- b->chan[0].type = T_UNIV_RS449;
- for (i=1; i<4; ++i)
- b->chan[i].type = T_SYNC_RS449;
- break;
- case CRONYX_703:
- b->chan[0].type = T_UNIV_RS449;
- for (i=1; i<3; ++i)
- b->chan[i].type = T_SYNC_RS449;
- for (i=4; i<8; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- }
-
- /*------------------ Slave board -------------------*/
-
- if (chain) {
- switch (rev2) {
- case CRONYX_400:
- break;
- case CRONYX_100:
- b->chan[8].type = T_UNIV_RS232;
- break;
- case CRONYX_500:
- b->chan[8].type = T_UNIV_RS232;
- for (i=12; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_410:
- b->chan[8].type = T_UNIV_V35;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_810:
- b->chan[8].type = T_UNIV_V35;
- for (i=9; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_410s:
- b->chan[8].type = T_UNIV_V35;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_SYNC_RS232;
- break;
- case CRONYX_810s:
- b->chan[8].type = T_UNIV_V35;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_SYNC_RS232;
- for (i=12; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_440:
- b->chan[8].type = T_UNIV_V35;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_SYNC_V35;
- break;
- case CRONYX_840:
- b->chan[8].type = T_UNIV_V35;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_SYNC_V35;
- for (i=12; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_401:
- b->chan[8].type = T_UNIV_RS449;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_801:
- b->chan[8].type = T_UNIV_RS449;
- for (i=9; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_401s:
- b->chan[8].type = T_UNIV_RS449;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_801s:
- b->chan[8].type = T_UNIV_RS449;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_SYNC_RS232;
- for (i=12; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- case CRONYX_404:
- b->chan[8].type = T_UNIV_RS449;
- for (i=9; i<12; ++i)
- b->chan[i].type = T_SYNC_RS449;
- break;
- case CRONYX_703:
- b->chan[8].type = T_UNIV_RS449;
- for (i=9; i<11; ++i)
- b->chan[i].type = T_SYNC_RS449;
- for (i=12; i<16; ++i)
- b->chan[i].type = T_UNIV_RS232;
- break;
- }
- }
-
- b->nuniv = b->nsync = b->nasync = 0;
- for (c=b->chan; c<b->chan+NCHAN; ++c)
- switch (c->type) {
- case T_ASYNC: ++b->nasync; break;
- case T_UNIV:
- case T_UNIV_RS232:
- case T_UNIV_RS449:
- case T_UNIV_V35: ++b->nuniv; break;
- case T_SYNC_RS232:
- case T_SYNC_V35:
- case T_SYNC_RS449: ++b->nsync; break;
- }
-
- cx_reinit_board (b);
-}
-
-/*
- * Initialize the Sigma-800 board structure.
- */
-void cx_init_800 (cx_board_t *b, int num, port_t port, int irq, int dma,
- int chain)
-{
- cx_chan_t *c;
- int i;
-
- /* Initialize board structure. */
- b->port = port;
- b->num = num;
- b->irq = irq;
- b->dma = dma;
- b->opt = board_opt_dflt;
- b->type = B_SIGMA_800;
-
- /* Set channels 0 and 8 mode, set DMA and IRQ. */
- b->bcr0 = b->bcr0b = dmamask[b->dma] | irqmask[b->irq];
-
- /* Clear DTR[0..7] and DTR[8..15]. */
- b->bcr1 = b->bcr1b = 0;
-
- strcpy (b->name, "800");
- if (chain)
- strcat (b->name, "/800");
-
- /* Initialize channel structures. */
- for (i=0; i<4; ++i) {
- b->chan[i+0].port = CS0(port);
- b->chan[i+4].port = cx_probe_chip (CS1A(port)) ?
- CS1A(port) : CS1(port);
- b->chan[i+8].port = CS0(port+0x10);
- b->chan[i+12].port = CS1(port+0x10);
- }
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->board = b;
- c->num = c - b->chan;
- c->oscfreq = 33000000L;
- c->type = (c->num < 8 || chain) ? T_UNIV_RS232 : T_NONE;
- }
-
- b->nuniv = b->nsync = b->nasync = 0;
- for (c=b->chan; c<b->chan+NCHAN; ++c)
- switch (c->type) {
- case T_ASYNC: ++b->nasync; break;
- case T_UNIV:
- case T_UNIV_RS232:
- case T_UNIV_RS449:
- case T_UNIV_V35: ++b->nuniv; break;
- case T_SYNC_RS232:
- case T_SYNC_V35:
- case T_SYNC_RS449: ++b->nsync; break;
- }
-
- cx_reinit_board (b);
-}
-
-/*
- * Initialize the Sigma-2x board structure.
- */
-void cx_init_2x (cx_board_t *b, int num, port_t port, int irq, int dma,
- int rev, int osc)
-{
- cx_chan_t *c;
- int i;
-
- /* Initialize board structure. */
- b->port = port;
- b->num = num;
- b->irq = irq;
- b->dma = dma;
- b->opt = board_opt_dflt;
-
- b->type = B_SIGMA_2X;
-
- /* Set channels 0 and 8 mode, set DMA and IRQ. */
- b->bcr0 = BCR0_NORESET | dmamask[b->dma] | irqmask[b->irq];
- if (b->type == B_SIGMA_2X && b->opt.fast)
- b->bcr0 |= BCR02X_FAST;
-
- /* Clear DTR[0..3] and DTR[8..12]. */
- b->bcr1 = 0;
-
- /* Initialize channel structures. */
- for (i=0; i<4; ++i) {
- b->chan[i+0].port = CS0(port);
- b->chan[i+4].port = CS1(port);
- b->chan[i+8].port = CS0(port+0x10);
- b->chan[i+12].port = CS1(port+0x10);
- }
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->board = b;
- c->num = c - b->chan;
- c->type = T_NONE;
- c->oscfreq = (osc & BSR2X_OSC_33) ? 33000000L : 20000000L;
- }
-
- /* Check the board revision code. */
- strcpy (b->name, "22");
- b->chan[0].type = T_UNIV;
- b->chan[1].type = T_UNIV;
- b->nsync = b->nasync = 0;
- b->nuniv = 2;
- if (rev == CRONYX_24) {
- strcpy (b->name, "24");
- b->chan[2].type = T_UNIV;
- b->chan[3].type = T_UNIV;
- b->nuniv += 2;
- }
- strcat (b->name, (osc & BSR2X_OSC_33) ? "c" : "a");
- cx_reinit_board (b);
-}
-
-/*
- * Reinitialize all channels, using new options and baud rate.
- */
-void cx_reinit_board (cx_board_t *b)
-{
- cx_chan_t *c;
-
- b->opt = board_opt_dflt;
- if (b->type == B_SIGMA_2X) {
- b->bcr0 &= ~BCR02X_FAST;
- if (b->opt.fast)
- b->bcr0 |= BCR02X_FAST;
- } else
- b->if0type = b->if8type = cx_iftype;
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- switch (c->type) {
- default:
- case T_NONE:
- continue;
- case T_UNIV:
- case T_UNIV_RS232:
- case T_UNIV_RS449:
- case T_UNIV_V35:
- c->mode = (cx_univ_mode == M_ASYNC) ?
- M_ASYNC : cx_sync_mode;
- break;
- case T_SYNC_RS232:
- case T_SYNC_V35:
- case T_SYNC_RS449:
- c->mode = cx_sync_mode;
- break;
- case T_ASYNC:
- c->mode = M_ASYNC;
- break;
- }
- c->rxbaud = cx_rxbaud;
- c->txbaud = cx_txbaud;
- c->opt = chan_opt_dflt;
- c->aopt = opt_async_dflt;
- c->hopt = opt_hdlc_dflt;
- }
-}
-
-/*
- * Set up the board.
- */
-int cx_setup_board (cx_board_t *b, const unsigned char *firmware,
- long bits, const cr_dat_tst_t *tst)
-{
- int i;
-#ifndef NDIS_MINIPORT_DRIVER
- /* Disable DMA channel. */
- outb (DMA_MASK, (b->dma & 3) | DMA_MASK_CLEAR);
-#endif
- /* Reset the controller. */
- outb (BCR0(b->port), 0);
- if (b->chan[8].type || b->chan[12].type)
- outb (BCR0(b->port+0x10), 0);
-
- /* Load the firmware. */
- if (b->type == B_SIGMA_800) {
- /* Reset the controllers. */
- outb (BCR2(b->port), BCR2_TMS);
- if (b->chan[8].type || b->chan[12].type)
- outb (BCR2(b->port+0x10), BCR2_TMS);
- outb (BCR2(b->port), 0);
- if (b->chan[8].type || b->chan[12].type)
- outb (BCR2(b->port+0x10), 0);
-
- if (firmware &&
- (! cx_download (b->port, firmware, bits, tst) ||
- ((b->chan[8].type || b->chan[12].type) &&
- ! cx_download (b->port+0x10, firmware, bits, tst))))
- return (0);
- }
-
- /*
- * Set channels 0 and 8 to RS232 async. mode.
- * Enable DMA and IRQ.
- */
- outb (BCR0(b->port), b->bcr0);
- if (b->chan[8].type || b->chan[12].type)
- outb (BCR0(b->port+0x10), b->bcr0b);
-
- /* Clear DTR[0..3] and DTR[8..12]. */
- outw (BCR1(b->port), b->bcr1);
- if (b->chan[8].type || b->chan[12].type)
- outw (BCR1(b->port+0x10), b->bcr1b);
-
- if (b->type == B_SIGMA_800)
- outb (BCR2(b->port), b->opt.fast &
- (BCR2_BUS0 | BCR2_BUS1));
-
- /* Initialize all controllers. */
- for (i=0; i<NCHAN; i+=4)
- if (b->chan[i].type != T_NONE)
- cx_setup_chip (b->chan + i);
-#ifndef NDIS_MINIPORT_DRIVER
- /* Set up DMA channel to master mode. */
- outb (DMA_MODE, (b->dma & 3) | DMA_MODE_MASTER);
-
- /* Enable DMA channel. */
- outb (DMA_MASK, b->dma & 3);
-#endif
- /* Initialize all channels. */
- for (i=0; i<NCHAN; ++i)
- if (b->chan[i].type != T_NONE)
- cx_setup_chan (b->chan + i);
- return (1);
-}
-
-/*
- * Initialize the board.
- */
-static void cx_setup_chip (cx_chan_t *c)
-{
- /* Reset the chip. */
- cx_reset (c->port);
-
- /*
- * Set all interrupt level registers to the same value.
- * This enables the internal CD2400 priority scheme.
- */
- outb (RPILR(c->port), BRD_INTR_LEVEL);
- outb (TPILR(c->port), BRD_INTR_LEVEL);
- outb (MPILR(c->port), BRD_INTR_LEVEL);
-
- /* Set bus error count to zero. */
- outb (BERCNT(c->port), 0);
-
- /* Set 16-bit DMA mode. */
- outb (DMR(c->port), 0);
-
- /* Set timer period register to 1 msec (approximately). */
- outb (TPR(c->port), 10);
-}
-
-/*
- * Initialize the CD2400 channel.
- */
-void cx_update_chan (cx_chan_t *c)
-{
- int clock, period;
-
- if (c->board->type == B_SIGMA_XXX)
- switch (c->num) {
- case 0:
- c->board->bcr0 &= ~BCR0_UMASK;
- if (c->mode != M_ASYNC)
- c->board->bcr0 |= BCR0_UM_SYNC;
- if (c->board->if0type &&
- (c->type==T_UNIV_RS449 || c->type==T_UNIV_V35))
- c->board->bcr0 |= BCR0_UI_RS449;
- outb (BCR0(c->board->port), c->board->bcr0);
- break;
- case 8:
- c->board->bcr0b &= ~BCR0_UMASK;
- if (c->mode != M_ASYNC)
- c->board->bcr0b |= BCR0_UM_SYNC;
- if (c->board->if8type &&
- (c->type==T_UNIV_RS449 || c->type==T_UNIV_V35))
- c->board->bcr0b |= BCR0_UI_RS449;
- outb (BCR0(c->board->port+0x10), c->board->bcr0b);
- break;
- }
-
- /* set current channel number */
- outb (CAR(c->port), c->num & 3);
-
- switch (c->mode) { /* initialize the channel mode */
- case M_ASYNC:
- /* set receiver timeout register */
- outw (RTPR(c->port), 10); /* 10 msec, see TPR */
- c->opt.rcor.encod = ENCOD_NRZ;
-
- outb (CMR(c->port), CMR_RXDMA | CMR_TXDMA | CMR_ASYNC);
- outb (COR1(c->port), BYTE c->aopt.cor1);
- outb (COR2(c->port), BYTE c->aopt.cor2);
- outb (COR3(c->port), BYTE c->aopt.cor3);
- outb (COR6(c->port), BYTE c->aopt.cor6);
- outb (COR7(c->port), BYTE c->aopt.cor7);
- outb (SCHR1(c->port), c->aopt.schr1);
- outb (SCHR2(c->port), c->aopt.schr2);
- outb (SCHR3(c->port), c->aopt.schr3);
- outb (SCHR4(c->port), c->aopt.schr4);
- outb (SCRL(c->port), c->aopt.scrl);
- outb (SCRH(c->port), c->aopt.scrh);
- outb (LNXT(c->port), c->aopt.lnxt);
- break;
- case M_HDLC:
- outb (CMR(c->port), CMR_RXDMA | CMR_TXDMA | CMR_HDLC);
- outb (COR1(c->port), BYTE c->hopt.cor1);
- outb (COR2(c->port), BYTE c->hopt.cor2);
- outb (COR3(c->port), BYTE c->hopt.cor3);
- outb (RFAR1(c->port), c->hopt.rfar1);
- outb (RFAR2(c->port), c->hopt.rfar2);
- outb (RFAR3(c->port), c->hopt.rfar3);
- outb (RFAR4(c->port), c->hopt.rfar4);
- outb (CPSR(c->port), c->hopt.cpsr);
- break;
- }
-
- /* set mode-independent options */
- outb (COR4(c->port), BYTE c->opt.cor4);
- outb (COR5(c->port), BYTE c->opt.cor5);
-
- /* set up receiver clock values */
- if (c->mode == M_ASYNC || c->opt.rcor.dpll || c->opt.tcor.llm) {
- cx_clock (c->oscfreq, c->rxbaud, &clock, &period);
- c->opt.rcor.clk = clock;
- } else {
- c->opt.rcor.clk = CLK_EXT;
- period = 1;
- }
- outb (RCOR(c->port), BYTE c->opt.rcor);
- outb (RBPR(c->port), period);
-
- /* set up transmitter clock values */
- if (c->mode == M_ASYNC || !c->opt.tcor.ext1x) {
- unsigned ext1x = c->opt.tcor.ext1x;
- c->opt.tcor.ext1x = 0;
- cx_clock (c->oscfreq, c->txbaud, &clock, &period);
- c->opt.tcor.clk = clock;
- c->opt.tcor.ext1x = ext1x;
- } else {
- c->opt.tcor.clk = CLK_EXT;
- period = 1;
- }
- outb (TCOR(c->port), BYTE c->opt.tcor);
- outb (TBPR(c->port), period);
-}
-
-/*
- * Initialize the CD2400 channel.
- */
-void cx_setup_chan (cx_chan_t *c)
-{
- /* set current channel number */
- outb (CAR(c->port), c->num & 3);
-
- /* reset the channel */
- cx_cmd (c->port, CCR_CLRCH);
-
- /* set LIVR to contain the board and channel numbers */
- outb (LIVR(c->port), c->board->num << 6 | c->num << 2);
-
- /* clear DTR, RTS, set TXCout/DTR pin */
- outb (MSVR_RTS(c->port), 0);
- outb (MSVR_DTR(c->port), c->mode==M_ASYNC ? 0 : MSV_TXCOUT);
-
- /* set receiver A buffer physical address */
- outw (ARBADRU(c->port), (unsigned short) (c->arphys>>16));
- outw (ARBADRL(c->port), (unsigned short) c->arphys);
-
- /* set receiver B buffer physical address */
- outw (BRBADRU(c->port), (unsigned short) (c->brphys>>16));
- outw (BRBADRL(c->port), (unsigned short) c->brphys);
-
- /* set transmitter A buffer physical address */
- outw (ATBADRU(c->port), (unsigned short) (c->atphys>>16));
- outw (ATBADRL(c->port), (unsigned short) c->atphys);
-
- /* set transmitter B buffer physical address */
- outw (BTBADRU(c->port), (unsigned short) (c->btphys>>16));
- outw (BTBADRL(c->port), (unsigned short) c->btphys);
-
- c->dtr = 0;
- c->rts = 0;
-
- cx_update_chan (c);
-}
-
-/*
- * Control DTR signal for the channel.
- * Turn it on/off.
- */
-void cx_set_dtr (cx_chan_t *c, int on)
-{
- cx_board_t *b = c->board;
-
- c->dtr = on ? 1 : 0;
-
- if (b->type == B_SIGMA_2X) {
- if (on) b->bcr1 |= BCR1_DTR(c->num);
- else b->bcr1 &= ~BCR1_DTR(c->num);
- outw (BCR1(b->port), b->bcr1);
- return;
- }
- if (b->type == B_SIGMA_800) {
- if (c->num >= 8) {
- if (on) b->bcr1b |= BCR1800_DTR(c->num);
- else b->bcr1b &= ~BCR1800_DTR(c->num);
- outb (BCR1(b->port+0x10), b->bcr1b);
- } else {
- if (on) b->bcr1 |= BCR1800_DTR(c->num);
- else b->bcr1 &= ~BCR1800_DTR(c->num);
- outb (BCR1(b->port), b->bcr1);
- }
- return;
- }
- if (c->mode == M_ASYNC) {
- outb (CAR(c->port), c->num & 3);
- outb (MSVR_DTR(c->port), on ? MSV_DTR : 0);
- return;
- }
-
- switch (c->num) {
- default:
- /* Channels 4..7 and 12..15 in synchronous mode
- * have no DTR signal. */
- break;
-
- case 1: case 2: case 3:
- if (c->type == T_UNIV_RS232)
- break;
- case 0:
- if (on) b->bcr1 |= BCR1_DTR(c->num);
- else b->bcr1 &= ~BCR1_DTR(c->num);
- outw (BCR1(b->port), b->bcr1);
- break;
-
- case 9: case 10: case 11:
- if (c->type == T_UNIV_RS232)
- break;
- case 8:
- if (on) b->bcr1b |= BCR1_DTR(c->num & 3);
- else b->bcr1b &= ~BCR1_DTR(c->num & 3);
- outw (BCR1(b->port+0x10), b->bcr1b);
- break;
- }
-}
-
-/*
- * Control RTS signal for the channel.
- * Turn it on/off.
- */
-void cx_set_rts (cx_chan_t *c, int on)
-{
- c->rts = on ? 1 : 0;
- outb (CAR(c->port), c->num & 3);
- outb (MSVR_RTS(c->port), on ? MSV_RTS : 0);
-}
-
-/*
- * Get the state of DSR signal of the channel.
- */
-int cx_get_dsr (cx_chan_t *c)
-{
- unsigned char sigval;
-
- if (c->board->type == B_SIGMA_2X ||
- c->board->type == B_SIGMA_800 ||
- c->mode == M_ASYNC) {
- outb (CAR(c->port), c->num & 3);
- return (inb (MSVR(c->port)) & MSV_DSR ? 1 : 0);
- }
-
- /*
- * Channels 4..7 and 12..15 don't have DSR signal available.
- */
- switch (c->num) {
- default:
- return (1);
-
- case 1: case 2: case 3:
- if (c->type == T_UNIV_RS232)
- return (1);
- case 0:
- sigval = inw (BSR(c->board->port)) >> 8;
- break;
-
- case 9: case 10: case 11:
- if (c->type == T_UNIV_RS232)
- return (1);
- case 8:
- sigval = inw (BSR(c->board->port+0x10)) >> 8;
- break;
- }
- return (~sigval >> (c->num & 3) & 1);
-}
-
-/*
- * Get the state of CARRIER signal of the channel.
- */
-int cx_get_cd (cx_chan_t *c)
-{
- unsigned char sigval;
-
- if (c->board->type == B_SIGMA_2X ||
- c->board->type == B_SIGMA_800 ||
- c->mode == M_ASYNC) {
- outb (CAR(c->port), c->num & 3);
- return (inb (MSVR(c->port)) & MSV_CD ? 1 : 0);
- }
-
- /*
- * Channels 4..7 and 12..15 don't have CD signal available.
- */
- switch (c->num) {
- default:
- return (1);
-
- case 1: case 2: case 3:
- if (c->type == T_UNIV_RS232)
- return (1);
- case 0:
- sigval = inw (BSR(c->board->port)) >> 8;
- break;
-
- case 9: case 10: case 11:
- if (c->type == T_UNIV_RS232)
- return (1);
- case 8:
- sigval = inw (BSR(c->board->port+0x10)) >> 8;
- break;
- }
- return (~sigval >> 4 >> (c->num & 3) & 1);
-}
-
-/*
- * Get the state of CTS signal of the channel.
- */
-int cx_get_cts (cx_chan_t *c)
-{
- outb (CAR(c->port), c->num & 3);
- return (inb (MSVR(c->port)) & MSV_CTS ? 1 : 0);
-}
-
-/*
- * Compute CD2400 clock values.
- */
-void cx_clock (long hz, long ba, int *clk, int *div)
-{
- static short clocktab[] = { 8, 32, 128, 512, 2048, 0 };
-
- for (*clk=0; clocktab[*clk]; ++*clk) {
- long c = ba * clocktab[*clk];
- if (hz <= c*256) {
- *div = (2 * hz + c) / (2 * c) - 1;
- return;
- }
- }
- /* Incorrect baud rate. Return some meaningful values. */
- *clk = 0;
- *div = 255;
-}
-
-/*
- * Turn LED on/off.
- */
-void cx_led (cx_board_t *b, int on)
-{
- switch (b->type) {
- case B_SIGMA_2X:
- if (on) b->bcr0 |= BCR02X_LED;
- else b->bcr0 &= ~BCR02X_LED;
- outb (BCR0(b->port), b->bcr0);
- break;
- }
-}
-
-void cx_disable_dma (cx_board_t *b)
-{
-#ifndef NDIS_MINIPORT_DRIVER
- /* Disable DMA channel. */
- outb (DMA_MASK, (b->dma & 3) | DMA_MASK_CLEAR);
-#endif
-}
-
-cx_board_opt_t board_opt_dflt = { /* board options */
- BUS_NORMAL, /* normal bus master timing */
-};
-
-cx_chan_opt_t chan_opt_dflt = { /* mode-independent options */
- { /* cor4 */
- 7, /* FIFO threshold, odd is better */
- 0,
- 0, /* don't detect 1 to 0 on CTS */
- 1, /* detect 1 to 0 on CD */
- 0, /* detect 1 to 0 on DSR */
- },
- { /* cor5 */
- 0, /* receive flow control FIFO threshold */
- 0,
- 0, /* don't detect 0 to 1 on CTS */
- 1, /* detect 0 to 1 on CD */
- 0, /* detect 0 to 1 on DSR */
- },
- { /* rcor */
- 0, /* dummy clock source */
- ENCOD_NRZ, /* NRZ mode */
- 0, /* disable DPLL */
- 0,
- 0, /* transmit line value */
- },
- { /* tcor */
- 0,
- 0, /* local loopback mode */
- 0,
- 1, /* external 1x clock mode */
- 0,
- 0, /* dummy transmit clock source */
- },
-};
-
-cx_opt_async_t opt_async_dflt = { /* default async options */
- { /* cor1 */
- 8-1, /* 8-bit char length */
- 0, /* don't ignore parity */
- PARM_NOPAR, /* no parity */
- PAR_EVEN, /* even parity */
- },
- { /* cor2 */
- 0, /* disable automatic DSR */
- 1, /* enable automatic CTS */
- 0, /* disable automatic RTS */
- 0, /* no remote loopback */
- 0,
- 0, /* disable embedded cmds */
- 0, /* disable XON/XOFF */
- 0, /* disable XANY */
- },
- { /* cor3 */
- STOPB_1, /* 1 stop bit */
- 0,
- 0, /* disable special char detection */
- FLOWCC_PASS, /* pass flow ctl chars to the host */
- 0, /* range detect disable */
- 0, /* disable extended spec. char detect */
- },
- { /* cor6 */
- PERR_INTR, /* generate exception on parity errors */
- BRK_INTR, /* generate exception on break condition */
- 0, /* don't translate NL to CR on input */
- 0, /* don't translate CR to NL on input */
- 0, /* don't discard CR on input */
- },
- { /* cor7 */
- 0, /* don't translate CR to NL on output */
- 0, /* don't translate NL to CR on output */
- 0,
- 0, /* don't process flow ctl err chars */
- 0, /* disable LNext option */
- 0, /* don't strip 8 bit on input */
- },
- 0, 0, 0, 0, 0, 0, 0, /* clear schr1-4, scrl, scrh, lnxt */
-};
-
-cx_opt_hdlc_t opt_hdlc_dflt = { /* default hdlc options */
- { /* cor1 */
- 2, /* 2 inter-frame flags */
- 0, /* no-address mode */
- CLRDET_DISABLE, /* disable clear detect */
- AFLO_1OCT, /* 1-byte address field length */
- },
- { /* cor2 */
- 0, /* disable automatic DSR */
- 0, /* disable automatic CTS */
- 0, /* disable automatic RTS */
- 0,
- CRC_INVERT, /* use CRC V.41 */
- 0,
- FCS_NOTPASS, /* don't pass received CRC to the host */
- 0,
- },
- { /* cor3 */
- 0, /* 0 pad characters sent */
- IDLE_FLAG, /* idle in flag */
- 0, /* enable FCS */
- FCSP_ONES, /* FCS preset to all ones (V.41) */
- SYNC_AA, /* use AAh as sync char */
- 0, /* disable pad characters */
- },
- 0, 0, 0, 0, /* clear rfar1-4 */
- POLY_V41, /* use V.41 CRC polynomial */
-};
diff --git a/sys/dev/cx/csigmafw.h b/sys/dev/cx/csigmafw.h
deleted file mode 100644
index a5e4e05d7542..000000000000
--- a/sys/dev/cx/csigmafw.h
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
- * DO NOT EDIT MANUALLY!
- * This code was generated by mkfw utility
- * from the file `csigma.dat'
- *
- * Cronyx Id: csigmafw.h,v 1.1 2002/06/03 10:19:39 rik Exp $
- * $FreeBSD$
- */
-long csigma_fw_len = 131234;
-
-const char *csigma_fw_version = "1.2";
-const char *csigma_fw_date = "06.06.00";
-const char *csigma_fw_copyright = "Copyright (C) 2000 Cronyx Engineering.";
-
-const cr_dat_tst_t csigma_fw_tvec[] = {
- { 65066, 66278}, { 66314, 67526}, { 67562, 68774}, { 68810, 70022},
- { 70058, 71270}, { 71306, 72518}, { 72554, 73766}, { 73802, 75014},
- { 75050, 76262}, { 76298, 77510}, { 77546, 78758}, { 78794, 80006},
- { 80042, 81254}, { 81290, 82502}, { 82538, 83750}, { 83786, 84998},
- { 85034, 86246}, { 86282, 87494}, { 87530, 88742}, { 88778, 89990},
- { 90026, 91238}, { 91274, 92486}, { 92522, 93734}, { 93770, 94982},
- { 95018, 96230}, { 96266, 97478}, { 97514, 98726}, { 98762, 99974},
- {100010,101222}, {101258,102470}, {102506,103718}, {103754,104966},
- {105002,106214}, {106250,107462}, {107498,108710}, {108746,109958},
- {109994,111206}, {111242,112454}, {112490,113702}, {113738,114950},
- {114986,116198}, {116234,117446}, {117482,118694}, {118730,119942},
- {119978,121190}, {121226,122438}, {122474,123686}, {123722,124934},
- {124970,126182}, {126218,127430}, {127466,128678}, {128714,129926},
- {129962,131174}, {131234,131234},
-};
-
-const unsigned char csigma_fw_data[] = {
- 155,153,97,92,102,96,32,100,100,36,112,112,112,112,48,49,48,52,52,
- 52,100,100,100,116,117,36,100,100,52,52,52,52,116,100,49,49,36,37,
- 37,49,49,49,117,53,33,49,49,37,37,37,37,37,36,52,97,97,97,97,100,100,
- 100,97,101,96,100,36,53,96,97,97,36,97,97,112,112,96,101,100,100,100,
- 36,49,48,49,49,97,101,116,37,96,101,49,52,112,33,100,100,100,112,101,
- 116,49,97,36,37,52,100,101,116,36,49,100,52,33,49,49,49,100,53,100,
- 100,100,32,37,37,37,37,116,112,96,97,97,97,100,100,100,97,101,96,100,
- 100,97,97,113,36,33,97,97,112,112,112,48,49,49,113,53,59,57,49,100,
- 96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,32,101,101,
- 100,36,112,112,112,112,97,96,100,48,52,52,100,100,100,52,96,113,49,
- 49,33,52,52,52,52,112,113,36,37,37,37,49,49,49,37,116,117,100,100,
- 117,32,37,37,49,116,37,97,97,33,53,49,49,49,113,37,97,100,100,33,53,
- 113,53,32,53,101,112,48,97,101,100,100,116,37,49,48,113,49,52,112,
- 48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,100,52,52,52,52,
- 52,52,116,33,37,37,37,49,49,49,37,52,48,49,49,37,37,101,49,36,36,117,
- 97,97,97,97,100,100,100,49,76,68,100,48,33,49,49,49,37,37,37,37,96,
- 52,97,97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,37,33,49,
- 97,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,96,49,
- 52,52,52,100,100,100,52,37,32,49,49,117,33,52,52,100,96,52,36,37,37,
- 116,100,100,100,100,48,33,49,49,49,116,100,117,32,116,52,97,97,36,
- 53,49,49,113,37,33,48,49,100,112,96,97,116,100,101,48,97,100,49,48,
- 49,49,97,116,113,101,100,100,36,112,112,112,96,37,37,52,52,52,100,
- 100,100,52,116,36,100,100,100,100,52,101,48,48,52,36,37,37,37,49,49,
- 49,53,16,177,177,112,116,100,100,52,52,52,100,52,32,113,36,37,37,37,
- 49,49,49,101,100,48,49,49,37,37,37,37,53,113,100,36,97,97,97,100,100,
- 100,49,49,100,100,100,97,97,97,97,33,53,101,112,112,112,48,49,49,113,
- 112,49,48,49,97,37,112,112,48,97,112,48,52,52,112,49,49,49,49,36,97,
- 100,100,52,112,49,117,33,112,113,36,37,116,32,49,49,49,116,48,33,49,
- 53,97,33,37,113,49,33,97,36,49,101,96,100,100,36,53,100,96,100,100,
- 97,97,97,97,33,53,52,112,112,112,48,49,49,113,116,112,101,100,36,112,
- 112,52,97,96,112,48,52,52,52,100,100,100,52,32,179,51,37,48,100,100,
- 100,36,112,112,112,32,100,49,52,52,52,100,100,100,52,96,37,100,100,
- 52,52,52,52,52,113,49,36,37,37,37,49,49,49,101,100,36,49,49,37,37,
- 37,37,37,116,52,97,97,97,97,100,100,100,97,101,96,100,36,53,96,97,
- 97,36,97,97,112,112,96,101,100,100,100,112,32,48,49,49,97,101,116,
- 37,96,101,49,52,100,52,100,100,100,48,36,49,49,97,36,37,52,100,48,
- 113,113,101,37,52,33,49,49,49,52,32,32,49,49,37,37,37,37,37,116,52,
- 97,97,97,97,100,100,100,97,101,96,100,100,100,100,113,36,33,97,97,
- 112,112,112,48,49,49,113,37,110,108,100,101,96,100,100,97,97,97,97,
- 33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,
- 49,101,100,48,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 112,36,37,37,37,49,49,49,37,96,100,100,100,117,32,37,37,49,36,112,
- 96,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,112,
- 96,117,101,100,100,116,37,49,48,49,100,49,112,48,53,49,48,100,48,113,
- 36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,
- 49,49,49,101,101,101,100,100,32,37,101,49,36,36,37,97,97,97,97,100,
- 100,100,113,77,68,116,96,32,49,49,37,37,37,37,37,96,100,97,97,97,97,
- 100,100,100,113,49,48,49,49,49,96,97,97,101,52,49,97,112,112,48,49,
- 49,113,112,49,48,49,113,112,112,112,112,96,96,49,52,52,52,100,100,
- 100,52,116,36,100,100,112,33,52,52,100,48,52,36,37,37,116,100,100,
- 100,100,48,33,49,49,37,37,49,116,32,116,52,97,33,117,53,49,49,113,
- 101,97,48,49,53,101,96,97,116,100,96,112,116,96,49,48,49,49,97,113,
- 101,48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,100,52,49,
- 49,100,100,52,52,100,96,37,112,97,33,37,37,37,49,49,49,53,21,177,177,
- 97,36,100,100,52,52,52,52,52,32,113,36,37,37,37,49,49,49,37,53,33,
- 49,49,37,37,37,37,53,113,100,36,100,97,97,100,100,100,113,48,97,100,
- 100,97,97,97,97,33,36,101,112,112,112,48,49,49,113,96,97,48,49,49,
- 113,112,112,48,97,112,48,52,52,112,49,49,49,49,32,37,100,100,52,112,
- 49,117,33,112,113,36,37,116,117,100,100,100,117,48,33,49,101,33,116,
- 32,113,101,116,52,37,49,101,96,100,100,36,53,100,96,100,100,97,97,
- 97,97,33,53,113,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 52,97,96,112,48,52,52,52,100,100,100,52,52,230,102,53,96,101,100,36,
- 112,112,112,112,32,100,52,52,52,52,100,100,100,52,33,33,49,49,33,100,
- 52,52,116,100,49,49,36,37,37,49,49,49,101,116,116,100,100,32,37,37,
- 37,37,36,52,97,97,97,97,100,100,100,97,101,96,100,100,100,97,97,97,
- 36,97,97,112,112,96,101,100,100,100,37,117,100,100,36,112,48,113,112,
- 96,101,49,52,112,117,49,49,49,53,52,116,49,97,36,37,52,100,32,117,
- 113,49,112,52,33,49,49,49,116,48,33,49,49,37,37,37,37,37,116,112,96,
- 97,97,97,100,100,100,33,112,48,49,49,96,97,97,37,33,97,97,112,112,
- 112,48,49,49,113,117,58,57,49,100,96,100,100,97,97,97,97,33,48,101,
- 112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,49,101,100,
- 96,52,52,100,100,100,52,116,36,100,100,100,52,52,52,52,48,112,36,37,
- 37,37,49,49,49,101,97,48,49,49,116,32,37,37,49,36,37,97,97,33,53,49,
- 49,49,49,100,96,100,100,33,48,113,48,32,53,101,112,96,117,101,100,
- 100,116,37,49,48,49,37,37,113,48,53,49,48,32,32,113,36,100,100,100,
- 112,117,96,100,100,52,52,52,52,52,32,97,33,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,49,73,68,116,
- 37,53,49,49,37,37,37,37,37,96,52,97,97,97,97,100,100,100,33,36,49,
- 49,49,96,97,100,97,101,52,49,97,112,112,48,49,49,113,113,116,100,100,
- 36,112,112,112,112,96,96,49,52,52,52,100,100,100,52,116,36,100,100,
- 100,52,52,52,100,48,52,36,37,37,116,100,100,100,100,48,33,49,49,37,
- 96,100,117,32,116,52,97,33,117,53,49,49,113,49,97,48,49,52,37,97,97,
- 100,48,53,53,36,101,49,48,49,49,97,49,32,100,100,36,112,112,112,112,
- 96,37,37,52,52,52,100,100,100,52,53,36,49,49,33,52,52,96,37,48,52,
- 36,37,37,37,49,49,49,53,4,177,177,97,36,100,100,52,52,52,52,52,32,
- 49,37,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,53,113,100,36,100,
- 97,97,100,100,100,97,101,96,100,100,100,97,100,97,36,33,101,112,112,
- 48,49,49,49,113,36,112,101,100,116,37,112,112,48,97,112,48,52,52,112,
- 49,49,49,49,48,32,49,49,33,112,49,117,33,112,113,36,37,116,117,100,
- 100,100,117,48,33,49,113,97,33,37,113,49,33,33,32,48,101,96,100,100,
- 36,53,100,96,100,100,97,97,97,97,33,48,52,112,112,112,48,49,49,113,
- 112,49,48,49,113,112,112,52,97,96,112,48,52,52,52,100,100,100,52,112,
- 179,51,116,113,101,100,36,48,113,112,112,32,100,49,52,52,52,100,100,
- 100,116,97,32,100,100,52,52,52,100,116,100,49,49,36,37,37,49,49,49,
- 101,49,48,49,49,37,37,37,37,37,36,52,97,97,97,97,100,100,100,113,33,
- 96,100,100,100,97,97,97,36,97,97,48,113,96,101,100,100,100,36,49,48,
- 49,113,96,101,36,112,96,101,49,52,112,117,49,49,49,53,52,48,49,49,
- 116,32,33,100,101,36,36,96,97,52,33,49,49,49,36,48,33,49,49,37,37,
- 37,37,37,116,112,96,97,97,97,100,100,100,33,116,96,100,100,97,97,49,
- 97,33,97,97,112,112,112,48,49,49,113,101,111,108,100,101,96,100,100,
- 97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,
- 112,112,112,49,101,32,37,52,52,100,100,100,52,116,36,100,100,52,100,
- 52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,49,
- 36,37,97,97,33,53,49,49,49,97,113,96,100,100,33,53,113,53,32,53,101,
- 112,96,117,101,100,100,116,37,49,48,113,97,52,112,48,101,101,101,37,
- 49,113,36,100,100,100,112,37,96,100,100,52,100,52,52,52,112,97,33,
- 37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,
- 100,100,100,113,72,68,100,48,33,49,49,37,37,37,37,37,96,52,97,97,97,
- 97,100,100,100,101,113,49,49,49,96,97,97,97,48,97,49,97,112,112,48,
- 49,49,113,37,33,48,49,113,112,112,112,112,96,96,49,52,52,52,100,100,
- 100,52,96,37,100,100,52,52,52,52,100,48,52,36,37,37,116,100,100,100,
- 100,48,33,49,49,37,116,100,97,32,116,52,97,33,117,53,49,49,113,97,
- 53,96,100,101,112,96,97,116,100,96,96,97,100,49,48,49,49,97,37,49,
- 48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,100,52,116,36,
- 100,100,52,52,52,117,49,48,52,36,37,37,37,49,49,49,53,1,177,177,53,
- 48,49,49,33,52,100,52,52,32,113,36,37,37,37,49,49,49,37,53,33,49,49,
- 37,37,37,37,37,36,101,36,97,97,97,100,100,100,97,101,96,100,100,97,
- 100,97,100,33,33,101,48,49,113,48,49,49,113,112,49,48,49,97,37,112,
- 112,48,97,48,49,52,52,112,49,49,49,49,36,32,49,49,33,112,49,117,33,
- 112,113,36,37,116,117,100,100,100,117,48,33,49,101,97,33,37,113,49,
- 33,97,36,49,101,96,100,100,36,37,49,100,100,100,97,97,100,97,33,53,
- 52,112,112,112,48,49,49,113,32,48,48,49,113,112,112,52,97,96,112,48,
- 52,52,52,100,100,100,52,36,178,51,113,49,48,49,113,112,112,112,112,
- 32,100,49,52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,116,100,
- 117,116,32,37,37,49,49,49,37,36,97,100,100,32,37,37,37,37,36,52,97,
- 97,97,97,100,100,100,101,113,49,49,113,53,96,97,97,36,97,97,112,112,
- 96,101,100,100,100,52,53,48,49,113,96,101,116,37,96,101,49,52,52,52,
- 100,100,100,48,101,116,100,116,48,112,33,100,101,36,36,97,112,52,33,
- 49,49,49,116,48,33,49,49,37,37,37,37,37,116,112,96,97,97,97,100,100,
- 100,97,101,96,100,100,97,97,113,116,33,33,52,112,112,112,48,49,49,
- 113,53,106,108,36,97,53,49,49,96,97,97,97,36,48,101,112,112,112,48,
- 49,49,113,96,97,48,49,113,112,112,112,112,96,112,32,37,52,52,100,100,
- 100,52,116,36,100,100,52,52,100,52,52,48,112,36,37,37,37,49,49,49,
- 37,53,33,49,49,49,37,37,37,49,36,37,97,97,33,53,49,49,49,49,100,96,
- 100,100,33,53,113,53,32,48,101,112,96,117,101,100,100,116,37,49,48,
- 113,37,96,112,48,101,52,48,100,53,113,36,100,100,100,112,117,37,49,
- 49,33,52,52,100,52,112,97,33,37,37,37,49,49,49,37,52,36,49,49,37,37,
- 101,49,36,36,37,97,97,97,97,100,100,100,49,8,17,49,53,33,49,49,37,
- 37,37,37,37,96,52,97,97,97,97,100,100,100,97,101,96,100,100,97,97,
- 97,97,33,97,33,52,112,112,48,49,49,113,96,52,48,49,113,112,112,112,
- 112,96,96,49,52,52,52,100,100,100,52,49,49,100,100,32,33,52,52,100,
- 48,52,36,37,37,116,100,100,100,36,48,96,100,100,32,116,100,117,32,
- 116,52,97,33,117,48,49,49,113,113,49,96,100,101,112,96,97,116,36,97,
- 48,97,36,100,101,100,100,116,37,49,48,49,113,112,112,112,112,96,37,
- 37,52,52,52,100,100,100,52,116,36,100,100,52,52,52,101,48,48,52,36,
- 37,37,37,49,49,49,53,0,228,228,113,53,100,100,52,52,52,52,52,32,113,
- 48,37,37,37,49,49,49,101,97,48,49,49,37,37,37,37,53,113,53,53,96,97,
- 97,100,100,100,97,101,96,100,100,97,97,97,100,33,33,101,112,112,112,
- 48,49,49,113,112,49,48,49,97,37,112,112,48,97,112,48,52,52,112,49,
- 49,49,49,97,36,100,100,52,112,49,117,49,117,113,36,37,116,117,100,
- 100,100,117,48,33,49,53,97,33,37,113,49,33,97,36,49,33,53,49,49,113,
- 101,32,53,49,49,96,97,97,97,36,53,52,112,112,112,48,49,49,113,52,36,
- 49,49,113,112,112,52,117,96,32,37,52,52,52,100,100,100,52,96,178,51,
- 113,49,48,49,113,112,112,112,112,32,100,49,52,52,52,100,100,100,52,
- 116,36,100,100,52,52,52,52,52,48,52,49,36,37,37,49,49,49,101,52,48,
- 49,49,37,37,37,37,37,36,52,97,97,97,97,100,100,100,49,33,48,49,113,
- 53,96,97,97,36,97,117,112,112,96,101,100,100,100,37,36,48,49,113,96,
- 101,116,37,96,101,49,52,112,117,49,49,49,53,36,117,49,97,36,37,52,
- 100,101,36,36,49,100,100,33,49,49,49,52,113,49,49,49,37,37,37,37,37,
- 116,112,96,97,97,97,100,100,100,113,33,96,100,100,97,97,113,116,33,
- 33,52,112,112,112,48,49,49,113,37,107,108,116,116,97,100,100,97,97,
- 97,97,33,48,101,48,113,112,48,49,49,113,36,112,101,100,36,112,112,
- 112,112,49,101,32,37,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,100,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,49,
- 36,37,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,96,97,96,
- 112,96,117,101,100,100,116,37,49,48,113,49,52,112,48,53,97,48,100,
- 48,33,116,49,49,49,117,97,36,100,100,52,52,52,52,52,112,97,101,32,
- 37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,
- 100,100,113,9,17,49,53,33,49,49,37,37,37,37,37,96,52,97,97,97,97,100,
- 100,100,113,33,96,100,100,97,97,97,97,33,33,116,36,112,112,48,49,49,
- 113,113,113,48,49,113,112,112,112,112,112,53,48,52,52,52,100,100,100,
- 116,49,116,49,49,117,49,33,52,100,48,52,36,37,37,116,100,100,100,116,
- 33,116,100,100,32,116,100,117,32,37,33,97,33,117,53,49,49,113,33,100,
- 96,100,101,112,96,100,116,100,96,48,97,100,49,48,49,49,97,37,49,48,
- 49,113,112,112,112,112,96,37,37,52,52,52,100,100,100,116,117,36,100,
- 100,52,52,52,101,48,48,52,36,37,37,37,49,49,49,53,5,228,228,113,33,
- 49,49,33,52,52,52,52,32,113,36,37,49,37,49,49,49,37,53,33,49,49,37,
- 37,37,37,53,113,100,36,97,97,97,100,100,100,97,101,96,100,100,97,97,
- 97,97,33,33,113,112,112,112,48,49,49,113,112,49,48,49,97,37,112,112,
- 48,97,112,48,52,100,32,49,49,49,49,97,36,100,100,52,112,49,117,33,
- 112,113,36,37,116,117,100,100,100,117,49,117,100,48,97,33,37,113,49,
- 33,97,36,49,101,96,100,100,36,117,36,96,100,100,97,97,97,97,33,53,
- 52,48,113,112,48,49,49,113,32,101,101,100,36,112,112,52,97,96,117,
- 48,52,52,52,100,100,100,52,116,231,102,36,49,48,49,113,112,112,112,
- 112,32,100,49,52,52,52,100,100,100,52,117,112,49,49,33,52,52,52,116,
- 100,49,49,36,37,37,49,49,49,53,36,116,100,100,32,37,37,37,37,36,100,
- 97,97,97,97,100,100,100,37,101,101,100,36,53,96,97,97,36,97,97,112,
- 112,96,101,100,100,100,117,112,49,49,113,96,101,116,37,96,101,49,52,
- 112,117,49,49,49,117,100,113,49,97,36,37,52,100,101,36,36,49,100,52,
- 33,49,49,49,116,48,33,49,49,37,37,37,37,37,116,112,96,97,97,97,100,
- 100,100,97,101,96,100,100,97,97,113,36,33,117,97,112,112,112,48,49,
- 49,113,117,63,57,97,52,48,49,49,96,97,97,97,33,48,101,112,112,48,49,
- 49,49,113,112,49,48,49,113,112,112,112,112,96,112,96,52,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,52,52,116,37,36,37,37,37,49,49,
- 49,37,53,33,49,49,116,100,32,37,49,36,37,97,97,97,97,100,100,100,100,
- 101,96,100,100,33,53,113,53,96,97,96,112,96,117,101,100,100,116,37,
- 49,48,113,49,52,112,48,101,49,48,100,48,113,36,100,100,100,112,52,
- 48,49,49,33,52,52,52,52,112,97,33,37,49,37,49,49,49,101,100,48,49,
- 49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,49,93,68,100,48,33,
- 49,49,37,37,37,37,37,96,52,97,97,97,97,100,100,100,97,101,96,100,100,
- 97,97,97,97,101,52,49,97,112,112,48,49,49,113,33,117,49,49,113,112,
- 112,112,112,112,53,33,52,52,52,100,100,100,116,49,48,49,49,117,33,
- 52,52,100,48,52,36,37,37,116,100,100,100,116,53,117,100,100,32,116,
- 100,117,32,116,52,100,33,117,53,49,49,113,101,53,97,100,101,112,96,
- 97,116,100,96,48,97,112,49,48,49,49,97,37,49,48,49,113,112,112,112,
- 112,96,37,37,52,52,52,100,100,100,52,116,36,100,100,52,52,52,101,48,
- 96,52,36,37,37,37,49,49,49,53,84,177,177,53,53,49,49,33,52,52,52,52,
- 32,113,36,37,37,37,49,49,49,49,52,48,49,49,37,37,37,37,37,36,37,100,
- 97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,33,33,101,112,112,
- 112,48,49,49,113,112,49,48,49,97,101,36,112,48,97,112,48,52,52,52,
- 100,100,100,100,116,36,100,100,52,112,49,117,33,112,113,36,37,116,
- 117,100,100,100,117,48,33,49,53,97,33,37,113,49,33,97,36,49,101,96,
- 100,100,36,117,100,48,49,49,96,97,97,97,33,53,52,112,112,48,49,49,
- 49,113,52,100,48,49,113,112,112,52,97,96,48,49,52,52,52,100,100,100,
- 52,48,178,51,113,49,48,49,113,112,112,112,112,32,100,49,52,52,52,100,
- 100,100,52,49,49,100,100,52,52,52,52,116,113,97,112,33,37,37,49,49,
- 49,53,32,117,100,100,32,37,37,37,37,36,52,100,97,97,97,100,100,100,
- 48,48,96,100,36,53,96,97,97,36,97,97,112,112,96,101,100,100,100,117,
- 36,48,49,113,96,101,116,37,96,101,49,52,112,117,49,49,49,117,97,36,
- 100,116,36,37,52,100,101,36,36,49,36,53,33,49,49,49,116,48,33,49,49,
- 37,37,37,37,37,116,112,96,97,97,97,100,100,100,33,117,53,49,49,96,
- 97,113,36,33,97,97,112,112,112,48,49,49,113,101,106,108,100,101,96,
- 100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,
- 113,112,112,112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,
- 32,49,37,49,117,36,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,
- 53,32,53,113,112,96,117,101,100,100,116,117,33,49,113,49,52,112,48,
- 53,49,48,100,48,113,36,100,100,100,112,52,116,49,49,33,52,52,52,52,
- 112,97,33,37,37,37,49,49,49,49,53,33,49,49,37,37,101,49,36,48,37,97,
- 97,97,97,100,100,100,113,92,68,100,48,33,49,49,37,37,37,37,37,96,52,
- 97,97,97,97,100,100,100,101,33,49,49,49,96,97,97,97,101,52,49,97,112,
- 112,48,49,49,113,36,100,101,100,36,112,112,112,112,96,96,49,52,52,
- 52,100,100,100,116,48,112,49,49,117,33,52,52,100,48,52,36,37,37,116,
- 100,100,100,52,97,117,100,100,32,116,100,117,32,116,100,97,33,117,
- 53,49,49,113,117,117,53,49,100,112,96,97,116,100,96,48,97,100,49,48,
- 49,49,97,37,49,48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,
- 100,52,113,113,49,49,33,52,52,101,48,48,52,36,37,37,37,49,49,49,53,
- 81,177,177,97,36,100,100,52,52,52,52,52,32,113,36,37,37,37,49,49,49,
- 37,53,33,49,49,37,37,37,37,53,113,100,48,97,97,97,100,100,100,97,101,
- 96,100,100,97,97,97,97,33,33,101,48,113,112,48,49,49,113,112,49,48,
- 49,97,37,48,113,48,113,101,48,52,52,112,49,49,49,49,97,36,100,100,
- 52,112,49,117,33,112,113,36,37,116,117,100,100,100,117,48,33,49,53,
- 97,33,37,113,49,33,113,113,96,101,96,100,100,36,53,100,96,100,100,
- 97,97,97,97,33,53,52,112,112,112,48,49,49,113,112,49,48,49,113,112,
- 112,52,33,97,112,96,52,52,52,100,100,100,52,100,227,102,36,49,48,49,
- 113,112,112,112,112,32,100,49,52,52,52,100,100,100,52,112,117,49,49,
- 33,52,52,52,116,100,49,113,37,37,37,49,49,49,101,100,48,49,49,37,37,
- 37,37,37,36,52,97,97,97,97,100,100,100,37,116,101,100,36,53,96,97,
- 97,100,53,97,112,112,96,101,100,100,100,33,49,48,49,113,96,101,116,
- 37,96,101,49,100,112,117,49,49,49,117,36,52,100,116,36,37,52,100,101,
- 36,36,49,100,96,116,100,100,100,117,48,33,49,49,37,37,37,37,37,116,
- 112,96,97,97,97,100,100,100,49,37,100,100,100,97,97,113,36,33,97,97,
- 112,112,112,48,49,49,113,53,47,57,49,100,96,100,100,97,97,97,97,33,
- 48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,113,
- 112,36,49,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,
- 36,37,49,37,49,49,49,37,53,33,49,49,116,32,49,37,49,36,37,97,97,33,
- 53,49,49,49,113,32,100,100,100,33,53,113,53,32,53,101,112,96,117,101,
- 100,100,36,112,49,48,113,49,52,112,48,53,49,48,100,48,113,36,100,100,
- 100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,
- 53,33,49,49,37,37,101,49,36,36,37,97,100,97,97,100,100,100,49,28,68,
- 100,48,33,49,49,37,37,37,37,37,96,52,97,97,97,97,100,100,100,49,36,
- 48,49,49,96,97,97,97,101,52,49,117,112,112,48,49,49,113,52,36,49,49,
- 113,112,112,112,112,96,96,49,52,52,52,100,100,100,116,117,36,100,100,
- 112,33,52,52,100,48,52,36,37,37,116,100,100,100,100,48,33,49,49,37,
- 116,100,117,32,116,52,97,33,117,53,49,49,113,37,113,101,100,101,112,
- 96,97,116,100,96,48,97,100,52,48,49,49,97,37,49,48,49,113,112,112,
- 112,112,96,37,37,52,52,52,100,100,100,52,48,37,100,100,52,52,52,101,
- 48,48,52,36,37,37,37,49,49,49,53,80,176,177,97,36,100,100,52,52,52,
- 52,52,32,113,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,53,113,
- 100,36,97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,33,33,101,
- 112,112,48,49,49,49,113,116,32,48,49,97,37,112,48,49,97,112,48,52,
- 52,112,49,49,49,49,117,96,100,100,52,112,49,117,33,112,113,36,49,116,
- 117,100,100,100,32,53,33,49,53,97,33,37,113,49,33,97,36,49,101,96,
- 100,100,36,53,100,96,100,100,97,97,97,97,33,53,52,112,112,112,48,49,
- 49,113,112,49,48,49,113,112,112,52,97,96,112,48,52,100,52,100,100,
- 100,52,32,226,102,36,49,48,49,113,112,112,112,112,32,100,49,52,52,
- 52,100,100,100,116,116,52,100,100,52,52,52,52,116,100,113,100,33,37,
- 37,49,49,49,37,53,33,49,49,37,37,37,37,37,36,52,97,97,97,97,100,100,
- 100,33,36,49,49,113,53,96,97,97,36,97,97,112,112,96,101,100,100,100,
- 36,49,48,49,113,96,101,116,37,96,101,49,52,112,117,49,49,49,117,117,
- 36,100,116,36,37,52,100,101,36,36,49,100,116,116,100,100,100,117,48,
- 33,49,49,37,37,37,37,37,116,112,96,97,97,97,100,100,100,113,36,100,
- 100,100,97,97,113,36,33,97,97,112,112,112,48,49,49,113,37,42,57,49,
- 100,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,
- 49,48,49,113,112,112,112,112,49,101,100,48,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,
- 49,116,32,37,37,49,36,37,100,97,33,53,49,49,49,33,96,53,49,49,32,53,
- 113,53,32,53,101,112,48,97,101,100,100,116,37,49,48,113,49,52,112,
- 48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,100,52,52,52,52,
- 52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,
- 97,97,97,100,100,100,100,113,29,68,100,48,33,49,49,37,37,37,37,37,
- 96,52,97,97,97,97,100,100,100,37,33,53,49,49,96,97,97,97,101,52,49,
- 97,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,96,49,
- 52,52,52,100,100,100,52,33,33,49,49,117,33,52,52,100,48,52,36,37,37,
- 116,100,100,100,52,49,32,49,49,37,116,100,117,32,116,52,97,33,117,
- 53,49,49,113,53,100,96,100,101,112,96,97,116,100,96,48,97,100,97,48,
- 49,49,97,37,49,48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,
- 100,116,96,52,100,100,52,52,52,101,48,48,52,36,37,37,37,49,49,49,53,
- 85,176,177,97,36,100,100,52,52,52,52,52,32,113,36,37,37,37,49,49,49,
- 37,53,33,49,49,37,37,37,37,53,113,52,113,96,97,97,100,100,100,97,101,
- 96,100,100,97,97,97,97,33,33,101,112,112,112,48,49,49,113,112,49,48,
- 49,97,37,112,112,48,97,112,96,52,52,112,49,49,49,49,97,36,100,100,
- 52,112,49,117,33,112,113,36,37,49,116,100,100,100,53,33,96,100,48,
- 97,33,37,113,49,33,97,36,49,101,96,100,100,36,53,100,96,100,100,97,
- 97,97,97,33,53,52,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 52,97,112,101,48,52,52,52,100,100,100,52,52,227,102,36,49,48,49,113,
- 112,112,112,112,32,100,49,52,52,52,100,100,100,116,96,117,100,100,
- 52,52,52,52,116,100,49,49,36,37,37,49,49,49,37,53,33,49,49,37,37,37,
- 37,37,36,52,97,97,97,97,100,100,100,113,49,48,49,113,53,96,97,97,36,
- 97,97,112,112,96,101,100,100,100,96,100,48,49,113,96,101,116,37,96,
- 101,49,52,32,117,49,49,49,53,100,32,100,116,36,37,52,100,101,36,36,
- 49,100,52,36,49,49,49,37,53,33,49,49,37,37,37,37,37,116,112,96,97,
- 97,97,100,100,100,53,112,53,49,49,96,97,113,36,33,97,97,112,112,112,
- 48,49,49,113,117,46,57,49,100,96,100,100,97,97,97,97,33,48,101,112,
- 112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,49,101,49,37,
- 52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,37,37,
- 37,49,49,49,37,53,33,49,49,116,32,37,37,49,36,37,100,97,33,53,49,49,
- 49,49,100,96,100,100,33,53,113,53,32,53,101,112,96,117,101,100,100,
- 116,37,49,48,113,49,52,112,48,53,49,48,100,48,113,116,100,100,100,
- 32,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,101,49,36,117,36,97,97,97,97,100,100,100,49,25,68,100,
- 48,33,49,49,37,37,37,37,37,96,52,97,97,97,97,100,100,100,37,96,53,
- 49,49,96,97,97,97,101,52,49,97,48,113,48,49,49,113,112,49,48,49,113,
- 112,112,112,112,96,96,49,52,52,52,100,100,100,52,116,36,100,100,112,
- 33,52,52,100,48,52,36,37,37,116,100,100,100,100,117,117,100,100,32,
- 116,100,117,32,116,52,97,33,117,48,49,49,113,48,100,96,100,101,112,
- 96,97,116,100,96,48,97,100,113,49,49,49,97,37,49,48,49,113,112,112,
- 112,112,96,37,37,52,52,52,100,100,100,116,117,36,100,100,52,52,52,
- 101,48,48,52,36,37,37,37,49,49,49,97,65,176,177,97,36,100,100,52,52,
- 52,52,52,32,113,36,37,37,37,49,49,49,37,53,33,49,49,37,37,37,37,53,
- 113,100,36,97,97,97,100,100,100,97,101,96,100,100,97,97,97,97,33,33,
- 101,112,112,112,48,49,49,113,96,33,49,49,97,37,112,112,48,97,112,48,
- 100,52,112,49,49,49,49,97,36,100,100,52,112,49,117,33,112,113,36,37,
- 116,32,49,49,49,101,48,37,49,53,97,33,37,113,49,33,97,36,49,101,96,
- 100,100,36,53,100,96,100,100,97,97,97,97,33,53,52,112,112,112,48,49,
- 49,113,32,113,101,100,36,112,112,52,97,96,112,48,52,52,52,100,100,
- 100,52,112,226,102,36,49,48,49,113,112,112,112,112,32,100,49,52,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,52,116,52,52,49,36,37,37,
- 49,49,49,37,53,33,49,49,37,37,37,37,37,36,52,97,97,97,97,100,100,100,
- 113,97,48,49,113,53,96,97,97,36,97,97,112,48,97,101,100,100,100,112,
- 101,48,49,113,96,101,116,37,96,101,49,52,112,117,49,49,49,33,116,36,
- 100,116,36,37,52,100,101,36,36,49,100,52,33,49,49,49,37,53,33,49,49,
- 37,37,37,37,37,116,112,96,97,97,97,100,100,100,97,101,96,100,100,97,
- 97,113,36,33,97,97,112,112,112,48,49,49,113,101,43,57,49,100,96,100,
- 100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,52,100,48,49,113,
- 112,112,112,112,49,37,101,48,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,
- 49,36,37,97,97,97,100,100,100,100,100,101,96,100,100,33,53,113,53,
- 32,53,101,112,96,117,101,100,100,116,97,32,100,36,49,52,112,48,53,
- 49,48,100,48,113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,
- 97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,
- 97,97,100,100,100,113,24,68,100,48,33,49,49,37,37,37,37,37,96,52,97,
- 97,97,97,100,100,100,33,97,48,49,49,96,97,97,97,101,52,49,97,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,96,96,49,52,52,52,100,
- 100,100,52,116,36,100,100,112,33,52,52,100,48,52,36,37,37,116,100,
- 100,100,100,33,48,49,49,37,116,100,117,32,116,52,97,33,117,53,49,49,
- 113,48,100,96,100,101,112,96,97,116,100,96,48,97,100,49,48,49,49,33,
- 36,49,48,49,113,112,112,112,112,96,37,37,52,52,52,100,100,100,52,116,
- 36,100,100,52,52,52,101,48,48,52,36,37,37,37,49,49,49,53,65,176,177,
- 97,36,100,100,52,52,52,52,52,32,113,36,37,37,37,49,49,49,37,53,33,
- 49,49,37,37,37,37,53,113,100,36,97,97,100,100,100,100,100,101,96,100,
- 100,97,97,97,97,33,33,101,112,112,112,48,49,49,113,112,49,48,49,97,
- 37,112,112,48,97,112,48,52,52,112,49,49,49,49,97,36,100,100,52,112,
- 49,117,33,112,113,36,37,116,117,100,100,100,53,53,96,100,48,97,33,
- 37,113,49,33,97,36,49,101,96,100,100,36,53,100,96,100,100,97,97,97,
- 97,33,53,52,112,112,112,48,49,49,113,112,49,48,49,113,112,112,52,97,
- 96,112,48,52,52,52,100,100,100,52,36,183,51,49,49,49,49,113,112,112,
- 112,112,48,49,33,52,52,52,36,48,49,49,49,49,49,49,33,52,52,52,52,49,
- 100,112,37,37,37,33,100,100,100,100,100,100,100,32,37,37,37,37,49,
- 49,96,97,97,97,32,49,49,49,49,49,49,49,96,97,97,97,100,100,36,112,
- 112,112,48,49,49,49,49,49,49,49,113,112,48,113,112,48,49,33,52,52,
- 52,36,48,49,49,49,49,49,49,33,49,52,100,113,53,100,112,48,112,37,33,
- 100,100,100,100,100,100,100,32,37,37,37,37,37,49,96,97,97,97,32,49,
- 49,49,49,49,49,49,96,97,49,117,97,97,36,112,112,112,48,96,100,100,
- 97,127,108,100,100,100,100,100,117,32,116,117,117,100,36,117,117,117,
- 117,53,49,49,49,49,49,49,113,117,117,117,117,53,49,33,116,37,48,49,
- 49,49,49,49,49,49,49,33,52,52,52,52,100,100,52,32,37,37,117,49,49,
- 49,49,49,49,49,37,33,100,100,100,32,49,116,97,32,37,49,49,49,49,49,
- 49,49,49,49,96,100,97,100,97,36,53,32,112,112,48,49,49,49,49,49,49,
- 49,49,113,53,49,113,48,49,33,36,112,112,48,49,49,49,49,49,49,97,101,
- 36,112,112,48,49,33,52,52,52,52,100,100,100,100,100,100,100,52,52,
- 52,52,100,100,100,100,100,100,100,117,100,100,52,88,17,49,49,49,49,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
- 49,49,49,49,33,100,100,36,117,53,49,49,49,49,49,49,113,112,112,112,
- 112,48,49,49,33,52,52,100,100,100,100,100,100,100,100,100,100,100,
- 113,117,101,100,36,53,49,49,117,49,49,49,49,49,49,49,113,48,116,100,
- 112,49,49,49,33,100,100,100,100,100,100,100,100,100,100,117,117,36,
- 53,116,100,36,37,100,100,100,100,100,100,100,100,100,100,100,36,53,
- 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,97,101,
- 100,112,117,117,117,49,49,49,97,85,229,228,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,52,100,36,33,116,100,100,100,100,100,100,
- 100,37,37,37,37,37,100,100,36,97,97,33,49,49,49,49,49,49,49,49,37,
- 37,49,97,33,49,49,96,97,97,49,97,100,100,100,100,100,100,100,100,49,
- 100,97,100,100,100,36,112,112,112,48,49,49,49,49,49,49,49,49,49,37,
- 113,48,49,49,33,52,52,52,100,100,100,100,100,100,100,100,97,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,32,49,
- 37,101,53,49,53,96,117,117,101,100,100,100,96,183,51,49,49,49,49,97,
- 117,117,117,117,101,100,112,117,117,117,117,49,49,49,49,49,49,49,117,
- 117,117,117,117,49,49,116,117,117,112,37,49,49,49,49,49,49,49,48,49,
- 49,49,49,100,36,117,100,100,100,53,49,49,49,49,49,49,113,117,117,117,
- 48,96,100,116,117,117,117,37,48,49,49,49,49,49,49,97,117,101,116,53,
- 97,100,112,117,117,117,117,49,49,49,49,49,49,49,33,52,112,49,33,100,
- 100,32,116,117,117,117,100,100,100,100,100,100,100,117,100,117,117,
- 117,100,36,117,117,117,117,53,49,49,49,49,49,49,113,117,117,117,53,
- 96,100,36,117,112,112,96,101,100,100,49,127,76,100,28,102,97,110,108,
- 52,33,48,49,49,96,97,97,97,97,100,96,112,112,112,48,49,49,113,117,
- 49,48,49,113,112,112,112,112,49,101,100,48,52,52,100,100,100,116,117,
- 36,100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,
- 49,116,32,37,37,49,36,37,97,97,33,53,49,49,49,49,100,96,100,100,36,
- 53,113,53,32,53,101,112,96,37,48,49,49,97,53,113,101,36,49,52,112,
- 48,53,113,49,100,48,113,36,100,100,100,48,117,48,49,49,33,52,52,52,
- 52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,
- 97,97,97,97,100,100,100,117,76,102,32,59,57,49,100,96,100,100,97,97,
- 97,97,33,48,101,112,112,112,48,49,49,113,32,101,101,100,36,112,112,
- 112,112,97,96,100,48,52,52,100,100,100,52,96,113,49,49,33,52,52,52,
- 52,112,113,36,37,37,37,49,49,49,37,116,117,100,100,117,32,37,37,49,
- 116,37,97,97,33,53,49,49,49,113,37,97,100,100,33,53,113,53,32,53,101,
- 112,48,97,101,100,100,116,37,49,48,113,49,52,112,48,53,49,48,100,48,
- 113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,52,116,33,37,37,
- 37,49,49,49,37,52,48,49,49,37,37,101,49,36,36,117,97,97,97,97,100,
- 100,100,49,76,102,117,110,108,100,101,96,100,100,100,97,97,97,33,48,
- 101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,97,96,
- 100,48,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,
- 37,37,37,49,49,49,101,33,96,100,100,117,32,37,37,49,48,37,97,97,33,
- 53,49,49,49,49,100,96,100,100,36,53,113,53,32,53,101,112,48,97,101,
- 100,100,116,97,32,100,36,49,52,112,48,53,113,49,100,48,113,36,100,
- 100,100,48,117,116,49,49,49,33,52,52,52,112,97,33,37,37,37,49,49,49,
- 37,53,33,49,49,49,49,101,49,36,36,37,97,97,97,97,100,100,100,37,76,
- 102,52,110,108,52,101,101,100,100,97,97,97,100,33,48,101,112,112,112,
- 48,49,49,113,100,36,49,49,113,112,112,112,112,49,101,100,48,52,52,
- 100,100,100,52,49,97,100,100,52,52,52,52,52,112,113,36,37,37,37,49,
- 49,49,37,53,33,49,49,116,32,37,37,49,36,37,97,97,33,53,49,49,49,97,
- 48,100,100,100,33,53,113,53,32,53,101,112,96,37,48,49,49,97,37,49,
- 48,113,49,52,112,48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,
- 100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,101,37,117,100,100,
- 32,37,101,49,36,36,37,97,97,97,97,100,100,100,33,24,51,48,110,108,
- 52,96,48,49,49,49,96,97,97,33,48,101,112,112,112,48,49,49,113,32,53,
- 48,49,113,112,112,112,112,100,101,48,52,52,52,100,100,100,52,49,49,
- 100,100,52,52,52,52,52,112,113,36,37,37,37,49,49,49,37,53,33,49,49,
- 116,32,37,37,49,36,37,97,97,33,53,49,49,49,97,33,96,100,100,36,53,
- 113,53,32,53,101,112,48,113,48,49,49,97,48,100,100,36,49,52,112,48,
- 97,100,101,53,53,112,36,100,100,100,112,32,32,100,100,52,52,52,52,
- 52,112,113,36,37,37,37,49,49,49,37,53,33,49,49,49,49,101,49,36,36,
- 37,97,97,97,97,100,100,100,53,24,51,117,59,57,49,100,96,100,100,97,
- 97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,48,112,36,37,37,37,49,49,49,37,96,100,100,100,117,32,37,37,49,
- 36,112,96,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,
- 112,96,117,101,100,100,116,37,49,48,49,100,49,112,48,53,49,48,100,
- 48,113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,
- 37,37,49,49,49,101,101,101,100,100,32,37,101,49,36,36,37,97,97,97,
- 97,100,100,100,113,77,102,37,110,108,48,48,96,100,100,97,97,97,97,
- 33,48,113,112,112,112,48,49,49,113,116,36,100,100,100,36,112,112,112,
- 49,101,100,48,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,
- 112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,49,36,37,97,97,
- 33,53,49,49,49,49,100,96,100,100,97,97,36,53,32,53,101,112,96,117,
- 101,100,100,116,113,48,100,100,101,49,112,48,53,49,48,52,53,112,36,
- 100,100,100,112,116,49,100,100,52,52,52,52,52,112,97,33,37,37,37,49,
- 49,49,101,100,36,49,49,37,37,49,112,33,116,112,96,97,97,97,100,100,
- 100,101,77,102,36,58,57,49,100,96,100,100,97,97,97,97,33,48,101,112,
- 112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,49,101,100,96,
- 52,52,100,100,100,52,37,49,100,100,52,52,52,52,52,96,112,36,37,37,
- 37,49,49,49,37,52,36,49,49,49,37,37,37,49,36,37,97,97,33,53,49,49,
- 49,33,112,96,100,100,33,53,113,53,32,53,101,112,96,117,101,100,100,
- 116,37,49,48,113,52,96,37,48,117,100,101,113,48,113,36,100,100,100,
- 112,97,36,100,100,52,52,52,52,52,112,49,37,37,37,37,49,49,49,37,53,
- 33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,97,73,102,33,
- 58,57,117,32,53,49,49,96,97,97,97,33,48,113,112,112,112,48,49,49,113,
- 36,36,100,100,36,48,113,112,112,49,101,100,48,52,52,100,100,100,52,
- 113,113,49,49,33,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,
- 49,49,49,37,37,37,49,36,37,97,97,33,53,49,49,49,53,116,49,49,49,96,
- 97,100,97,33,53,101,112,96,117,101,100,100,116,112,112,101,36,49,52,
- 112,48,33,116,101,101,96,113,36,100,100,100,112,97,36,100,100,52,52,
- 52,52,52,112,97,33,37,37,37,49,49,49,37,96,97,100,100,32,37,37,53,
- 36,36,37,97,97,97,97,100,100,100,117,73,102,96,58,57,49,100,96,100,
- 100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,
- 112,112,112,112,49,101,100,96,52,52,100,100,100,52,116,36,100,100,
- 100,52,52,52,52,48,112,36,37,37,37,49,49,49,101,97,48,49,49,116,32,
- 37,37,49,36,37,97,97,33,53,49,49,49,49,100,96,100,100,33,48,113,48,
- 32,53,101,112,96,117,101,100,100,116,37,49,48,49,37,37,113,48,53,49,
- 48,32,32,113,36,100,100,100,112,117,96,100,100,52,52,52,52,52,32,97,
- 33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,
- 97,100,100,100,49,73,102,53,58,57,117,97,101,100,100,97,97,97,97,33,
- 48,101,112,112,112,48,49,49,113,32,97,100,100,36,112,48,113,112,49,
- 101,100,48,52,52,100,100,100,116,52,53,49,49,33,52,52,52,52,48,112,
- 36,37,37,37,49,49,49,37,53,33,49,49,49,37,37,37,49,36,37,97,97,33,
- 53,49,49,49,49,100,96,100,100,33,48,113,53,32,53,101,112,96,117,101,
- 100,100,116,100,48,100,36,101,97,112,48,49,100,101,37,97,113,36,100,
- 100,100,112,36,32,49,49,33,52,52,52,52,112,97,33,37,37,37,49,49,49,
- 101,37,97,100,100,32,37,37,112,33,36,37,97,97,97,97,100,100,100,37,
- 73,102,116,111,108,100,101,96,100,100,97,97,97,97,33,48,113,112,112,
- 112,48,49,49,113,112,49,48,49,113,112,112,112,112,49,101,100,96,52,
- 52,100,100,100,52,116,36,100,100,100,52,100,52,100,48,112,36,37,37,
- 49,49,49,49,101,32,117,100,100,117,32,37,37,49,36,37,97,97,33,53,49,
- 49,49,33,33,48,49,49,32,53,113,53,32,53,101,112,96,117,101,100,100,
- 116,37,49,48,49,53,52,112,48,53,49,48,32,32,113,36,100,100,100,112,
- 97,36,100,100,52,52,52,52,52,32,97,33,37,37,37,49,49,49,37,53,33,49,
- 49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,33,29,51,112,111,
- 108,112,101,53,49,49,96,100,97,97,33,48,101,112,112,112,48,49,49,113,
- 37,33,48,49,113,112,112,48,113,49,101,100,48,52,52,100,100,100,52,
- 101,96,100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,101,37,32,
- 49,49,49,37,37,37,49,36,37,97,100,33,53,49,49,49,49,100,96,100,100,
- 33,53,49,96,33,53,101,112,96,117,101,100,100,116,112,96,100,100,112,
- 33,36,48,53,49,48,32,37,113,36,100,100,100,48,96,36,100,100,52,52,
- 52,52,52,112,97,33,37,37,37,49,49,49,37,112,33,49,49,37,37,101,36,
- 37,36,37,97,97,97,97,100,100,100,53,29,51,53,58,57,49,100,96,100,100,
- 97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,
- 112,112,112,49,101,32,37,52,52,100,100,100,52,116,36,100,100,52,100,
- 52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,49,
- 36,37,97,97,33,53,49,49,49,97,113,96,100,100,33,53,113,53,32,53,101,
- 112,96,117,101,100,100,116,37,49,48,113,97,52,112,48,101,101,101,37,
- 49,113,36,100,100,100,112,37,96,100,100,52,100,52,52,52,112,97,33,
- 37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,
- 100,100,100,113,72,102,101,111,108,100,101,96,100,100,97,97,97,97,
- 33,48,101,112,112,112,48,49,49,113,113,116,100,100,36,112,112,112,
- 48,100,112,100,48,52,52,100,100,100,116,97,32,100,100,52,52,52,52,
- 52,48,112,36,37,37,37,49,49,49,37,112,33,49,49,37,37,37,37,49,36,37,
- 97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,48,32,53,101,112,
- 96,117,101,100,100,116,112,37,48,113,49,52,112,48,53,49,48,112,48,
- 113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,101,117,36,36,37,97,97,97,97,100,
- 100,100,101,72,102,100,107,108,36,33,49,49,49,96,97,100,97,33,48,101,
- 112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,96,112,100,
- 48,52,52,100,100,100,52,116,36,100,100,52,100,52,100,52,48,112,36,
- 49,49,37,49,49,49,37,53,33,49,49,116,32,37,37,49,36,49,97,97,33,53,
- 49,49,49,97,32,48,49,49,32,53,113,53,32,53,101,112,96,117,101,100,
- 100,116,37,49,48,113,52,52,112,48,53,49,48,100,48,113,36,100,100,100,
- 112,48,97,100,100,52,52,100,52,52,112,97,33,37,37,37,49,49,49,37,32,
- 33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,97,8,51,96,
- 107,108,100,101,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,
- 49,113,112,49,48,49,113,112,112,112,112,49,117,113,33,52,52,100,100,
- 100,52,48,36,49,49,33,52,52,52,52,48,112,36,37,37,37,49,49,49,53,101,
- 101,100,100,117,32,37,37,49,36,37,97,97,33,53,49,49,49,113,116,96,
- 100,100,33,53,113,53,32,53,101,112,112,112,48,49,49,97,52,113,49,113,
- 97,96,37,48,53,49,48,36,97,113,36,100,100,100,112,97,36,100,100,52,
- 52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,113,
- 37,36,112,96,97,97,97,100,100,100,117,8,51,37,106,108,36,97,53,49,
- 49,96,97,97,97,36,48,101,112,112,112,48,49,49,113,96,97,48,49,113,
- 112,112,112,112,96,112,32,37,52,52,100,100,100,52,116,36,100,100,52,
- 52,100,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,49,37,37,37,
- 49,36,37,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,48,
- 101,112,96,117,101,100,100,116,37,49,48,113,37,96,112,48,101,52,48,
- 100,53,113,36,100,100,100,112,117,37,49,49,33,52,52,100,52,112,97,
- 33,37,37,37,49,49,49,37,52,36,49,49,37,37,101,49,36,36,37,97,97,97,
- 97,100,100,100,49,8,51,116,107,108,100,101,96,100,100,97,97,97,97,
- 33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,
- 96,112,32,37,52,52,100,100,100,52,48,37,100,100,52,52,52,52,52,48,
- 112,36,37,37,37,49,49,49,101,100,36,49,49,96,32,37,37,49,36,37,97,
- 97,33,53,49,49,49,33,36,48,49,49,32,53,113,53,32,53,101,112,96,53,
- 100,100,100,116,116,36,48,113,49,52,112,48,53,97,48,100,48,33,113,
- 49,49,49,117,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,
- 49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,37,
- 8,51,33,107,108,52,117,97,100,100,97,97,97,97,33,48,37,113,112,112,
- 48,49,49,113,52,36,49,49,113,112,112,112,112,49,117,113,33,52,52,100,
- 100,100,52,116,36,100,100,52,52,52,100,52,48,112,36,37,37,37,49,49,
- 49,37,53,33,49,49,116,32,37,37,49,36,37,97,97,33,53,49,49,49,49,100,
- 96,100,100,33,53,113,53,113,53,101,112,96,117,101,100,100,116,37,49,
- 48,113,49,52,112,48,53,49,48,100,48,49,112,49,49,49,117,36,112,49,
- 49,33,52,52,52,100,112,97,33,37,37,37,49,49,49,101,97,48,49,49,37,
- 37,101,113,37,36,112,96,97,97,97,100,100,100,33,12,51,48,107,108,100,
- 101,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,
- 49,48,49,113,112,112,112,112,96,112,100,48,52,52,100,100,100,52,113,
- 96,100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,101,36,96,100,
- 100,117,32,37,37,49,36,117,97,97,33,53,49,49,49,53,48,96,100,100,33,
- 53,113,53,32,53,101,112,96,117,101,100,100,116,48,116,101,36,49,52,
- 112,48,53,49,48,100,48,49,37,100,100,100,112,100,101,100,100,52,52,
- 52,52,52,112,97,33,37,37,37,49,49,49,101,37,32,49,49,37,37,101,113,
- 37,36,112,96,97,97,97,100,100,100,53,12,51,117,106,108,116,116,97,
- 100,100,97,97,97,97,33,48,101,48,113,112,48,49,49,113,36,112,101,100,
- 36,112,112,112,112,49,101,32,37,52,52,100,100,100,52,116,36,100,100,
- 52,52,52,52,100,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,
- 37,37,49,36,37,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,
- 96,97,96,112,96,117,101,100,100,116,37,49,48,113,49,52,112,48,53,97,
- 48,100,48,33,116,49,49,49,117,97,36,100,100,52,52,52,52,52,112,97,
- 101,32,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,
- 97,100,100,100,113,9,51,36,107,108,100,101,96,100,100,97,97,97,97,
- 33,48,101,112,112,112,48,49,49,113,116,32,48,49,113,112,112,112,112,
- 96,32,53,33,52,52,100,100,100,116,116,52,100,100,52,52,52,52,52,116,
- 37,36,37,37,37,49,49,49,117,36,117,100,100,117,100,32,37,49,36,37,
- 97,97,33,53,49,49,49,117,32,53,49,49,32,53,113,53,96,97,96,112,96,
- 117,101,100,100,116,32,49,48,113,49,52,48,49,53,49,48,100,48,113,36,
- 100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,
- 49,49,117,53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,
- 101,9,51,113,63,57,33,53,48,49,49,96,97,97,97,33,48,101,112,48,113,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,49,101,100,48,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,48,48,37,37,37,37,49,
- 49,49,37,53,33,49,49,116,32,37,37,49,36,37,97,97,36,48,49,49,49,49,
- 100,96,100,100,33,53,113,53,32,53,101,112,96,117,101,100,100,116,53,
- 113,101,36,49,52,112,48,53,49,48,100,48,113,36,100,100,100,112,101,
- 32,100,100,52,52,52,52,52,112,97,33,49,37,37,49,49,49,37,112,116,100,
- 100,32,37,101,49,36,116,37,97,97,97,97,100,100,100,97,93,102,33,63,
- 57,49,100,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,
- 116,97,101,100,36,112,112,112,112,49,101,100,48,52,52,100,100,100,
- 116,48,112,49,49,33,52,52,52,52,48,48,37,37,37,37,49,49,49,53,52,53,
- 49,49,116,32,37,37,49,36,37,97,97,33,53,49,49,49,117,97,101,100,100,
- 33,53,113,53,32,53,101,112,96,117,101,100,100,116,49,101,101,36,49,
- 52,112,48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,100,52,
- 52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,
- 36,116,37,97,97,97,97,100,100,100,117,93,102,96,63,57,97,52,48,49,
- 49,96,97,97,97,33,48,101,112,112,48,49,49,49,113,112,49,48,49,113,
- 112,112,112,112,96,112,96,52,52,52,100,100,100,52,116,36,100,100,52,
- 52,52,52,52,116,37,36,37,37,37,49,49,49,37,53,33,49,49,116,100,32,
- 37,49,36,37,97,97,97,97,100,100,100,100,101,96,100,100,33,53,113,53,
- 96,97,96,112,96,117,101,100,100,116,37,49,48,113,49,52,112,48,101,
- 49,48,100,48,113,36,100,100,100,112,52,48,49,49,33,52,52,52,52,112,
- 97,33,37,49,37,49,49,49,101,100,48,49,49,37,37,101,49,36,36,37,97,
- 97,97,97,100,100,100,49,93,102,53,63,57,49,100,96,100,100,97,97,97,
- 97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 112,49,101,100,48,52,52,100,100,100,116,96,117,100,100,52,52,52,52,
- 52,116,101,32,37,37,37,49,49,49,117,36,100,100,100,117,32,37,37,49,
- 36,37,97,97,33,53,49,49,49,117,101,53,49,49,32,53,113,53,32,53,37,
- 113,96,117,101,100,100,116,113,101,48,113,49,52,112,48,53,49,48,100,
- 48,116,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,
- 37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,48,37,97,97,97,97,100,
- 100,100,37,93,102,116,106,108,36,113,49,49,49,96,97,97,97,33,48,101,
- 112,112,112,48,49,49,49,97,33,49,49,113,112,112,112,112,96,112,96,
- 52,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,37,
- 37,37,49,49,49,37,53,33,49,49,116,100,32,37,49,36,37,97,97,97,97,100,
- 100,100,100,101,96,100,100,33,53,113,53,32,53,101,112,96,117,101,100,
- 100,116,37,49,48,113,49,52,112,48,53,49,48,100,48,113,36,100,100,100,
- 112,101,36,49,49,33,52,52,52,52,112,97,33,37,37,49,49,49,49,101,97,
- 36,49,49,37,37,101,49,36,36,49,97,97,97,97,100,100,100,33,9,51,112,
- 106,108,100,101,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,
- 49,113,100,100,48,49,113,112,112,112,112,101,37,97,37,52,52,100,100,
- 100,116,32,116,49,49,33,52,52,52,52,48,112,48,37,37,37,49,49,49,97,
- 96,32,49,49,116,32,37,37,49,36,37,97,97,33,53,49,49,49,117,49,96,100,
- 100,33,53,113,53,32,53,101,112,96,117,101,100,100,116,37,49,48,113,
- 49,52,112,48,53,49,48,100,48,116,36,100,100,100,112,97,36,100,100,
- 52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,116,117,100,100,32,37,
- 101,49,36,36,37,97,97,97,97,100,100,100,53,9,51,53,63,57,49,100,96,
- 100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,
- 113,112,112,112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,
- 32,49,37,49,117,36,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,
- 53,32,53,113,112,96,117,101,100,100,116,117,33,49,113,49,52,112,48,
- 53,49,48,100,48,113,36,100,100,100,112,52,116,49,49,33,52,52,52,52,
- 112,97,33,37,37,37,49,49,49,49,53,33,49,49,37,37,101,49,36,48,37,97,
- 97,97,97,100,100,100,113,92,102,101,106,108,100,101,96,100,100,97,
- 97,97,97,33,48,101,112,112,112,48,49,49,113,113,96,100,100,36,112,
- 112,112,112,49,101,100,48,52,52,100,100,100,52,33,113,49,49,33,52,
- 52,52,52,48,112,36,37,37,37,49,49,49,53,36,116,100,100,117,32,37,37,
- 49,36,37,97,97,33,53,49,49,49,101,112,53,49,49,32,53,113,53,32,53,
- 113,112,96,117,101,100,100,116,117,117,101,36,49,52,112,48,53,49,48,
- 100,48,113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,
- 33,37,37,37,49,49,49,101,116,116,100,100,32,37,101,49,36,36,37,97,
- 97,97,97,100,100,100,101,92,102,100,42,57,49,100,96,100,100,97,97,
- 97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,49,101,36,49,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,48,112,36,49,37,37,49,49,49,37,53,33,49,49,116,32,49,37,49,117,
- 36,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,112,
- 96,117,101,100,100,116,37,49,48,113,49,52,112,48,53,49,48,53,37,116,
- 36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,
- 49,49,49,37,53,33,49,49,37,37,101,49,48,36,37,100,97,97,97,100,100,
- 100,97,28,102,97,42,57,49,100,96,100,100,97,97,97,97,33,48,101,112,
- 112,112,48,49,49,113,96,117,101,100,36,112,112,112,112,49,101,100,
- 53,52,52,100,100,100,52,49,97,100,100,52,52,52,52,52,48,112,36,37,
- 37,37,49,49,49,53,112,53,49,49,116,32,37,37,49,117,36,97,97,33,53,
- 49,49,49,37,100,96,100,100,33,53,113,53,32,53,101,48,97,117,101,100,
- 100,116,49,112,48,113,49,52,112,48,53,49,48,100,48,33,113,49,49,49,
- 117,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,101,52,
- 48,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,117,28,102,
- 32,47,57,49,100,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,
- 49,113,112,49,48,49,113,112,112,112,112,113,112,36,49,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,52,52,48,112,36,37,49,37,49,49,49,37,
- 53,33,49,49,116,32,49,37,49,36,37,97,97,33,53,49,49,49,113,32,100,
- 100,100,33,53,113,53,32,53,101,112,96,117,101,100,100,36,112,49,48,
- 113,49,52,112,48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,
- 100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 101,49,36,36,37,97,100,97,97,100,100,100,49,28,102,117,42,57,49,100,
- 96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,36,33,100,
- 100,36,112,112,112,112,49,101,100,53,52,52,100,100,100,52,37,97,100,
- 100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,117,53,33,49,49,116,
- 32,37,37,49,36,37,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,
- 53,32,53,101,112,96,117,101,100,100,116,97,116,49,113,49,52,112,48,
- 53,49,48,100,48,49,37,100,100,100,112,97,36,100,100,52,52,52,52,52,
- 112,97,33,37,37,37,49,49,49,37,100,33,49,49,37,37,101,49,36,36,37,
- 97,97,97,97,100,100,100,37,28,102,52,42,57,49,100,96,100,100,97,97,
- 97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,100,52,52,52,
- 52,52,48,112,36,37,37,49,49,49,49,101,37,32,49,49,116,32,37,49,49,
- 36,37,97,97,33,53,49,49,49,113,37,100,100,100,33,53,113,53,32,53,101,
- 48,97,117,101,100,100,36,112,49,48,113,49,52,112,48,53,49,48,100,48,
- 113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,
- 37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,100,97,100,
- 100,100,33,8,102,49,42,57,49,100,96,100,100,97,97,97,97,33,48,101,
- 112,112,112,48,49,49,113,113,113,48,49,113,112,112,112,112,49,101,
- 49,37,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,
- 37,37,37,49,49,49,37,48,100,100,100,117,32,37,37,49,36,37,97,97,33,
- 53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,112,96,117,101,
- 100,100,116,117,49,48,113,49,52,112,48,53,49,48,100,48,113,113,49,
- 49,49,117,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,
- 101,49,48,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,53,8,
- 102,112,47,57,49,100,96,100,100,97,97,97,97,33,48,101,112,112,112,
- 48,49,49,113,112,49,48,49,113,112,112,112,112,49,101,100,48,52,52,
- 100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,37,37,37,49,
- 49,49,37,53,33,49,49,116,32,37,37,49,36,37,100,97,33,53,49,49,49,33,
- 96,53,49,49,32,53,113,53,32,53,101,112,48,97,101,100,100,116,37,49,
- 48,113,49,52,112,48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,
- 100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 101,49,36,36,37,97,97,97,100,100,100,100,113,29,102,37,42,57,49,100,
- 96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,97,96,101,
- 100,36,112,112,112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,101,96,96,100,100,117,
- 32,37,37,49,36,37,97,97,33,53,49,49,49,101,36,96,100,100,33,53,113,
- 53,32,53,101,112,96,117,101,100,100,116,37,49,48,113,49,52,112,48,
- 53,49,48,100,48,113,48,100,100,100,112,97,36,100,100,52,52,52,52,52,
- 112,97,33,37,37,37,49,49,49,53,48,37,49,49,37,37,101,49,36,36,37,97,
- 97,97,97,100,100,100,101,29,102,36,46,57,49,100,96,100,100,97,97,97,
- 97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,
- 112,49,101,49,37,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,
- 48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,49,36,37,100,
- 97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,112,48,
- 97,101,100,100,116,49,32,100,36,49,52,112,48,53,49,48,100,48,113,36,
- 100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,
- 49,49,37,53,33,49,49,37,37,101,49,36,117,36,97,97,97,97,100,100,100,
- 97,25,102,33,46,57,49,100,96,100,100,97,97,97,97,33,48,101,112,112,
- 112,48,49,49,113,33,117,49,49,113,112,112,112,112,49,101,100,48,52,
- 52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,37,37,37,
- 49,49,49,101,101,96,100,100,117,32,37,37,49,36,37,97,97,33,53,49,49,
- 49,33,49,97,100,100,33,53,113,53,32,53,101,112,32,116,101,100,100,
- 116,48,33,48,113,49,52,112,48,53,49,48,100,48,113,48,100,100,100,52,
- 116,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,117,96,117,
- 100,100,32,37,101,49,36,36,37,97,97,97,97,100,100,100,117,25,102,96,
- 46,57,49,100,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,
- 113,112,49,48,49,113,112,112,112,112,49,101,49,37,52,52,100,100,100,
- 52,116,36,100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,
- 33,49,49,116,32,37,37,49,36,37,100,97,33,53,49,49,49,49,100,96,100,
- 100,33,53,113,53,32,53,101,112,96,117,101,100,100,116,37,49,48,113,
- 49,52,112,48,53,49,48,100,48,113,116,100,100,100,32,97,36,100,100,
- 52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,
- 49,36,117,36,97,97,97,97,100,100,100,49,25,102,53,46,57,49,100,96,
- 100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,33,112,101,
- 100,36,112,112,112,112,49,101,100,48,100,52,100,100,100,52,116,36,
- 100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,
- 116,32,37,37,49,36,37,97,97,33,53,49,49,49,113,117,53,49,49,32,53,
- 113,53,32,53,101,112,96,53,100,100,100,52,36,49,48,113,49,52,112,48,
- 53,49,48,100,48,113,116,100,100,100,112,97,36,100,100,52,52,52,52,
- 52,112,97,33,37,37,37,49,49,49,117,53,33,49,49,37,37,101,49,36,36,
- 37,97,97,97,97,100,100,100,112,24,102,116,43,57,49,100,96,100,100,
- 97,97,97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,
- 112,112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,100,52,52,
- 52,52,52,48,112,36,37,37,37,49,49,49,37,52,48,49,49,116,32,37,37,49,
- 36,37,97,100,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,
- 112,96,37,48,49,49,113,36,113,48,113,49,52,112,48,53,49,48,100,48,
- 113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,37,
- 37,49,49,49,37,48,117,100,100,32,37,101,49,36,36,37,97,97,97,97,100,
- 100,100,33,13,102,113,43,57,49,100,96,100,100,97,97,97,97,33,48,101,
- 112,112,112,48,49,49,113,112,49,48,49,113,112,112,112,112,113,112,
- 100,48,52,52,100,100,100,52,116,36,100,100,52,52,52,52,52,48,112,36,
- 37,37,37,49,49,49,101,37,97,100,100,117,32,37,37,49,36,37,97,97,36,
- 53,49,49,49,97,53,97,100,100,33,53,113,53,32,53,101,112,96,117,101,
- 100,100,36,112,49,48,113,49,52,112,48,53,49,48,100,48,113,36,100,100,
- 100,52,116,36,100,100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,
- 53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,100,100,53,13,102,
- 48,46,57,49,100,96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,
- 49,113,52,100,48,49,113,112,112,112,112,49,37,101,48,52,52,100,100,
- 100,52,116,36,100,100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,
- 53,33,49,49,116,32,37,37,49,36,37,97,97,97,100,100,100,100,100,101,
- 96,100,100,33,53,113,53,32,53,101,112,96,117,101,100,100,116,97,32,
- 100,36,49,52,112,48,53,49,48,100,48,113,36,100,100,100,112,97,36,100,
- 100,52,52,52,52,52,112,97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,
- 101,49,36,36,37,97,97,97,97,100,100,100,113,24,102,101,43,57,49,100,
- 96,100,100,97,97,97,97,33,48,101,112,112,112,48,49,49,113,96,48,100,
- 100,36,112,112,112,112,49,101,100,48,52,52,100,100,100,52,116,36,100,
- 100,52,52,52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,
- 32,37,37,49,36,37,97,97,33,53,49,49,49,113,32,100,100,100,33,53,113,
- 53,32,53,101,112,96,117,101,100,100,52,36,49,48,113,49,52,112,48,53,
- 49,48,100,48,113,36,100,100,100,32,97,36,100,100,52,52,52,52,52,112,
- 97,33,37,37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,
- 97,97,100,100,100,101,24,102,100,127,108,100,101,96,100,100,97,97,
- 97,97,33,48,101,112,112,112,48,49,49,113,112,49,48,49,113,112,112,
- 112,112,49,101,100,48,52,100,100,100,100,100,116,36,100,100,52,52,
- 52,52,52,48,112,36,37,37,37,49,49,49,37,53,33,49,49,116,32,37,37,49,
- 36,37,97,97,33,53,49,49,49,49,100,96,100,100,33,53,113,53,32,53,101,
- 112,96,117,101,100,100,116,113,33,100,36,49,52,112,48,53,49,48,100,
- 48,113,36,100,100,100,112,97,36,100,100,52,52,52,52,52,112,97,33,37,
- 37,37,49,49,49,37,53,33,49,49,37,37,101,49,36,36,37,97,97,97,97,100,
- 100,100,97,88,51,96,127,108,100,100,100,100,100,97,97,97,97,97,100,
- 36,112,112,112,48,96,100,100,100,100,100,100,36,112,112,112,112,100,
- 48,97,53,52,52,36,48,49,49,49,49,49,49,33,52,52,52,52,100,100,32,37,
- 37,37,33,100,100,100,100,100,100,100,32,37,37,37,49,49,49,96,97,97,
- 97,100,100,100,100,100,100,100,100,97,97,100,97,97,100,36,112,112,
- 112,48,96,100,100,100,100,100,100,36,100,112,48,101,117,48,97,97,96,
- 53,36,48,49,49,49,49,49,49,33,52,52,52,52,52,100,32,37,37,37,33,100,
- 100,100,100,100,100,100,32,37,101,116,37,37,49,96,97,97,97,32,49,49,
- 37,93,51,37,126,108,100,100,100,100,100,117,32,116,117,117,100,36,
- 117,117,117,117,53,49,49,49,49,49,49,113,117,117,117,117,53,49,33,
- 116,37,48,49,49,49,49,49,49,49,49,33,52,52,52,52,100,100,52,32,37,
- 37,117,49,49,49,49,49,49,49,37,33,100,100,100,32,49,116,97,32,37,49,
- 49,49,49,49,49,49,49,49,96,100,97,100,97,36,53,32,112,112,48,49,49,
- 49,49,49,49,49,49,113,53,49,113,48,49,33,36,112,112,48,49,49,49,49,
- 49,49,97,101,36,112,112,48,49,33,52,52,52,52,100,100,100,100,100,100,
- 100,52,52,52,52,100,100,100,100,100,100,100,117,100,100,52,88,51,116,
- 127,108,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,32,49,
- 49,97,117,101,100,100,100,100,100,100,52,52,52,52,52,100,100,100,32,
- 37,37,49,49,49,49,49,49,49,49,49,49,113,116,117,49,49,97,101,100,100,
- 117,100,100,100,100,100,100,100,52,36,53,49,116,100,100,100,32,49,
- 49,49,49,49,49,49,49,49,113,117,53,97,37,53,49,97,33,49,49,49,49,49,
- 49,49,49,49,49,49,97,101,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,112,49,49,116,117,117,117,100,
- 100,100,112,93,51,33,127,108,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,97,100,48,96,101,100,100,100,100,100,100,116,112,112,
- 112,112,96,100,100,48,52,52,48,49,49,49,49,49,49,49,113,112,48,49,
- 52,48,49,33,52,52,52,49,100,100,100,100,100,100,100,100,52,97,52,100,
- 100,100,100,32,37,37,37,49,49,49,49,49,49,49,49,49,113,48,37,49,49,
- 49,96,97,97,97,100,100,100,100,100,100,100,52,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,36,48,113,112,116,
- 49,113,33,116,117,117,100,100,100,36,92,51,48,127,108,100,100,100,
- 100,36,117,117,117,117,53,49,97,117,117,117,117,101,100,100,100,100,
- 100,100,116,117,117,117,117,101,100,112,117,117,97,53,100,100,100,
- 100,100,100,100,96,100,100,100,100,48,49,116,49,49,49,117,100,100,
- 100,100,100,100,100,117,117,117,97,32,49,113,117,117,117,53,96,100,
- 100,100,100,100,100,36,117,53,113,117,36,49,97,117,117,117,117,101,
- 100,100,100,100,100,100,36,112,96,101,36,48,49,33,112,117,117,117,
- 49,49,49,49,49,49,49,117,49,117,117,117,49,49,116,117,117,117,117,
- 100,100,100,100,100,100,100,117,117,117,117,32,49,49,116,97,97,33,
- 53,49,49,101,92,59,101,43,179,100,194,206,100,};
diff --git a/sys/dev/cx/cxddk.c b/sys/dev/cx/cxddk.c
deleted file mode 100644
index 60944c911aa2..000000000000
--- a/sys/dev/cx/cxddk.c
+++ /dev/null
@@ -1,905 +0,0 @@
-/*-
- * Cronyx-Sigma Driver Development Kit.
- *
- * Copyright (C) 1998 Cronyx Engineering.
- * Author: Pavel Novikov, <pavel@inr.net.kiae.su>
- *
- * Copyright (C) 1998-2003 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: cxddk.c,v 1.1.2.2 2003/11/27 14:24:50 rik Exp $
- */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <dev/cx/machdep.h>
-#include <dev/cx/cxddk.h>
-#include <dev/cx/cxreg.h>
-#include <dev/cx/cronyxfw.h>
-#include <dev/cx/csigmafw.h>
-
-#define BYTE *(unsigned char*)&
-
-/* standard base port set */
-static short porttab [] = {
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
-};
-
-/*
- * Compute the optimal size of the receive buffer.
- */
-static int cx_compute_buf_len (cx_chan_t *c)
-{
- int rbsz;
- if (c->mode == M_ASYNC) {
- rbsz = (c->rxbaud + 800 - 1) / 800 * 2;
- if (rbsz < 4)
- rbsz = 4;
- else if (rbsz > DMABUFSZ)
- rbsz = DMABUFSZ;
- }
- else
- rbsz = DMABUFSZ;
-
- return rbsz;
-}
-
-/*
- * Auto-detect the installed adapters.
- */
-int cx_find (port_t *board_ports)
-{
- int i, n;
-
- for (i=0, n=0; porttab[i] && n<NBRD; i++)
- if (cx_probe_board (porttab[i], -1, -1))
- board_ports[n++] = porttab[i];
- return n;
-}
-
-/*
- * Initialize the adapter.
- */
-int cx_open_board (cx_board_t *b, int num, port_t port, int irq, int dma)
-{
- cx_chan_t *c;
-
- if (num >= NBRD || ! cx_probe_board (port, irq, dma))
- return 0;
-
- /* init callback pointers */
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- c->call_on_tx = 0;
- c->call_on_rx = 0;
- c->call_on_msig = 0;
- c->call_on_err = 0;
- }
-
- cx_init (b, num, port, irq, dma);
-
- /* Loading firmware */
- if (! cx_setup_board (b, csigma_fw_data, csigma_fw_len, csigma_fw_tvec))
- return 0;
- return 1;
-}
-
-/*
- * Shutdown the adapter.
- */
-void cx_close_board (cx_board_t *b)
-{
- cx_setup_board (b, 0, 0, 0);
-
- /* Reset the controller. */
- outb (BCR0(b->port), 0);
- if (b->chan[8].type || b->chan[12].type)
- outb (BCR0(b->port+0x10), 0);
-}
-
-/*
- * Start the channel.
- */
-void cx_start_chan (cx_chan_t *c, cx_buf_t *cb, unsigned long phys)
-{
- int command = 0;
- int mode = 0;
- int ier = 0;
- int rbsz;
-
- c->overflow = 0;
-
- /* Setting up buffers */
- if (cb) {
- c->arbuf = cb->rbuffer[0];
- c->brbuf = cb->rbuffer[1];
- c->atbuf = cb->tbuffer[0];
- c->btbuf = cb->tbuffer[1];
- c->arphys = phys + ((char*)c->arbuf - (char*)cb);
- c->brphys = phys + ((char*)c->brbuf - (char*)cb);
- c->atphys = phys + ((char*)c->atbuf - (char*)cb);
- c->btphys = phys + ((char*)c->btbuf - (char*)cb);
- }
-
- /* Set current channel number */
- outb (CAR(c->port), c->num & 3);
-
- /* set receiver A buffer physical address */
- outw (ARBADRU(c->port), (unsigned short) (c->arphys>>16));
- outw (ARBADRL(c->port), (unsigned short) c->arphys);
-
- /* set receiver B buffer physical address */
- outw (BRBADRU(c->port), (unsigned short) (c->brphys>>16));
- outw (BRBADRL(c->port), (unsigned short) c->brphys);
-
- /* set transmitter A buffer physical address */
- outw (ATBADRU(c->port), (unsigned short) (c->atphys>>16));
- outw (ATBADRL(c->port), (unsigned short) c->atphys);
-
- /* set transmitter B buffer physical address */
- outw (BTBADRU(c->port), (unsigned short) (c->btphys>>16));
- outw (BTBADRL(c->port), (unsigned short) c->btphys);
-
- /* rx */
- command |= CCR_ENRX;
- ier |= IER_RXD;
- if (c->board->dma) {
- mode |= CMR_RXDMA;
- if (c->mode == M_ASYNC)
- ier |= IER_RET;
- }
-
- /* tx */
- command |= CCR_ENTX;
- ier |= (c->mode == M_ASYNC) ? IER_TXD : (IER_TXD | IER_TXMPTY);
- if (c->board->dma)
- mode |= CMR_TXDMA;
-
- /* Set mode */
- outb (CMR(c->port), mode | (c->mode == M_ASYNC ? CMR_ASYNC : CMR_HDLC));
-
- /* Clear and initialize channel */
- cx_cmd (c->port, CCR_CLRCH);
- cx_cmd (c->port, CCR_INITCH | command);
- if (c->mode == M_ASYNC)
- cx_cmd (c->port, CCR_ENTX);
-
- /* Start receiver */
- rbsz = cx_compute_buf_len(c);
- outw (ARBCNT(c->port), rbsz);
- outw (BRBCNT(c->port), rbsz);
- outw (ARBSTS(c->port), BSTS_OWN24);
- outw (BRBSTS(c->port), BSTS_OWN24);
-
- if (c->mode == M_ASYNC)
- ier |= IER_MDM;
-
- /* Enable interrupts */
- outb (IER(c->port), ier);
-
- /* Clear DTR and RTS */
- cx_set_dtr (c, 0);
- cx_set_rts (c, 0);
-}
-
-/*
- * Turn the receiver on/off.
- */
-void cx_enable_receive (cx_chan_t *c, int on)
-{
- unsigned char ier;
-
- if (cx_receive_enabled(c) && ! on) {
- outb (CAR(c->port), c->num & 3);
- if (c->mode == M_ASYNC) {
- ier = inb (IER(c->port));
- outb (IER(c->port), ier & ~ (IER_RXD | IER_RET));
- }
- cx_cmd (c->port, CCR_DISRX);
- } else if (! cx_receive_enabled(c) && on) {
- outb (CAR(c->port), c->num & 3);
- ier = inb (IER(c->port));
- if (c->mode == M_ASYNC)
- outb (IER(c->port), ier | (IER_RXD | IER_RET));
- else
- outb (IER(c->port), ier | IER_RXD);
- cx_cmd (c->port, CCR_ENRX);
- }
-}
-
-/*
- * Turn the transmitter on/off.
- */
-void cx_enable_transmit (cx_chan_t *c, int on)
-{
- if (cx_transmit_enabled(c) && ! on) {
- outb (CAR(c->port), c->num & 3);
- if (c->mode != M_ASYNC)
- outb (STCR(c->port), STC_ABORTTX | STC_SNDSPC);
- cx_cmd (c->port, CCR_DISTX);
- } else if (! cx_transmit_enabled(c) && on) {
- outb (CAR(c->port), c->num & 3);
- cx_cmd (c->port, CCR_ENTX);
- }
-}
-
-/*
- * Get channel status.
- */
-int cx_receive_enabled (cx_chan_t *c)
-{
- outb (CAR(c->port), c->num & 3);
- return (inb (CSR(c->port)) & CSRA_RXEN) != 0;
-}
-
-int cx_transmit_enabled (cx_chan_t *c)
-{
- outb (CAR(c->port), c->num & 3);
- return (inb (CSR(c->port)) & CSRA_TXEN) != 0;
-}
-
-unsigned long cx_get_baud (cx_chan_t *c)
-{
- return (c->opt.tcor.clk == CLK_EXT) ? 0 : c->txbaud;
-}
-
-int cx_get_loop (cx_chan_t *c)
-{
- return c->opt.tcor.llm ? 1 : 0;
-}
-
-int cx_get_nrzi (cx_chan_t *c)
-{
- return c->opt.rcor.encod == ENCOD_NRZI;
-}
-
-int cx_get_dpll (cx_chan_t *c)
-{
- return c->opt.rcor.dpll ? 1 : 0;
-}
-
-void cx_set_baud (cx_chan_t *c, unsigned long bps)
-{
- int clock, period;
-
- c->txbaud = c->rxbaud = bps;
-
- /* Set current channel number */
- outb (CAR(c->port), c->num & 3);
- if (bps) {
- if (c->mode == M_ASYNC || c->opt.rcor.dpll || c->opt.tcor.llm) {
- /* Receive baud - internal */
- cx_clock (c->oscfreq, c->rxbaud, &clock, &period);
- c->opt.rcor.clk = clock;
- outb (RCOR(c->port), BYTE c->opt.rcor);
- outb (RBPR(c->port), period);
- } else {
- /* Receive baud - external */
- c->opt.rcor.clk = CLK_EXT;
- outb (RCOR(c->port), BYTE c->opt.rcor);
- outb (RBPR(c->port), 1);
- }
-
- /* Transmit baud - internal */
- cx_clock (c->oscfreq, c->txbaud, &clock, &period);
- c->opt.tcor.clk = clock;
- c->opt.tcor.ext1x = 0;
- outb (TBPR(c->port), period);
- } else if (c->mode != M_ASYNC) {
- /* External clock - disable local loopback and DPLL */
- c->opt.tcor.llm = 0;
- c->opt.rcor.dpll = 0;
-
- /* Transmit baud - external */
- c->opt.tcor.ext1x = 1;
- c->opt.tcor.clk = CLK_EXT;
- outb (TBPR(c->port), 1);
-
- /* Receive baud - external */
- c->opt.rcor.clk = CLK_EXT;
- outb (RCOR(c->port), BYTE c->opt.rcor);
- outb (RBPR(c->port), 1);
- }
- if (c->opt.tcor.llm)
- outb (COR2(c->port), (BYTE c->hopt.cor2) & ~3);
- else
- outb (COR2(c->port), BYTE c->hopt.cor2);
- outb (TCOR(c->port), BYTE c->opt.tcor);
-}
-
-void cx_set_loop (cx_chan_t *c, int on)
-{
- if (! c->txbaud)
- return;
-
- c->opt.tcor.llm = on ? 1 : 0;
- cx_set_baud (c, c->txbaud);
-}
-
-void cx_set_dpll (cx_chan_t *c, int on)
-{
- if (! c->txbaud)
- return;
-
- c->opt.rcor.dpll = on ? 1 : 0;
- cx_set_baud (c, c->txbaud);
-}
-
-void cx_set_nrzi (cx_chan_t *c, int nrzi)
-{
- c->opt.rcor.encod = (nrzi ? ENCOD_NRZI : ENCOD_NRZ);
- outb (CAR(c->port), c->num & 3);
- outb (RCOR(c->port), BYTE c->opt.rcor);
-}
-
-static int cx_send (cx_chan_t *c, char *data, int len,
- void *attachment)
-{
- unsigned char *buf;
- port_t cnt_port, sts_port;
- void **attp;
-
- /* Set the current channel number. */
- outb (CAR(c->port), c->num & 3);
-
- /* Determine the buffer order. */
- if (inb (DMABSTS(c->port)) & DMABSTS_NTBUF) {
- if (inb (BTBSTS(c->port)) & BSTS_OWN24) {
- buf = c->atbuf;
- cnt_port = ATBCNT(c->port);
- sts_port = ATBSTS(c->port);
- attp = &c->attach[0];
- } else {
- buf = c->btbuf;
- cnt_port = BTBCNT(c->port);
- sts_port = BTBSTS(c->port);
- attp = &c->attach[1];
- }
- } else {
- if (inb (ATBSTS(c->port)) & BSTS_OWN24) {
- buf = c->btbuf;
- cnt_port = BTBCNT(c->port);
- sts_port = BTBSTS(c->port);
- attp = &c->attach[1];
- } else {
- buf = c->atbuf;
- cnt_port = ATBCNT(c->port);
- sts_port = ATBSTS(c->port);
- attp = &c->attach[0];
- }
- }
- /* Is it busy? */
- if (inb (sts_port) & BSTS_OWN24)
- return -1;
-
- memcpy (buf, data, len);
- *attp = attachment;
-
- /* Start transmitter. */
- outw (cnt_port, len);
- outb (sts_port, BSTS_EOFR | BSTS_INTR | BSTS_OWN24);
-
- /* Enable TXMPTY interrupt,
- * to catch the case when the second buffer is empty. */
- if (c->mode != M_ASYNC) {
- if ((inb(ATBSTS(c->port)) & BSTS_OWN24) &&
- (inb(BTBSTS(c->port)) & BSTS_OWN24)) {
- outb (IER(c->port), IER_RXD | IER_TXD | IER_TXMPTY);
- } else
- outb (IER(c->port), IER_RXD | IER_TXD);
- }
- return 0;
-}
-
-/*
- * Number of free buffs
- */
-int cx_buf_free (cx_chan_t *c)
-{
- return ! (inb (ATBSTS(c->port)) & BSTS_OWN24) +
- ! (inb (BTBSTS(c->port)) & BSTS_OWN24);
-}
-
-/*
- * Send the data packet.
- */
-int cx_send_packet (cx_chan_t *c, char *data, int len, void *attachment)
-{
- if (len >= DMABUFSZ)
- return -2;
- if (c->mode == M_ASYNC) {
- static char buf [DMABUFSZ];
- char *p, *t = buf;
-
- /* Async -- double all nulls. */
- for (p=data; p < data+len && t < buf+DMABUFSZ-1; ++p)
- if ((*t++ = *p) == 0)
- *t++ = 0;
- return cx_send (c, buf, t-buf, attachment);
- }
- return cx_send (c, data, len, attachment);
-}
-
-static int cx_receive_interrupt (cx_chan_t *c)
-{
- unsigned short risr;
- int len = 0, rbsz;
-
- ++c->rintr;
- risr = inw (RISR(c->port));
-
- /* Compute optimal receiver buffer length */
- rbsz = cx_compute_buf_len(c);
- if (c->mode == M_ASYNC && (risr & RISA_TIMEOUT)) {
- unsigned long rcbadr = (unsigned short) inw (RCBADRL(c->port)) |
- (long) inw (RCBADRU(c->port)) << 16;
- unsigned char *buf = NULL;
- port_t cnt_port = 0, sts_port = 0;
-
- if (rcbadr >= c->brphys && rcbadr < c->brphys+DMABUFSZ) {
- buf = c->brbuf;
- len = rcbadr - c->brphys;
- cnt_port = BRBCNT(c->port);
- sts_port = BRBSTS(c->port);
- } else if (rcbadr >= c->arphys && rcbadr < c->arphys+DMABUFSZ) {
- buf = c->arbuf;
- len = rcbadr - c->arphys;
- cnt_port = ARBCNT(c->port);
- sts_port = ARBSTS(c->port);
- }
-
- if (len) {
- c->ibytes += len;
- c->received_data = buf;
- c->received_len = len;
-
- /* Restart receiver. */
- outw (cnt_port, rbsz);
- outb (sts_port, BSTS_OWN24);
- }
- return (REOI_TERMBUFF);
- }
-
- /* Receive errors. */
- if (risr & RIS_OVERRUN) {
- ++c->ierrs;
- if (c->call_on_err)
- c->call_on_err (c, CX_OVERRUN);
- } else if (c->mode != M_ASYNC && (risr & RISH_CRCERR)) {
- ++c->ierrs;
- if (c->call_on_err)
- c->call_on_err (c, CX_CRC);
- } else if (c->mode != M_ASYNC && (risr & (RISH_RXABORT | RISH_RESIND))) {
- ++c->ierrs;
- if (c->call_on_err)
- c->call_on_err (c, CX_FRAME);
- } else if (c->mode == M_ASYNC && (risr & RISA_PARERR)) {
- ++c->ierrs;
- if (c->call_on_err)
- c->call_on_err (c, CX_CRC);
- } else if (c->mode == M_ASYNC && (risr & RISA_FRERR)) {
- ++c->ierrs;
- if (c->call_on_err)
- c->call_on_err (c, CX_FRAME);
- } else if (c->mode == M_ASYNC && (risr & RISA_BREAK)) {
- if (c->call_on_err)
- c->call_on_err (c, CX_BREAK);
- } else if (! (risr & RIS_EOBUF)) {
- ++c->ierrs;
- } else {
- /* Handle received data. */
- len = (risr & RIS_BB) ? inw(BRBCNT(c->port)) : inw(ARBCNT(c->port));
-
- if (len > DMABUFSZ) {
- /* Fatal error: actual DMA transfer size
- * exceeds our buffer size. It could be caused
- * by incorrectly programmed DMA register or
- * hardware fault. Possibly, should panic here. */
- len = DMABUFSZ;
- } else if (c->mode != M_ASYNC && ! (risr & RIS_EOFR)) {
- /* The received frame does not fit in the DMA buffer.
- * It could be caused by serial lie noise,
- * or if the peer has too big MTU. */
- if (! c->overflow) {
- if (c->call_on_err)
- c->call_on_err (c, CX_OVERFLOW);
- c->overflow = 1;
- ++c->ierrs;
- }
- } else if (! c->overflow) {
- if (risr & RIS_BB) {
- c->received_data = c->brbuf;
- c->received_len = len;
- } else {
- c->received_data = c->arbuf;
- c->received_len = len;
- }
- if (c->mode != M_ASYNC)
- ++c->ipkts;
- c->ibytes += len;
- } else
- c->overflow = 0;
- }
-
- /* Restart receiver. */
- if (! (inb (ARBSTS(c->port)) & BSTS_OWN24)) {
- outw (ARBCNT(c->port), rbsz);
- outb (ARBSTS(c->port), BSTS_OWN24);
- }
- if (! (inb (BRBSTS(c->port)) & BSTS_OWN24)) {
- outw (BRBCNT(c->port), rbsz);
- outb (BRBSTS(c->port), BSTS_OWN24);
- }
-
- /* Discard exception characters. */
- if ((risr & RISA_SCMASK) && c->aopt.cor2.ixon)
- return (REOI_DISCEXC);
- else
- return (0);
-}
-
-static void cx_transmit_interrupt (cx_chan_t *c)
-{
- unsigned char tisr;
- int len = 0;
-
- ++c->tintr;
- tisr = inb (TISR(c->port));
- if (tisr & TIS_UNDERRUN) { /* Transmit underrun error */
- if (c->call_on_err)
- c->call_on_err (c, CX_UNDERRUN);
- ++c->oerrs;
- } else if (tisr & (TIS_EOBUF | TIS_TXEMPTY | TIS_TXDATA)) {
- /* Call processing function */
- if (tisr & TIS_BB) {
- len = inw(BTBCNT(c->port));
- if (c->call_on_tx)
- c->call_on_tx (c, c->attach[1], len);
- } else {
- len = inw(ATBCNT(c->port));
- if (c->call_on_tx)
- c->call_on_tx (c, c->attach[0], len);
- }
- if (c->mode != M_ASYNC && len != 0)
- ++c->opkts;
- c->obytes += len;
- }
-
- /* Enable TXMPTY interrupt,
- * to catch the case when the second buffer is empty. */
- if (c->mode != M_ASYNC) {
- if ((inb (ATBSTS(c->port)) & BSTS_OWN24) &&
- (inb (BTBSTS(c->port)) & BSTS_OWN24)) {
- outb (IER(c->port), IER_RXD | IER_TXD | IER_TXMPTY);
- } else
- outb (IER(c->port), IER_RXD | IER_TXD);
- }
-}
-
-void cx_int_handler (cx_board_t *b)
-{
- unsigned char livr;
- cx_chan_t *c;
-
- while (! (inw (BSR(b->port)) & BSR_NOINTR)) {
- /* Enter the interrupt context, using IACK bus cycle.
- Read the local interrupt vector register. */
- livr = inb (IACK(b->port, BRD_INTR_LEVEL));
- c = b->chan + (livr>>2 & 0xf);
- if (c->type == T_NONE)
- continue;
- switch (livr & 3) {
- case LIV_MODEM: /* modem interrupt */
- ++c->mintr;
- if (c->call_on_msig)
- c->call_on_msig (c);
- outb (MEOIR(c->port), 0);
- break;
- case LIV_EXCEP: /* receive exception */
- case LIV_RXDATA: /* receive interrupt */
- outb (REOIR(c->port), cx_receive_interrupt (c));
- if (c->call_on_rx && c->received_data) {
- c->call_on_rx (c, c->received_data,
- c->received_len);
- c->received_data = 0;
- }
- break;
- case LIV_TXDATA: /* transmit interrupt */
- cx_transmit_interrupt (c);
- outb (TEOIR(c->port), 0);
- break;
- }
- }
-}
-
-/*
- * Register event processing functions
- */
-void cx_register_transmit (cx_chan_t *c,
- void (*func) (cx_chan_t *c, void *attachment, int len))
-{
- c->call_on_tx = func;
-}
-
-void cx_register_receive (cx_chan_t *c,
- void (*func) (cx_chan_t *c, char *data, int len))
-{
- c->call_on_rx = func;
-}
-
-void cx_register_modem (cx_chan_t *c, void (*func) (cx_chan_t *c))
-{
- c->call_on_msig = func;
-}
-
-void cx_register_error (cx_chan_t *c, void (*func) (cx_chan_t *c, int data))
-{
- c->call_on_err = func;
-}
-
-/*
- * Async protocol functions.
- */
-
-/*
- * Enable/disable transmitter.
- */
-void cx_transmitter_ctl (cx_chan_t *c,int start)
-{
- outb (CAR(c->port), c->num & 3);
- cx_cmd (c->port, start ? CCR_ENTX : CCR_DISTX);
-}
-
-/*
- * Discard all data queued in transmitter.
- */
-void cx_flush_transmit (cx_chan_t *c)
-{
- outb (CAR(c->port), c->num & 3);
- cx_cmd (c->port, CCR_CLRTX);
-}
-
-/*
- * Send the XON/XOFF flow control symbol.
- */
-void cx_xflow_ctl (cx_chan_t *c, int on)
-{
- outb (CAR(c->port), c->num & 3);
- outb (STCR(c->port), STC_SNDSPC | (on ? STC_SSPC_1 : STC_SSPC_2));
-}
-
-/*
- * Send the break signal for a given number of milliseconds.
- */
-void cx_send_break (cx_chan_t *c, int msec)
-{
- static unsigned char buf [128];
- unsigned char *p;
-
- p = buf;
- *p++ = 0; /* extended transmit command */
- *p++ = 0x81; /* send break */
-
- if (msec > 10000) /* max 10 seconds */
- msec = 10000;
- if (msec < 10) /* min 10 msec */
- msec = 10;
- while (msec > 0) {
- int ms = 250; /* 250 msec */
- if (ms > msec)
- ms = msec;
- msec -= ms;
- *p++ = 0; /* extended transmit command */
- *p++ = 0x82; /* insert delay */
- *p++ = ms;
- }
- *p++ = 0; /* extended transmit command */
- *p++ = 0x83; /* stop break */
-
- cx_send (c, buf, p-buf, 0);
-}
-
-/*
- * Set async parameters.
- */
-void cx_set_async_param (cx_chan_t *c, int baud, int bits, int parity,
- int stop2, int ignpar, int rtscts,
- int ixon, int ixany, int symstart, int symstop)
-{
- int clock, period;
- cx_cor1_async_t cor1;
-
- /* Set character length and parity mode. */
- BYTE cor1 = 0;
- cor1.charlen = bits - 1;
- cor1.parmode = parity ? PARM_NORMAL : PARM_NOPAR;
- cor1.parity = parity==1 ? PAR_ODD : PAR_EVEN;
- cor1.ignpar = ignpar ? 1 : 0;
-
- /* Enable/disable hardware CTS. */
- c->aopt.cor2.ctsae = rtscts ? 1 : 0;
-
- /* Enable extended transmit command mode.
- * Unfortunately, there is no other method for sending break. */
- c->aopt.cor2.etc = 1;
-
- /* Enable/disable hardware XON/XOFF. */
- c->aopt.cor2.ixon = ixon ? 1 : 0;
- c->aopt.cor2.ixany = ixany ? 1 : 0;
-
- /* Set the number of stop bits. */
- if (stop2)
- c->aopt.cor3.stopb = STOPB_2;
- else
- c->aopt.cor3.stopb = STOPB_1;
-
- /* Disable/enable passing XON/XOFF chars to the host. */
- c->aopt.cor3.scde = ixon ? 1 : 0;
- c->aopt.cor3.flowct = ixon ? FLOWCC_NOTPASS : FLOWCC_PASS;
-
- c->aopt.schr1 = symstart; /* XON */
- c->aopt.schr2 = symstop; /* XOFF */
-
- /* Set current channel number. */
- outb (CAR(c->port), c->num & 3);
-
- /* Set up clock values. */
- if (baud) {
- c->rxbaud = c->txbaud = baud;
-
- /* Receiver. */
- cx_clock (c->oscfreq, c->rxbaud, &clock, &period);
- c->opt.rcor.clk = clock;
- outb (RCOR(c->port), BYTE c->opt.rcor);
- outb (RBPR(c->port), period);
-
- /* Transmitter. */
- cx_clock (c->oscfreq, c->txbaud, &clock, &period);
- c->opt.tcor.clk = clock;
- c->opt.tcor.ext1x = 0;
- outb (TCOR(c->port), BYTE c->opt.tcor);
- outb (TBPR(c->port), period);
- }
- outb (COR2(c->port), BYTE c->aopt.cor2);
- outb (COR3(c->port), BYTE c->aopt.cor3);
- outb (SCHR1(c->port), c->aopt.schr1);
- outb (SCHR2(c->port), c->aopt.schr2);
-
- if (BYTE c->aopt.cor1 != BYTE cor1) {
- BYTE c->aopt.cor1 = BYTE cor1;
- outb (COR1(c->port), BYTE c->aopt.cor1);
- /* Any change to COR1 require reinitialization. */
- /* Unfortunately, it may cause transmitter glitches... */
- cx_cmd (c->port, CCR_INITCH);
- }
-}
-
-/*
- * Set mode: M_ASYNC or M_HDLC.
- * Both receiver and transmitter are disabled.
- */
-int cx_set_mode (cx_chan_t *c, int mode)
-{
- if (mode == M_HDLC) {
- if (c->type == T_ASYNC)
- return -1;
-
- if (c->mode == M_HDLC)
- return 0;
-
- c->mode = M_HDLC;
- } else if (mode == M_ASYNC) {
- if (c->type == T_SYNC_RS232 ||
- c->type == T_SYNC_V35 ||
- c->type == T_SYNC_RS449)
- return -1;
-
- if (c->mode == M_ASYNC)
- return 0;
-
- c->mode = M_ASYNC;
- c->opt.tcor.ext1x = 0;
- c->opt.tcor.llm = 0;
- c->opt.rcor.dpll = 0;
- c->opt.rcor.encod = ENCOD_NRZ;
- if (! c->txbaud || ! c->rxbaud)
- c->txbaud = c->rxbaud = 9600;
- } else
- return -1;
-
- cx_setup_chan (c);
- cx_start_chan (c, 0, 0);
- cx_enable_receive (c, 0);
- cx_enable_transmit (c, 0);
- return 0;
-}
-
-/*
- * Set port type for old models of Sigma
- */
-void cx_set_port (cx_chan_t *c, int iftype)
-{
- if (c->board->type == B_SIGMA_XXX) {
- switch (c->num) {
- case 0:
- if ((c->board->if0type != 0) == (iftype != 0))
- return;
- c->board->if0type = iftype;
- c->board->bcr0 &= ~BCR0_UMASK;
- if (c->board->if0type &&
- (c->type==T_UNIV_RS449 || c->type==T_UNIV_V35))
- c->board->bcr0 |= BCR0_UI_RS449;
- outb (BCR0(c->board->port), c->board->bcr0);
- break;
- case 8:
- if ((c->board->if8type != 0) == (iftype != 0))
- return;
- c->board->if8type = iftype;
- c->board->bcr0b &= ~BCR0_UMASK;
- if (c->board->if8type &&
- (c->type==T_UNIV_RS449 || c->type==T_UNIV_V35))
- c->board->bcr0b |= BCR0_UI_RS449;
- outb (BCR0(c->board->port+0x10), c->board->bcr0b);
- break;
- }
- }
-}
-
-/*
- * Get port type for old models of Sigma
- * -1 Fixed port type or auto detect
- * 0 RS232
- * 1 V35
- * 2 RS449
- */
-int cx_get_port (cx_chan_t *c)
-{
- int iftype;
-
- if (c->board->type == B_SIGMA_XXX) {
- switch (c->num) {
- case 0:
- iftype = c->board->if0type; break;
- case 8:
- iftype = c->board->if8type; break;
- default:
- return -1;
- }
-
- if (iftype)
- switch (c->type) {
- case T_UNIV_V35: return 1;
- case T_UNIV_RS449: return 2;
- default: return -1;
- }
- else
- return 0;
- } else
- return -1;
-}
-
-void cx_intr_off (cx_board_t *b)
-{
- outb (BCR0(b->port), b->bcr0 & ~BCR0_IRQ_MASK);
- if (b->chan[8].port || b->chan[12].port)
- outb (BCR0(b->port+0x10), b->bcr0b & ~BCR0_IRQ_MASK);
-}
-
-void cx_intr_on (cx_board_t *b)
-{
- outb (BCR0(b->port), b->bcr0);
- if (b->chan[8].port || b->chan[12].port)
- outb (BCR0(b->port+0x10), b->bcr0b);
-}
-
-int cx_checkintr (cx_board_t *b)
-{
- return (!(inw (BSR(b->port)) & BSR_NOINTR));
-}
diff --git a/sys/dev/cx/cxddk.h b/sys/dev/cx/cxddk.h
deleted file mode 100644
index 69f069364af3..000000000000
--- a/sys/dev/cx/cxddk.h
+++ /dev/null
@@ -1,488 +0,0 @@
-/*-
- * Defines for Cronyx-Sigma adapter driver.
- *
- * Copyright (C) 1994-2001 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * Copyright (C) 1998-2003 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: cxddk.h,v 1.1.2.1 2003/11/12 17:13:41 rik Exp $
- * $FreeBSD$
- */
-
-#ifndef port_t
-# ifdef _M_ALPHA /* port address on Alpha under */
-# define port_t unsigned long /* Windows NT is 32 bit long */
-# else
-# define port_t unsigned short /* all other architectures */
-# endif /* have 16-bit port addresses */
-#endif
-
-#define NBRD 3 /* the max number of installed boards */
-#define NPORT 32 /* the number of i/o ports per board */
-#define DMABUFSZ 1600
-
-/*
- * Asynchronous channel mode -------------------------------------------------
- */
-
-/* Parity */
-#define PAR_EVEN 0 /* even parity */
-#define PAR_ODD 1 /* odd parity */
-
-/* Parity mode */
-#define PARM_NOPAR 0 /* no parity */
-#define PARM_FORCE 1 /* force parity (odd = force 1, even = 0) */
-#define PARM_NORMAL 2 /* normal parity */
-
-/* Flow control transparency mode */
-#define FLOWCC_PASS 0 /* pass flow ctl chars as exceptions */
-#define FLOWCC_NOTPASS 1 /* don't pass flow ctl chars to the host */
-
-/* Stop bit length */
-#define STOPB_1 2 /* 1 stop bit */
-#define STOPB_15 3 /* 1.5 stop bits */
-#define STOPB_2 4 /* 2 stop bits */
-
-/* Action on break condition */
-#define BRK_INTR 0 /* generate an exception interrupt */
-#define BRK_NULL 1 /* translate to a NULL character */
-#define BRK_RESERVED 2 /* reserved */
-#define BRK_DISCARD 3 /* discard character */
-
-/* Parity/framing error actions */
-#define PERR_INTR 0 /* generate an exception interrupt */
-#define PERR_NULL 1 /* translate to a NULL character */
-#define PERR_IGNORE 2 /* ignore error; char passed as good data */
-#define PERR_DISCARD 3 /* discard error character */
-#define PERR_FFNULL 5 /* translate to FF NULL char */
-
-typedef struct { /* async channel option register 1 */
- unsigned charlen : 4; /* character length, 5..8 */
- unsigned ignpar : 1; /* ignore parity */
- unsigned parmode : 2; /* parity mode */
- unsigned parity : 1; /* parity */
-} cx_cor1_async_t;
-
-typedef struct { /* async channel option register 2 */
- unsigned dsrae : 1; /* DSR automatic enable */
- unsigned ctsae : 1; /* CTS automatic enable */
- unsigned rtsao : 1; /* RTS automatic output enable */
- unsigned rlm : 1; /* remote loopback mode enable */
- unsigned zero : 1;
- unsigned etc : 1; /* embedded transmitter cmd enable */
- unsigned ixon : 1; /* in-band XON/XOFF enable */
- unsigned ixany : 1; /* XON on any character */
-} cx_cor2_async_t;
-
-typedef struct { /* async channel option register 3 */
- unsigned stopb : 3; /* stop bit length */
- unsigned zero : 1;
- unsigned scde : 1; /* special char detection enable */
- unsigned flowct : 1; /* flow control transparency mode */
- unsigned rngde : 1; /* range detect enable */
- unsigned escde : 1; /* extended spec. char detect enable */
-} cx_cor3_async_t;
-
-typedef struct { /* async channel option register 6 */
- unsigned parerr : 3; /* parity/framing error actions */
- unsigned brk : 2; /* action on break condition */
- unsigned inlcr : 1; /* translate NL to CR on input */
- unsigned icrnl : 1; /* translate CR to NL on input */
- unsigned igncr : 1; /* discard CR on input */
-} cx_cor6_async_t;
-
-typedef struct { /* async channel option register 7 */
- unsigned ocrnl : 1; /* translate CR to NL on output */
- unsigned onlcr : 1; /* translate NL to CR on output */
- unsigned zero : 3;
- unsigned fcerr : 1; /* process flow ctl err chars enable */
- unsigned lnext : 1; /* LNext option enable */
- unsigned istrip : 1; /* strip 8-bit on input */
-} cx_cor7_async_t;
-
-typedef struct { /* async channel options */
- cx_cor1_async_t cor1; /* channel option register 1 */
- cx_cor2_async_t cor2; /* channel option register 2 */
- cx_cor3_async_t cor3; /* option register 3 */
- cx_cor6_async_t cor6; /* channel option register 6 */
- cx_cor7_async_t cor7; /* channel option register 7 */
- unsigned char schr1; /* special character register 1 (XON) */
- unsigned char schr2; /* special character register 2 (XOFF) */
- unsigned char schr3; /* special character register 3 */
- unsigned char schr4; /* special character register 4 */
- unsigned char scrl; /* special character range low */
- unsigned char scrh; /* special character range high */
- unsigned char lnxt; /* LNext character */
-} cx_opt_async_t;
-
-/*
- * HDLC channel mode ---------------------------------------------------------
- */
-/* Address field length option */
-#define AFLO_1OCT 0 /* address field is 1 octet in length */
-#define AFLO_2OCT 1 /* address field is 2 octet in length */
-
-/* Clear detect for X.21 data transfer phase */
-#define CLRDET_DISABLE 0 /* clear detect disabled */
-#define CLRDET_ENABLE 1 /* clear detect enabled */
-
-/* Addressing mode */
-#define ADMODE_NOADDR 0 /* no address */
-#define ADMODE_4_1 1 /* 4 * 1 byte */
-#define ADMODE_2_2 2 /* 2 * 2 byte */
-
-/* FCS append */
-#define FCS_NOTPASS 0 /* receive CRC is not passed to the host */
-#define FCS_PASS 1 /* receive CRC is passed to the host */
-
-/* CRC modes */
-#define CRC_INVERT 0 /* CRC is transmitted inverted (CRC V.41) */
-#define CRC_DONT_INVERT 1 /* CRC is not transmitted inverted (CRC-16) */
-
-/* Send sync pattern */
-#define SYNC_00 0 /* send 00h as pad char (NRZI encoding) */
-#define SYNC_AA 1 /* send AAh (Manchester/NRZ encoding) */
-
-/* FCS preset */
-#define FCSP_ONES 0 /* FCS is preset to all ones (CRC V.41) */
-#define FCSP_ZEROS 1 /* FCS is preset to all zeros (CRC-16) */
-
-/* idle mode */
-#define IDLE_FLAG 0 /* idle in flag */
-#define IDLE_MARK 1 /* idle in mark */
-
-/* CRC polynomial select */
-#define POLY_V41 0 /* x^16+x^12+x^5+1 (HDLC, preset to 1) */
-#define POLY_16 1 /* x^16+x^15+x^2+1 (bisync, preset to 0) */
-
-typedef struct { /* hdlc channel option register 1 */
- unsigned ifflags : 4; /* number of inter-frame flags sent */
- unsigned admode : 2; /* addressing mode */
- unsigned clrdet : 1; /* clear detect for X.21 data transfer phase */
- unsigned aflo : 1; /* address field length option */
-} cx_cor1_hdlc_t;
-
-typedef struct { /* hdlc channel option register 2 */
- unsigned dsrae : 1; /* DSR automatic enable */
- unsigned ctsae : 1; /* CTS automatic enable */
- unsigned rtsao : 1; /* RTS automatic output enable */
- unsigned zero1 : 1;
- unsigned crcninv : 1; /* CRC invertion option */
- unsigned zero2 : 1;
- unsigned fcsapd : 1; /* FCS append */
- unsigned zero3 : 1;
-} cx_cor2_hdlc_t;
-
-typedef struct { /* hdlc channel option register 3 */
- unsigned padcnt : 3; /* pad character count */
- unsigned idle : 1; /* idle mode */
- unsigned nofcs : 1; /* FCS disable */
- unsigned fcspre : 1; /* FCS preset */
- unsigned syncpat : 1; /* send sync pattern */
- unsigned sndpad : 1; /* send pad characters before flag enable */
-} cx_cor3_hdlc_t;
-
-typedef struct { /* hdlc channel options */
- cx_cor1_hdlc_t cor1; /* hdlc channel option register 1 */
- cx_cor2_hdlc_t cor2; /* hdlc channel option register 2 */
- cx_cor3_hdlc_t cor3; /* hdlc channel option register 3 */
- unsigned char rfar1; /* receive frame address register 1 */
- unsigned char rfar2; /* receive frame address register 2 */
- unsigned char rfar3; /* receive frame address register 3 */
- unsigned char rfar4; /* receive frame address register 4 */
- unsigned char cpsr; /* CRC polynomial select */
-} cx_opt_hdlc_t;
-
-/*
- * CD2400 channel state structure --------------------------------------------
- */
-
-/* Signal encoding */
-#define ENCOD_NRZ 0 /* NRZ mode */
-#define ENCOD_NRZI 1 /* NRZI mode */
-#define ENCOD_MANCHESTER 2 /* Manchester mode */
-
-/* Clock source */
-#define CLK_0 0 /* clock 0 */
-#define CLK_1 1 /* clock 1 */
-#define CLK_2 2 /* clock 2 */
-#define CLK_3 3 /* clock 3 */
-#define CLK_4 4 /* clock 4 */
-#define CLK_EXT 6 /* external clock */
-#define CLK_RCV 7 /* receive clock */
-
-/* Board type */
-#define B_SIGMA_XXX 0 /* old Sigmas */
-#define B_SIGMA_2X 1 /* Sigma-22 */
-#define B_SIGMA_800 2 /* Sigma-800 */
-
-/* Channel type */
-#define T_NONE 0 /* no channel */
-#define T_ASYNC 1 /* pure asynchronous RS-232 channel */
-#define T_SYNC_RS232 2 /* pure synchronous RS-232 channel */
-#define T_SYNC_V35 3 /* pure synchronous V.35 channel */
-#define T_SYNC_RS449 4 /* pure synchronous RS-449 channel */
-#define T_UNIV_RS232 5 /* sync/async RS-232 channel */
-#define T_UNIV_RS449 6 /* sync/async RS-232/RS-449 channel */
-#define T_UNIV_V35 7 /* sync/async RS-232/V.35 channel */
-#define T_UNIV 8 /* sync/async, unknown interface */
-
-#define M_ASYNC 0 /* asynchronous mode */
-#define M_HDLC 1 /* bit-sync mode (HDLC) */
-
-typedef struct { /* channel option register 4 */
- unsigned thr : 4; /* FIFO threshold */
- unsigned zero : 1;
- unsigned cts_zd : 1; /* detect 1 to 0 transition on the CTS */
- unsigned cd_zd : 1; /* detect 1 to 0 transition on the CD */
- unsigned dsr_zd : 1; /* detect 1 to 0 transition on the DSR */
-} cx_cor4_t;
-
-typedef struct { /* channel option register 5 */
- unsigned rx_thr : 4; /* receive flow control FIFO threshold */
- unsigned zero : 1;
- unsigned cts_od : 1; /* detect 0 to 1 transition on the CTS */
- unsigned cd_od : 1; /* detect 0 to 1 transition on the CD */
- unsigned dsr_od : 1; /* detect 0 to 1 transition on the DSR */
-} cx_cor5_t;
-
-typedef struct { /* receive clock option register */
- unsigned clk : 3; /* receive clock source */
- unsigned encod : 2; /* signal encoding NRZ/NRZI/Manchester */
- unsigned dpll : 1; /* DPLL enable */
- unsigned zero : 1;
- unsigned tlval : 1; /* transmit line value */
-} cx_rcor_t;
-
-typedef struct { /* transmit clock option register */
- unsigned zero1 : 1;
- unsigned llm : 1; /* local loopback mode */
- unsigned zero2 : 1;
- unsigned ext1x : 1; /* external 1x clock mode */
- unsigned zero3 : 1;
- unsigned clk : 3; /* transmit clock source */
-} cx_tcor_t;
-
-typedef struct {
- cx_cor4_t cor4; /* channel option register 4 */
- cx_cor5_t cor5; /* channel option register 5 */
- cx_rcor_t rcor; /* receive clock option register */
- cx_tcor_t tcor; /* transmit clock option register */
-} cx_chan_opt_t;
-
-typedef enum { /* line break mode */
- BRK_IDLE, /* normal line mode */
- BRK_SEND, /* start sending break */
- BRK_STOP, /* stop sending break */
-} cx_break_t;
-
-#define BUS_NORMAL 0 /* normal bus timing */
-#define BUS_FAST 1 /* fast bus timing (Sigma-22 and -800) */
-#define BUS_FAST2 2 /* fast bus timing (Sigma-800) */
-#define BUS_FAST3 3 /* fast bus timing (Sigma-800) */
-
-typedef struct { /* board options */
- unsigned char fast; /* bus master timing (Sigma-22 and -800) */
-} cx_board_opt_t;
-
-#define NCHIP 4 /* the number of controllers per board */
-#define NCHAN 16 /* the number of channels on the board */
-
-typedef struct {
- unsigned char tbuffer [2] [DMABUFSZ];
- unsigned char rbuffer [2] [DMABUFSZ];
-} cx_buf_t;
-
-typedef struct _cx_chan_t {
- struct _cx_board_t *board; /* board pointer */
- unsigned char type; /* channel type */
- unsigned char num; /* channel number, 0..15 */
- port_t port; /* base port address */
- unsigned long oscfreq; /* oscillator frequency in Hz */
- unsigned long rxbaud; /* receiver speed */
- unsigned long txbaud; /* transmitter speed */
- unsigned char mode; /* channel mode */
- cx_chan_opt_t opt; /* common channel options */
- cx_opt_async_t aopt; /* async mode options */
- cx_opt_hdlc_t hopt; /* hdlc mode options */
- unsigned char *arbuf; /* receiver A dma buffer */
- unsigned char *brbuf; /* receiver B dma buffer */
- unsigned char *atbuf; /* transmitter A dma buffer */
- unsigned char *btbuf; /* transmitter B dma buffer */
- unsigned long arphys; /* receiver A phys address */
- unsigned long brphys; /* receiver B phys address */
- unsigned long atphys; /* transmitter A phys address */
- unsigned long btphys; /* transmitter B phys address */
- unsigned char dtr; /* DTR signal value */
- unsigned char rts; /* RTS signal value */
-
- unsigned long rintr; /* receive interrupts */
- unsigned long tintr; /* transmit interrupts */
- unsigned long mintr; /* modem interrupts */
- unsigned long ibytes; /* input bytes */
- unsigned long ipkts; /* input packets */
- unsigned long ierrs; /* input errors */
- unsigned long obytes; /* output bytes */
- unsigned long opkts; /* output packets */
- unsigned long oerrs; /* output errors */
-
- void *sys;
- int debug;
- int debug_shadow;
- void *attach [2];
- char *received_data;
- int received_len;
- int overflow;
-
- void (*call_on_rx) (struct _cx_chan_t*, char*, int);
- void (*call_on_tx) (struct _cx_chan_t*, void*, int);
- void (*call_on_msig) (struct _cx_chan_t*);
- void (*call_on_err) (struct _cx_chan_t*, int);
-
-} cx_chan_t;
-
-typedef struct _cx_board_t {
- unsigned char type; /* board type */
- unsigned char num; /* board number, 0..2 */
- port_t port; /* base board port, 0..3f0 */
- unsigned char irq; /* irq {3 5 7 10 11 12 15} */
- unsigned char dma; /* DMA request {5 6 7} */
- char name[16]; /* board version name */
- unsigned char nuniv; /* number of universal channels */
- unsigned char nsync; /* number of sync. channels */
- unsigned char nasync; /* number of async. channels */
- unsigned char if0type; /* chan0 interface RS-232/RS-449/V.35 */
- unsigned char if8type; /* chan8 interface RS-232/RS-449/V.35 */
- unsigned short bcr0; /* BCR0 image */
- unsigned short bcr0b; /* BCR0b image */
- unsigned short bcr1; /* BCR1 image */
- unsigned short bcr1b; /* BCR1b image */
- cx_board_opt_t opt; /* board options */
- cx_chan_t chan[NCHAN]; /* channel structures */
- void *sys;
-} cx_board_t;
-
-extern long cx_rxbaud, cx_txbaud;
-extern int cx_univ_mode, cx_sync_mode, cx_iftype;
-
-extern cx_chan_opt_t chan_opt_dflt; /* default mode-independent options */
-extern cx_opt_async_t opt_async_dflt; /* default async options */
-extern cx_opt_hdlc_t opt_hdlc_dflt; /* default hdlc options */
-extern cx_board_opt_t board_opt_dflt; /* default board options */
-
-struct _cr_dat_tst;
-int cx_probe_board (port_t port, int irq, int dma);
-void cx_init (cx_board_t *b, int num, port_t port, int irq, int dma);
-void cx_init_board (cx_board_t *b, int num, port_t port, int irq, int dma,
- int chain, int rev, int osc, int mod, int rev2, int osc2, int mod2);
-void cx_init_2x (cx_board_t *b, int num, port_t port, int irq, int dma,
- int rev, int osc);
-void cx_init_800 (cx_board_t *b, int num, port_t port, int irq, int dma,
- int chain);
-int cx_download (port_t port, const unsigned char *firmware, long bits,
- const struct _cr_dat_tst *tst);
-int cx_setup_board (cx_board_t *b, const unsigned char *firmware,
- long bits, const struct _cr_dat_tst *tst);
-void cx_setup_chan (cx_chan_t *c);
-void cx_update_chan (cx_chan_t *c);
-void cx_set_dtr (cx_chan_t *c, int on);
-void cx_set_rts (cx_chan_t *c, int on);
-void cx_led (cx_board_t *b, int on);
-void cx_cmd (port_t base, int cmd);
-void cx_disable_dma (cx_board_t *b);
-void cx_reinit_board (cx_board_t *b);
-int cx_get_dsr (cx_chan_t *c);
-int cx_get_cts (cx_chan_t *c);
-int cx_get_cd (cx_chan_t *c);
-void cx_clock (long hz, long ba, int *clk, int *div);
-
-/* DDK errors */
-#define CX_FRAME 1
-#define CX_CRC 2
-#define CX_OVERRUN 3
-#define CX_OVERFLOW 4
-#define CX_UNDERRUN 5
-#define CX_BREAK 6
-
-/* clock sources */
-#define CX_CLK_INT 0
-#define CX_CLK_EXT 6
-#define CX_CLK_RCV 7
-#define CX_CLK_DPLL 8
-#define CX_CLK_DPLL_EXT 14
-
-/* functions dealing with interrupt vector in DOS */
-#if defined (MSDOS) || defined (__MSDOS__)
-int ddk_int_alloc (int irq, void (*func)(), void *arg);
-int ddk_int_restore (int irq);
-#endif
-
-int cx_probe_irq (cx_board_t *b, int irq);
-void cx_int_handler (cx_board_t *b);
-
-int cx_find (port_t *board_ports);
-int cx_open_board (cx_board_t *b, int num, port_t port, int irq, int dma);
-void cx_close_board (cx_board_t *b);
-
-void cx_start_chan (cx_chan_t *c, cx_buf_t *cb, unsigned long phys);
-
-/*
- Set port type for old models of Sigma
- */
-void cx_set_port (cx_chan_t *c, int iftype);
-
-/*
- Get port type for old models of Sigma
- -1 Fixed port type or auto detect
- 0 RS232
- 1 V35
- 2 RS449
- */
-int cx_get_port (cx_chan_t *c);
-
-void cx_enable_receive (cx_chan_t *c, int on);
-void cx_enable_transmit (cx_chan_t *c, int on);
-int cx_receive_enabled (cx_chan_t *c);
-int cx_transmit_enabled (cx_chan_t *c);
-
-void cx_set_baud (cx_chan_t *, unsigned long baud);
-int cx_set_mode (cx_chan_t *c, int mode);
-void cx_set_loop (cx_chan_t *c, int on);
-void cx_set_nrzi (cx_chan_t *c, int nrzi);
-void cx_set_dpll (cx_chan_t *c, int on);
-
-unsigned long cx_get_baud (cx_chan_t *c);
-int cx_get_loop (cx_chan_t *c);
-int cx_get_nrzi (cx_chan_t *c);
-int cx_get_dpll (cx_chan_t *c);
-
-int cx_send_packet (cx_chan_t *c, char *data, int len, void *attachment);
-int cx_buf_free (cx_chan_t *c);
-
-void cx_register_transmit (cx_chan_t *c,
- void (*func) (cx_chan_t *c, void *attachment, int len));
-void cx_register_receive (cx_chan_t *c,
- void (*func) (cx_chan_t *c, char *data, int len));
-void cx_register_modem (cx_chan_t *c, void (*func) (cx_chan_t *c));
-void cx_register_error (cx_chan_t *c, void (*func) (cx_chan_t *c, int data));
-void cx_intr_off (cx_board_t *b);
-void cx_intr_on (cx_board_t *b);
-int cx_checkintr (cx_board_t *b);
-
-/* Async functions */
-void cx_transmitter_ctl (cx_chan_t *c, int start);
-void cx_flush_transmit (cx_chan_t *c);
-void cx_xflow_ctl (cx_chan_t *c, int on);
-void cx_send_break (cx_chan_t *c, int msec);
-void cx_set_async_param (cx_chan_t *c, int baud, int bits, int parity,
- int stop2, int ignpar, int rtscts,
- int ixon, int ixany, int symstart, int symstop);
diff --git a/sys/dev/cx/cxreg.h b/sys/dev/cx/cxreg.h
deleted file mode 100644
index 70a937d11280..000000000000
--- a/sys/dev/cx/cxreg.h
+++ /dev/null
@@ -1,486 +0,0 @@
-/*-
- * Defines for Cronyx-Sigma adapter, based on Cirrus Logic multiprotocol
- * controller RISC processor CL-CD2400/2401.
- *
- * Copyright (C) 1994-2000 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations permission to use
- * or modify this software as long as this message is kept with the software,
- * all derivative works or modified versions.
- *
- * Cronyx Id: cxreg.h,v 1.1.2.1 2003/11/12 17:13:41 rik Exp $
- * $FreeBSD$
- */
-#define REVCL_MIN 7 /* CD2400 min. revision number G */
-#define REVCL_MAX 13 /* CD2400 max. revision number M */
-#define REVCL31_MIN 0x33 /* CD2431 min. revision number C */
-#define REVCL31_MAX 0x34 /* CD2431 max. revision number D */
-
-#define BRD_INTR_LEVEL 0x5a /* interrupt level (arbitrary PILR value) */
-
-#define CS0(p) ((p) | 0x8000) /* chip select 0 */
-#define CS1(p) ((p) | 0xc000) /* chip select 1 */
-#define CS1A(p) ((p) | 0x8010) /* chip select 1 for agp-compatible models */
-#define BSR(p) (p) /* board status register, read only */
-#define BCR0(p) (p) /* board command register 0, write only */
-#define BCR1(p) ((p) | 0x2000) /* board command register 1, write only */
-
-/*
- * For Sigma-800 only.
- */
-#define BDET(p) ((p) | 0x2000) /* board detection register, read only */
-#define BCR2(p) ((p) | 0x4000) /* board command register 2, write only */
-
-/*
- * Chip register address, B is chip base port, R is chip register number.
- */
-#define R(b,r) ((b) | (((r)<<6 & 0x3c00) | ((r) & 0xf)))
-
-/*
- * Interrupt acknowledge register, P is board port, L is interrupt level,
- * as prodrammed in PILR.
- */
-#define IACK(p,l) (R(p,l) | 0x4000)
-
-/*
- * Global registers.
- */
-#define GFRCR(b) R(b,0x82) /* global firmware revision code register */
-#define CAR(b) R(b,0xec) /* channel access register */
-
-/*
- * Option registers.
- */
-#define CMR(b) R(b,0x18) /* channel mode register */
-#define COR1(b) R(b,0x13) /* channel option register 1 */
-#define COR2(b) R(b,0x14) /* channel option register 2 */
-#define COR3(b) R(b,0x15) /* channel option register 3 */
-#define COR4(b) R(b,0x16) /* channel option register 4 */
-#define COR5(b) R(b,0x17) /* channel option register 5 */
-#define COR6(b) R(b,0x1b) /* channel option register 6 */
-#define COR7(b) R(b,0x04) /* channel option register 7 */
-#define SCHR1(b) R(b,0x1c) /* special character register 1 */
-#define SCHR2(b) R(b,0x1d) /* special character register 2 */
-#define SCHR3(b) R(b,0x1e) /* special character register 3 */
-#define SCHR4(b) R(b,0x1f) /* special character register 4 */
-#define SCRL(b) R(b,0x20) /* special character range low */
-#define SCRH(b) R(b,0x21) /* special character range high */
-#define LNXT(b) R(b,0x2d) /* LNext character */
-#define RFAR1(b) R(b,0x1c) /* receive frame address register 1 */
-#define RFAR2(b) R(b,0x1d) /* receive frame address register 2 */
-#define RFAR3(b) R(b,0x1e) /* receive frame address register 3 */
-#define RFAR4(b) R(b,0x1f) /* receive frame address register 4 */
-#define CPSR(b) R(b,0xd4) /* CRC polynomial select register */
-
-/*
- * Bit rate and clock option registers.
- */
-#define RBPR(b) R(b,0xc9) /* receive baud rate period register */
-#define RCOR(b) R(b,0xca) /* receive clock option register */
-#define TBPR(b) R(b,0xc1) /* transmit baud rate period register */
-#define TCOR(b) R(b,0xc2) /* receive clock option register */
-
-/*
- * Channel command and status registers.
- */
-#define CCR(b) R(b,0x10) /* channel command register */
-#define STCR(b) R(b,0x11) /* special transmit command register */
-#define CSR(b) R(b,0x19) /* channel status register */
-#define MSVR(b) R(b,0xdc) /* modem signal value register */
-#define MSVR_RTS(b) R(b,0xdc) /* modem RTS setup register */
-#define MSVR_DTR(b) R(b,0xdd) /* modem DTR setup register */
-
-/*
- * Interrupt registers.
- */
-#define LIVR(b) R(b,0x0a) /* local interrupt vector register */
-#define IER(b) R(b,0x12) /* interrupt enable register */
-#define LICR(b) R(b,0x25) /* local interrupting channel register */
-#define STK(b) R(b,0xe0) /* stack register */
-
-/*
- * Receive interrupt registers.
- */
-#define RPILR(b) R(b,0xe3) /* receive priority interrupt level register */
-#define RIR(b) R(b,0xef) /* receive interrupt register */
-#define RISR(b) R(b,0x8a) /* receive interrupt status register */
-#define RISRL(b) R(b,0x8a) /* receive interrupt status register low */
-#define RISRH(b) R(b,0x8b) /* receive interrupt status register high */
-#define RFOC(b) R(b,0x33) /* receive FIFO output count */
-#define RDR(b) R(b,0xf8) /* receive data register */
-#define REOIR(b) R(b,0x87) /* receive end of interrupt register */
-
-/*
- * Transmit interrupt registers.
- */
-#define TPILR(b) R(b,0xe2) /* transmit priority interrupt level reg */
-#define TIR(b) R(b,0xee) /* transmit interrupt register */
-#define TISR(b) R(b,0x89) /* transmit interrupt status register */
-#define TFTC(b) R(b,0x83) /* transmit FIFO transfer count */
-#define TDR(b) R(b,0xf8) /* transmit data register */
-#define TEOIR(b) R(b,0x86) /* transmit end of interrupt register */
-
-/*
- * Modem interrupt registers.
- */
-#define MPILR(b) R(b,0xe1) /* modem priority interrupt level register */
-#define MIR(b) R(b,0xed) /* modem interrupt register */
-#define MISR(b) R(b,0x88) /* modem/timer interrupt status register */
-#define MEOIR(b) R(b,0x85) /* modem end of interrupt register */
-
-/*
- * DMA registers.
- */
-#define DMR(b) R(b,0xf4) /* DMA mode register */
-#define BERCNT(b) R(b,0x8d) /* bus error retry count */
-#define DMABSTS(b) R(b,0x1a) /* DMA buffer status */
-
-/*
- * DMA receive registers.
- */
-#define ARBADRL(b) R(b,0x40) /* A receive buffer address lower */
-#define ARBADRU(b) R(b,0x42) /* A receive buffer address upper */
-#define BRBADRL(b) R(b,0x44) /* B receive buffer address lower */
-#define BRBADRU(b) R(b,0x46) /* B receive buffer address upper */
-#define ARBCNT(b) R(b,0x48) /* A receive buffer byte count */
-#define BRBCNT(b) R(b,0x4a) /* B receive buffer byte count */
-#define ARBSTS(b) R(b,0x4c) /* A receive buffer status */
-#define BRBSTS(b) R(b,0x4d) /* B receive buffer status */
-#define RCBADRL(b) R(b,0x3c) /* receive current buffer address lower */
-#define RCBADRU(b) R(b,0x3e) /* receive current buffer address upper */
-
-/*
- * DMA transmit registers.
- */
-#define ATBADRL(b) R(b,0x50) /* A transmit buffer address lower */
-#define ATBADRU(b) R(b,0x52) /* A transmit buffer address upper */
-#define BTBADRL(b) R(b,0x54) /* B transmit buffer address lower */
-#define BTBADRU(b) R(b,0x56) /* B transmit buffer address upper */
-#define ATBCNT(b) R(b,0x58) /* A transmit buffer byte count */
-#define BTBCNT(b) R(b,0x5a) /* B transmit buffer byte count */
-#define ATBSTS(b) R(b,0x5c) /* A transmit buffer status */
-#define BTBSTS(b) R(b,0x5d) /* B transmit buffer status */
-#define TCBADRL(b) R(b,0x38) /* transmit current buffer address lower */
-#define TCBADRU(b) R(b,0x3a) /* transmit current buffer address upper */
-
-/*
- * Timer registers.
- */
-#define TPR(b) R(b,0xd8) /* timer period register */
-#define RTPR(b) R(b,0x26) /* receive timeout period register */
-#define RTPRL(b) R(b,0x26) /* receive timeout period register low */
-#define RTPTH(b) R(b,0x27) /* receive timeout period register high */
-#define GT1(b) R(b,0x28) /* general timer 1 */
-#define GT1L(b) R(b,0x28) /* general timer 1 low */
-#define GT1H(b) R(b,0x29) /* general timer 1 high */
-#define GT2(b) R(b,0x2a) /* general timer 2 */
-#define TTR(b) R(b,0x2a) /* transmit timer register */
-
-/*
- * Board status register bits, for all models.
- */
-#define BSR_NOINTR 0x01 /* no interrupt pending flag */
-#define BSR_NOCHAIN 0x80 /* no daisy chained board, all but Sigma-22 */
-
-/*
- * For old Sigmas only.
- */
-#define BSR_VAR_MASK 0x66 /* adapter variant mask */
-#define BSR_OSC_MASK 0x18 /* oscillator frequency mask */
-#define BSR_OSC_20 0x18 /* 20 MHz */
-#define BSR_OSC_18432 0x10 /* 18.432 MHz */
-
-#define BSR_NODSR(n) (0x100 << (n)) /* DSR from channels 0-3, inverted */
-#define BSR_NOCD(n) (0x1000 << (n)) /* CD from channels 0-3, inverted */
-
-/*
- * Board status register bits for Sigma-2x.
- */
-#define BSR2X_OSC_33 0x08 /* oscillator 33/20 MHz bit */
-#define BSR2X_VAR_MASK 0x30 /* Sigma-2x variant mask */
-
-/*
- * Board status register bits for Sigma-800.
- */
-#define BSR800_NU0 0x02 /* no channels 0-3 installed */
-#define BSR800_NU1 0x04 /* no channels 4-7 installed */
-#define BSR800_LERR 0x08 /* firmware load error */
-#define BSR800_MIRQ 0x10 /* modem IRQ active */
-#define BSR800_TIRQ 0x20 /* transmit IRQ active */
-#define BSR800_RIRQ 0x40 /* receive IRQ active */
-
-#define BDET_IB 0x08 /* identification bit */
-#define BDET_IB_NEG 0x80 /* negated identification bit */
-
-/*
- * Sigma-800 control register 2 bits.
- */
-#define BCR2_BUS0 0x01 /* bus timing control */
-#define BCR2_BUS1 0x02 /* bus timing control */
-#define BCR2_TMS 0x08 /* firmware download signal */
-#define BCR2_TDI 0x80 /* firmware download signal */
-
-/*
- * Board revision mask.
- */
-#define BSR_REV_MASK (BSR_OSC_MASK|BSR_VAR_MASK|BSR_NOCHAIN)
-#define BSR2X_REV_MASK (BSR_OSC_MASK|BSR_VAR_MASK)
-
-/*
- * Sigma-2x variants.
- */
-#define CRONYX_22 0x20
-#define CRONYX_24 0x00
-
-/*
- * Sigma-XXX variants.
- */
-#define CRONYX_100 0x64
-#define CRONYX_400 0x62
-#define CRONYX_500 0x60
-#define CRONYX_410 0x24
-#define CRONYX_810 0x20
-#define CRONYX_410s 0x04
-#define CRONYX_810s 0x00
-#define CRONYX_440 0x44
-#define CRONYX_840 0x40
-#define CRONYX_401 0x26
-#define CRONYX_801 0x22
-#define CRONYX_401s 0x06
-#define CRONYX_801s 0x02
-#define CRONYX_404 0x46
-#define CRONYX_703 0x42
-
-/*
- * Board control register 0 bits.
- */
-#define BCR0_IRQ_DIS 0x00 /* no interrupt generated */
-#define BCR0_IRQ_3 0x01 /* select IRQ number 3 */
-#define BCR0_IRQ_5 0x02 /* select IRQ number 5 */
-#define BCR0_IRQ_7 0x03 /* select IRQ number 7 */
-#define BCR0_IRQ_10 0x04 /* select IRQ number 10 */
-#define BCR0_IRQ_11 0x05 /* select IRQ number 11 */
-#define BCR0_IRQ_12 0x06 /* select IRQ number 12 */
-#define BCR0_IRQ_15 0x07 /* select IRQ number 15 */
-#define BCR0_IRQ_MASK 0x07 /* irq select mask */
-
-#define BCR0_DMA_DIS 0x00 /* no interrupt generated */
-#define BCR0_DMA_5 0x10 /* select DMA channel 5 */
-#define BCR0_DMA_6 0x20 /* select DMA channel 6 */
-#define BCR0_DMA_7 0x30 /* select DMA channel 7 */
-#define BCR0_DMA_MASK 0x30 /* drq select mask */
-
-/* For old Sigmas only. */
-#define BCR0_NORESET 0x08 /* CD2400 reset flag (inverted) */
-
-#define BCR0_UM_ASYNC 0x00 /* channel 0 mode - async */
-#define BCR0_UM_SYNC 0x80 /* channel 0 mode - sync */
-#define BCR0_UI_RS232 0x00 /* channel 0 interface - RS-232 */
-#define BCR0_UI_RS449 0x40 /* channel 0 interface - RS-449/V.35 */
-#define BCR0_UMASK 0xc0 /* channel 0 interface mask */
-
-/* For Sigma-22 only. */
-#define BCR02X_FAST 0x40 /* fast bus timing */
-#define BCR02X_LED 0x80 /* LED control */
-
-/* For Sigma-800 only. */
-#define BCR0800_TCK 0x80 /* firmware download signal */
-
-/*
- * Board control register 1 bits.
- */
-/* For old Sigmas only. */
-#define BCR1_DTR(n) (0x100 << (n)) /* DTR for channels 0-3 sync */
-
-/* For Sigma-800 only. */
-#define BCR1800_DTR(n) (1 << ((n) & 7)) /* DTR for channels 0-7 sync */
-
-/*
- * Channel commands (CCR).
- */
-#define CCR_CLRCH 0x40 /* clear channel */
-#define CCR_INITCH 0x20 /* initialize channel */
-#define CCR_RSTALL 0x10 /* reset all channels */
-#define CCR_ENTX 0x08 /* enable transmitter */
-#define CCR_DISTX 0x04 /* disable transmitter */
-#define CCR_ENRX 0x02 /* enable receiver */
-#define CCR_DISRX 0x01 /* disable receiver */
-#define CCR_CLRT1 0xc0 /* clear timer 1 */
-#define CCR_CLRT2 0xa0 /* clear timer 2 */
-#define CCR_CLRRCV 0x90 /* clear receiver */
-#define CCR_CLRTX 0x88 /* clear transmitter */
-
-/*
- * Interrupt enable register (IER) bits.
- */
-#define IER_MDM 0x80 /* modem status changed */
-#define IER_RET 0x20 /* receive exception timeout */
-#define IER_RXD 0x08 /* data received */
-#define IER_TIMER 0x04 /* timer expired */
-#define IER_TXMPTY 0x02 /* transmitter empty */
-#define IER_TXD 0x01 /* data transmitted */
-
-/*
- * Modem signal values register bits (MSVR).
- */
-#define MSV_DSR 0x80 /* state of Data Set Ready input */
-#define MSV_CD 0x40 /* state of Carrier Detect input */
-#define MSV_CTS 0x20 /* state of Clear to Send input */
-#define MSV_TXCOUT 0x10 /* TXCout/DTR pin output flag */
-#define MSV_PORTID 0x04 /* device is CL-CD2401 (not 2400) */
-#define MSV_DTR 0x02 /* state of Data Terminal Ready output */
-#define MSV_RTS 0x01 /* state of Request to Send output */
-#define MSV_BITS "\20\1rts\2dtr\3cd2400\5txcout\6cts\7cd\10dsr"
-
-/*
- * DMA buffer status register bits (DMABSTS).
- */
-#define DMABSTS_TDALIGN 0x80 /* internal data alignment in transmit FIFO */
-#define DMABSTS_RSTAPD 0x40 /* reset append mode */
-#define DMABSTS_CRTTBUF 0x20 /* internal current transmit buffer in use */
-#define DMABSTS_APPEND 0x10 /* append buffer is in use */
-#define DMABSTS_NTBUF 0x08 /* next transmit buffer is B (not A) */
-#define DMABSTS_TBUSY 0x04 /* current transmit buffer is in use */
-#define DMABSTS_NRBUF 0x02 /* next receive buffer is B (not A) */
-#define DMABSTS_RBUSY 0x01 /* current receive buffer is in use */
-
-/*
- * Buffer status register bits ([AB][RT]BSTS).
- */
-#define BSTS_BUSERR 0x80 /* bus error */
-#define BSTS_EOFR 0x40 /* end of frame */
-#define BSTS_EOBUF 0x20 /* end of buffer */
-#define BSTS_APPEND 0x08 /* append mode */
-#define BSTS_INTR 0x02 /* interrupt required */
-#define BSTS_OWN24 0x01 /* buffer is (free to be) used by CD2400 */
-#define BSTS_BITS "\20\1own24\2intr\4append\6eobuf\7eofr\10buserr"
-
-/*
- * Receive interrupt status register (RISR) bits.
- */
-#define RIS_OVERRUN 0x0008 /* overrun error */
-#define RIS_BB 0x0800 /* buffer B status (not A) */
-#define RIS_EOBUF 0x2000 /* end of buffer reached */
-#define RIS_EOFR 0x4000 /* frame reception complete */
-#define RIS_BUSERR 0x8000 /* bus error */
-
-#define RISH_CLRDCT 0x0001 /* X.21 clear detect */
-#define RISH_RESIND 0x0004 /* residual indication */
-#define RISH_CRCERR 0x0010 /* CRC error */
-#define RISH_RXABORT 0x0020 /* abort sequence received */
-#define RISH_EOFR 0x0040 /* complete frame received */
-#define RISH_BITS "\20\1clrdct\3resind\4overrun\5crcerr\6rxabort\7eofr\14bb\16eobuf\17eofr\20buserr"
-
-#define RISA_BREAK 0x0001 /* break signal detected */
-#define RISA_FRERR 0x0002 /* frame error (bad stop bits) */
-#define RISA_PARERR 0x0004 /* parity error */
-#define RISA_SCMASK 0x0070 /* special character detect mask */
-#define RISA_SCHR1 0x0010 /* special character 1 detected */
-#define RISA_SCHR2 0x0020 /* special character 2 detected */
-#define RISA_SCHR3 0x0030 /* special character 3 detected */
-#define RISA_SCHR4 0x0040 /* special character 4 detected */
-#define RISA_SCRANGE 0x0070 /* special character in range detected */
-#define RISA_TIMEOUT 0x0080 /* receive timeout, no data */
-#define RISA_BITS "\20\1break\2frerr\3parerr\4overrun\5schr1\6schr2\7schr4\10timeout\14bb\16eobuf\17eofr\20buserr"
-
-#define RISB_CRCERR 0x0010 /* CRC error */
-#define RISB_RXABORT 0x0020 /* abort sequence received */
-#define RISB_EOFR 0x0040 /* complete frame received */
-
-#define RISX_LEADCHG 0x0001 /* CTS lead change */
-#define RISX_PARERR 0x0004 /* parity error */
-#define RISX_SCMASK 0x0070 /* special character detect mask */
-#define RISX_SCHR1 0x0010 /* special character 1 detected */
-#define RISX_SCHR2 0x0020 /* special character 2 detected */
-#define RISX_SCHR3 0x0030 /* special character 3 detected */
-#define RISX_ALLZERO 0x0040 /* all 0 condition detected */
-#define RISX_ALLONE 0x0050 /* all 1 condition detected */
-#define RISX_ALTOZ 0x0060 /* alternating 1 0 condition detected */
-#define RISX_SYN 0x0070 /* SYN detected */
-#define RISX_LEAD 0x0080 /* leading value */
-
-/*
- * Channel mode register (CMR) bits.
- */
-#define CMR_RXDMA 0x80 /* DMA receive transfer mode */
-#define CMR_TXDMA 0x40 /* DMA transmit transfer mode */
-#define CMR_HDLC 0x00 /* HDLC protocol mode */
-#define CMR_BISYNC 0x01 /* BISYNC protocol mode */
-#define CMR_ASYNC 0x02 /* ASYNC protocol mode */
-#define CMR_X21 0x03 /* X.21 protocol mode */
-
-/*
- * Modem interrupt status register (MISR) bits.
- */
-#define MIS_CDSR 0x80 /* DSR changed */
-#define MIS_CCD 0x40 /* CD changed */
-#define MIS_CCTS 0x20 /* CTS changed */
-#define MIS_CGT2 0x02 /* GT2 timer expired */
-#define MIS_CGT1 0x01 /* GT1 timer expired */
-#define MIS_BITS "\20\1gt1\2gt2\6ccts\7ccd\10cdsr"
-
-/*
- * Transmit interrupt status register (TISR) bits.
- */
-#define TIS_BUSERR 0x80 /* Bus error */
-#define TIS_EOFR 0x40 /* End of frame */
-#define TIS_EOBUF 0x20 /* end of transmit buffer reached */
-#define TIS_UNDERRUN 0x10 /* transmit underrun */
-#define TIS_BB 0x08 /* buffer B status (not A) */
-#define TIS_TXEMPTY 0x02 /* transmitter empty */
-#define TIS_TXDATA 0x01 /* transmit data below threshold */
-#define TIS_BITS "\20\1txdata\2txempty\4bb\5underrun\6eobuf\7eofr\10buserr"
-
-/*
- * Local interrupt vector register (LIVR) bits.
- */
-#define LIV_EXCEP 0
-#define LIV_MODEM 1
-#define LIV_TXDATA 2
-#define LIV_RXDATA 3
-
-/*
- * Transmit end of interrupt registers (TEOIR) bits.
- */
-#define TEOI_TERMBUFF 0x80 /* force current buffer to be discarded */
-#define TEOI_EOFR 0x40 /* end of frame in interrupt mode */
-#define TEOI_SETTM2 0x20 /* set general timer 2 in sync mode */
-#define TEOI_SETTM1 0x10 /* set general timer 1 in sync mode */
-#define TEOI_NOTRANSF 0x08 /* no transfer of data on this interrupt */
-
-/*
- * Receive end of interrupt registers (REOIR) bits.
- */
-#define REOI_TERMBUFF 0x80 /* force current buffer to be terminated */
-#define REOI_DISCEXC 0x40 /* discard exception character */
-#define REOI_SETTM2 0x20 /* set general timer 2 */
-#define REOI_SETTM1 0x10 /* set general timer 1 */
-#define REOI_NOTRANSF 0x08 /* no transfer of data */
-#define REOI_GAP_MASK 0x07 /* optional gap size to leave in buffer */
-
-/*
- * Special transmit command register (STCR) bits.
- */
-#define STC_ABORTTX 0x40 /* abort transmission (HDLC mode) */
-#define STC_APPDCMP 0x20 /* append complete (async DMA mode) */
-#define STC_SNDSPC 0x08 /* send special characters (async mode) */
-#define STC_SSPC_MASK 0x07 /* special character select */
-#define STC_SSPC_1 0x01 /* send special character #1 */
-#define STC_SSPC_2 0x02 /* send special character #2 */
-#define STC_SSPC_3 0x03 /* send special character #3 */
-#define STC_SSPC_4 0x04 /* send special character #4 */
-
-/*
- * Channel status register (CSR) bits, asynchronous mode.
- */
-#define CSRA_RXEN 0x80 /* receiver enable */
-#define CSRA_RXFLOFF 0x40 /* receiver flow off */
-#define CSRA_RXFLON 0x20 /* receiver flow on */
-#define CSRA_TXEN 0x08 /* transmitter enable */
-#define CSRA_TXFLOFF 0x04 /* transmitter flow off */
-#define CSRA_TXFLON 0x02 /* transmitter flow on */
-#define CSRA_BITS "\20\2txflon\3txfloff\4txen\6rxflon\7rxfloff\10rxen"
diff --git a/sys/dev/cx/if_cx.c b/sys/dev/cx/if_cx.c
deleted file mode 100644
index b7f6e08fead0..000000000000
--- a/sys/dev/cx/if_cx.c
+++ /dev/null
@@ -1,2546 +0,0 @@
-/*-
- * Cronyx-Sigma adapter driver for FreeBSD.
- * Supports PPP/HDLC and Cisco/HDLC protocol in synchronous mode,
- * and asynchronous channels with full modem control.
- * Keepalive protocol implemented in both Cisco and PPP modes.
- *
- * Copyright (C) 1994-2002 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * Copyright (C) 1999-2004 Cronyx Engineering.
- * Rewritten on DDK, ported to NETGRAPH, rewritten for FreeBSD 3.x-5.x by
- * Kurakin Roman, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations a permission to use,
- * modify and redistribute this software in source and binary forms,
- * as long as this message is kept with the software, all derivative
- * works or modified versions.
- *
- * Cronyx Id: if_cx.c,v 1.1.2.34 2004/06/23 17:09:13 rik Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/priv.h>
-#include <sys/proc.h>
-#include <sys/mbuf.h>
-#include <sys/sockio.h>
-#include <sys/malloc.h>
-#include <sys/socket.h>
-#include <sys/sysctl.h>
-#include <sys/conf.h>
-#include <sys/errno.h>
-#include <sys/serial.h>
-#include <sys/tty.h>
-#include <sys/bus.h>
-#include <machine/bus.h>
-#include <sys/rman.h>
-#include <isa/isavar.h>
-#include <sys/fcntl.h>
-#include <sys/interrupt.h>
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <net/if.h>
-#include <net/if_var.h>
-#include <machine/cpufunc.h>
-#include <machine/cserial.h>
-#include <machine/resource.h>
-#include <dev/cx/machdep.h>
-#include <dev/cx/cxddk.h>
-#include <dev/cx/cronyxfw.h>
-#include "opt_ng_cronyx.h"
-#ifdef NETGRAPH_CRONYX
-# include "opt_netgraph.h"
-# include <netgraph/ng_message.h>
-# include <netgraph/netgraph.h>
-# include <dev/cx/ng_cx.h>
-#else
-# include <net/if_types.h>
-# include <net/if_sppp.h>
-# define PP_CISCO IFF_LINK2
-# include <net/bpf.h>
-#endif
-
-#define NCX 1
-
-/* If we don't have Cronyx's sppp version, we don't have fr support via sppp */
-#ifndef PP_FR
-#define PP_FR 0
-#endif
-
-#define CX_DEBUG(d,s) ({if (d->chan->debug) {\
- printf ("%s: ", d->name); printf s;}})
-#define CX_DEBUG2(d,s) ({if (d->chan->debug>1) {\
- printf ("%s: ", d->name); printf s;}})
-
-#define CX_LOCK_NAME "cxX"
-
-#define CX_LOCK(_bd) mtx_lock (&(_bd)->cx_mtx)
-#define CX_UNLOCK(_bd) mtx_unlock (&(_bd)->cx_mtx)
-#define CX_LOCK_ASSERT(_bd) mtx_assert (&(_bd)->cx_mtx, MA_OWNED)
-
-typedef struct _async_q {
- int beg;
- int end;
- #define BF_SZ 14400
- int buf[BF_SZ+1];
-} async_q;
-
-#define AQ_GSZ(q) ((BF_SZ + (q)->end - (q)->beg)%BF_SZ)
-#define AQ_PUSH(q,c) {*((q)->buf + (q)->end) = c;\
- (q)->end = ((q)->end + 1)%BF_SZ;}
-#define AQ_POP(q,c) {c = *((q)->buf + (q)->beg);\
- (q)->beg = ((q)->beg + 1)%BF_SZ;}
-
-static void cx_identify __P((driver_t *, device_t));
-static int cx_probe __P((device_t));
-static int cx_attach __P((device_t));
-static int cx_detach __P((device_t));
-static t_open_t cx_topen;
-static t_modem_t cx_tmodem;
-static t_close_t cx_tclose;
-
-static device_method_t cx_isa_methods [] = {
- DEVMETHOD(device_identify, cx_identify),
- DEVMETHOD(device_probe, cx_probe),
- DEVMETHOD(device_attach, cx_attach),
- DEVMETHOD(device_detach, cx_detach),
-
- DEVMETHOD_END
-};
-
-typedef struct _cx_dma_mem_t {
- unsigned long phys;
- void *virt;
- size_t size;
- bus_dma_tag_t dmat;
- bus_dmamap_t mapp;
-} cx_dma_mem_t;
-
-typedef struct _drv_t {
- char name [8];
- cx_chan_t *chan;
- cx_board_t *board;
- cx_dma_mem_t dmamem;
- struct tty *tty;
- struct callout dcd_timeout_handle;
- unsigned callout;
- unsigned lock;
- int open_dev;
- int cd;
- int running;
-#ifdef NETGRAPH
- char nodename [NG_NODESIZ];
- hook_p hook;
- hook_p debug_hook;
- node_p node;
- struct ifqueue lo_queue;
- struct ifqueue hi_queue;
-#else
- struct ifqueue queue;
- struct ifnet *ifp;
-#endif
- short timeout;
- struct callout timeout_handle;
- struct cdev *devt;
- async_q aqueue;
-#define CX_READ 1
-#define CX_WRITE 2
- int intr_action;
- short atimeout;
-} drv_t;
-
-typedef struct _bdrv_t {
- cx_board_t *board;
- struct resource *base_res;
- struct resource *drq_res;
- struct resource *irq_res;
- int base_rid;
- int drq_rid;
- int irq_rid;
- void *intrhand;
- drv_t channel [NCHAN];
- struct mtx cx_mtx;
-} bdrv_t;
-
-static driver_t cx_isa_driver = {
- "cx",
- cx_isa_methods,
- sizeof (bdrv_t),
-};
-
-static devclass_t cx_devclass;
-
-extern long csigma_fw_len;
-extern const char *csigma_fw_version;
-extern const char *csigma_fw_date;
-extern const char *csigma_fw_copyright;
-extern const cr_dat_tst_t csigma_fw_tvec[];
-extern const u_char csigma_fw_data[];
-static void cx_oproc (struct tty *tp);
-static int cx_param (struct tty *tp, struct termios *t);
-static void cx_stop (struct tty *tp, int flag);
-static void cx_receive (cx_chan_t *c, char *data, int len);
-static void cx_transmit (cx_chan_t *c, void *attachment, int len);
-static void cx_error (cx_chan_t *c, int data);
-static void cx_modem (cx_chan_t *c);
-static void cx_up (drv_t *d);
-static void cx_start (drv_t *d);
-static void cx_softintr (void *);
-static void *cx_fast_ih;
-static void cx_down (drv_t *d);
-static void cx_watchdog (drv_t *d);
-static void cx_watchdog_timer (void *arg);
-static void cx_carrier (void *arg);
-
-#ifdef NETGRAPH
-extern struct ng_type typestruct;
-#else
-static void cx_ifstart (struct ifnet *ifp);
-static void cx_tlf (struct sppp *sp);
-static void cx_tls (struct sppp *sp);
-static int cx_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data);
-static void cx_initialize (void *softc);
-#endif
-
-static cx_board_t *adapter [NCX];
-static drv_t *channel [NCX*NCHAN];
-static struct callout led_timo [NCX];
-static struct callout timeout_handle;
-
-static int cx_open (struct cdev *dev, int flag, int mode, struct thread *td);
-static int cx_close (struct cdev *dev, int flag, int mode, struct thread *td);
-static int cx_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td);
-static struct cdevsw cx_cdevsw = {
- .d_version = D_VERSION,
- .d_open = cx_open,
- .d_close = cx_close,
- .d_ioctl = cx_ioctl,
- .d_name = "cx",
- .d_flags = D_TTY,
-};
-
-static int MY_SOFT_INTR;
-
-/*
- * Make an mbuf from data.
- */
-static struct mbuf *makembuf (void *buf, u_int len)
-{
- struct mbuf *m, *o, *p;
-
- MGETHDR (m, M_NOWAIT, MT_DATA);
-
- if (! m)
- return 0;
-
- if (len >= MINCLSIZE)
- MCLGET (m, M_NOWAIT);
-
- m->m_pkthdr.len = len;
- m->m_len = 0;
-
- p = m;
- while (len) {
- u_int n = M_TRAILINGSPACE (p);
- if (n > len)
- n = len;
- if (! n) {
- /* Allocate new mbuf. */
- o = p;
- MGET (p, M_NOWAIT, MT_DATA);
- if (! p) {
- m_freem (m);
- return 0;
- }
- if (len >= MINCLSIZE)
- MCLGET (p, M_NOWAIT);
- p->m_len = 0;
- o->m_next = p;
-
- n = M_TRAILINGSPACE (p);
- if (n > len)
- n = len;
- }
- bcopy (buf, mtod (p, caddr_t) + p->m_len, n);
-
- p->m_len += n;
- buf = n + (char*) buf;
- len -= n;
- }
- return m;
-}
-
-/*
- * Recover after lost transmit interrupts.
- */
-static void cx_timeout (void *arg)
-{
- drv_t *d;
- int s, i, k;
-
- for (i = 0; i < NCX; i++) {
- if (adapter[i] == NULL)
- continue;
- for (k = 0; k < NCHAN; ++k) {
- d = channel[i * NCHAN + k];
- if (! d)
- continue;
- s = splhigh ();
- CX_LOCK ((bdrv_t *)d->board->sys);
- if (d->atimeout == 1 && d->tty && d->tty->t_state & TS_BUSY) {
- d->tty->t_state &= ~TS_BUSY;
- if (d->tty->t_dev) {
- d->intr_action |= CX_WRITE;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
- CX_DEBUG (d, ("cx_timeout\n"));
- }
- if (d->atimeout)
- d->atimeout--;
- CX_UNLOCK ((bdrv_t *)d->board->sys);
- splx (s);
- }
- }
- callout_reset (&timeout_handle, hz*5, cx_timeout, 0);
-}
-
-static void cx_led_off (void *arg)
-{
- cx_board_t *b = arg;
- bdrv_t *bd = b->sys;
- int s;
-
- s = splhigh ();
- CX_LOCK (bd);
- cx_led (b, 0);
- CX_UNLOCK (bd);
- splx (s);
-}
-
-/*
- * Activate interrupt handler from DDK.
- */
-static void cx_intr (void *arg)
-{
- bdrv_t *bd = arg;
- cx_board_t *b = bd->board;
-#ifndef NETGRAPH
- int i;
-#endif
- int s = splhigh ();
-
- CX_LOCK (bd);
- /* Turn LED on. */
- cx_led (b, 1);
-
- cx_int_handler (b);
-
- /* Turn LED off 50 msec later. */
- callout_reset (&led_timo[b->num], hz/20, cx_led_off, b);
- CX_UNLOCK (bd);
- splx (s);
-
-#ifndef NETGRAPH
- /* Pass packets in a lock-free state */
- for (i = 0; i < NCHAN && b->chan[i].type; i++) {
- drv_t *d = b->chan[i].sys;
- struct mbuf *m;
- if (!d || !d->running)
- continue;
- while (_IF_QLEN(&d->queue)) {
- IF_DEQUEUE (&d->queue,m);
- if (!m)
- continue;
- sppp_input (d->ifp, m);
- }
- }
-#endif
-}
-
-static int probe_irq (cx_board_t *b, int irq)
-{
- int mask, busy, cnt;
-
- /* Clear pending irq, if any. */
- cx_probe_irq (b, -irq);
- DELAY (100);
- for (cnt=0; cnt<5; ++cnt) {
- /* Get the mask of pending irqs, assuming they are busy.
- * Activate the adapter on given irq. */
- busy = cx_probe_irq (b, irq);
- DELAY (100);
-
- /* Get the mask of active irqs.
- * Deactivate our irq. */
- mask = cx_probe_irq (b, -irq);
- DELAY (100);
- if ((mask & ~busy) == 1 << irq) {
- cx_probe_irq (b, 0);
- /* printf ("cx%d: irq %d ok, mask=0x%04x, busy=0x%04x\n",
- b->num, irq, mask, busy); */
- return 1;
- }
- }
- /* printf ("cx%d: irq %d not functional, mask=0x%04x, busy=0x%04x\n",
- b->num, irq, mask, busy); */
- cx_probe_irq (b, 0);
- return 0;
-}
-
-static short porttab [] = {
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
-};
-static char dmatab [] = { 7, 6, 5, 0 };
-static char irqtab [] = { 5, 10, 11, 7, 3, 15, 12, 0 };
-
-static int cx_is_free_res (device_t dev, int rid, int type, rman_res_t start,
- rman_res_t end, rman_res_t count)
-{
- struct resource *res;
-
- if (!(res = bus_alloc_resource (dev, type, &rid, start, end, count, 0)))
- return 0;
-
- bus_release_resource (dev, type, rid, res);
-
- return 1;
-}
-
-static void cx_identify (driver_t *driver, device_t dev)
-{
- rman_res_t iobase, rescount;
- int devcount;
- device_t *devices;
- device_t child;
- devclass_t my_devclass;
- int i, k;
-
- if ((my_devclass = devclass_find ("cx")) == NULL)
- return;
-
- devclass_get_devices (my_devclass, &devices, &devcount);
-
- if (devcount == 0) {
- /* We should find all devices by our self. We could alter other
- * devices, but we don't have a choise
- */
- for (i = 0; (iobase = porttab [i]) != 0; i++) {
- if (!cx_is_free_res (dev, 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT))
- continue;
- if (cx_probe_board (iobase, -1, -1) == 0)
- continue;
-
- devcount++;
-
- child = BUS_ADD_CHILD (dev, ISA_ORDER_SPECULATIVE, "cx",
- -1);
-
- if (child == NULL)
- return;
-
- device_set_desc_copy (child, "Cronyx Sigma");
- device_set_driver (child, driver);
- bus_set_resource (child, SYS_RES_IOPORT, 0,
- iobase, NPORT);
-
- if (devcount >= NCX)
- break;
- }
- } else {
- static short porttab [] = {
- 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0
- };
- /* Lets check user choise.
- */
- for (k = 0; k < devcount; k++) {
- if (bus_get_resource (devices[k], SYS_RES_IOPORT, 0,
- &iobase, &rescount) != 0)
- continue;
-
- for (i = 0; porttab [i] != 0; i++) {
- if (porttab [i] != iobase)
- continue;
- if (!cx_is_free_res (devices[k], 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT))
- continue;
- if (cx_probe_board (iobase, -1, -1) == 0)
- continue;
- porttab [i] = -1;
- device_set_desc_copy (devices[k], "Cronyx Sigma");
- break;
- }
-
- if (porttab [i] == 0) {
- device_delete_child (
- device_get_parent (devices[k]),
- devices [k]);
- devices[k] = 0;
- continue;
- }
- }
- for (k = 0; k < devcount; k++) {
- if (devices[k] == 0)
- continue;
- if (bus_get_resource (devices[k], SYS_RES_IOPORT, 0,
- &iobase, &rescount) == 0)
- continue;
- for (i = 0; (iobase = porttab [i]) != 0; i++) {
- if (porttab [i] == -1) {
- continue;
- }
- if (!cx_is_free_res (devices[k], 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT))
- continue;
- if (cx_probe_board (iobase, -1, -1) == 0)
- continue;
-
- bus_set_resource (devices[k], SYS_RES_IOPORT, 0,
- iobase, NPORT);
- porttab [i] = -1;
- device_set_desc_copy (devices[k], "Cronyx Sigma");
- break;
- }
- if (porttab [i] == 0) {
- device_delete_child (
- device_get_parent (devices[k]),
- devices [k]);
- }
- }
- free (devices, M_TEMP);
- }
-
- return;
-}
-
-static int cx_probe (device_t dev)
-{
- int unit = device_get_unit (dev);
- int i;
- rman_res_t iobase, rescount;
-
- if (!device_get_desc (dev) ||
- strcmp (device_get_desc (dev), "Cronyx Sigma"))
- return ENXIO;
-
- if (bus_get_resource (dev, SYS_RES_IOPORT, 0, &iobase, &rescount) != 0) {
- printf ("cx%d: Couldn't get IOPORT\n", unit);
- return ENXIO;
- }
-
- if (!cx_is_free_res (dev, 0, SYS_RES_IOPORT,
- iobase, iobase + NPORT, NPORT)) {
- printf ("cx%d: Resource IOPORT isn't free %lx\n", unit, iobase);
- return ENXIO;
- }
-
- for (i = 0; porttab [i] != 0; i++) {
- if (porttab [i] == iobase) {
- porttab [i] = -1;
- break;
- }
- }
-
- if (porttab [i] == 0) {
- return ENXIO;
- }
-
- if (!cx_probe_board (iobase, -1, -1)) {
- printf ("cx%d: probing for Sigma at %lx faild\n", unit, iobase);
- return ENXIO;
- }
-
- return 0;
-}
-
-static void
-cx_bus_dmamap_addr (void *arg, bus_dma_segment_t *segs, int nseg, int error)
-{
- unsigned long *addr;
-
- if (error)
- return;
-
- KASSERT(nseg == 1, ("too many DMA segments, %d should be 1", nseg));
- addr = arg;
- *addr = segs->ds_addr;
-}
-
-static int
-cx_bus_dma_mem_alloc (int bnum, int cnum, cx_dma_mem_t *dmem)
-{
- int error;
-
- error = bus_dma_tag_create (NULL, 16, 0, BUS_SPACE_MAXADDR_24BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, dmem->size, 1,
- dmem->size, 0, NULL, NULL, &dmem->dmat);
- if (error) {
- if (cnum >= 0) printf ("cx%d-%d: ", bnum, cnum);
- else printf ("cx%d: ", bnum);
- printf ("couldn't allocate tag for dma memory\n");
- return 0;
- }
- error = bus_dmamem_alloc (dmem->dmat, (void **)&dmem->virt,
- BUS_DMA_NOWAIT | BUS_DMA_ZERO, &dmem->mapp);
- if (error) {
- if (cnum >= 0) printf ("cx%d-%d: ", bnum, cnum);
- else printf ("cx%d: ", bnum);
- printf ("couldn't allocate mem for dma memory\n");
- bus_dma_tag_destroy (dmem->dmat);
- return 0;
- }
- error = bus_dmamap_load (dmem->dmat, dmem->mapp, dmem->virt,
- dmem->size, cx_bus_dmamap_addr, &dmem->phys, 0);
- if (error) {
- if (cnum >= 0) printf ("cx%d-%d: ", bnum, cnum);
- else printf ("cx%d: ", bnum);
- printf ("couldn't load mem map for dma memory\n");
- bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp);
- bus_dma_tag_destroy (dmem->dmat);
- return 0;
- }
- return 1;
-}
-
-static void
-cx_bus_dma_mem_free (cx_dma_mem_t *dmem)
-{
- bus_dmamap_unload (dmem->dmat, dmem->mapp);
- bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp);
- bus_dma_tag_destroy (dmem->dmat);
-}
-
-/*
- * The adapter is present, initialize the driver structures.
- */
-static int cx_attach (device_t dev)
-{
- bdrv_t *bd = device_get_softc (dev);
- rman_res_t iobase, drq, irq, rescount;
- int unit = device_get_unit (dev);
- char *cx_ln = CX_LOCK_NAME;
- cx_board_t *b;
- cx_chan_t *c;
- drv_t *d;
- int i;
- int s;
-
- KASSERT ((bd != NULL), ("cx%d: NULL device softc\n", unit));
-
- bus_get_resource (dev, SYS_RES_IOPORT, 0, &iobase, &rescount);
- bd->base_rid = 0;
- bd->base_res = bus_alloc_resource (dev, SYS_RES_IOPORT, &bd->base_rid,
- iobase, iobase + NPORT, NPORT, RF_ACTIVE);
- if (! bd->base_res) {
- printf ("cx%d: cannot allocate base address\n", unit);
- return ENXIO;
- }
-
- if (bus_get_resource (dev, SYS_RES_DRQ, 0, &drq, &rescount) != 0) {
- for (i = 0; (drq = dmatab [i]) != 0; i++) {
- if (!cx_is_free_res (dev, 0, SYS_RES_DRQ,
- drq, drq + 1, 1))
- continue;
- bus_set_resource (dev, SYS_RES_DRQ, 0, drq, 1);
- break;
- }
-
- if (dmatab[i] == 0) {
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- printf ("cx%d: Couldn't get DRQ\n", unit);
- return ENXIO;
- }
- }
-
- bd->drq_rid = 0;
- bd->drq_res = bus_alloc_resource (dev, SYS_RES_DRQ, &bd->drq_rid,
- drq, drq + 1, 1, RF_ACTIVE);
- if (! bd->drq_res) {
- printf ("cx%d: cannot allocate drq\n", unit);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
-
- if (bus_get_resource (dev, SYS_RES_IRQ, 0, &irq, &rescount) != 0) {
- for (i = 0; (irq = irqtab [i]) != 0; i++) {
- if (!cx_is_free_res (dev, 0, SYS_RES_IRQ,
- irq, irq + 1, 1))
- continue;
- bus_set_resource (dev, SYS_RES_IRQ, 0, irq, 1);
- break;
- }
-
- if (irqtab[i] == 0) {
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- printf ("cx%d: Couldn't get IRQ\n", unit);
- return ENXIO;
- }
- }
-
- bd->irq_rid = 0;
- bd->irq_res = bus_alloc_resource (dev, SYS_RES_IRQ, &bd->irq_rid,
- irq, irq + 1, 1, RF_ACTIVE);
- if (! bd->irq_res) {
- printf ("cx%d: Couldn't allocate irq\n", unit);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
-
- b = malloc (sizeof (cx_board_t), M_DEVBUF, M_WAITOK);
- if (!b) {
- printf ("cx:%d: Couldn't allocate memory\n", unit);
- return (ENXIO);
- }
- adapter[unit] = b;
- bzero (b, sizeof(cx_board_t));
-
- if (! cx_open_board (b, unit, iobase, irq, drq)) {
- printf ("cx%d: error loading firmware\n", unit);
- free (b, M_DEVBUF);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid,
- bd->irq_res);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
-
- bd->board = b;
-
- cx_ln[2] = '0' + unit;
- mtx_init (&bd->cx_mtx, cx_ln, MTX_NETWORK_LOCK, MTX_DEF|MTX_RECURSE);
- if (! probe_irq (b, irq)) {
- printf ("cx%d: irq %ld not functional\n", unit, irq);
- bd->board = 0;
- adapter [unit] = 0;
- mtx_destroy (&bd->cx_mtx);
- free (b, M_DEVBUF);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid,
- bd->irq_res);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- return ENXIO;
- }
- b->sys = bd;
- callout_init (&led_timo[b->num], 1);
- s = splhigh ();
- if (bus_setup_intr (dev, bd->irq_res,
- INTR_TYPE_NET|INTR_MPSAFE,
- NULL, cx_intr, bd, &bd->intrhand)) {
- printf ("cx%d: Can't setup irq %ld\n", unit, irq);
- bd->board = 0;
- b->sys = 0;
- adapter [unit] = 0;
- mtx_destroy (&bd->cx_mtx);
- free (b, M_DEVBUF);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid,
- bd->irq_res);
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid,
- bd->drq_res);
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid,
- bd->base_res);
- splx (s);
- return ENXIO;
- }
-
- CX_LOCK (bd);
- cx_init (b, b->num, b->port, irq, drq);
- cx_setup_board (b, 0, 0, 0);
- CX_UNLOCK (bd);
-
- printf ("cx%d: <Cronyx-Sigma-%s>\n", b->num, b->name);
-
- for (c=b->chan; c<b->chan+NCHAN; ++c) {
- if (c->type == T_NONE)
- continue;
- d = &bd->channel[c->num];
- d->dmamem.size = sizeof(cx_buf_t);
- if (! cx_bus_dma_mem_alloc (unit, c->num, &d->dmamem))
- continue;
- d->board = b;
- d->chan = c;
- d->open_dev = 0;
- c->sys = d;
- channel [b->num*NCHAN + c->num] = d;
- sprintf (d->name, "cx%d.%d", b->num, c->num);
-
- switch (c->type) {
- case T_SYNC_RS232:
- case T_SYNC_V35:
- case T_SYNC_RS449:
- case T_UNIV:
- case T_UNIV_RS232:
- case T_UNIV_RS449:
- case T_UNIV_V35:
- callout_init (&d->timeout_handle, 1);
-#ifdef NETGRAPH
- if (ng_make_node_common (&typestruct, &d->node) != 0) {
- printf ("%s: cannot make common node\n", d->name);
- channel [b->num*NCHAN + c->num] = 0;
- c->sys = 0;
- cx_bus_dma_mem_free (&d->dmamem);
- continue;
- }
- NG_NODE_SET_PRIVATE (d->node, d);
- sprintf (d->nodename, "%s%d", NG_CX_NODE_TYPE,
- c->board->num*NCHAN + c->num);
- if (ng_name_node (d->node, d->nodename)) {
- printf ("%s: cannot name node\n", d->nodename);
- NG_NODE_UNREF (d->node);
- channel [b->num*NCHAN + c->num] = 0;
- c->sys = 0;
- cx_bus_dma_mem_free (&d->dmamem);
- continue;
- }
- d->lo_queue.ifq_maxlen = ifqmaxlen;
- d->hi_queue.ifq_maxlen = ifqmaxlen;
- mtx_init (&d->lo_queue.ifq_mtx, "cx_queue_lo", NULL, MTX_DEF);
- mtx_init (&d->hi_queue.ifq_mtx, "cx_queue_hi", NULL, MTX_DEF);
-#else /*NETGRAPH*/
- d->ifp = if_alloc(IFT_PPP);
- if (d->ifp == NULL) {
- printf ("%s: cannot if_alloc() common interface\n",
- d->name);
- channel [b->num*NCHAN + c->num] = 0;
- c->sys = 0;
- cx_bus_dma_mem_free (&d->dmamem);
- continue;
- }
- d->ifp->if_softc = d;
- if_initname (d->ifp, "cx", b->num * NCHAN + c->num);
- d->ifp->if_mtu = PP_MTU;
- d->ifp->if_flags = IFF_POINTOPOINT | IFF_MULTICAST;
- d->ifp->if_ioctl = cx_sioctl;
- d->ifp->if_start = cx_ifstart;
- d->ifp->if_init = cx_initialize;
- d->queue.ifq_maxlen = 2;
- mtx_init (&d->queue.ifq_mtx, "cx_queue", NULL, MTX_DEF);
- sppp_attach (d->ifp);
- if_attach (d->ifp);
- IFP2SP(d->ifp)->pp_tlf = cx_tlf;
- IFP2SP(d->ifp)->pp_tls = cx_tls;
- /* If BPF is in the kernel, call the attach for it.
- * Size of PPP header is 4 bytes. */
- bpfattach (d->ifp, DLT_PPP, 4);
-#endif /*NETGRAPH*/
- }
- d->tty = ttyalloc ();
- d->tty->t_open = cx_topen;
- d->tty->t_close = cx_tclose;
- d->tty->t_param = cx_param;
- d->tty->t_stop = cx_stop;
- d->tty->t_modem = cx_tmodem;
- d->tty->t_oproc = cx_oproc;
- d->tty->t_sc = d;
- CX_LOCK (bd);
- cx_start_chan (c, d->dmamem.virt, d->dmamem.phys);
- cx_register_receive (c, &cx_receive);
- cx_register_transmit (c, &cx_transmit);
- cx_register_error (c, &cx_error);
- cx_register_modem (c, &cx_modem);
- CX_UNLOCK (bd);
-
- ttycreate(d->tty, TS_CALLOUT, "x%r%r", b->num, c->num);
- d->devt = make_dev (&cx_cdevsw, b->num*NCHAN + c->num + 64, UID_ROOT, GID_WHEEL, 0600, "cx%d", b->num*NCHAN + c->num);
- d->devt->si_drv1 = d;
- callout_init (&d->dcd_timeout_handle, 1);
- }
- splx (s);
-
- gone_in_dev(dev, 13, "sync serial (T1/E1) ISA card drivers");
- return 0;
-}
-
-static int cx_detach (device_t dev)
-{
- bdrv_t *bd = device_get_softc (dev);
- cx_board_t *b = bd->board;
- cx_chan_t *c;
- int s;
-
- KASSERT (mtx_initialized (&bd->cx_mtx), ("cx mutex not initialized"));
-
- s = splhigh ();
- CX_LOCK (bd);
- /* Check if the device is busy (open). */
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = (drv_t*) c->sys;
-
- if (!d || d->chan->type == T_NONE)
- continue;
- if (d->lock) {
- CX_UNLOCK (bd);
- splx (s);
- return EBUSY;
- }
- if (c->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN) &&
- (d->open_dev|0x2)) {
- CX_UNLOCK (bd);
- splx (s);
- return EBUSY;
- }
- if (d->running) {
- CX_UNLOCK (bd);
- splx (s);
- return EBUSY;
- }
- }
-
- /* Deactivate the timeout routine. And soft interrupt*/
- callout_stop (&led_timo[b->num]);
-
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = c->sys;
-
- if (!d || d->chan->type == T_NONE)
- continue;
-
- callout_stop (&d->dcd_timeout_handle);
- }
- CX_UNLOCK (bd);
- bus_teardown_intr (dev, bd->irq_res, bd->intrhand);
- bus_release_resource (dev, SYS_RES_IRQ, bd->irq_rid, bd->irq_res);
-
- bus_release_resource (dev, SYS_RES_DRQ, bd->drq_rid, bd->drq_res);
-
- bus_release_resource (dev, SYS_RES_IOPORT, bd->base_rid, bd->base_res);
-
- CX_LOCK (bd);
- cx_close_board (b);
-
- /* Detach the interfaces, free buffer memory. */
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = (drv_t*) c->sys;
-
- if (!d || d->chan->type == T_NONE)
- continue;
-
- if (d->tty) {
- ttyfree (d->tty);
- d->tty = NULL;
- }
-
- callout_stop (&d->timeout_handle);
-#ifdef NETGRAPH
- if (d->node) {
- ng_rmnode_self (d->node);
- NG_NODE_UNREF (d->node);
- d->node = NULL;
- }
- mtx_destroy (&d->lo_queue.ifq_mtx);
- mtx_destroy (&d->hi_queue.ifq_mtx);
-#else
- /* Detach from the packet filter list of interfaces. */
- bpfdetach (d->ifp);
- /* Detach from the sync PPP list. */
- sppp_detach (d->ifp);
-
- if_detach (d->ifp);
- if_free(d->ifp);
- /* XXXRIK: check interconnection with irq handler */
- IF_DRAIN (&d->queue);
- mtx_destroy (&d->queue.ifq_mtx);
-#endif
- destroy_dev (d->devt);
- }
-
- cx_led_off (b);
- CX_UNLOCK (bd);
- callout_drain (&led_timo[b->num]);
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = c->sys;
-
- if (!d || d->chan->type == T_NONE)
- continue;
-
- callout_drain (&d->dcd_timeout_handle);
- callout_drain (&d->timeout_handle);
- }
- splx (s);
-
- s = splhigh ();
- for (c = b->chan; c < b->chan + NCHAN; ++c) {
- drv_t *d = (drv_t*) c->sys;
-
- if (!d || d->chan->type == T_NONE)
- continue;
-
- /* Deallocate buffers. */
- cx_bus_dma_mem_free (&d->dmamem);
- }
- bd->board = NULL;
- adapter [b->num] = NULL;
- free (b, M_DEVBUF);
- splx (s);
-
- mtx_destroy (&bd->cx_mtx);
-
- return 0;
-}
-
-#ifndef NETGRAPH
-static void cx_ifstart (struct ifnet *ifp)
-{
- drv_t *d = ifp->if_softc;
- bdrv_t *bd = d->board->sys;
-
- CX_LOCK (bd);
- cx_start (d);
- CX_UNLOCK (bd);
-}
-
-static void cx_tlf (struct sppp *sp)
-{
- drv_t *d = SP2IFP(sp)->if_softc;
-
- CX_DEBUG (d, ("cx_tlf\n"));
-/* cx_set_dtr (d->chan, 0);*/
-/* cx_set_rts (d->chan, 0);*/
- if (!(IFP2SP(d->ifp)->pp_flags & PP_FR) && !(d->ifp->if_flags & PP_CISCO))
- sp->pp_down (sp);
-}
-
-static void cx_tls (struct sppp *sp)
-{
- drv_t *d = SP2IFP(sp)->if_softc;
-
- CX_DEBUG (d, ("cx_tls\n"));
- if (!(IFP2SP(d->ifp)->pp_flags & PP_FR) && !(d->ifp->if_flags & PP_CISCO))
- sp->pp_up (sp);
-}
-
-/*
- * Initialization of interface.
- * It seems to be never called by upper level.
- */
-static void cx_initialize (void *softc)
-{
- drv_t *d = softc;
-
- CX_DEBUG (d, ("cx_initialize\n"));
-}
-
-/*
- * Process an ioctl request.
- */
-static int cx_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
-{
- drv_t *d = ifp->if_softc;
- bdrv_t *bd = d->board->sys;
- int error, s, was_up, should_be_up;
-
- /* No socket ioctls while the channel is in async mode. */
- if (d->chan->type == T_NONE || d->chan->mode == M_ASYNC)
- return EBUSY;
-
- /* Socket ioctls on slave subchannels are not allowed. */
- was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
- error = sppp_ioctl (ifp, cmd, data);
- if (error)
- return error;
-
- s = splhigh ();
- CX_LOCK (bd);
- if (! (ifp->if_flags & IFF_DEBUG))
- d->chan->debug = 0;
- else
- d->chan->debug = d->chan->debug_shadow;
- CX_UNLOCK (bd);
- splx (s);
-
- switch (cmd) {
- default: CX_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
- case SIOCADDMULTI: CX_DEBUG2 (d, ("SIOCADDMULTI\n")); return 0;
- case SIOCDELMULTI: CX_DEBUG2 (d, ("SIOCDELMULTI\n")); return 0;
- case SIOCSIFFLAGS: CX_DEBUG2 (d, ("SIOCSIFFLAGS\n")); break;
- case SIOCSIFADDR: CX_DEBUG2 (d, ("SIOCSIFADDR\n")); break;
- }
-
- /* We get here only in case of SIFFLAGS or SIFADDR. */
- s = splhigh ();
- CX_LOCK (bd);
- should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
- if (!was_up && should_be_up) {
- /* Interface goes up -- start it. */
- cx_up (d);
- cx_start (d);
- } else if (was_up && !should_be_up) {
- /* Interface is going down -- stop it. */
- /* if ((IFP2SP(d->ifp)->pp_flags & PP_FR) || (ifp->if_flags & PP_CISCO))*/
- cx_down (d);
- }
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-}
-#endif /*NETGRAPH*/
-
-/*
- * Stop the interface. Called on splimp().
- */
-static void cx_down (drv_t *d)
-{
- int s = splhigh ();
- CX_DEBUG (d, ("cx_down\n"));
- cx_set_dtr (d->chan, 0);
- cx_set_rts (d->chan, 0);
- d->running = 0;
- callout_stop (&d->timeout_handle);
- splx (s);
-}
-
-/*
- * Start the interface. Called on splimp().
- */
-static void cx_up (drv_t *d)
-{
- int s = splhigh ();
- CX_DEBUG (d, ("cx_up\n"));
- cx_set_dtr (d->chan, 1);
- cx_set_rts (d->chan, 1);
- d->running = 1;
- splx (s);
-}
-
-/*
- * Start output on the (slave) interface. Get another datagram to send
- * off of the interface queue, and copy it to the interface
- * before starting the output.
- */
-static void cx_send (drv_t *d)
-{
- struct mbuf *m;
- u_short len;
-
- CX_DEBUG2 (d, ("cx_send\n"));
-
- /* No output if the interface is down. */
- if (! d->running)
- return;
-
- /* No output if the modem is off. */
- if (! cx_get_dsr (d->chan) && ! cx_get_loop(d->chan))
- return;
-
- if (cx_buf_free (d->chan)) {
- /* Get the packet to send. */
-#ifdef NETGRAPH
- IF_DEQUEUE (&d->hi_queue, m);
- if (! m)
- IF_DEQUEUE (&d->lo_queue, m);
-#else
- m = sppp_dequeue (d->ifp);
-#endif
- if (! m)
- return;
-#ifndef NETGRAPH
- BPF_MTAP (d->ifp, m);
-#endif
- len = m_length (m, NULL);
- if (! m->m_next)
- cx_send_packet (d->chan, (u_char*)mtod (m, caddr_t),
- len, 0);
- else {
- u_char buf [DMABUFSZ];
- m_copydata (m, 0, len, buf);
- cx_send_packet (d->chan, buf, len, 0);
- }
- m_freem (m);
-
- /* Set up transmit timeout, 10 seconds. */
- d->timeout = 10;
- }
-#ifndef NETGRAPH
- d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-#endif
-}
-
-/*
- * Start output on the interface.
- * Always called on splimp().
- */
-static void cx_start (drv_t *d)
-{
- int s = splhigh ();
- if (d->running) {
- if (! d->chan->dtr)
- cx_set_dtr (d->chan, 1);
- if (! d->chan->rts)
- cx_set_rts (d->chan, 1);
- cx_send (d);
- callout_reset (&d->timeout_handle, hz, cx_watchdog_timer, d);
- }
- splx (s);
-}
-
-/*
- * Handle transmit timeouts.
- * Recover after lost transmit interrupts.
- * Always called on splimp().
- */
-static void cx_watchdog (drv_t *d)
-{
-
- CX_DEBUG (d, ("device timeout\n"));
- if (d->running) {
- cx_setup_chan (d->chan);
- cx_start_chan (d->chan, 0, 0);
- cx_set_dtr (d->chan, 1);
- cx_set_rts (d->chan, 1);
- cx_start (d);
- }
-}
-
-static void cx_watchdog_timer (void *arg)
-{
- drv_t *d = arg;
- bdrv_t *bd = d->board->sys;
-
- CX_LOCK (bd);
- if (d->timeout == 1)
- cx_watchdog (d);
- if (d->timeout)
- d->timeout--;
- callout_reset (&d->timeout_handle, hz, cx_watchdog_timer, d);
- CX_UNLOCK (bd);
-}
-
-/*
- * Transmit callback function.
- */
-static void cx_transmit (cx_chan_t *c, void *attachment, int len)
-{
- drv_t *d = c->sys;
-
- if (!d)
- return;
-
- if (c->mode == M_ASYNC && d->tty) {
- d->tty->t_state &= ~(TS_BUSY | TS_FLUSH);
- d->atimeout = 0;
- if (d->tty->t_dev) {
- d->intr_action |= CX_WRITE;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
- return;
- }
- d->timeout = 0;
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_OPACKETS, 1);
- d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-#endif
- cx_start (d);
-}
-
-/*
- * Process the received packet.
- */
-static void cx_receive (cx_chan_t *c, char *data, int len)
-{
- drv_t *d = c->sys;
- struct mbuf *m;
- char *cc = data;
-#ifdef NETGRAPH
- int error;
-#endif
-
- if (!d)
- return;
-
- if (c->mode == M_ASYNC && d->tty) {
- if (d->tty->t_state & TS_ISOPEN) {
- async_q *q = &d->aqueue;
- int size = BF_SZ - 1 - AQ_GSZ (q);
-
- if (len <= 0 && !size)
- return;
-
- if (len > size) {
- c->ierrs++;
- cx_error (c, CX_OVERRUN);
- len = size - 1;
- }
-
- while (len--) {
- AQ_PUSH (q, *(unsigned char *)cc);
- cc++;
- }
-
- d->intr_action |= CX_READ;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
- return;
- }
- if (! d->running)
- return;
-
- m = makembuf (data, len);
- if (! m) {
- CX_DEBUG (d, ("no memory for packet\n"));
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_IQDROPS, 1);
-#endif
- return;
- }
- if (c->debug > 1)
- m_print (m, 0);
-#ifdef NETGRAPH
- m->m_pkthdr.rcvif = 0;
- NG_SEND_DATA_ONLY (error, d->hook, m);
-#else
- if_inc_counter(d->ifp, IFCOUNTER_IPACKETS, 1);
- m->m_pkthdr.rcvif = d->ifp;
- /* Check if there's a BPF listener on this interface.
- * If so, hand off the raw packet to bpf. */
- BPF_MTAP(d->ifp, m);
- IF_ENQUEUE (&d->queue, m);
-#endif
-}
-
-#define CONDITION(t,tp) (!(t->c_iflag & (ICRNL | IGNCR | IMAXBEL | INLCR | ISTRIP | IXON))\
- && (!(tp->t_iflag & BRKINT) || (tp->t_iflag & IGNBRK))\
- && (!(tp->t_iflag & PARMRK)\
- || (tp->t_iflag & (IGNPAR | IGNBRK)) == (IGNPAR | IGNBRK))\
- && !(t->c_lflag & (ECHO | ICANON | IEXTEN | ISIG | PENDIN))\
- && linesw[tp->t_line]->l_rint == ttyinput)
-
-/*
- * Error callback function.
- */
-static void cx_error (cx_chan_t *c, int data)
-{
- drv_t *d = c->sys;
- async_q *q;
-
- if (!d)
- return;
-
- q = &(d->aqueue);
-
- switch (data) {
- case CX_FRAME:
- CX_DEBUG (d, ("frame error\n"));
- if (c->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN)
- && (AQ_GSZ (q) < BF_SZ - 1)
- && (!CONDITION((&d->tty->t_termios), (d->tty))
- || !(d->tty->t_iflag & (IGNPAR | PARMRK)))) {
- AQ_PUSH (q, TTY_FE);
- d->intr_action |= CX_READ;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
-#ifndef NETGRAPH
- else
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CX_CRC:
- CX_DEBUG (d, ("crc error\n"));
- if (c->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN)
- && (AQ_GSZ (q) < BF_SZ - 1)
- && (!CONDITION((&d->tty->t_termios), (d->tty))
- || !(d->tty->t_iflag & INPCK)
- || !(d->tty->t_iflag & (IGNPAR | PARMRK)))) {
- AQ_PUSH (q, TTY_PE);
- d->intr_action |= CX_READ;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
-#ifndef NETGRAPH
- else
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CX_OVERRUN:
- CX_DEBUG (d, ("overrun error\n"));
-#ifdef TTY_OE
- if (c->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN)
- && (AQ_GSZ (q) < BF_SZ - 1)
- && (!CONDITION((&d->tty->t_termios), (d->tty)))) {
- AQ_PUSH (q, TTY_OE);
- d->intr_action |= CX_READ;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
-#endif
-#ifndef NETGRAPH
- else {
- if_inc_counter(d->ifp, IFCOUNTER_COLLISIONS, 1);
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
- }
-#endif
- break;
- case CX_OVERFLOW:
- CX_DEBUG (d, ("overflow error\n"));
-#ifndef NETGRAPH
- if (c->mode != M_ASYNC)
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- case CX_UNDERRUN:
- CX_DEBUG (d, ("underrun error\n"));
- if (c->mode != M_ASYNC) {
- d->timeout = 0;
-#ifndef NETGRAPH
- if_inc_counter(d->ifp, IFCOUNTER_OERRORS, 1);
- d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-#endif
- cx_start (d);
- }
- break;
- case CX_BREAK:
- CX_DEBUG (d, ("break error\n"));
- if (c->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN)
- && (AQ_GSZ (q) < BF_SZ - 1)
- && (!CONDITION((&d->tty->t_termios), (d->tty))
- || !(d->tty->t_iflag & (IGNBRK | BRKINT | PARMRK)))) {
- AQ_PUSH (q, TTY_BI);
- d->intr_action |= CX_READ;
- MY_SOFT_INTR = 1;
- swi_sched (cx_fast_ih, 0);
- }
-#ifndef NETGRAPH
- else
- if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1);
-#endif
- break;
- default:
- CX_DEBUG (d, ("error #%d\n", data));
- }
-}
-
-static int cx_topen (struct tty *tp, struct cdev *dev)
-{
- bdrv_t *bd;
- drv_t *d;
-
- d = tp->t_sc;
- CX_DEBUG2 (d, ("cx_open (serial)\n"));
-
- bd = d->board->sys;
-
- if (d->chan->mode != M_ASYNC)
- return (EBUSY);
-
- d->open_dev |= 0x2;
- CX_LOCK (bd);
- cx_start_chan (d->chan, 0, 0);
- cx_set_dtr (d->chan, 1);
- cx_set_rts (d->chan, 1);
- d->cd = cx_get_cd (d->chan);
- CX_UNLOCK (bd);
-
- CX_DEBUG2 (d, ("cx_open done\n"));
-
- return 0;
-}
-
-static void cx_tclose (struct tty *tp)
-{
- drv_t *d;
- bdrv_t *bd;
-
- d = tp->t_sc;
- CX_DEBUG2 (d, ("cx_close\n"));
- bd = d->board->sys;
- CX_LOCK (bd);
- /* Disable receiver.
- * Transmitter continues sending the queued data. */
- cx_enable_receive (d->chan, 0);
- CX_UNLOCK (bd);
- d->open_dev &= ~0x2;
-}
-
-static int cx_tmodem (struct tty *tp, int sigon, int sigoff)
-{
- drv_t *d;
- bdrv_t *bd;
-
- d = tp->t_sc;
- bd = d->board->sys;
-
- CX_LOCK (bd);
- if (!sigon && !sigoff) {
- if (cx_get_dsr (d->chan)) sigon |= SER_DSR;
- if (cx_get_cd (d->chan)) sigon |= SER_DCD;
- if (cx_get_cts (d->chan)) sigon |= SER_CTS;
- if (d->chan->dtr) sigon |= SER_DTR;
- if (d->chan->rts) sigon |= SER_RTS;
- CX_UNLOCK (bd);
- return sigon;
- }
-
- if (sigon & SER_DTR)
- cx_set_dtr (d->chan, 1);
- if (sigoff & SER_DTR)
- cx_set_dtr (d->chan, 0);
- if (sigon & SER_RTS)
- cx_set_rts (d->chan, 1);
- if (sigoff & SER_RTS)
- cx_set_rts (d->chan, 0);
- CX_UNLOCK (bd);
-
- return (0);
-}
-
-static int cx_open (struct cdev *dev, int flag, int mode, struct thread *td)
-{
- int unit;
- drv_t *d;
-
- d = dev->si_drv1;
- unit = d->chan->num;
-
- CX_DEBUG2 (d, ("cx_open unit=%d, flag=0x%x, mode=0x%x\n",
- unit, flag, mode));
-
- d->open_dev |= 0x1;
-
- CX_DEBUG2 (d, ("cx_open done\n"));
-
- return 0;
-}
-
-static int cx_close (struct cdev *dev, int flag, int mode, struct thread *td)
-{
- drv_t *d;
-
- d = dev->si_drv1;
- CX_DEBUG2 (d, ("cx_close\n"));
- d->open_dev &= ~0x1;
- return 0;
-}
-
-static int cx_modem_status (drv_t *d)
-{
- bdrv_t *bd = d->board->sys;
- int status = 0, s = splhigh ();
- CX_LOCK (bd);
- /* Already opened by someone or network interface is up? */
- if ((d->chan->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN) &&
- (d->open_dev|0x2)) || (d->chan->mode != M_ASYNC && d->running))
- status = TIOCM_LE; /* always enabled while open */
-
- if (cx_get_dsr (d->chan)) status |= TIOCM_DSR;
- if (cx_get_cd (d->chan)) status |= TIOCM_CD;
- if (cx_get_cts (d->chan)) status |= TIOCM_CTS;
- if (d->chan->dtr) status |= TIOCM_DTR;
- if (d->chan->rts) status |= TIOCM_RTS;
- CX_UNLOCK (bd);
- splx (s);
- return status;
-}
-
-static int cx_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
-{
- drv_t *d;
- bdrv_t *bd;
- cx_chan_t *c;
- struct serial_statistics *st;
- int error, s;
- char mask[16];
-
- d = dev->si_drv1;
- c = d->chan;
-
- bd = d->board->sys;
-
- switch (cmd) {
- case SERIAL_GETREGISTERED:
- CX_DEBUG2 (d, ("ioctl: getregistered\n"));
- bzero (mask, sizeof(mask));
- for (s=0; s<NCX*NCHAN; ++s)
- if (channel [s])
- mask [s/8] |= 1 << (s & 7);
- bcopy (mask, data, sizeof (mask));
- return 0;
-
- case SERIAL_GETPORT:
- CX_DEBUG2 (d, ("ioctl: getport\n"));
- s = splhigh ();
- CX_LOCK (bd);
- *(int *)data = cx_get_port (c);
- CX_UNLOCK (bd);
- splx (s);
- if (*(int *)data<0)
- return (EINVAL);
- else
- return 0;
-
- case SERIAL_SETPORT:
- CX_DEBUG2 (d, ("ioctl: setproto\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
-
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_port (c, *(int *)data);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
-#ifndef NETGRAPH
- case SERIAL_GETPROTO:
- CX_DEBUG2 (d, ("ioctl: getproto\n"));
- s = splhigh ();
- CX_LOCK (bd);
- strcpy ((char*)data, (c->mode == M_ASYNC) ? "async" :
- (IFP2SP(d->ifp)->pp_flags & PP_FR) ? "fr" :
- (d->ifp->if_flags & PP_CISCO) ? "cisco" : "ppp");
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETPROTO:
- CX_DEBUG2 (d, ("ioctl: setproto\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_ASYNC)
- return EBUSY;
- if (d->ifp->if_drv_flags & IFF_DRV_RUNNING)
- return EBUSY;
- if (! strcmp ("cisco", (char*)data)) {
- IFP2SP(d->ifp)->pp_flags &= ~(PP_FR);
- IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE;
- d->ifp->if_flags |= PP_CISCO;
- } else if (! strcmp ("fr", (char*)data)) {
- d->ifp->if_flags &= ~(PP_CISCO);
- IFP2SP(d->ifp)->pp_flags |= PP_FR | PP_KEEPALIVE;
- } else if (! strcmp ("ppp", (char*)data)) {
- IFP2SP(d->ifp)->pp_flags &= ~(PP_FR | PP_KEEPALIVE);
- d->ifp->if_flags &= ~(PP_CISCO);
- } else
- return EINVAL;
- return 0;
-
- case SERIAL_GETKEEPALIVE:
- CX_DEBUG2 (d, ("ioctl: getkeepalive\n"));
- if ((IFP2SP(d->ifp)->pp_flags & PP_FR) ||
- (d->ifp->if_flags & PP_CISCO) ||
- (c->mode == M_ASYNC))
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- *(int*)data = (IFP2SP(d->ifp)->pp_flags & PP_KEEPALIVE) ? 1 : 0;
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETKEEPALIVE:
- CX_DEBUG2 (d, ("ioctl: setkeepalive\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if ((IFP2SP(d->ifp)->pp_flags & PP_FR) ||
- (d->ifp->if_flags & PP_CISCO))
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- if (*(int*)data)
- IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE;
- else
- IFP2SP(d->ifp)->pp_flags &= ~PP_KEEPALIVE;
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-#endif /*NETGRAPH*/
-
- case SERIAL_GETMODE:
- CX_DEBUG2 (d, ("ioctl: getmode\n"));
- s = splhigh ();
- CX_LOCK (bd);
- *(int*)data = (c->mode == M_ASYNC) ?
- SERIAL_ASYNC : SERIAL_HDLC;
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETMODE:
- CX_DEBUG2 (d, ("ioctl: setmode\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
-
- /* Somebody is waiting for carrier? */
- if (d->lock)
- return EBUSY;
- /* /dev/ttyXX is already opened by someone? */
- if (c->mode == M_ASYNC && d->tty && (d->tty->t_state & TS_ISOPEN) &&
- (d->open_dev|0x2))
- return EBUSY;
- /* Network interface is up?
- * Cannot change to async mode. */
- if (c->mode != M_ASYNC && d->running &&
- (*(int*)data == SERIAL_ASYNC))
- return EBUSY;
-
- s = splhigh ();
- CX_LOCK (bd);
- if (c->mode == M_HDLC && *(int*)data == SERIAL_ASYNC) {
- cx_set_mode (c, M_ASYNC);
- cx_enable_receive (c, 0);
- cx_enable_transmit (c, 0);
- } else if (c->mode == M_ASYNC && *(int*)data == SERIAL_HDLC) {
- if (d->ifp->if_flags & IFF_DEBUG)
- c->debug = c->debug_shadow;
- cx_set_mode (c, M_HDLC);
- cx_enable_receive (c, 1);
- cx_enable_transmit (c, 1);
- }
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETSTAT:
- CX_DEBUG2 (d, ("ioctl: getestat\n"));
- st = (struct serial_statistics*) data;
- s = splhigh ();
- CX_LOCK (bd);
- st->rintr = c->rintr;
- st->tintr = c->tintr;
- st->mintr = c->mintr;
- st->ibytes = c->ibytes;
- st->ipkts = c->ipkts;
- st->ierrs = c->ierrs;
- st->obytes = c->obytes;
- st->opkts = c->opkts;
- st->oerrs = c->oerrs;
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_CLRSTAT:
- CX_DEBUG2 (d, ("ioctl: clrstat\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splhigh ();
- CX_LOCK (bd);
- c->rintr = 0;
- c->tintr = 0;
- c->mintr = 0;
- c->ibytes = 0;
- c->ipkts = 0;
- c->ierrs = 0;
- c->obytes = 0;
- c->opkts = 0;
- c->oerrs = 0;
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETBAUD:
- CX_DEBUG2 (d, ("ioctl: getbaud\n"));
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- *(long*)data = cx_get_baud(c);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETBAUD:
- CX_DEBUG2 (d, ("ioctl: setbaud\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_baud (c, *(long*)data);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETLOOP:
- CX_DEBUG2 (d, ("ioctl: getloop\n"));
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- *(int*)data = cx_get_loop (c);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETLOOP:
- CX_DEBUG2 (d, ("ioctl: setloop\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_loop (c, *(int*)data);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETDPLL:
- CX_DEBUG2 (d, ("ioctl: getdpll\n"));
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- *(int*)data = cx_get_dpll (c);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETDPLL:
- CX_DEBUG2 (d, ("ioctl: setdpll\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_dpll (c, *(int*)data);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETNRZI:
- CX_DEBUG2 (d, ("ioctl: getnrzi\n"));
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- *(int*)data = cx_get_nrzi (c);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETNRZI:
- CX_DEBUG2 (d, ("ioctl: setnrzi\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- if (c->mode == M_ASYNC)
- return EINVAL;
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_nrzi (c, *(int*)data);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_GETDEBUG:
- CX_DEBUG2 (d, ("ioctl: getdebug\n"));
- s = splhigh ();
- CX_LOCK (bd);
- *(int*)data = c->debug;
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case SERIAL_SETDEBUG:
- CX_DEBUG2 (d, ("ioctl: setdebug\n"));
- /* Only for superuser! */
- error = priv_check (td, PRIV_DRIVER);
- if (error)
- return error;
- s = splhigh ();
- CX_LOCK (bd);
-#ifndef NETGRAPH
- if (c->mode == M_ASYNC) {
- c->debug = *(int*)data;
- } else {
- /*
- * The debug_shadow is always greater than zero for
- * logic simplicity. For switching debug off the
- * IFF_DEBUG is responsible (for !M_ASYNC mode).
- */
- c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
- if (d->ifp->if_flags & IFF_DEBUG)
- c->debug = c->debug_shadow;
- }
-#else
- c->debug = *(int*)data;
-#endif
- CX_UNLOCK (bd);
- splx (s);
- return 0;
- }
-
- switch (cmd) {
- case TIOCSDTR: /* Set DTR */
- CX_DEBUG2 (d, ("ioctl: tiocsdtr\n"));
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_dtr (c, 1);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCCDTR: /* Clear DTR */
- CX_DEBUG2 (d, ("ioctl: tioccdtr\n"));
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_dtr (c, 0);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMSET: /* Set DTR/RTS */
- CX_DEBUG2 (d, ("ioctl: tiocmset\n"));
- s = splhigh ();
- CX_LOCK (bd);
- cx_set_dtr (c, (*(int*)data & TIOCM_DTR) ? 1 : 0);
- cx_set_rts (c, (*(int*)data & TIOCM_RTS) ? 1 : 0);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMBIS: /* Add DTR/RTS */
- CX_DEBUG2 (d, ("ioctl: tiocmbis\n"));
- s = splhigh ();
- CX_LOCK (bd);
- if (*(int*)data & TIOCM_DTR) cx_set_dtr (c, 1);
- if (*(int*)data & TIOCM_RTS) cx_set_rts (c, 1);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMBIC: /* Clear DTR/RTS */
- CX_DEBUG2 (d, ("ioctl: tiocmbic\n"));
- s = splhigh ();
- CX_LOCK (bd);
- if (*(int*)data & TIOCM_DTR) cx_set_dtr (c, 0);
- if (*(int*)data & TIOCM_RTS) cx_set_rts (c, 0);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-
- case TIOCMGET: /* Get modem status */
- CX_DEBUG2 (d, ("ioctl: tiocmget\n"));
- *(int*)data = cx_modem_status (d);
- return 0;
-
- }
-
- CX_DEBUG2 (d, ("ioctl: 0x%lx\n", cmd));
- return ENOTTY;
-}
-
-void cx_softintr (void *unused)
-{
- drv_t *d;
- bdrv_t *bd;
- async_q *q;
- int i, s, ic, k;
- while (MY_SOFT_INTR) {
- MY_SOFT_INTR = 0;
- for (i=0; i<NCX*NCHAN; ++i) {
- d = channel [i];
- if (!d || !d->chan || d->chan->type == T_NONE
- || d->chan->mode != M_ASYNC || !d->tty
- || !d->tty->t_dev)
- continue;
- bd = d->board->sys;
- s = splhigh ();
- CX_LOCK (bd);
- if (d->intr_action & CX_READ) {
- q = &(d->aqueue);
- if (d->tty->t_state & TS_CAN_BYPASS_L_RINT) {
- k = AQ_GSZ(q);
- if (d->tty->t_rawq.c_cc + k >
- d->tty->t_ihiwat
- && (d->tty->t_cflag & CRTS_IFLOW
- || d->tty->t_iflag & IXOFF)
- && !(d->tty->t_state & TS_TBLOCK))
- ttyblock(d->tty);
- d->tty->t_rawcc += k;
- while (k>0) {
- k--;
- AQ_POP (q, ic);
- CX_UNLOCK (bd);
- splx (s);
- putc (ic, &d->tty->t_rawq);
- s = splhigh ();
- CX_LOCK (bd);
- }
- ttwakeup(d->tty);
- if (d->tty->t_state & TS_TTSTOP
- && (d->tty->t_iflag & IXANY
- || d->tty->t_cc[VSTART] ==
- d->tty->t_cc[VSTOP])) {
- d->tty->t_state &= ~TS_TTSTOP;
- d->tty->t_lflag &= ~FLUSHO;
- d->intr_action |= CX_WRITE;
- }
- } else {
- while (q->end != q->beg) {
- AQ_POP (q, ic);
- CX_UNLOCK (bd);
- splx (s);
- ttyld_rint (d->tty, ic);
- s = splhigh ();
- CX_LOCK (bd);
- }
- }
- d->intr_action &= ~CX_READ;
- }
- splx (s);
- CX_UNLOCK (bd);
-
- s = splhigh ();
- CX_LOCK (bd);
- if (d->intr_action & CX_WRITE) {
- if (d->tty->t_line)
- ttyld_start (d->tty);
- else
- cx_oproc (d->tty);
- d->intr_action &= ~CX_WRITE;
- }
- CX_UNLOCK (bd);
- splx (s);
-
- }
- }
-}
-
-/*
- * Fill transmitter buffer with data.
- */
-static void cx_oproc (struct tty *tp)
-{
- int s, k;
- drv_t *d;
- bdrv_t *bd;
- static u_char buf[DMABUFSZ];
- u_char *p;
- u_short len = 0, sublen = 0;
-
- d = tp->t_sc;
- bd = d->board->sys;
-
- CX_DEBUG2 (d, ("cx_oproc\n"));
-
- s = splhigh ();
- CX_LOCK (bd);
-
- if (tp->t_cflag & CRTSCTS && (tp->t_state & TS_TBLOCK) && d->chan->rts)
- cx_set_rts (d->chan, 0);
- else if (tp->t_cflag & CRTSCTS && ! (tp->t_state & TS_TBLOCK) && ! d->chan->rts)
- cx_set_rts (d->chan, 1);
-
- if (! (tp->t_state & (TS_TIMEOUT | TS_TTSTOP))) {
- /* Start transmitter. */
- cx_enable_transmit (d->chan, 1);
-
- /* Is it busy? */
- if (! cx_buf_free (d->chan)) {
- tp->t_state |= TS_BUSY;
- CX_UNLOCK (bd);
- splx (s);
- return;
- }
- if (tp->t_iflag & IXOFF) {
- p = (buf + (DMABUFSZ/2));
- sublen = q_to_b (&tp->t_outq, p, (DMABUFSZ/2));
- k = sublen;
- while (k--) {
- /* Send XON/XOFF out of band. */
- if (*p == tp->t_cc[VSTOP]) {
- cx_xflow_ctl (d->chan, 0);
- p++;
- continue;
- }
- if (*p == tp->t_cc[VSTART]) {
- cx_xflow_ctl (d->chan, 1);
- p++;
- continue;
- }
- buf[len] = *p;
- len++;
- p++;
- }
- } else {
- p = buf;
- len = q_to_b (&tp->t_outq, p, (DMABUFSZ/2));
- }
- if (len) {
- cx_send_packet (d->chan, buf, len, 0);
- tp->t_state |= TS_BUSY;
- d->atimeout = 10;
- CX_DEBUG2 (d, ("out %d bytes\n", len));
- }
- }
- ttwwakeup (tp);
- CX_UNLOCK (bd);
- splx (s);
-}
-
-static int cx_param (struct tty *tp, struct termios *t)
-{
- drv_t *d;
- bdrv_t *bd;
- int s, bits, parity;
-
- d = tp->t_sc;
- bd = d->board->sys;
-
- s = splhigh ();
- CX_LOCK (bd);
- if (t->c_ospeed == 0) {
- /* Clear DTR and RTS. */
- cx_set_dtr (d->chan, 0);
- CX_UNLOCK (bd);
- splx (s);
- CX_DEBUG2 (d, ("cx_param (hangup)\n"));
- return 0;
- }
- CX_DEBUG2 (d, ("cx_param\n"));
-
- /* Check requested parameters. */
- if (t->c_ospeed < 300 || t->c_ospeed > 256*1024) {
- CX_UNLOCK (bd);
- splx (s);
- return EINVAL;
- }
- if (t->c_ispeed && (t->c_ispeed < 300 || t->c_ispeed > 256*1024)) {
- CX_UNLOCK (bd);
- splx (s);
- return EINVAL;
- }
-
- /* And copy them to tty and channel structures. */
- tp->t_ispeed = t->c_ispeed = tp->t_ospeed = t->c_ospeed;
- tp->t_cflag = t->c_cflag;
-
- /* Set character length and parity mode. */
- switch (t->c_cflag & CSIZE) {
- default:
- case CS8: bits = 8; break;
- case CS7: bits = 7; break;
- case CS6: bits = 6; break;
- case CS5: bits = 5; break;
- }
-
- parity = ((t->c_cflag & PARENB) ? 1 : 0) *
- (1 + ((t->c_cflag & PARODD) ? 0 : 1));
-
- /* Set current channel number. */
- if (! d->chan->dtr)
- cx_set_dtr (d->chan, 1);
-
- ttyldoptim (tp);
- cx_set_async_param (d->chan, t->c_ospeed, bits, parity, (t->c_cflag & CSTOPB),
- !(t->c_cflag & PARENB), (t->c_cflag & CRTSCTS),
- (t->c_iflag & IXON), (t->c_iflag & IXANY),
- t->c_cc[VSTART], t->c_cc[VSTOP]);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-}
-
-/*
- * Stop output on a line
- */
-static void cx_stop (struct tty *tp, int flag)
-{
- drv_t *d;
- bdrv_t *bd;
- int s;
-
- d = tp->t_sc;
- bd = d->board->sys;
-
- s = splhigh ();
- CX_LOCK (bd);
- if (tp->t_state & TS_BUSY) {
- /* Stop transmitter */
- CX_DEBUG2 (d, ("cx_stop\n"));
- cx_transmitter_ctl (d->chan, 0);
- }
- CX_UNLOCK (bd);
- splx (s);
-}
-
-/*
- * Process the (delayed) carrier signal setup.
- */
-static void cx_carrier (void *arg)
-{
- drv_t *d = arg;
- bdrv_t *bd = d->board->sys;
- cx_chan_t *c = d->chan;
- int s, cd;
-
- s = splhigh ();
- CX_LOCK (bd);
- cd = cx_get_cd (c);
- if (d->cd != cd) {
- if (cd) {
- CX_DEBUG (d, ("carrier on\n"));
- d->cd = 1;
- CX_UNLOCK (bd);
- splx (s);
- if (d->tty)
- ttyld_modem(d->tty, 1);
- } else {
- CX_DEBUG (d, ("carrier loss\n"));
- d->cd = 0;
- CX_UNLOCK (bd);
- splx (s);
- if (d->tty)
- ttyld_modem(d->tty, 0);
- }
- } else {
- CX_UNLOCK (bd);
- splx (s);
- }
-}
-
-/*
- * Modem signal callback function.
- */
-static void cx_modem (cx_chan_t *c)
-{
- drv_t *d = c->sys;
-
- if (!d || c->mode != M_ASYNC)
- return;
- /* Handle carrier detect/loss. */
- /* Carrier changed - delay processing DCD for a while
- * to give both sides some time to initialize. */
- callout_reset (&d->dcd_timeout_handle, hz/2, cx_carrier, d);
-}
-
-#ifdef NETGRAPH
-static int ng_cx_constructor (node_p node)
-{
- drv_t *d = NG_NODE_PRIVATE (node);
- CX_DEBUG (d, ("Constructor\n"));
- return EINVAL;
-}
-
-static int ng_cx_newhook (node_p node, hook_p hook, const char *name)
-{
- int s;
- drv_t *d = NG_NODE_PRIVATE (node);
- bdrv_t *bd = d->board->sys;
-
- if (d->chan->mode == M_ASYNC)
- return EINVAL;
-
- /* Attach debug hook */
- if (strcmp (name, NG_CX_HOOK_DEBUG) == 0) {
- NG_HOOK_SET_PRIVATE (hook, NULL);
- d->debug_hook = hook;
- return 0;
- }
-
- /* Check for raw hook */
- if (strcmp (name, NG_CX_HOOK_RAW) != 0)
- return EINVAL;
-
- NG_HOOK_SET_PRIVATE (hook, d);
- d->hook = hook;
- s = splhigh ();
- CX_LOCK (bd);
- cx_up (d);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-}
-
-static int print_modems (char *s, cx_chan_t *c, int need_header)
-{
- int status = cx_modem_status (c->sys);
- int length = 0;
-
- if (need_header)
- length += sprintf (s + length, " LE DTR DSR RTS CTS CD\n");
- length += sprintf (s + length, "%4s %4s %4s %4s %4s %4s\n",
- status & TIOCM_LE ? "On" : "-",
- status & TIOCM_DTR ? "On" : "-",
- status & TIOCM_DSR ? "On" : "-",
- status & TIOCM_RTS ? "On" : "-",
- status & TIOCM_CTS ? "On" : "-",
- status & TIOCM_CD ? "On" : "-");
- return length;
-}
-
-static int print_stats (char *s, cx_chan_t *c, int need_header)
-{
- int length = 0;
-
- if (need_header)
- length += sprintf (s + length, " Rintr Tintr Mintr Ibytes Ipkts Ierrs Obytes Opkts Oerrs\n");
- length += sprintf (s + length, "%7ld %7ld %7ld %8ld %7ld %7ld %8ld %7ld %7ld\n",
- c->rintr, c->tintr, c->mintr, c->ibytes, c->ipkts,
- c->ierrs, c->obytes, c->opkts, c->oerrs);
- return length;
-}
-
-static int print_chan (char *s, cx_chan_t *c)
-{
- drv_t *d = c->sys;
- int length = 0;
-
- length += sprintf (s + length, "cx%d", c->board->num * NCHAN + c->num);
- if (d->chan->debug)
- length += sprintf (s + length, " debug=%d", d->chan->debug);
-
- if (cx_get_baud (c))
- length += sprintf (s + length, " %ld", cx_get_baud (c));
- else
- length += sprintf (s + length, " extclock");
-
- if (c->mode == M_HDLC) {
- length += sprintf (s + length, " dpll=%s", cx_get_dpll (c) ? "on" : "off");
- length += sprintf (s + length, " nrzi=%s", cx_get_nrzi (c) ? "on" : "off");
- }
-
- length += sprintf (s + length, " loop=%s", cx_get_loop (c) ? "on\n" : "off\n");
- return length;
-}
-
-static int ng_cx_rcvmsg (node_p node, item_p item, hook_p lasthook)
-{
- drv_t *d = NG_NODE_PRIVATE (node);
- struct ng_mesg *msg;
- struct ng_mesg *resp = NULL;
- int error = 0;
-
- if (!d)
- return EINVAL;
-
- CX_DEBUG (d, ("Rcvmsg\n"));
- NGI_GET_MSG (item, msg);
- switch (msg->header.typecookie) {
- default:
- error = EINVAL;
- break;
-
- case NGM_CX_COOKIE:
- printf ("Don't forget to implement\n");
- error = EINVAL;
- break;
-
- case NGM_GENERIC_COOKIE:
- switch (msg->header.cmd) {
- default:
- error = EINVAL;
- break;
-
- case NGM_TEXT_STATUS: {
- char *s;
- int l = 0;
- int dl = sizeof (struct ng_mesg) + 730;
-
- NG_MKRESPONSE (resp, msg, dl, M_NOWAIT);
- if (! resp) {
- error = ENOMEM;
- break;
- }
- bzero (resp, dl);
- s = (resp)->data;
- l += print_chan (s + l, d->chan);
- l += print_stats (s + l, d->chan, 1);
- l += print_modems (s + l, d->chan, 1);
- strncpy ((resp)->header.cmdstr, "status", NG_CMDSTRSIZ);
- }
- break;
- }
- break;
- }
- NG_RESPOND_MSG (error, node, item, resp);
- NG_FREE_MSG (msg);
- return error;
-}
-
-static int ng_cx_rcvdata (hook_p hook, item_p item)
-{
- drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE(hook));
- struct mbuf *m;
- struct ng_tag_prio *ptag;
- bdrv_t *bd;
- struct ifqueue *q;
- int s;
-
- NGI_GET_M (item, m);
- NG_FREE_ITEM (item);
- if (! NG_HOOK_PRIVATE (hook) || ! d) {
- NG_FREE_M (m);
- return ENETDOWN;
- }
-
- bd = d->board->sys;
- /* Check for high priority data */
- if ((ptag = (struct ng_tag_prio *)m_tag_locate(m, NGM_GENERIC_COOKIE,
- NG_TAG_PRIO, NULL)) != NULL && (ptag->priority > NG_PRIO_CUTOFF) )
- q = &d->hi_queue;
- else
- q = &d->lo_queue;
-
- s = splhigh ();
- CX_LOCK (bd);
- IF_LOCK (q);
- if (_IF_QFULL (q)) {
- IF_UNLOCK (q);
- CX_UNLOCK (bd);
- splx (s);
- NG_FREE_M (m);
- return ENOBUFS;
- }
- _IF_ENQUEUE (q, m);
- IF_UNLOCK (q);
- cx_start (d);
- CX_UNLOCK (bd);
- splx (s);
- return 0;
-}
-
-static int ng_cx_rmnode (node_p node)
-{
- drv_t *d = NG_NODE_PRIVATE (node);
- bdrv_t *bd;
-
- CX_DEBUG (d, ("Rmnode\n"));
- if (d && d->running) {
- int s = splhigh ();
- bd = d->board->sys;
- CX_LOCK (bd);
- cx_down (d);
- CX_UNLOCK (bd);
- splx (s);
- }
-#ifdef KLD_MODULE
- if (node->nd_flags & NGF_REALLY_DIE) {
- NG_NODE_SET_PRIVATE (node, NULL);
- NG_NODE_UNREF (node);
- }
- NG_NODE_REVIVE(node); /* Persistent node */
-#endif
- return 0;
-}
-
-static int ng_cx_connect (hook_p hook)
-{
- drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
-
- callout_reset (&d->timeout_handle, hz, cx_watchdog_timer, d);
- return 0;
-}
-
-static int ng_cx_disconnect (hook_p hook)
-{
- drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
- bdrv_t *bd = d->board->sys;
- int s;
-
- s = splhigh ();
- CX_LOCK (bd);
- if (NG_HOOK_PRIVATE (hook))
- cx_down (d);
- CX_UNLOCK (bd);
- splx (s);
- /* If we were wait it than it reasserted now, just stop it. */
- if (!callout_drain (&d->timeout_handle))
- callout_stop (&d->timeout_handle);
- return 0;
-}
-#endif /*NETGRAPH*/
-
-static int cx_modevent (module_t mod, int type, void *unused)
-{
- static int load_count = 0;
-
- switch (type) {
- case MOD_LOAD:
-#ifdef NETGRAPH
- if (ng_newtype (&typestruct))
- printf ("Failed to register ng_cx\n");
-#endif
- ++load_count;
-
- callout_init (&timeout_handle, 1);
- callout_reset (&timeout_handle, hz*5, cx_timeout, 0);
- /* Software interrupt. */
- swi_add(&tty_intr_event, "cx", cx_softintr, NULL, SWI_TTY,
- INTR_MPSAFE, &cx_fast_ih);
- break;
- case MOD_UNLOAD:
- if (load_count == 1) {
- printf ("Removing device entry for Sigma\n");
-#ifdef NETGRAPH
- ng_rmtype (&typestruct);
-#endif
- }
- /* If we were wait it than it reasserted now, just stop it. */
- if (!callout_drain (&timeout_handle))
- callout_stop (&timeout_handle);
- swi_remove (cx_fast_ih);
- --load_count;
- break;
- case MOD_SHUTDOWN:
- break;
- }
- return 0;
-}
-
-#ifdef NETGRAPH
-static struct ng_type typestruct = {
- .version = NG_ABI_VERSION,
- .name = NG_CX_NODE_TYPE,
- .constructor = ng_cx_constructor,
- .rcvmsg = ng_cx_rcvmsg,
- .shutdown = ng_cx_rmnode,
- .newhook = ng_cx_newhook,
- .connect = ng_cx_connect,
- .rcvdata = ng_cx_rcvdata,
- .disconnect = ng_cx_disconnect,
-};
-#endif /*NETGRAPH*/
-
-#ifdef NETGRAPH
-MODULE_DEPEND (ng_cx, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION);
-#else
-MODULE_DEPEND (isa_cx, sppp, 1, 1, 1);
-#endif
-DRIVER_MODULE (cx, isa, cx_isa_driver, cx_devclass, cx_modevent, NULL);
-MODULE_VERSION (cx, 1);
diff --git a/sys/dev/cx/ng_cx.h b/sys/dev/cx/ng_cx.h
deleted file mode 100644
index 30b3c14daa4e..000000000000
--- a/sys/dev/cx/ng_cx.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*-
- * Defines for Cronyx-Tau adapter driver.
- *
- * Copyright (C) 1999-2004 Cronyx Engineering.
- * Author: Kurakin Roman, <rik@cronyx.ru>
- *
- * This software is distributed with NO WARRANTIES, not even the implied
- * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Authors grant any other persons or organisations a permission to use,
- * modify and redistribute this software in source and binary forms,
- * as long as this message is kept with the software, all derivative
- * works or modified versions.
- *
- * Cronyx Id: ng_cx.h,v 1.1.2.3 2004/01/27 14:39:11 rik Exp $
- * $FreeBSD$
- */
-
-#ifdef NETGRAPH
-
-#ifndef _CX_NETGRAPH_H_
-#define _CX_NETGRAPH_H_
-
-#define NG_CX_NODE_TYPE "cx"
-#define NGM_CX_COOKIE 942763600
-#define NG_CX_HOOK_RAW "rawdata"
-#define NG_CX_HOOK_DEBUG "debug"
-
-#endif /* _CX_NETGRAPH_H_ */
-
-#endif /* NETGRAPH */
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index 4c706413ad2d..249ab4a2165a 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -501,9 +501,6 @@ device cpufreq
# V.35/RS-232/RS-530/RS-449/X.21/G.703/E1/E3/T3/STS-1
# serial adaptor (requires sppp (default), or NETGRAPH if
# NETGRAPH_CRONYX is configured)
-# ctau: Cronyx Tau sync dual port V.35/RS-232/RS-530/RS-449/X.21/G.703/E1
-# serial adaptor (requires sppp (default), or NETGRAPH if
-# NETGRAPH_CRONYX is configured)
# ipw: Intel PRO/Wireless 2100 IEEE 802.11 adapter
# iwi: Intel PRO/Wireless 2200BG/2225BG/2915ABG IEEE 802.11 adapters
# Requires the iwi firmware module
@@ -526,11 +523,6 @@ device ce
device cp
hint.cs.0.at="isa"
hint.cs.0.port="0x300"
-device ctau
-hint.ctau.0.at="isa"
-hint.ctau.0.port="0x240"
-hint.ctau.0.irq="15"
-hint.ctau.0.drq="7"
#options NETGRAPH_CRONYX # Enable NETGRAPH support for Cronyx adapter(s)
options ED_3C503
options ED_HPP
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index e6b56f4cf325..5ade16833877 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -98,7 +98,6 @@ SUBDIR= \
${_cpufreq} \
${_crypto} \
${_cryptodev} \
- ${_ctau} \
ctl \
${_cxgb} \
${_cxgbe} \
@@ -737,9 +736,6 @@ _glxsb= glxsb
_pcfclock= pcfclock
_pst= pst
_sbni= sbni
-.if ${MK_SOURCELESS_UCODE} != "no"
-_ctau= ctau
-.endif
.endif
.if ${MACHINE_CPUARCH} == "arm"