kernel - Remove D_KQFILTER flag
[dragonfly.git] / sys / net / i4b / driver / i4b_tel.c
CommitLineData
984263bc
MD
1/*
2 * Copyright (c) 1997, 2001 Hellmuth Michaelis. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 *---------------------------------------------------------------------------
26 *
27 * i4b_tel.c - device driver for ISDN telephony
28 * --------------------------------------------
29 *
30 * $FreeBSD: src/sys/i4b/driver/i4b_tel.c,v 1.10.2.4 2001/12/16 15:12:57 hm Exp $
4b1cf444 31 * $DragonFly: src/sys/net/i4b/driver/i4b_tel.c,v 1.15 2006/12/22 23:44:55 swildner Exp $
984263bc
MD
32 *
33 * last edit-date: [Sat Aug 11 18:07:05 2001]
34 *
35 *---------------------------------------------------------------------------*/
36
1f2de5d4 37#include "use_i4btel.h"
984263bc
MD
38
39#if NI4BTEL > 0
40
41#undef I4BTELDEBUG
42
43#include <sys/param.h>
44#include <sys/systm.h>
45
f678b81b 46#include <sys/event.h>
984263bc
MD
47
48#include <sys/conf.h>
49#include <sys/uio.h>
50#include <sys/kernel.h>
51#include <sys/mbuf.h>
52#include <sys/socket.h>
53#include <net/if.h>
f18302b6 54#include <sys/thread2.h>
984263bc
MD
55#include <sys/tty.h>
56
57#ifdef DEVFS
58#include <sys/devfsext.h>
59#endif
60
1f2de5d4
MD
61#include <net/i4b/include/machine/i4b_ioctl.h>
62#include <net/i4b/include/machine/i4b_tel_ioctl.h>
63#include <net/i4b/include/machine/i4b_debug.h>
984263bc 64
1f2de5d4
MD
65#include "../include/i4b_global.h"
66#include "../include/i4b_mbuf.h"
67#include "../include/i4b_l3l4.h"
68#include "../layer4/i4b_l4.h"
984263bc
MD
69
70/* minor number: lower 6 bits = unit number */
71
72#define UNITBITS 6
73#define UNITMASK 0x3f
74#define UNIT(n) (minor(n) & UNITMASK)
75
76/* minor number: upper 2 bits = function number */
77
78#define FUNCMASK 0x03
79#define FUNC(n) (((minor(n)) >> UNITBITS) & FUNCMASK)
80
81#define FUNCTEL 0 /* 0 = normal i4btel device */
82#define FUNCDIAL 1 /* 1 = i4bteld dialout device */
83
84#define NOFUNCS 2 /* number of device classes */
85
86typedef struct {
87
88 /* used only in func = FUNCTEL */
89
90 drvr_link_t drvr_linktab; /* driver linktab */
91 isdn_link_t *isdn_linktab; /* isdn linktab */
92 int audiofmt; /* audio format conversion */
93 u_char *rcvttab; /* conversion table on read */
94 u_char *wcvttab; /* conversion table on write */
95 call_desc_t *cdp; /* call descriptor pointer */
96
97 /* used only in func = FUNCDIAL */
98
99 char result; /* result code for dial dev */
100
101 /* used in func = FUNCDIAL and func = FUNCTEL*/
102
103 int devstate; /* state of this unit */
104#define ST_IDLE 0x00 /* idle */
105#define ST_CONNECTED 0x01 /* isdn connected state */
106#define ST_ISOPEN 0x02 /* userland opened */
107#define ST_RDWAITDATA 0x04 /* userland read waiting */
108#define ST_WRWAITEMPTY 0x08 /* userland write waiting */
109#define ST_TONE 0x10 /* tone generator */
110
5b22f1a7 111 struct kqinfo kqp; /* select / poll / kevent */
984263bc
MD
112
113 struct i4b_tel_tones tones;
114 int toneidx;
115 int toneomega;
116 int tonefreq;
117
118} tel_sc_t;
119
120static tel_sc_t tel_sc[NI4BTEL][NOFUNCS];
121
122/* forward decl */
123
124static void tel_rx_data_rdy(int unit);
125static void tel_tx_queue_empty(int unit);
126static void tel_init_linktab(int unit);
127static void tel_connect(int unit, void *cdp);
128static void tel_disconnect(int unit, void *cdp);
129static void tel_tone(tel_sc_t *sc);
130
131/* audio format conversion tables */
132static unsigned char a2u_tab[];
133static unsigned char u2a_tab[];
134static unsigned char bitreverse[];
135static u_char sinetab[];
136
137#define PDEVSTATIC static
138
139PDEVSTATIC d_open_t i4btelopen;
140PDEVSTATIC d_close_t i4btelclose;
141PDEVSTATIC d_read_t i4btelread;
fef8985e 142PDEVSTATIC d_write_t i4btelwrite;
984263bc 143PDEVSTATIC d_ioctl_t i4btelioctl;
f678b81b 144PDEVSTATIC d_kqfilter_t i4btelkqfilter;
984263bc 145
f678b81b
SG
146PDEVSTATIC void i4btelfilt_detach(struct knote *);
147PDEVSTATIC int i4btelfilt_read(struct knote *, long);
148PDEVSTATIC int i4btelfilt_write(struct knote *, long);
149
984263bc
MD
150#define CDEV_MAJOR 56
151
fef8985e 152static struct dev_ops i4btel_ops = {
d4b8aec4 153 { "i4btel", CDEV_MAJOR, 0 },
fef8985e
MD
154 .d_open = i4btelopen,
155 .d_close = i4btelclose,
156 .d_read = i4btelread,
157 .d_write = i4btelwrite,
158 .d_ioctl = i4btelioctl,
f678b81b 159 .d_kqfilter = i4btelkqfilter
984263bc
MD
160};
161
984263bc
MD
162PDEVSTATIC void i4btelattach(void *);
163
164PSEUDO_SET(i4btelattach, i4b_tel);
165
166/*===========================================================================*
167 * DEVICE DRIVER ROUTINES
168 *===========================================================================*/
169
984263bc
MD
170/*---------------------------------------------------------------------------*
171 * interface attach routine
172 *---------------------------------------------------------------------------*/
173PDEVSTATIC void
174i4btelattach(void *dummy)
175{
176 int i, j;
177
4b1cf444 178 kprintf("i4btel: %d ISDN telephony interface device(s) attached\n", NI4BTEL);
984263bc
MD
179
180 for(i=0; i < NI4BTEL; i++)
181 {
182 for(j=0; j < NOFUNCS; j++)
183 {
184 tel_sc[i][j].devstate = ST_IDLE;
185 tel_sc[i][j].audiofmt = CVT_NONE;
186 tel_sc[i][j].rcvttab = 0;
187 tel_sc[i][j].wcvttab = 0;
188 tel_sc[i][j].result = 0;
189
190 switch(j)
191 {
192 case FUNCTEL: /* normal i4btel device */
fef8985e 193 make_dev(&i4btel_ops, i,
984263bc
MD
194 UID_ROOT, GID_WHEEL,
195 0600, "i4btel%d", i);
196 break;
197
198 case FUNCDIAL: /* i4bteld dialout device */
fef8985e 199 make_dev(&i4btel_ops, i+(1<<UNITBITS),
984263bc
MD
200 UID_ROOT, GID_WHEEL,
201 0600, "i4bteld%d", i);
202 break;
203 }
204 }
205 tel_init_linktab(i);
206 }
207}
208
209/*---------------------------------------------------------------------------*
210 * open tel device
211 *---------------------------------------------------------------------------*/
212PDEVSTATIC int
fef8985e 213i4btelopen(struct dev_open_args *ap)
984263bc 214{
b13267a5 215 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
216 int unit = UNIT(dev);
217 int func = FUNC(dev);
218
219 tel_sc_t *sc;
220
221 if(unit >= NI4BTEL)
222 return(ENXIO);
223
224 sc = &tel_sc[unit][func];
225
226 if(sc->devstate & ST_ISOPEN)
227 return(EBUSY);
228
229 sc->devstate |= ST_ISOPEN;
230
231 if(func == FUNCDIAL)
232 {
233 sc->result = 0;
234 }
235
236 return(0);
237}
238
239/*---------------------------------------------------------------------------*
240 * close tel device
241 *---------------------------------------------------------------------------*/
242PDEVSTATIC int
fef8985e 243i4btelclose(struct dev_close_args *ap)
984263bc 244{
b13267a5 245 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
246 int unit = UNIT(dev);
247 int func = FUNC(dev);
248 tel_sc_t *sc;
249 int error = 0;
984263bc
MD
250
251 if(unit > NI4BTEL)
252 return(ENXIO);
253
254 sc = &tel_sc[unit][func];
255
f18302b6 256 crit_enter();
984263bc
MD
257 sc->devstate &= ~ST_TONE;
258
259 if((func == FUNCTEL) &&
260 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
261 {
262 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
263 {
264 sc->devstate |= ST_WRWAITEMPTY;
265
266 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 267 PCATCH, "wtcl", 0)) != 0)
984263bc
MD
268 {
269 break;
270 }
271 }
272 sc->devstate &= ~ST_WRWAITEMPTY;
273 }
274
275 sc->devstate &= ~ST_ISOPEN;
f18302b6 276 crit_exit();
984263bc
MD
277 wakeup((caddr_t) &sc->tones);
278
279 return(error);
280}
281
282/*---------------------------------------------------------------------------*
283 * i4btelioctl - device driver ioctl routine
284 *---------------------------------------------------------------------------*/
285PDEVSTATIC int
fef8985e 286i4btelioctl(struct dev_ioctl_args *ap)
984263bc 287{
b13267a5 288 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
289 int unit = UNIT(dev);
290 int func = FUNC(dev);
291 int error = 0;
292 struct mbuf *m;
984263bc
MD
293
294 tel_sc_t *sc = &tel_sc[unit][func];
295
296 if(func == FUNCTEL)
297 {
fef8985e 298 switch(ap->a_cmd)
984263bc
MD
299 {
300 case I4B_TEL_GETAUDIOFMT:
fef8985e 301 *(int *)ap->a_data = sc->audiofmt;
984263bc
MD
302 break;
303
304 case I4B_TEL_SETAUDIOFMT:
fef8985e 305 switch (*(int *)ap->a_data)
984263bc
MD
306 {
307 case CVT_NONE:
308 sc->rcvttab = 0;
309 sc->wcvttab = 0;
310 break;
311 case CVT_ALAW2ULAW:
312 /* ISDN: a-law */
313 /* user: u-law */
314 sc->rcvttab = a2u_tab;
315 sc->wcvttab = u2a_tab;
316 break;
317 case CVT_ULAW2ALAW:
318 /* ISDN: u-law */
319 /* user: a-law */
320 sc->rcvttab = u2a_tab;
321 sc->wcvttab = a2u_tab;
322 break;
323 default:
324 error = ENODEV;
325 break;
326 }
327 if(error == 0)
fef8985e 328 sc->audiofmt = *(int *)ap->a_data;
984263bc
MD
329 break;
330
331 case I4B_TEL_EMPTYINPUTQUEUE:
f18302b6 332 crit_enter();
984263bc
MD
333 while((sc->devstate & ST_CONNECTED) &&
334 (sc->devstate & ST_ISOPEN) &&
335 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
336 {
337 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
338 if(m)
339 i4b_Bfreembuf(m);
340 }
f18302b6 341 crit_exit();
984263bc
MD
342 break;
343
344 case I4B_TEL_VR_REQ:
345 {
346 msg_vr_req_t *mvr;
347
fef8985e 348 mvr = (msg_vr_req_t *)ap->a_data;
984263bc
MD
349
350 mvr->version = VERSION;
351 mvr->release = REL;
352 mvr->step = STEP;
353 break;
354 }
355 case I4B_TEL_TONES:
356 {
357 struct i4b_tel_tones *tt;
358
fef8985e 359 tt = (struct i4b_tel_tones *)ap->a_data;
f18302b6 360 crit_enter();
984263bc
MD
361 while ((sc->devstate & ST_TONE) &&
362 sc->tones.duration[sc->toneidx] != 0) {
363 if((error = tsleep((caddr_t) &sc->tones,
377d4740 364 PCATCH, "rtone", 0 )) != 0) {
f18302b6 365 crit_exit();
984263bc
MD
366 return(error);
367 }
368 }
369 if(!(sc->devstate & ST_ISOPEN)) {
f18302b6 370 crit_exit();
984263bc
MD
371 return (EIO);
372 }
373 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 374 crit_exit();
984263bc
MD
375 return (EIO);
376 }
377
378 sc->tones = *tt;
379 sc->toneidx = 0;
380 sc->tonefreq = tt->frequency[0];
381 sc->devstate |= ST_TONE;
f18302b6 382 crit_exit();
984263bc
MD
383 tel_tone(sc);
384 break;
385 }
386
387 default:
388 error = ENOTTY;
389 break;
390 }
391 }
392 else if(func == FUNCDIAL)
393 {
fef8985e 394 switch(ap->a_cmd)
984263bc
MD
395 {
396 default:
397 error = ENOTTY;
398 break;
399 }
400 }
401 return(error);
402}
403
404/*---------------------------------------------------------------------------*
405 * read from tel device
406 *---------------------------------------------------------------------------*/
407PDEVSTATIC int
fef8985e 408i4btelread(struct dev_read_args *ap)
984263bc 409{
b13267a5 410 cdev_t dev = ap->a_head.a_dev;
fef8985e 411 struct uio *uio = ap->a_uio;
984263bc
MD
412 int unit = UNIT(dev);
413 int func = FUNC(dev);
414
415 struct mbuf *m;
984263bc
MD
416 int error = 0;
417
418 tel_sc_t *sc = &tel_sc[unit][func];
419
420 if(!(sc->devstate & ST_ISOPEN))
421 return(EIO);
422
423 if(func == FUNCTEL)
424 {
f18302b6 425 crit_enter();
984263bc
MD
426
427 while((sc->devstate & ST_ISOPEN) &&
428 (sc->devstate & ST_CONNECTED) &&
429 IF_QEMPTY(sc->isdn_linktab->rx_queue))
430 {
431 sc->devstate |= ST_RDWAITDATA;
432
433 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
434
984263bc 435 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
377d4740 436 PCATCH, "rtel", 0 )) != 0)
984263bc
MD
437 {
438 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 439 crit_exit();
984263bc
MD
440 return(error);
441 }
442 }
443
444 if(!(sc->devstate & ST_ISOPEN))
445 {
f18302b6 446 crit_exit();
984263bc
MD
447 return(EIO);
448 }
449
450 if(!(sc->devstate & ST_CONNECTED))
451 {
f18302b6 452 crit_exit();
984263bc
MD
453 return(EIO);
454 }
455
456
fd81ccf9 457 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
984263bc
MD
458
459 if(m && m->m_len > 0)
460 {
94332c29 461 int i;
984263bc
MD
462
463 for(i = 0; i < m->m_len; i++)
464 {
465 /* always reverse bit order from line */
466 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
467
468 /* convert if necessary */
469 if(sc->rcvttab)
470 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
471 }
472 error = uiomove(m->m_data, m->m_len, uio);
473
474 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
475 }
476 else
477 {
478 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
479 error = EIO;
480 }
481
482 if(m)
483 i4b_Bfreembuf(m);
484
f18302b6 485 crit_exit();
984263bc
MD
486 }
487 else if(func == FUNCDIAL)
488 {
f18302b6 489 crit_enter();
984263bc
MD
490 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
491 {
492 sc->devstate |= ST_RDWAITDATA;
493
494 if((error = tsleep((caddr_t) &sc->result,
377d4740 495 PCATCH, "rtel1", 0 )) != 0)
984263bc
MD
496 {
497 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 498 crit_exit();
984263bc
MD
499 return(error);
500 }
501 }
502
503 if(!(sc->devstate & ST_ISOPEN))
504 {
f18302b6 505 crit_exit();
984263bc
MD
506 return(EIO);
507 }
508
509 if(sc->result != 0)
510 {
511 error = uiomove(&sc->result, 1, uio);
512 sc->result = 0;
513 }
514 else
515 {
516 error = EIO;
517 }
518
f18302b6 519 crit_exit();
984263bc
MD
520 }
521 return(error);
522}
523
524/*---------------------------------------------------------------------------*
525 * write to tel device
526 *---------------------------------------------------------------------------*/
527PDEVSTATIC int
fef8985e 528i4btelwrite(struct dev_write_args *ap)
984263bc 529{
b13267a5 530 cdev_t dev = ap->a_head.a_dev;
fef8985e 531 struct uio *uio = ap->a_uio;
984263bc
MD
532 int unit = UNIT(dev);
533 int func = FUNC(dev);
534 struct mbuf *m;
984263bc
MD
535 int error = 0;
536 tel_sc_t *sc = &tel_sc[unit][func];
537
538 if(!(sc->devstate & ST_ISOPEN))
539 {
540 return(EIO);
541 }
542
543 if(func == FUNCTEL)
544 {
f18302b6 545 crit_enter();
984263bc
MD
546
547 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 548 crit_exit();
984263bc
MD
549 return(EIO);
550 }
551
552 sc->devstate &= ~ST_TONE;
fd81ccf9 553 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
984263bc
MD
554 (sc->devstate & ST_ISOPEN))
555 {
556 sc->devstate |= ST_WRWAITEMPTY;
557
984263bc 558 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 559 PCATCH, "wtel", 0)) != 0)
984263bc
MD
560 {
561 sc->devstate &= ~ST_WRWAITEMPTY;
f18302b6 562 crit_exit();
984263bc
MD
563 return(error);
564 }
565 }
984263bc
MD
566
567 if(!(sc->devstate & ST_ISOPEN))
568 {
f18302b6 569 crit_exit();
984263bc
MD
570 return(EIO);
571 }
572
573 if(!(sc->devstate & ST_CONNECTED))
574 {
f18302b6 575 crit_exit();
984263bc
MD
576 return(EIO);
577 }
578
579 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
580 {
94332c29 581 int i;
984263bc 582
e54488bb 583 m->m_len = (int)szmin(BCH_MAX_DATALEN, uio->uio_resid);
984263bc 584
e54488bb 585 error = uiomove(m->m_data, (size_t)m->m_len, uio);
984263bc
MD
586
587 for(i = 0; i < m->m_len; i++)
588 {
589 /* convert if necessary */
590 if(sc->wcvttab)
591 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
592
593 /* always reverse bitorder to line */
594 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
595 }
596
984263bc
MD
597 if(IF_QFULL(sc->isdn_linktab->tx_queue))
598 m_freem(m);
599 else
600 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
984263bc
MD
601 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
602 }
603
f18302b6 604 crit_exit();
984263bc
MD
605 }
606 else if(func == FUNCDIAL)
607 {
608#define CMDBUFSIZ 80
609 char cmdbuf[CMDBUFSIZ];
e54488bb 610 int len = (int)szmin(CMDBUFSIZ-1, uio->uio_resid);
984263bc 611
e54488bb 612 error = uiomove(cmdbuf, (size_t)len, uio);
984263bc
MD
613
614 if(cmdbuf[0] == CMD_DIAL)
615 {
616 i4b_l4_dialoutnumber(BDRV_TEL, unit, len-1, &cmdbuf[1]);
617 }
618 else if(cmdbuf[0] == CMD_HUP)
619 {
620 i4b_l4_drvrdisc(BDRV_TEL, unit);
621 }
622 else if(cmdbuf[0] == CMD_KEYP)
623 {
624 i4b_l4_keypad(BDRV_TEL, unit, len-1, &cmdbuf[1]);
625 }
626 }
627 else
628 {
629 error = EIO;
630 }
631
632 return(error);
633}
634
635/*---------------------------------------------------------------------------*
636 *
637 *---------------------------------------------------------------------------*/
638#define NTONESAMP 32
639static void
640tel_tone(tel_sc_t *sc)
641{
642 struct mbuf *m;
643 u_char *p;
644 int i;
645
646 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
4b1cf444 647 kprintf("no mbuf in tel_tone\n");
984263bc
MD
648 return;
649 }
650 p = m->m_data;
651 m->m_len = 0;
652 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
653
654 if (sc->tones.duration[sc->toneidx] > 0) {
655 if (--sc->tones.duration[sc->toneidx] == 0) {
656 sc->toneidx++;
657 if (sc->toneidx == I4B_TEL_MAXTONES) {
658 sc->devstate &= ~ST_TONE;
659 sc->toneomega = 0;
660 sc->tonefreq = 0;
661 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
662 sc->tones.duration[sc->toneidx] == 0) {
663 sc->devstate &= ~ST_TONE;
664 sc->toneomega = 0;
665 sc->tonefreq = 0;
666 } else {
667 sc->tonefreq = sc->tones.frequency[sc->toneidx];
668 }
669 if (sc->tones.duration[sc->toneidx] == 0) {
670 wakeup((caddr_t) &sc->tones);
671 }
672 }
673 }
674
675 sc->toneomega += sc->tonefreq;
676 if (sc->toneomega >= 8000)
677 sc->toneomega -= 8000;
678 *p++ = bitreverse[sinetab[sc->toneomega]];
679 m->m_len++;
680 }
681 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
682 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
683}
684
984263bc
MD
685/*---------------------------------------------------------------------------*
686 * device driver poll
687 *---------------------------------------------------------------------------*/
f678b81b 688PDEVSTATIC struct filterops i4btelfiltops_read =
4c91dbc9 689 { FILTEROP_ISFD, NULL, i4btelfilt_detach, i4btelfilt_read };
f678b81b 690PDEVSTATIC struct filterops i4btelfiltops_write =
4c91dbc9 691 { FILTEROP_ISFD, NULL, i4btelfilt_detach, i4btelfilt_write };
f678b81b
SG
692
693PDEVSTATIC int
694i4btelkqfilter(struct dev_kqfilter_args *ap)
695{
696 cdev_t dev = ap->a_head.a_dev;
697 struct knote *kn = ap->a_kn;
698 int unit = UNIT(dev);
699 int func = FUNC(dev);
700 tel_sc_t *sc = &tel_sc[unit][func];
701 struct klist *klist;
702
703 ap->a_result = 0;
704
705 switch (kn->kn_filter) {
706 case EVFILT_READ:
707 kn->kn_fop = &i4btelfiltops_read;
708 kn->kn_hook = (caddr_t)dev;
709 break;
710 case EVFILT_WRITE:
711 kn->kn_fop = &i4btelfiltops_write;
712 kn->kn_hook = (caddr_t)dev;
713 break;
714 default:
b287d649 715 ap->a_result = EOPNOTSUPP;
f678b81b
SG
716 return (0);
717 }
718
5b22f1a7
SG
719 klist = &sc->kqp.ki_note;
720 knote_insert(klist, kn);
f678b81b
SG
721
722 return (0);
723}
724
725PDEVSTATIC void
726i4btelfilt_detach(struct knote *kn)
727{
728 cdev_t dev = (cdev_t)kn->kn_hook;
729 int unit = UNIT(dev);
730 int func = FUNC(dev);
731 tel_sc_t *sc = &tel_sc[unit][func];
5b22f1a7 732 struct klist *klist = &sc->kqp.ki_note;
f678b81b 733
5b22f1a7 734 knote_remove(klist, kn);
f678b81b
SG
735}
736
737PDEVSTATIC int
738i4btelfilt_read(struct knote *kn, long hint)
739{
740 cdev_t dev = (cdev_t)kn->kn_hook;
741 int unit = UNIT(dev);
742 int func = FUNC(dev);
743 tel_sc_t *sc = &tel_sc[unit][func];
744 int ready = 0;
745
746 crit_enter();
747
748 if (!(sc->devstate & ST_ISOPEN)) {
749 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
750 crit_exit();
751 return (0);
752 }
753
754 switch (func) {
755 case FUNCTEL:
756 /* reads are OK if we have any data */
757 if ((sc->devstate & ST_CONNECTED) &&
758 (sc->isdn_linktab != NULL) &&
759 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
760 {
761 NDBGL4(L4_TELDBG, "i4btel%d, filt readable", unit);
762 ready = 1;
763 }
764
765 break;
766 case FUNCDIAL:
767 NDBGL4(L4_TELDBG, "i4bteld%d, filt readable, result = %d", unit, sc->result);
768 if(sc->result != 0)
769 ready = 1;
770 break;
771 }
772
773 crit_exit();
774
775 return (ready);
776}
777
778PDEVSTATIC int
779i4btelfilt_write(struct knote *kn, long hint)
780{
781 cdev_t dev = (cdev_t)kn->kn_hook;
782 int unit = UNIT(dev);
783 int func = FUNC(dev);
784 tel_sc_t *sc = &tel_sc[unit][func];
785 int ready = 0;
786
787 crit_enter();
788
789 if (!(sc->devstate & ST_ISOPEN)) {
790 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
791 crit_exit();
792 return (0);
793 }
794
795 switch (func) {
796 case FUNCTEL:
797 /*
798 * Writes are OK if we are connected and the
799 * transmit queue can take them
800 */
801 if ((sc->devstate & ST_CONNECTED) &&
802 (sc->isdn_linktab != NULL) &&
803 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
804 {
805 NDBGL4(L4_TELDBG, "i4btel%d, filt writable", unit);
806 ready = 1;
807 }
808 break;
809 case FUNCDIAL:
810 NDBGL4(L4_TELDBG, "i4bteld%d, filt writable", unit);
811 ready = 1;
812 break;
813 }
814
815 crit_exit();
816
817 return (ready);
818}
819
984263bc
MD
820/*===========================================================================*
821 * ISDN INTERFACE ROUTINES
822 *===========================================================================*/
823
824/*---------------------------------------------------------------------------*
825* this routine is called from L4 handler at connect time
826 *---------------------------------------------------------------------------*/
827static void
828tel_connect(int unit, void *cdp)
829{
830 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
831
832 /* audio device */
833
834 sc->cdp = (call_desc_t *)cdp;
835
836 sc->devstate |= ST_CONNECTED;
837
838 /* dialer device */
839
840 sc = &tel_sc[unit][FUNCDIAL];
841
842 if(sc->devstate == ST_ISOPEN)
843 {
844 sc->result = RSP_CONN;
845
846 if(sc->devstate & ST_RDWAITDATA)
847 {
848 sc->devstate &= ~ST_RDWAITDATA;
849 wakeup((caddr_t) &sc->result);
850 }
5b22f1a7 851 KNOTE(&sc->kqp.ki_note, 0);
984263bc
MD
852 }
853}
854
855/*---------------------------------------------------------------------------*
856 * this routine is called from L4 handler at disconnect time
857 *---------------------------------------------------------------------------*/
858static void
859tel_disconnect(int unit, void *cdp)
860{
861/* call_desc_t *cd = (call_desc_t *)cdp; */
862
863 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
864
865 /* audio device */
866
867 sc->devstate &= ~ST_CONNECTED;
868
869 if(sc->devstate & ST_RDWAITDATA)
870 {
871 sc->devstate &= ~ST_RDWAITDATA;
872 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
873 }
874
875 if(sc->devstate & ST_WRWAITEMPTY)
876 {
877 sc->devstate &= ~ST_WRWAITEMPTY;
878 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
879 }
880
881 /* dialer device */
882
883 sc = &tel_sc[unit][FUNCDIAL];
884
885 if(sc->devstate & ST_ISOPEN)
886 {
887 sc->result = RSP_HUP;
888
889 if(sc->devstate & ST_RDWAITDATA)
890 {
891 sc->devstate &= ~ST_RDWAITDATA;
892 wakeup((caddr_t) &sc->result);
893 }
5b22f1a7 894 KNOTE(&sc->kqp.ki_note, 0);
984263bc
MD
895
896 if (sc->devstate & ST_TONE) {
897 sc->devstate &= ~ST_TONE;
898 wakeup((caddr_t) &sc->tones);
899 }
900 }
901}
902
903/*---------------------------------------------------------------------------*
904 * feedback from daemon in case of dial problems
905 *---------------------------------------------------------------------------*/
906static void
907tel_dialresponse(int unit, int status, cause_t cause)
908{
909 tel_sc_t *sc = &tel_sc[unit][FUNCDIAL];
910
911 NDBGL4(L4_TELDBG, "i4btel%d, status=%d, cause=0x%4x", unit, status, cause);
912
913 if((sc->devstate == ST_ISOPEN) && status)
914 {
915 sc->result = RSP_NOA;
916
917 if(sc->devstate & ST_RDWAITDATA)
918 {
919 sc->devstate &= ~ST_RDWAITDATA;
920 wakeup((caddr_t) &sc->result);
921 }
5b22f1a7 922 KNOTE(&sc->kqp.ki_note, 0);
984263bc
MD
923 }
924}
925
926/*---------------------------------------------------------------------------*
927 * interface up/down
928 *---------------------------------------------------------------------------*/
929static void
930tel_updown(int unit, int updown)
931{
932}
933
934/*---------------------------------------------------------------------------*
935 * this routine is called from the HSCX interrupt handler
936 * when a new frame (mbuf) has been received and was put on
937 * the rx queue.
938 *---------------------------------------------------------------------------*/
939static void
940tel_rx_data_rdy(int unit)
941{
942 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
943
944 if(sc->devstate & ST_RDWAITDATA)
945 {
946 sc->devstate &= ~ST_RDWAITDATA;
947 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
948 }
5b22f1a7 949 KNOTE(&sc->kqp.ki_note, 0);
984263bc
MD
950}
951
952/*---------------------------------------------------------------------------*
953 * this routine is called from the HSCX interrupt handler
954 * when the last frame has been sent out and there is no
955 * further frame (mbuf) in the tx queue.
956 *---------------------------------------------------------------------------*/
957static void
958tel_tx_queue_empty(int unit)
959{
960 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
961
962 if(sc->devstate & ST_WRWAITEMPTY)
963 {
964 sc->devstate &= ~ST_WRWAITEMPTY;
965 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
966 }
967 if(sc->devstate & ST_TONE) {
968 tel_tone(sc);
969 } else {
5b22f1a7 970 KNOTE(&sc->kqp.ki_note, 0);
984263bc
MD
971 }
972}
973
974/*---------------------------------------------------------------------------*
975 * this routine is called from the HSCX interrupt handler
976 * each time a packet is received or transmitted.
977 *---------------------------------------------------------------------------*/
978static void
979tel_activity(int unit, int rxtx)
980{
981 if(tel_sc[unit][FUNCTEL].cdp)
982 tel_sc[unit][FUNCTEL].cdp->last_active_time = SECOND;
983}
984
985/*---------------------------------------------------------------------------*
986 * return this drivers linktab address
987 *---------------------------------------------------------------------------*/
988drvr_link_t *
989tel_ret_linktab(int unit)
990{
991 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
992
993 tel_init_linktab(unit);
994 return(&sc->drvr_linktab);
995}
996
997/*---------------------------------------------------------------------------*
998 * setup the isdn_linktab for this driver
999 *---------------------------------------------------------------------------*/
1000void
1001tel_set_linktab(int unit, isdn_link_t *ilt)
1002{
1003 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
1004 sc->isdn_linktab = ilt;
1005}
1006
1007/*---------------------------------------------------------------------------*
1008 * initialize this drivers linktab
1009 *---------------------------------------------------------------------------*/
1010static void
1011tel_init_linktab(int unit)
1012{
1013 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
1014
1015 sc->drvr_linktab.unit = unit;
1016 sc->drvr_linktab.bch_rx_data_ready = tel_rx_data_rdy;
1017 sc->drvr_linktab.bch_tx_queue_empty = tel_tx_queue_empty;
1018 sc->drvr_linktab.bch_activity = tel_activity;
1019 sc->drvr_linktab.line_connected = tel_connect;
1020 sc->drvr_linktab.line_disconnected = tel_disconnect;
1021 sc->drvr_linktab.dial_response = tel_dialresponse;
1022 sc->drvr_linktab.updown_ind = tel_updown;
1023}
1024
1025/*===========================================================================*
1026 * AUDIO FORMAT CONVERSION (produced by running g711conv)
1027 *===========================================================================*/
1028
1029/*---------------------------------------------------------------------------*
1030 * A-law to u-law conversion
1031 *---------------------------------------------------------------------------*/
1032static unsigned char a2u_tab[256] = {
1033/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1034/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1035/* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
1036/* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
1037/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1038/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1039/* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
1040/* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
1041/* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
1042/* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
1043/* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
1044/* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
1045/* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
1046/* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
1047/* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
1048/* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
1049/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1050/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1051/* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
1052/* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
1053/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1054/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1055/* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1056/* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1057/* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1058/* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1059/* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1060/* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1061/* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1062/* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1063/* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1064/* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1065};
1066
1067/*---------------------------------------------------------------------------*
1068 * u-law to A-law conversion
1069 *---------------------------------------------------------------------------*/
1070static unsigned char u2a_tab[256] = {
1071/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1072/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1073/* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1074/* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1075/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1076/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1077/* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1078/* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1079/* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1080/* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1081/* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1082/* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1083/* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1084/* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1085/* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1086/* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1087/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1088/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1089/* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1090/* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1091/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1092/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1093/* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1094/* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1095/* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1096/* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1097/* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1098/* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1099/* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1100/* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1101/* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1102/* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1103};
1104
1105/*---------------------------------------------------------------------------*
1106 * reverse bits in a byte
1107 *---------------------------------------------------------------------------*/
1108static unsigned char bitreverse[256] = {
1109/* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1110/* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1111/* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1112/* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1113/* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1114/* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1115/* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1116/* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1117/* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1118/* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1119/* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1120/* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1121/* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1122/* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1123/* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1124/* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1125/* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1126/* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1127/* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1128/* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1129/* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1130/* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1131/* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1132/* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1133/* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1134/* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1135/* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1136/* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1137/* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1138/* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1139/* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1140/* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1141};
1142
1143static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1144212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1145214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1146208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1147210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1148220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1149222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1150216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1151218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1152196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1153193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1154195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1155205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1156207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1157201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1158203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1159245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1160244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1161247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1162246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1163241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1164240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1165243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1166242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1167253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1168252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1169255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1170254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1171249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1172248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1173251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1174250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1175229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1176229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1177228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1178228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1179231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1180231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1181230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1182230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1183225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1184225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1185224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1186224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1187227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1188227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1189227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1190226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1191226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1192237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1193237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1194236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1195236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1196239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1197239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1198238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1199238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1200238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1201233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1202233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1203232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1204232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1205235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1206235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1207235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1208234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1209234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1210149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1211149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1212149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1213149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1214149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1215148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1216148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1217148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1218148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1219148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1220151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1221151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1222151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1223151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1224151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1225151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1226150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1227150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1228150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1229150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1230150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1231150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1232145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1233145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1234145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1235145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1236145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1237145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1238144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1239144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1240144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1241144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1242144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1243144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1244144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1245147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1246147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1247147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1248147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1249147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1250147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1251147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1252147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1253146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1254146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1255146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1256146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1257146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1258146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1259146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1260146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1261146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1262146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1263157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1264157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1265157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1266157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1267157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1268157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1269157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1270157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1271157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1272157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1273157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1274157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1275157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1276156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1277156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1278156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1279156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1280156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1281156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1282156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1283156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1284156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1285156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1286156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1287156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1288156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1289156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1290156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1291156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1292156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1293156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1294156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1295156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1296156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1297156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1298156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1299156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1300156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1301156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1302156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1303156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1304156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1305156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1306156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1307156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1308156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1309156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1310156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1311156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1312156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1313156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1314156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1315156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1316156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1317156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1318156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157,
1319157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1320157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1321157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1322157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1323157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1324157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1325157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1326157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1327157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1328157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1329157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1330157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1331157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1332157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1333146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1334146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1335146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1336146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1337146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1338146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1339146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1340146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1341146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1342147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1343147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1344147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1345147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1346147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1347147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1348147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1349147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1350144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1351144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1352144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1353144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1354144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1355144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1356144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1357145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1358145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1359145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1360145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1361145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1362145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1363145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1364150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1365150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1366150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1367150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1368150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1369150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1370151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1371151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1372151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1373151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1374151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1375148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1376148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1377148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1378148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1379148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1380149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1381149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1382149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1383149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1384149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1385234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1386234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1387234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1388235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1389235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1390232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1391232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1392232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1393233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1394233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1395238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1396238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1397239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1398239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1399236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1400236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1401236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1402237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1403237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1404226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1405226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1406227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1407227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1408224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1409224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1410225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1411225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1412230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1413230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1414231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1415231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1416228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1417228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1418229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1419229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1420250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1421251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1422248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1423249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1424254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1425255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1426252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1427253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1428242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1429243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1430240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1431241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1432246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1433247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1434244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1435245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1436202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1437200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1438206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1439204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1440194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1441192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1442199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1443197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1444219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1445217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1446223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1447221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1448211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1449209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1450215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1451213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
145284, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
145381, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
145482, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
145592, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
145689, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
145791, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
145868, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
145970, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
146067, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
146176, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
146278, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
146375, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1464117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1465116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1466119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1467118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1468113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1469112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1470115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1471114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1472125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1473124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1474127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1475126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1476121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1477120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1478123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1479122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1480101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1481101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1482100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1483100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1484103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1485103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1486102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1487102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
148897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
148997, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
149096, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
149196, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
149299, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
149398, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
149498, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1495109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1496109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1497108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1498108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1499111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1500111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1501111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1502110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1503110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1504105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1505105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1506104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1507104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1508104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1509107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1510107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1511106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1512106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
151321, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
151421, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
151521, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
151621, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
151720, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
151820, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
151920, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
152020, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
152120, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
152223, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
152323, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
152423, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
152523, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
152622, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
152722, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
152822, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
152922, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
153022, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
153117, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
153217, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
153317, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
153417, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
153517, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
153616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
153716, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
153816, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
153916, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
154016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
154116, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
154219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
154319, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
154419, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
154519, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
154619, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
154719, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
154819, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
154918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155618, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
156828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
156928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
157928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
158928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
159928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
160028, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
160929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
161029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
161129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
161218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161618, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
161918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
162019, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
162119, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
162219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
162319, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
162419, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
162519, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
162619, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
162716, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
162816, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
162916, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
163016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
163116, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
163216, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
163317, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
163417, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
163517, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
163617, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
163717, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
163822, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
163922, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
164022, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
164122, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
164222, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
164323, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
164423, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
164523, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
164623, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
164720, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
164820, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
164920, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
165020, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
165121, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
165221, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
165321, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
165421, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1655106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1656106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1657106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1658107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1659107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1660104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1661104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1662104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1663105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1664105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1665110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1666110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1667111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1668111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1669108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1670108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1671108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1672109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1673109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
167498, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
167598, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
167699, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
167796, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
167896, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
167997, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
168097, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1681102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1682102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1683103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1684103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1685100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1686100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1687101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1688101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1689122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1690123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1691120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1692121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1693126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1694127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1695124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1696125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1697114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1698115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1699112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1700113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
1701118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
1702119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1703116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
1704117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
170572, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
170678, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
170777, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
170867, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
170970, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
171068, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
171191, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
171294, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
171392, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
171483, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
171581, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
171684, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
1717
1718/*===========================================================================*/
1719
1720#endif /* NI4BTEL > 0 */