DEVFS - remove dev_ops_add(), dev_ops_get(), and get_dev()
[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
984263bc
MD
46#include <sys/poll.h>
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
111 struct selinfo selp; /* select / poll */
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
MD
143PDEVSTATIC d_ioctl_t i4btelioctl;
144
984263bc
MD
145PDEVSTATIC d_poll_t i4btelpoll;
146#define POLLFIELD i4btelpoll
984263bc
MD
147
148#define CDEV_MAJOR 56
149
fef8985e
MD
150static struct dev_ops i4btel_ops = {
151 { "i4btel", CDEV_MAJOR, 0 },
152 .d_open = i4btelopen,
153 .d_close = i4btelclose,
154 .d_read = i4btelread,
155 .d_write = i4btelwrite,
156 .d_ioctl = i4btelioctl,
157 .d_poll = POLLFIELD,
984263bc
MD
158};
159
160PDEVSTATIC void i4btelinit(void *unused);
161PDEVSTATIC void i4btelattach(void *);
162
163PSEUDO_SET(i4btelattach, i4b_tel);
164
165/*===========================================================================*
166 * DEVICE DRIVER ROUTINES
167 *===========================================================================*/
168
169/*---------------------------------------------------------------------------*
984263bc
MD
170 * interface attach routine
171 *---------------------------------------------------------------------------*/
172PDEVSTATIC void
173i4btelattach(void *dummy)
174{
175 int i, j;
176
4b1cf444 177 kprintf("i4btel: %d ISDN telephony interface device(s) attached\n", NI4BTEL);
984263bc
MD
178
179 for(i=0; i < NI4BTEL; i++)
180 {
181 for(j=0; j < NOFUNCS; j++)
182 {
183 tel_sc[i][j].devstate = ST_IDLE;
184 tel_sc[i][j].audiofmt = CVT_NONE;
185 tel_sc[i][j].rcvttab = 0;
186 tel_sc[i][j].wcvttab = 0;
187 tel_sc[i][j].result = 0;
188
189 switch(j)
190 {
191 case FUNCTEL: /* normal i4btel device */
fef8985e 192 make_dev(&i4btel_ops, i,
984263bc
MD
193 UID_ROOT, GID_WHEEL,
194 0600, "i4btel%d", i);
195 break;
196
197 case FUNCDIAL: /* i4bteld dialout device */
fef8985e 198 make_dev(&i4btel_ops, i+(1<<UNITBITS),
984263bc
MD
199 UID_ROOT, GID_WHEEL,
200 0600, "i4bteld%d", i);
201 break;
202 }
203 }
204 tel_init_linktab(i);
205 }
206}
207
208/*---------------------------------------------------------------------------*
209 * open tel device
210 *---------------------------------------------------------------------------*/
211PDEVSTATIC int
fef8985e 212i4btelopen(struct dev_open_args *ap)
984263bc 213{
b13267a5 214 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
215 int unit = UNIT(dev);
216 int func = FUNC(dev);
217
218 tel_sc_t *sc;
219
220 if(unit >= NI4BTEL)
221 return(ENXIO);
222
223 sc = &tel_sc[unit][func];
224
225 if(sc->devstate & ST_ISOPEN)
226 return(EBUSY);
227
228 sc->devstate |= ST_ISOPEN;
229
230 if(func == FUNCDIAL)
231 {
232 sc->result = 0;
233 }
234
235 return(0);
236}
237
238/*---------------------------------------------------------------------------*
239 * close tel device
240 *---------------------------------------------------------------------------*/
241PDEVSTATIC int
fef8985e 242i4btelclose(struct dev_close_args *ap)
984263bc 243{
b13267a5 244 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
245 int unit = UNIT(dev);
246 int func = FUNC(dev);
247 tel_sc_t *sc;
248 int error = 0;
984263bc
MD
249
250 if(unit > NI4BTEL)
251 return(ENXIO);
252
253 sc = &tel_sc[unit][func];
254
f18302b6 255 crit_enter();
984263bc
MD
256 sc->devstate &= ~ST_TONE;
257
258 if((func == FUNCTEL) &&
259 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
260 {
261 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
262 {
263 sc->devstate |= ST_WRWAITEMPTY;
264
265 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 266 PCATCH, "wtcl", 0)) != 0)
984263bc
MD
267 {
268 break;
269 }
270 }
271 sc->devstate &= ~ST_WRWAITEMPTY;
272 }
273
274 sc->devstate &= ~ST_ISOPEN;
f18302b6 275 crit_exit();
984263bc
MD
276 wakeup((caddr_t) &sc->tones);
277
278 return(error);
279}
280
281/*---------------------------------------------------------------------------*
282 * i4btelioctl - device driver ioctl routine
283 *---------------------------------------------------------------------------*/
284PDEVSTATIC int
fef8985e 285i4btelioctl(struct dev_ioctl_args *ap)
984263bc 286{
b13267a5 287 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
288 int unit = UNIT(dev);
289 int func = FUNC(dev);
290 int error = 0;
291 struct mbuf *m;
984263bc
MD
292
293 tel_sc_t *sc = &tel_sc[unit][func];
294
295 if(func == FUNCTEL)
296 {
fef8985e 297 switch(ap->a_cmd)
984263bc
MD
298 {
299 case I4B_TEL_GETAUDIOFMT:
fef8985e 300 *(int *)ap->a_data = sc->audiofmt;
984263bc
MD
301 break;
302
303 case I4B_TEL_SETAUDIOFMT:
fef8985e 304 switch (*(int *)ap->a_data)
984263bc
MD
305 {
306 case CVT_NONE:
307 sc->rcvttab = 0;
308 sc->wcvttab = 0;
309 break;
310 case CVT_ALAW2ULAW:
311 /* ISDN: a-law */
312 /* user: u-law */
313 sc->rcvttab = a2u_tab;
314 sc->wcvttab = u2a_tab;
315 break;
316 case CVT_ULAW2ALAW:
317 /* ISDN: u-law */
318 /* user: a-law */
319 sc->rcvttab = u2a_tab;
320 sc->wcvttab = a2u_tab;
321 break;
322 default:
323 error = ENODEV;
324 break;
325 }
326 if(error == 0)
fef8985e 327 sc->audiofmt = *(int *)ap->a_data;
984263bc
MD
328 break;
329
330 case I4B_TEL_EMPTYINPUTQUEUE:
f18302b6 331 crit_enter();
984263bc
MD
332 while((sc->devstate & ST_CONNECTED) &&
333 (sc->devstate & ST_ISOPEN) &&
334 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
335 {
336 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
337 if(m)
338 i4b_Bfreembuf(m);
339 }
f18302b6 340 crit_exit();
984263bc
MD
341 break;
342
343 case I4B_TEL_VR_REQ:
344 {
345 msg_vr_req_t *mvr;
346
fef8985e 347 mvr = (msg_vr_req_t *)ap->a_data;
984263bc
MD
348
349 mvr->version = VERSION;
350 mvr->release = REL;
351 mvr->step = STEP;
352 break;
353 }
354 case I4B_TEL_TONES:
355 {
356 struct i4b_tel_tones *tt;
357
fef8985e 358 tt = (struct i4b_tel_tones *)ap->a_data;
f18302b6 359 crit_enter();
984263bc
MD
360 while ((sc->devstate & ST_TONE) &&
361 sc->tones.duration[sc->toneidx] != 0) {
362 if((error = tsleep((caddr_t) &sc->tones,
377d4740 363 PCATCH, "rtone", 0 )) != 0) {
f18302b6 364 crit_exit();
984263bc
MD
365 return(error);
366 }
367 }
368 if(!(sc->devstate & ST_ISOPEN)) {
f18302b6 369 crit_exit();
984263bc
MD
370 return (EIO);
371 }
372 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 373 crit_exit();
984263bc
MD
374 return (EIO);
375 }
376
377 sc->tones = *tt;
378 sc->toneidx = 0;
379 sc->tonefreq = tt->frequency[0];
380 sc->devstate |= ST_TONE;
f18302b6 381 crit_exit();
984263bc
MD
382 tel_tone(sc);
383 break;
384 }
385
386 default:
387 error = ENOTTY;
388 break;
389 }
390 }
391 else if(func == FUNCDIAL)
392 {
fef8985e 393 switch(ap->a_cmd)
984263bc
MD
394 {
395 default:
396 error = ENOTTY;
397 break;
398 }
399 }
400 return(error);
401}
402
403/*---------------------------------------------------------------------------*
404 * read from tel device
405 *---------------------------------------------------------------------------*/
406PDEVSTATIC int
fef8985e 407i4btelread(struct dev_read_args *ap)
984263bc 408{
b13267a5 409 cdev_t dev = ap->a_head.a_dev;
fef8985e 410 struct uio *uio = ap->a_uio;
984263bc
MD
411 int unit = UNIT(dev);
412 int func = FUNC(dev);
413
414 struct mbuf *m;
984263bc
MD
415 int error = 0;
416
417 tel_sc_t *sc = &tel_sc[unit][func];
418
419 if(!(sc->devstate & ST_ISOPEN))
420 return(EIO);
421
422 if(func == FUNCTEL)
423 {
f18302b6 424 crit_enter();
984263bc
MD
425
426 while((sc->devstate & ST_ISOPEN) &&
427 (sc->devstate & ST_CONNECTED) &&
428 IF_QEMPTY(sc->isdn_linktab->rx_queue))
429 {
430 sc->devstate |= ST_RDWAITDATA;
431
432 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
433
984263bc 434 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
377d4740 435 PCATCH, "rtel", 0 )) != 0)
984263bc
MD
436 {
437 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 438 crit_exit();
984263bc
MD
439 return(error);
440 }
441 }
442
443 if(!(sc->devstate & ST_ISOPEN))
444 {
f18302b6 445 crit_exit();
984263bc
MD
446 return(EIO);
447 }
448
449 if(!(sc->devstate & ST_CONNECTED))
450 {
f18302b6 451 crit_exit();
984263bc
MD
452 return(EIO);
453 }
454
455
fd81ccf9 456 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
984263bc
MD
457
458 if(m && m->m_len > 0)
459 {
94332c29 460 int i;
984263bc
MD
461
462 for(i = 0; i < m->m_len; i++)
463 {
464 /* always reverse bit order from line */
465 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
466
467 /* convert if necessary */
468 if(sc->rcvttab)
469 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
470 }
471 error = uiomove(m->m_data, m->m_len, uio);
472
473 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
474 }
475 else
476 {
477 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
478 error = EIO;
479 }
480
481 if(m)
482 i4b_Bfreembuf(m);
483
f18302b6 484 crit_exit();
984263bc
MD
485 }
486 else if(func == FUNCDIAL)
487 {
f18302b6 488 crit_enter();
984263bc
MD
489 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
490 {
491 sc->devstate |= ST_RDWAITDATA;
492
493 if((error = tsleep((caddr_t) &sc->result,
377d4740 494 PCATCH, "rtel1", 0 )) != 0)
984263bc
MD
495 {
496 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 497 crit_exit();
984263bc
MD
498 return(error);
499 }
500 }
501
502 if(!(sc->devstate & ST_ISOPEN))
503 {
f18302b6 504 crit_exit();
984263bc
MD
505 return(EIO);
506 }
507
508 if(sc->result != 0)
509 {
510 error = uiomove(&sc->result, 1, uio);
511 sc->result = 0;
512 }
513 else
514 {
515 error = EIO;
516 }
517
f18302b6 518 crit_exit();
984263bc
MD
519 }
520 return(error);
521}
522
523/*---------------------------------------------------------------------------*
524 * write to tel device
525 *---------------------------------------------------------------------------*/
526PDEVSTATIC int
fef8985e 527i4btelwrite(struct dev_write_args *ap)
984263bc 528{
b13267a5 529 cdev_t dev = ap->a_head.a_dev;
fef8985e 530 struct uio *uio = ap->a_uio;
984263bc
MD
531 int unit = UNIT(dev);
532 int func = FUNC(dev);
533 struct mbuf *m;
984263bc
MD
534 int error = 0;
535 tel_sc_t *sc = &tel_sc[unit][func];
536
537 if(!(sc->devstate & ST_ISOPEN))
538 {
539 return(EIO);
540 }
541
542 if(func == FUNCTEL)
543 {
f18302b6 544 crit_enter();
984263bc
MD
545
546 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 547 crit_exit();
984263bc
MD
548 return(EIO);
549 }
550
551 sc->devstate &= ~ST_TONE;
fd81ccf9 552 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
984263bc
MD
553 (sc->devstate & ST_ISOPEN))
554 {
555 sc->devstate |= ST_WRWAITEMPTY;
556
984263bc 557 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 558 PCATCH, "wtel", 0)) != 0)
984263bc
MD
559 {
560 sc->devstate &= ~ST_WRWAITEMPTY;
f18302b6 561 crit_exit();
984263bc
MD
562 return(error);
563 }
564 }
984263bc
MD
565
566 if(!(sc->devstate & ST_ISOPEN))
567 {
f18302b6 568 crit_exit();
984263bc
MD
569 return(EIO);
570 }
571
572 if(!(sc->devstate & ST_CONNECTED))
573 {
f18302b6 574 crit_exit();
984263bc
MD
575 return(EIO);
576 }
577
578 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
579 {
94332c29 580 int i;
984263bc
MD
581
582 m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
583
584 error = uiomove(m->m_data, m->m_len, uio);
585
586 for(i = 0; i < m->m_len; i++)
587 {
588 /* convert if necessary */
589 if(sc->wcvttab)
590 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
591
592 /* always reverse bitorder to line */
593 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
594 }
595
984263bc
MD
596 if(IF_QFULL(sc->isdn_linktab->tx_queue))
597 m_freem(m);
598 else
599 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
984263bc
MD
600 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
601 }
602
f18302b6 603 crit_exit();
984263bc
MD
604 }
605 else if(func == FUNCDIAL)
606 {
607#define CMDBUFSIZ 80
608 char cmdbuf[CMDBUFSIZ];
609 int len = min(CMDBUFSIZ-1, uio->uio_resid);
610
611 error = uiomove(cmdbuf, len, uio);
612
613 if(cmdbuf[0] == CMD_DIAL)
614 {
615 i4b_l4_dialoutnumber(BDRV_TEL, unit, len-1, &cmdbuf[1]);
616 }
617 else if(cmdbuf[0] == CMD_HUP)
618 {
619 i4b_l4_drvrdisc(BDRV_TEL, unit);
620 }
621 else if(cmdbuf[0] == CMD_KEYP)
622 {
623 i4b_l4_keypad(BDRV_TEL, unit, len-1, &cmdbuf[1]);
624 }
625 }
626 else
627 {
628 error = EIO;
629 }
630
631 return(error);
632}
633
634/*---------------------------------------------------------------------------*
635 *
636 *---------------------------------------------------------------------------*/
637#define NTONESAMP 32
638static void
639tel_tone(tel_sc_t *sc)
640{
641 struct mbuf *m;
642 u_char *p;
643 int i;
644
645 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
4b1cf444 646 kprintf("no mbuf in tel_tone\n");
984263bc
MD
647 return;
648 }
649 p = m->m_data;
650 m->m_len = 0;
651 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
652
653 if (sc->tones.duration[sc->toneidx] > 0) {
654 if (--sc->tones.duration[sc->toneidx] == 0) {
655 sc->toneidx++;
656 if (sc->toneidx == I4B_TEL_MAXTONES) {
657 sc->devstate &= ~ST_TONE;
658 sc->toneomega = 0;
659 sc->tonefreq = 0;
660 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
661 sc->tones.duration[sc->toneidx] == 0) {
662 sc->devstate &= ~ST_TONE;
663 sc->toneomega = 0;
664 sc->tonefreq = 0;
665 } else {
666 sc->tonefreq = sc->tones.frequency[sc->toneidx];
667 }
668 if (sc->tones.duration[sc->toneidx] == 0) {
669 wakeup((caddr_t) &sc->tones);
670 }
671 }
672 }
673
674 sc->toneomega += sc->tonefreq;
675 if (sc->toneomega >= 8000)
676 sc->toneomega -= 8000;
677 *p++ = bitreverse[sinetab[sc->toneomega]];
678 m->m_len++;
679 }
680 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
681 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
682}
683
984263bc
MD
684/*---------------------------------------------------------------------------*
685 * device driver poll
686 *---------------------------------------------------------------------------*/
687PDEVSTATIC int
fef8985e 688i4btelpoll(struct dev_poll_args *ap)
984263bc 689{
b13267a5 690 cdev_t dev = ap->a_head.a_dev;
984263bc 691 int revents = 0; /* Events we found */
984263bc
MD
692 int unit = UNIT(dev);
693 int func = FUNC(dev);
694
695 tel_sc_t *sc = &tel_sc[unit][func];
696
f18302b6 697 crit_enter();
984263bc
MD
698
699 if(!(sc->devstate & ST_ISOPEN))
700 {
701 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
f18302b6 702 crit_exit();
fef8985e 703 ap->a_events = 0;
984263bc
MD
704 return(0);
705 }
706
707 if(func == FUNCTEL)
708 {
709 /*
710 * Writes are OK if we are connected and the
711 * transmit queue can take them
712 */
713
fef8985e 714 if((ap->a_events & (POLLOUT|POLLWRNORM)) &&
984263bc
MD
715 (sc->devstate & ST_CONNECTED) &&
716 (sc->isdn_linktab != NULL) &&
fd81ccf9 717 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
984263bc
MD
718 {
719 NDBGL4(L4_TELDBG, "i4btel%d, POLLOUT", unit);
fef8985e 720 revents |= (ap->a_events & (POLLOUT|POLLWRNORM));
984263bc
MD
721 }
722
723 /* ... while reads are OK if we have any data */
724
fef8985e 725 if((ap->a_events & (POLLIN|POLLRDNORM)) &&
984263bc
MD
726 (sc->devstate & ST_CONNECTED) &&
727 (sc->isdn_linktab != NULL) &&
728 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
729 {
730 NDBGL4(L4_TELDBG, "i4btel%d, POLLIN", unit);
fef8985e 731 revents |= (ap->a_events & (POLLIN|POLLRDNORM));
984263bc
MD
732 }
733
734 if(revents == 0)
735 {
736 NDBGL4(L4_TELDBG, "i4btel%d, selrecord", unit);
fef8985e 737 selrecord(curthread, &sc->selp);
984263bc
MD
738 }
739 }
740 else if(func == FUNCDIAL)
741 {
fef8985e 742 if(ap->a_events & (POLLOUT|POLLWRNORM))
984263bc
MD
743 {
744 NDBGL4(L4_TELDBG, "i4bteld%d, POLLOUT", unit);
fef8985e 745 revents |= (ap->a_events & (POLLOUT|POLLWRNORM));
984263bc
MD
746 }
747
fef8985e 748 if(ap->a_events & (POLLIN|POLLRDNORM))
984263bc
MD
749 {
750 NDBGL4(L4_TELDBG, "i4bteld%d, POLLIN, result = %d", unit, sc->result);
751 if(sc->result != 0)
fef8985e 752 revents |= (ap->a_events & (POLLIN|POLLRDNORM));
984263bc
MD
753 }
754
755 if(revents == 0)
756 {
757 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
fef8985e 758 selrecord(curthread, &sc->selp);
984263bc
MD
759 }
760 }
f18302b6 761 crit_exit();
fef8985e
MD
762 ap->a_events = revents;
763 return (0);
984263bc
MD
764}
765
984263bc
MD
766/*===========================================================================*
767 * ISDN INTERFACE ROUTINES
768 *===========================================================================*/
769
770/*---------------------------------------------------------------------------*
771* this routine is called from L4 handler at connect time
772 *---------------------------------------------------------------------------*/
773static void
774tel_connect(int unit, void *cdp)
775{
776 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
777
778 /* audio device */
779
780 sc->cdp = (call_desc_t *)cdp;
781
782 sc->devstate |= ST_CONNECTED;
783
784 /* dialer device */
785
786 sc = &tel_sc[unit][FUNCDIAL];
787
788 if(sc->devstate == ST_ISOPEN)
789 {
790 sc->result = RSP_CONN;
791
792 if(sc->devstate & ST_RDWAITDATA)
793 {
794 sc->devstate &= ~ST_RDWAITDATA;
795 wakeup((caddr_t) &sc->result);
796 }
797 selwakeup(&sc->selp);
798 }
799}
800
801/*---------------------------------------------------------------------------*
802 * this routine is called from L4 handler at disconnect time
803 *---------------------------------------------------------------------------*/
804static void
805tel_disconnect(int unit, void *cdp)
806{
807/* call_desc_t *cd = (call_desc_t *)cdp; */
808
809 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
810
811 /* audio device */
812
813 sc->devstate &= ~ST_CONNECTED;
814
815 if(sc->devstate & ST_RDWAITDATA)
816 {
817 sc->devstate &= ~ST_RDWAITDATA;
818 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
819 }
820
821 if(sc->devstate & ST_WRWAITEMPTY)
822 {
823 sc->devstate &= ~ST_WRWAITEMPTY;
824 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
825 }
826
827 /* dialer device */
828
829 sc = &tel_sc[unit][FUNCDIAL];
830
831 if(sc->devstate & ST_ISOPEN)
832 {
833 sc->result = RSP_HUP;
834
835 if(sc->devstate & ST_RDWAITDATA)
836 {
837 sc->devstate &= ~ST_RDWAITDATA;
838 wakeup((caddr_t) &sc->result);
839 }
840 selwakeup(&sc->selp);
841
842 if (sc->devstate & ST_TONE) {
843 sc->devstate &= ~ST_TONE;
844 wakeup((caddr_t) &sc->tones);
845 }
846 }
847}
848
849/*---------------------------------------------------------------------------*
850 * feedback from daemon in case of dial problems
851 *---------------------------------------------------------------------------*/
852static void
853tel_dialresponse(int unit, int status, cause_t cause)
854{
855 tel_sc_t *sc = &tel_sc[unit][FUNCDIAL];
856
857 NDBGL4(L4_TELDBG, "i4btel%d, status=%d, cause=0x%4x", unit, status, cause);
858
859 if((sc->devstate == ST_ISOPEN) && status)
860 {
861 sc->result = RSP_NOA;
862
863 if(sc->devstate & ST_RDWAITDATA)
864 {
865 sc->devstate &= ~ST_RDWAITDATA;
866 wakeup((caddr_t) &sc->result);
867 }
868 selwakeup(&sc->selp);
869 }
870}
871
872/*---------------------------------------------------------------------------*
873 * interface up/down
874 *---------------------------------------------------------------------------*/
875static void
876tel_updown(int unit, int updown)
877{
878}
879
880/*---------------------------------------------------------------------------*
881 * this routine is called from the HSCX interrupt handler
882 * when a new frame (mbuf) has been received and was put on
883 * the rx queue.
884 *---------------------------------------------------------------------------*/
885static void
886tel_rx_data_rdy(int unit)
887{
888 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
889
890 if(sc->devstate & ST_RDWAITDATA)
891 {
892 sc->devstate &= ~ST_RDWAITDATA;
893 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
894 }
895 selwakeup(&sc->selp);
896}
897
898/*---------------------------------------------------------------------------*
899 * this routine is called from the HSCX interrupt handler
900 * when the last frame has been sent out and there is no
901 * further frame (mbuf) in the tx queue.
902 *---------------------------------------------------------------------------*/
903static void
904tel_tx_queue_empty(int unit)
905{
906 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
907
908 if(sc->devstate & ST_WRWAITEMPTY)
909 {
910 sc->devstate &= ~ST_WRWAITEMPTY;
911 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
912 }
913 if(sc->devstate & ST_TONE) {
914 tel_tone(sc);
915 } else {
916 selwakeup(&sc->selp);
917 }
918}
919
920/*---------------------------------------------------------------------------*
921 * this routine is called from the HSCX interrupt handler
922 * each time a packet is received or transmitted.
923 *---------------------------------------------------------------------------*/
924static void
925tel_activity(int unit, int rxtx)
926{
927 if(tel_sc[unit][FUNCTEL].cdp)
928 tel_sc[unit][FUNCTEL].cdp->last_active_time = SECOND;
929}
930
931/*---------------------------------------------------------------------------*
932 * return this drivers linktab address
933 *---------------------------------------------------------------------------*/
934drvr_link_t *
935tel_ret_linktab(int unit)
936{
937 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
938
939 tel_init_linktab(unit);
940 return(&sc->drvr_linktab);
941}
942
943/*---------------------------------------------------------------------------*
944 * setup the isdn_linktab for this driver
945 *---------------------------------------------------------------------------*/
946void
947tel_set_linktab(int unit, isdn_link_t *ilt)
948{
949 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
950 sc->isdn_linktab = ilt;
951}
952
953/*---------------------------------------------------------------------------*
954 * initialize this drivers linktab
955 *---------------------------------------------------------------------------*/
956static void
957tel_init_linktab(int unit)
958{
959 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
960
961 sc->drvr_linktab.unit = unit;
962 sc->drvr_linktab.bch_rx_data_ready = tel_rx_data_rdy;
963 sc->drvr_linktab.bch_tx_queue_empty = tel_tx_queue_empty;
964 sc->drvr_linktab.bch_activity = tel_activity;
965 sc->drvr_linktab.line_connected = tel_connect;
966 sc->drvr_linktab.line_disconnected = tel_disconnect;
967 sc->drvr_linktab.dial_response = tel_dialresponse;
968 sc->drvr_linktab.updown_ind = tel_updown;
969}
970
971/*===========================================================================*
972 * AUDIO FORMAT CONVERSION (produced by running g711conv)
973 *===========================================================================*/
974
975/*---------------------------------------------------------------------------*
976 * A-law to u-law conversion
977 *---------------------------------------------------------------------------*/
978static unsigned char a2u_tab[256] = {
979/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
980/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
981/* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
982/* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
983/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
984/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
985/* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
986/* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
987/* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
988/* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
989/* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
990/* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
991/* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
992/* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
993/* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
994/* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
995/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
996/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
997/* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
998/* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
999/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1000/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1001/* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1002/* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1003/* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1004/* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1005/* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1006/* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1007/* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1008/* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1009/* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1010/* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1011};
1012
1013/*---------------------------------------------------------------------------*
1014 * u-law to A-law conversion
1015 *---------------------------------------------------------------------------*/
1016static unsigned char u2a_tab[256] = {
1017/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1018/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1019/* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1020/* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1021/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1022/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1023/* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1024/* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1025/* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1026/* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1027/* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1028/* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1029/* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1030/* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1031/* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1032/* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1033/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1034/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1035/* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1036/* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1037/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1038/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1039/* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1040/* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1041/* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1042/* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1043/* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1044/* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1045/* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1046/* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1047/* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1048/* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1049};
1050
1051/*---------------------------------------------------------------------------*
1052 * reverse bits in a byte
1053 *---------------------------------------------------------------------------*/
1054static unsigned char bitreverse[256] = {
1055/* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1056/* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1057/* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1058/* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1059/* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1060/* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1061/* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1062/* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1063/* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1064/* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1065/* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1066/* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1067/* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1068/* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1069/* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1070/* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1071/* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1072/* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1073/* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1074/* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1075/* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1076/* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1077/* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1078/* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1079/* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1080/* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1081/* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1082/* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1083/* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1084/* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1085/* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1086/* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1087};
1088
1089static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1090212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1091214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1092208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1093210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1094220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1095222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1096216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1097218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1098196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1099193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1100195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1101205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1102207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1103201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1104203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1105245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1106244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1107247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1108246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1109241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1110240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1111243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1112242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1113253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1114252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1115255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1116254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1117249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1118248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1119251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1120250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1121229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1122229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1123228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1124228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1125231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1126231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1127230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1128230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1129225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1130225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1131224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1132224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1133227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1134227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1135227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1136226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1137226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1138237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1139237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1140236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1141236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1142239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1143239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1144238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1145238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1146238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1147233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1148233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1149232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1150232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1151235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1152235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1153235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1154234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1155234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1156149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1157149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1158149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1159149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1160149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1161148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1162148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1163148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1164148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1165148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1166151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1167151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1168151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1169151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1170151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1171151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1172150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1173150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1174150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1175150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1176150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1177150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1178145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1179145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1180145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1181145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1182145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1183145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1184144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1185144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1186144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1187144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1188144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1189144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1190144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1191147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1192147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1193147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1194147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1195147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1196147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1197147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1198147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1199146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1200146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1201146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1202146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1203146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1204146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1205146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1206146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1207146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1208146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1209157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1210157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1211157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1212157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1213157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1214157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1215157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1216157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1217157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1218157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1219157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1220157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1221157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1222156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1223156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1224156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1225156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1226156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1227156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1228156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1229156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1230156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1231156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1232156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1233156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1234156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1235156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1236156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1237156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1238156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1239156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1240156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1241156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1242156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1243156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1244156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1245156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1246156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1247156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1248156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1249156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1250156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1251156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1252156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1253156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1254156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1255156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1256156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1257156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1258156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1259156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1260156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1261156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1262156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1263156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1264156, 156, 156, 156, 156, 156, 156, 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,
1276157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1277157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1278157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1279146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1280146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1281146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1282146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1283146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1284146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1285146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1286146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1287146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1288147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1289147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1290147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1291147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1292147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1293147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1294147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1295147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1296144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1297144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1298144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1299144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1300144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1301144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1302144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1303145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1304145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1305145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1306145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1307145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1308145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1309145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1310150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1311150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1312150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1313150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1314150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1315150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1316151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1317151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1318151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1319151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1320151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1321148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1322148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1323148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1324148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1325148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1326149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1327149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1328149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1329149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1330149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1331234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1332234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1333234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1334235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1335235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1336232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1337232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1338232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1339233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1340233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1341238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1342238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1343239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1344239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1345236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1346236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1347236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1348237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1349237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1350226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1351226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1352227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1353227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1354224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1355224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1356225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1357225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1358230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1359230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1360231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1361231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1362228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1363228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1364229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1365229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1366250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1367251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1368248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1369249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1370254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1371255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1372252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1373253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1374242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1375243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1376240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1377241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1378246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1379247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1380244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1381245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1382202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1383200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1384206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1385204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1386194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1387192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1388199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1389197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1390219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1391217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1392223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1393221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1394211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1395209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1396215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1397213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
139884, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
139981, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
140082, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
140192, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
140289, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
140391, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
140468, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
140570, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
140667, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
140776, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
140878, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
140975, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1410117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1411116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1412119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1413118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1414113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1415112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1416115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1417114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1418125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1419124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1420127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1421126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1422121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1423120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1424123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1425122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1426101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1427101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1428100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1429100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1430103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1431103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1432102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1433102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
143497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
143597, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
143696, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
143796, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
143899, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
143998, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
144098, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1441109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1442109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1443108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1444108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1445111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1446111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1447111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1448110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1449110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1450105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1451105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1452104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1453104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1454104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1455107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1456107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1457106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1458106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
145921, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146021, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146121, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146221, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146320, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146420, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146520, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146620, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146720, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
146823, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
146923, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
147023, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
147123, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
147222, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147322, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147422, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147522, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147622, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
147717, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
147817, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
147917, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
148017, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
148117, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
148216, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148416, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148516, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148716, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
148819, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
148919, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149019, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149119, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149319, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149419, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149618, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150218, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
151428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154628, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
155818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
156619, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156719, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156819, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156919, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
157019, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
157119, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
157219, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157416, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157516, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157716, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157816, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
157917, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158017, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158117, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158217, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158317, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158422, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158522, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158622, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158722, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158822, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
158923, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
159023, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
159123, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
159223, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
159320, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
159420, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
159520, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
159620, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
159721, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
159821, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
159921, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
160021, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1601106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1602106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1603106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1604107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1605107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1606104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1607104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1608104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1609105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1610105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1611110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1612110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1613111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1614111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1615108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1616108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1617108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1618109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1619109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
162098, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
162198, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
162299, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
162396, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
162496, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
162597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
162697, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1627102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1628102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1629103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1630103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1631100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1632100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1633101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1634101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1635122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1636123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1637120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1638121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1639126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1640127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1641124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1642125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1643114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1644115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1645112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1646113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
1647118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
1648119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1649116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
1650117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
165172, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
165278, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
165377, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
165467, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
165570, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
165668, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
165791, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
165894, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
165992, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
166083, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
166181, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
166284, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
1663
1664/*===========================================================================*/
1665
1666#endif /* NI4BTEL > 0 */