Subject: Re: Keyspan serial driver widgets.
To: Peter Seebach <seebs@plethora.net>
From: Nathan J. Williams <nathanw@wasabisystems.com>
List: port-i386
Date: 03/13/2002 11:41:47
seebs@plethora.net (Peter Seebach) writes:

> Anyway, if I get time, I hope to try to upload some firmware to this widget
> and see what it does.  I have firmware for both of the variants I have
> access to, as well as a number of 'em I don't.

I had a start at this after picking up one of the extremely cute "PDA"
db9 serial adapters; we have a EZ-USB firmware loader,
sys/dev/usb/ezload.[ch], which is used by uyap.c to download the audio
firmware into the Yap! headsets. Putting the keyspan firmware on the
device worked fine. I didn't actually get around to writing the rest
of the serial driver, though. Someone else should :)

And, as you noted, there is some copyright weirdness with the
firmware. From digging through the Linux lists it seemed like the
apparantly-restrictive license was the result of laziness on their
part rather than a deliberate attempt to keep it close to the vest.

(and I am thankful that we don't have the GPL rathole of trying to
decide what the "preferred form of the work for making modifications"
is for device firmware. The Linux folks tied themselves in knots over
that one).

        - Nathan

Index: files.usb
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/usb/files.usb,v
retrieving revision 1.41
diff -c -r1.41 files.usb
*** files.usb	2002/03/09 20:30:44	1.41
--- files.usb	2002/03/13 16:41:20
***************
*** 126,131 ****
--- 126,137 ----
  attach	uyap at uhub
  file	dev/usb/uyap.c			uyap
  
+ 
+ # Keyspan serial firmware loader
+ device	keyspan: ezload
+ attach	keyspan at uhub
+ file	dev/usb/keyspan.c		keyspan
+ 
  # D-Link DSB-R100 FM radio
  device	udsbr: radiodev
  attach	udsbr at uhub
Index: keyspan.c
===================================================================
RCS file: keyspan.c
diff -N keyspan.c
*** /dev/null	Wed Mar 13 18:40:33 2002
--- keyspan.c	Wed Mar 13 18:41:20 2002
***************
*** 0 ****
--- 1,116 ----
+ /*	$NetBSD$	*/
+ 
+ /*
+  * Copyright (c) 2000 The NetBSD Foundation, Inc.
+  * All rights reserved.
+  *
+  * This code is derived from software contributed to The NetBSD Foundation
+  * by  Lennart Augustsson <lennart@augustsson.net>.
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  * 3. All advertising materials mentioning features or use of this software
+  *    must display the following acknowledgement:
+  *        This product includes software developed by the NetBSD
+  *        Foundation, Inc. and its contributors.
+  * 4. Neither the name of The NetBSD Foundation nor the names of its
+  *    contributors may be used to endorse or promote products derived
+  *    from this software without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  * POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
+ #include <sys/cdefs.h>
+ __KERNEL_RCSID(0, "$NetBSD$");
+ 
+ #include <sys/param.h>
+ #include <sys/systm.h>
+ #include <sys/kernel.h>
+ #include <sys/device.h>
+ #include <sys/conf.h>
+ #include <sys/tty.h>
+ 
+ #include <dev/usb/usb.h>
+ #include <dev/usb/usbdi.h>
+ #include <dev/usb/usbdevs.h>
+ 
+ #include <dev/usb/ezload.h>
+ 
+ const struct ezdata keyspan19_firmware[] = {
+ #include "dev/usb/keyspan19_firmware.h"
+ };
+ const struct ezdata *keyspan_firmwares[] = { keyspan19_firmware, NULL };
+ 
+ struct keyspan_softc {
+ 	USBBASEDEVICE		sc_dev;		/* base device */
+ };
+ 
+ USB_DECLARE_DRIVER(keyspan);
+ 
+ USB_MATCH(keyspan)
+ {
+ 	USB_MATCH_START(keyspan, uaa);
+ 	
+ 	if (uaa->iface != NULL)
+ 		return (UMATCH_NONE);
+ 
+ 	/* Match the boot device. */
+ 	if (uaa->vendor == USB_VENDOR_KEYSPAN &&
+ 	    uaa->product == 0x10b)
+ 		return (UMATCH_VENDOR_PRODUCT);
+ 
+ 	return (UMATCH_NONE);
+ }
+ 
+ USB_ATTACH(keyspan)
+ {
+ 	USB_ATTACH_START(keyspan, sc, uaa);
+ 	usbd_device_handle dev = uaa->device;
+ 	usbd_status err;
+ 	char devinfo[1024];
+ 	
+ 	usbd_devinfo(dev, 0, devinfo);
+ 	USB_ATTACH_SETUP;
+ 	printf("%s: %s\n", USBDEVNAME(sc->sc_dev), devinfo);
+ 	printf("%s: downloading firmware\n", USBDEVNAME(sc->sc_dev));
+ 
+ 	err = ezload_downloads_and_reset(dev, keyspan_firmwares);
+ 	if (err) {
+ 		printf("%s: download ezdata error: %s\n",
+ 		       USBDEVNAME(sc->sc_dev), usbd_errstr(err));
+ 		USB_ATTACH_ERROR_RETURN;
+ 	}
+ 	
+ 	printf("%s: firmware download complete, disconnecting.\n",
+ 	       USBDEVNAME(sc->sc_dev));
+ 	USB_ATTACH_SUCCESS_RETURN;
+ }
+ 
+ USB_DETACH(keyspan)
+ {
+ 	/*USB_DETACH_START(keyspan, sc);*/
+ 
+ 	return (0);
+ }
+ 
+ int
+ keyspan_activate(device_ptr_t self, enum devact act)
+ {
+ 	return 0;
+ }
Index: keyspan19_firmware.h
===================================================================
RCS file: keyspan19_firmware.h
diff -N keyspan19_firmware.h
*** /dev/null	Wed Mar 13 18:40:33 2002
--- keyspan19_firmware.h	Wed Mar 13 18:41:20 2002
***************
*** 0 ****
--- 1,162 ----
+ {0x0a,0x0026,
+ 	"\x12\x0D\xBB\x12\x0E\xEE\x12\x0D\x67\x22"},
+ {0x03,0x0033,
+ 	"\x02\x00\x1A"},
+ {0x04,0x001a,
+ 	"\x53\xD8\xEF\x32"},
+ {0x10,0x0003,
+ 	"\x8E\x13\x8F\x14\xE5\x14\x15\x14\xAE\x13\x70\x02\x15\x13\x4E\x60"},
+ {0x07,0x0013,
+ 	"\x05\x12\x0E\xDD\x80\xEE\x22"},
+ {0x03,0x0023,
+ 	"\x02\x00\x46"},
+ {0x10,0x0046,
+ 	"\xC0\xE0\xC0\x83\xC0\x82\xC0\x86\x75\x86\x00\xC0\xD0\x75\xD0\x08"},
+ {0x10,0x0056,
+ 	"\x30\x99\x0E\x30\x08\x07\xA2\x0B\x92\x9B\x85\x35\x99\xC2\x99\xD2"},
+ {0x10,0x0066,
+ 	"\x0F\x20\x0F\x03\x02\x04\x31\xC2\x0F\x20\x02\x03\x02\x02\x56\x20"},
+ {0x10,0x0076,
+ 	"\x08\x03\x02\x01\x27\xE5\x37\xC3\x95\x50\x50\x3E\x20\x09\x36\x20"},
+ {0x10,0x0086,
+ 	"\x06\x33\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x29\x30\x0D\x12\xAF"},
+ {0x10,0x0096,
+ 	"\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\x13\x92"},
+ {0x10,0x00a6,
+ 	"\x0B\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0"},
+ {0x10,0x00b6,
+ 	"\xF5\x35\x02\x04\x2F\xC2\x08\x02\x04\x2F\x90\x7F\xC7\xE4\xF0\xC2"},
+ {0x10,0x00c6,
+ 	"\x02\x30\x0A\x0C\xC2\x0A\x90\x7F\xBB\x04\xF0\xC2\x08\x02\x04\x2F"},
+ {0x10,0x00d6,
+ 	"\x90\x7F\xC8\xE0\x30\xE1\x05\xC2\x08\x02\x04\x2F\x90\x7F\xC9\xE0"},
+ {0x10,0x00e6,
+ 	"\xF5\x50\x90\x7D\xC0\xE0\x13\x92\x0A\x20\x09\x2D\x20\x06\x2A\x90"},
+ {0x10,0x00f6,
+ 	"\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x20\x30\x0D\x11\x90\x7D\xC1\xE0"},
+ {0x03,0x0043,
+ 	"\x02\x0F\x00"},
+ {0x03,0x0000,
+ 	"\x02\x0C\x5D"},
+ {0x40,0x0106,
+ 	"\x13\x92\x0B\xA3\xE0\xF5\x35\x75\x37\x03\x02\x04\x2F\x75\x37\x02\x90\x7D\xC1\xE0\xF5\x35\x02\x04\x2F\x75\x37\x01\xC2\x08\x02\x04\x2F\xE5\x37\xC3\x95\x50\x50\x03\x02\x01\xCF\x90\x7F\xC6\xE0\x30\xE1\x07\xC2\x10\xC2\x03\x02\x04\x2F\x90\x7F\xC7\xE0\xF5\x50\x90"},
+ {0x40,0x0146,
+ 	"\x7E\x40\xE0\x13\x92\x0A\x30\x09\x03\x02\x01\xC7\x20\x06\x72\x20\x00\x6F\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x65\x30\x0D\x10\x90\x7E\x41\xE0\x13\x92\x9B\xA3\xE0\xF5\x99\x75\x37\x03\x80\x09\x90\x7E\x41\xE0\xF5\x99\x75\x37\x02\xE5\x37\xC3\x95\x50\x40\x17\x90"},
+ {0x40,0x0186,
+ 	"\x7F\xC7\xE4\xF0\xC2\x02\x20\x0A\x03\x02\x04\x2F\xC2\x0A\x90\x7F\xBB\x04\xF0\x02\x04\x2F\x30\x0D\x12\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\x13\x92\x0B\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\xF5\x35\xD2\x08\x02\x04"},
+ {0x40,0x01c6,
+ 	"\x2F\x75\x37\x01\xC2\x10\x02\x04\x2F\x30\x09\x03\x02\x02\x51\x20\x06\x79\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x6F\x30\x0D\x12\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\x13\x92\x9B\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0"},
+ {0x40,0x0206,
+ 	"\xF5\x99\xE5\x37\xC3\x95\x50\x40\x17\x90\x7F\xC7\xE4\xF0\xC2\x02\x20\x0A\x03\x02\x04\x2F\xC2\x0A\x90\x7F\xBB\x04\xF0\x02\x04\x2F\x30\x0D\x12\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\x13\x92\x0B\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34"},
+ {0x40,0x0246,
+ 	"\x7E\xF5\x83\xE0\xF5\x35\xD2\x08\x02\x04\x2F\xC2\x10\x02\x04\x2F\x20\x08\x03\x02\x03\x08\xE5\x37\xC3\x95\x50\x50\x3E\x20\x09\x36\x20\x06\x33\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x29\x30\x0D\x12\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\x13"},
+ {0x40,0x0286,
+ 	"\x92\x0B\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xF5\x35\x02\x04\x2F\xC2\x08\x02\x04\x2F\x90\x7F\xC9\xE4\xF0\xD2\x02\x30\x0A\x0C\xC2\x0A\x90\x7F\xBB\x04\xF0\xC2\x08\x02\x04\x2F\x90\x7F\xC6\xE0\x30\xE1\x05\xC2\x08\x02\x04\x2F\x90\x7F\xC7"},
+ {0x40,0x02c6,
+ 	"\xE0\xF5\x50\x90\x7E\x40\xE0\x13\x92\x0A\x20\x09\x2D\x20\x06\x2A\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x20\x30\x0D\x11\x90\x7E\x41\xE0\x13\x92\x0B\xA3\xE0\xF5\x35\x75\x37\x03\x02\x04\x2F\x75\x37\x02\x90\x7E\x41\xE0\xF5\x35\x02\x04\x2F\x75\x37\x01\xC2\x08\x02"},
+ {0x40,0x0306,
+ 	"\x04\x2F\xE5\x37\xC3\x95\x50\x50\x03\x02\x03\xB0\x90\x7F\xC8\xE0\x30\xE1\x07\xC2\x10\xC2\x03\x02\x04\x2F\x90\x7F\xC9\xE0\xF5\x50\x90\x7D\xC0\xE0\x13\x92\x0A\x30\x09\x03\x02\x03\xA8\x20\x06\x72\x20\x00\x6F\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x65\x30\x0D\x10"},
+ {0x40,0x0346,
+ 	"\x90\x7D\xC1\xE0\x13\x92\x9B\xA3\xE0\xF5\x99\x75\x37\x03\x80\x09\x90\x7D\xC1\xE0\xF5\x99\x75\x37\x02\xE5\x37\xC3\x95\x50\x40\x17\x90\x7F\xC9\xE4\xF0\xD2\x02\x20\x0A\x03\x02\x04\x2F\xC2\x0A\x90\x7F\xBB\x04\xF0\x02\x04\x2F\x30\x0D\x12\xAF\x37\x05\x37\x74\xC0"},
+ {0x40,0x0386,
+ 	"\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\x13\x92\x0B\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xF5\x35\xD2\x08\x02\x04\x2F\x75\x37\x01\xC2\x10\x02\x04\x2F\x30\x09\x03\x02\x04\x2D\x20\x06\x74\x90\x7F\x9B\xE0\x30\xE3\x03\x20\x0E\x6A\x30\x0D\x12"},
+ {0x40,0x03c6,
+ 	"\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\x13\x92\x9B\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xF5\x99\xE5\x37\xC3\x95\x50\x40\x13\x90\x7F\xC9\xE4\xF0\xD2\x02\x30\x0A\x35\xC2\x0A\x90\x7F\xBB\x04\xF0\x80\x2C\x30\x0D\x12"},
+ {0x40,0x0406,
+ 	"\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\x13\x92\x0B\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xF5\x35\xD2\x08\x80\x02\xC2\x10\xD2\x12\x20\x98\x03\x02\x05\x6D\xC2\x98\x20\x01\x03\x02\x04\xDA\x20\x11\x27\xAF\x36\x05\x36"},
+ {0x40,0x0446,
+ 	"\x74\x80\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x99\xF0\x30\x0D\x4D\xAF\x36\x05\x36\x74\x80\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x98\xF0\x80\x3A\x85\x99\x10\xE5\x10\xB5\x44\x04\xD2\x06\x80\x2E\xE5\x10\xB5\x43\x04\xC2\x06\x80\x25\xAF\x36\x05\x36\x74\x80\x2F\xF5"},
+ {0x40,0x0486,
+ 	"\x82\xE4\x34\x7E\xF5\x83\xE5\x10\xF0\x30\x0D\x11\xAF\x36\x05\x36\x74\x80\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x98\xF0\xD2\x0C\xE5\x36\xC3\x95\x40\x50\x03\x02\x05\x6B\x90\x7F\xB8\xE0\x30\xE1\x16\xE5\x36\xC3\x94\x40\x50\x03\x02\x05\x6B\x15\x36\x15\x36\x05\x2B"},
+ {0x40,0x04c6,
+ 	"\x43\x33\x01\x02\x05\x6B\x90\x7F\xB7\xE5\x36\xF0\x75\x36\x00\xC2\x01\x02\x05\x6B\x20\x11\x27\xAF\x36\x05\x36\x74\x00\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x99\xF0\x30\x0D\x4D\xAF\x36\x05\x36\x74\x00\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x98\xF0\x80\x3A\x85\x99"},
+ {0x40,0x0506,
+ 	"\x10\xE5\x10\xB5\x44\x04\xD2\x06\x80\x2E\xE5\x10\xB5\x43\x04\xC2\x06\x80\x25\xAF\x36\x05\x36\x74\x00\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x10\xF0\x30\x0D\x11\xAF\x36\x05\x36\x74\x00\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE5\x98\xF0\xD2\x0C\xE5\x36\xC3\x95\x40\x40"},
+ {0x40,0x0546,
+ 	"\x24\x90\x7F\xB6\xE0\x30\xE1\x12\xE5\x36\xC3\x94\x40\x40\x16\x15\x36\x15\x36\x05\x2B\x43\x33\x01\x80\x0B\x90\x7F\xB9\xE5\x36\xF0\x75\x36\x00\xD2\x01\xD2\x12\x30\x12\x05\xC2\x12\x02\x00\x56\xD0\xD0\xD0\x86\xD0\x82\xD0\x83\xD0\xE0\x32\x90\x7F\xCA\xE0\x30\xE1"},
+ {0x40,0x0586,
+ 	"\x03\x02\x06\xA7\xE4\xF5\x13\x74\x40\x25\x13\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xFF\xE5\x13\x7C\x00\x7B\x00\x24\x38\xF9\xEC\x34\x00\xFA\xEF\x12\x0D\x2F\x05\x13\xE5\x13\xB4\x18\xDB\xE5\x38\x60\x0C\x75\xC9\x20\x75\xC8\x34\x85\x39\xCA\x85\x3A\xCB\xE5\x3B\x13\x92"},
+ {0x40,0x05c6,
+ 	"\x0D\x92\x9F\xE5\x3C\x13\x92\x0E\xE5\x3D\x13\x92\x11\xE5\x3E\x60\x09\x90\x7F\x98\xE0\x54\xFB\xF0\x80\x07\x90\x7F\x98\xE0\x44\x04\xF0\xE5\x3F\x60\x09\x90\x7F\x98\xE0\x54\x7F\xF0\x80\x07\x90\x7F\x98\xE0\x44\x80\xF0\xE5\x45\x60\x0B\xC2\x09\xC2\x06\x90\x7F\x95"},
+ {0x40,0x0606,
+ 	"\xE0\x44\x02\xF0\xE5\x46\x60\x0C\xD2\x06\x43\x33\x01\x90\x7F\x95\xE0\x44\x02\xF0\xE5\x47\x60\x0D\xC2\xAF\xC2\x08\xD2\x00\xE4\xF5\x50\xF5\x37\xD2\xAF\xE5\x48\x60\x05\x30\x11\x02\xD2\x06\xE5\x49\x60\x15\x90\x7F\x95\xE0\x54\xFD\xF0\x90\x7F\x9E\xE0\x44\x02\xF0"},
+ {0x40,0x0646,
+ 	"\x90\x7F\x98\xE0\x54\xFD\xF0\xE5\x4A\x60\x0A\xD2\x9C\xC2\x98\x75\x2C\x01\x75\x31\x1E\xE5\x4B\x60\x07\xC2\x9C\xE4\xF5\x36\xF5\x2C\xE5\x4C\x60\x03\xE4\xF5\x36\xE5\x4D\x60\x02\xD2\x04\xE5\x4E\x60\x0A\xE5\x4A\x70\x02\xF5\x31\xE5\x4E\x42\x33\xE5\x4F\x60\x1B\x90"},
+ {0x40,0x0686,
+ 	"\x7F\xD7\x74\x11\xF0\x74\x31\xF0\x74\x12\xF0\x74\x32\xF0\x74\x13\xF0\x74\x33\xF0\x74\x14\xF0\x74\x34\xF0\xD2\x05\xE4\x90\x7F\xCB\xF0\xA2\x09\xE4\x33\xFF\x65\x29\x60\x05\x8F\x29\x43\x33\x01\xA2\x06\xE4\x33\xFF\x65\x2A\x60\x05\x8F\x2A\x43\x33\x01\x90\x7F\x9B"},
+ {0x40,0x06c6,
+ 	"\xE0\x54\x08\xB5\x25\x0A\xE0\x54\x08\x64\x08\xF5\x25\x43\x33\x01\x90\x7F\x9B\xE0\x54\x10\xB5\x26\x0A\xE0\x54\x10\x64\x10\xF5\x26\x43\x33\x01\x90\x7F\x9B\xE0\x54\x40\xB5\x27\x0A\xE0\x54\x40\x64\x40\xF5\x27\x43\x33\x01\x90\x7F\x9B\xE0\x54\x20\xB5\x28\x0A\xE0"},
+ {0x40,0x0706,
+ 	"\x54\x20\x64\x20\xF5\x28\x43\x33\x01\x30\x04\x35\xC2\xAF\x30\x01\x18\x90\x7F\xB8\xE0\x20\xE1\x27\xE5\x36\x60\x09\x90\x7F\xB7\xF0\xE4\xF5\x36\xC2\x01\xC2\x04\x80\x16\x90\x7F\xB6\xE0\x20\xE1\x0F\xE5\x36\x60\x09\x90\x7F\xB9\xF0\xE4\xF5\x36\xD2\x01\xC2\x04\xD2"},
+ {0x40,0x0746,
+ 	"\xAF\x20\x03\x37\x30\x02\x1B\x90\x7F\xC6\xE0\x20\xE1\x2D\x90\x7E\x40\xE0\x13\x92\x0A\x75\x37\x01\x90\x7F\xC7\xE0\xF5\x50\xD2\x03\x80\x19\x90\x7F\xC8\xE0\x20\xE1\x12\x90\x7D\xC0\xE0\x13\x92\x0A\x75\x37\x01\x90\x7F\xC9\xE0\xF5\x50\xD2\x03\x20\x10\x33\x20\x00"},
+ {0x40,0x0786,
+ 	"\x06\xE5\x37\x65\x50\x70\x2A\x30\x03\x1A\x30\x02\x09\xE4\x90\x7F\xC7\xF0\xC2\x02\x80\x07\xE4\x90\x7F\xC9\xF0\xD2\x02\xC2\x03\xE4\xF5\x50\xF5\x37\x30\x0A\x0A\xC2\x0A\xC2\x00\x90\x7F\xBB\x74\x01\xF0\x30\x10\x03\x02\x08\xC1\x20\x03\x03\x02\x08\xC1\x30\x0E\x0A"},
+ {0x40,0x07c6,
+ 	"\x90\x7F\x9B\xE0\x30\xE3\x03\x02\x08\xC1\x30\x06\x03\x02\x08\xC1\x30\x09\x03\x02\x08\xC1\x30\x02\x62\x30\x0D\x12\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\x13\x92\x19\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\xF5\x14\xE5"},
+ {0x40,0x0806,
+ 	"\x37\xC3\x95\x50\x50\x2A\x30\x0D\x12\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\x13\x92\x0B\xAF\x37\x05\x37\x74\x40\x2F\xF5\x82\xE4\x34\x7E\xF5\x83\xE0\xF5\x35\xD2\x08\x80\x6B\xC2\x08\xE4\x90\x7F\xC7\xF0\xC2\x02\x80\x60\x30\x0D\x12\xAF\x37"},
+ {0x40,0x0846,
+ 	"\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\x13\x92\x19\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xF5\x14\xE5\x37\xC3\x95\x50\x50\x2A\x30\x0D\x12\xAF\x37\x05\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\x13\x92\x0B\xAF\x37\x05"},
+ {0x40,0x0886,
+ 	"\x37\x74\xC0\x2F\xF5\x82\xE4\x34\x7D\xF5\x83\xE0\xF5\x35\xD2\x08\x80\x09\xC2\x08\xE4\x90\x7F\xC9\xF0\xD2\x02\x30\x0D\x04\xA2\x19\x92\x9B\xD2\x10\xC2\xAF\x85\x14\x99\x20\x08\x0D\x30\x0A\x0A\xC2\x0A\xC2\x00\x90\x7F\xBB\x74\x01\xF0\xD2\xAF\x90\x7F\xBC\xE0\x20"},
+ {0x40,0x08c6,
+ 	"\xE1\x51\xE5\x33\x60\x4D\xE5\x31\x70\x49\xE5\x33\x30\xE1\x08\xE4\xF5\x2F\x75\x33\x01\x80\x0B\xA2\x05\xE4\x33\xF5\x2F\xC2\x05\xE4\xF5\x33\xE4\xF5\x13\x7E\x00\x7B\x00\x74\x24\x25\x13\xF9\xEE\x34\x00\xFA\x12\x0C\xE9\xFF\x74\x00\x25\x13\xF5\x82\xE4\x34\x7D\xF5"},
+ {0x40,0x0906,
+ 	"\x83\xEF\xF0\x05\x13\xE5\x13\xB4\x0C\xDB\x90\x7F\xBD\x74\x0C\xF0\x75\x31\x10\x22\x90\x7F\xE9\xE0\x12\x0D\x41\x09\xFF\x00\x0A\x73\x01\x0A\xDF\x03\x09\x3D\x06\x09\xF0\x08\x09\xE4\x09\x09\xCC\x0A\x09\xDB\x0B\x00\x00\x0B\x2E\x90\x7F\xEB\xE0\x24\xFE\x60\x16\x14"},
+ {0x40,0x0946,
+ 	"\x60\x57\x24\x02\x70\x76\x74\x0F\x90\x7F\xD4\xF0\x74\x64\x90\x7F\xD5\xF0\x02\x0B\x35\x90\x7F\xEA\xE0\x70\x04\x7F\x02\x80\x02\x7F\x03\x75\x82\xB5\x75\x83\x0F\xEF\xF0\x75\x82\xAE\x75\x83\x0F\xF0\x75\x82\xA7\x75\x83\x0F\xF0\x75\x82\xA0\x75\x83\x0F\xF0\x90\x7F"},
+ {0x40,0x0986,
+ 	"\xEA\xE0\x04\x75\x82\x7B\x75\x83\x0F\xF0\x74\x0F\x90\x7F\xD4\xF0\x74\x76\x90\x7F\xD5\xF0\x02\x0B\x35\x90\x7F\xEA\xE0\xFF\x12\x0E\x44\xEA\x49\x60\x0D\xEA\x90\x7F\xD4\xF0\xE9\x90\x7F\xD5\xF0\x02\x0B\x35\x90\x7F\xB4\xE0\x44\x01\xF0\x02\x0B\x35\x90\x7F\xB4\xE0"},
+ {0x40,0x09c6,
+ 	"\x44\x01\xF0\x02\x0B\x35\x90\x7F\x00\xE5\x19\xF0\x90\x7F\xB5\x74\x01\xF0\x02\x0B\x35\x90\x7F\xEA\xE0\xF5\x19\x02\x0B\x35\x90\x7F\xEA\xE0\xF5\x18\x12\x0D\x67\x02\x0B\x35\x90\x7F\x00\xE5\x18\xF0\x90\x7F\xB5\x74\x01\xF0\x02\x0B\x35\x90\x7F\xE8\xE0\x24\x7F\x60"},
+ {0x40,0x0a06,
+ 	"\x24\x14\x60\x31\x24\x02\x70\x5B\xA2\x13\xE4\x33\xFF\x25\xE0\xFF\xA2\x17\xE4\x33\x4F\x90\x7F\x00\xF0\xE4\xA3\xF0\x90\x7F\xB5\x74\x02\xF0\x02\x0B\x35\xE4\x90\x7F\x00\xF0\xA3\xF0\x90\x7F\xB5\x74\x02\xF0\x02\x0B\x35\x90\x7F\xEC\xE0\xF4\x54\x80\xFF\xC4\x54\x0F"},
+ {0x40,0x0a46,
+ 	"\xFF\xE0\x54\x07\x2F\x25\xE0\x24\xB4\xF5\x82\xE4\x34\x7F\xF5\x83\xE0\x54\xFD\x90\x7F\x00\xF0\xE4\xA3\xF0\x90\x7F\xB5\x74\x02\xF0\x02\x0B\x35\x90\x7F\xB4\xE0\x44\x01\xF0\x02\x0B\x35\x90\x7F\xE8\xE0\x24\xFE\x60\x1D\x24\x02\x60\x03\x02\x0B\x35\x90\x7F\xEA\xE0"},
+ {0x40,0x0a86,
+ 	"\xB4\x01\x05\xC2\x13\x02\x0B\x35\x90\x7F\xB4\xE0\x44\x01\xF0\x02\x0B\x35\x90\x7F\xEA\xE0\x70\x38\x90\x7F\xEC\xE0\xF4\x54\x80\xFF\xC4\x54\x0F\xFF\xE0\x54\x07\x2F\x25\xE0\x24\xB4\xF5\x82\xE4\x34\x7F\xF5\x83\xE4\xF0\x90\x7F\xEC\xE0\x54\x80\xFF\x13\x13\x13\x54"},
+ {0x40,0x0ac6,
+ 	"\x1F\xFF\xE0\x54\x07\x2F\x90\x7F\xD7\xF0\xE0\x44\x20\xF0\x80\x5F\x90\x7F\xB4\xE0\x44\x01\xF0\x80\x56\x90\x7F\xE8\xE0\x24\xFE\x60\x18\x24\x02\x70\x4A\x90\x7F\xEA\xE0\xB4\x01\x04\xD2\x13\x80\x3F\x90\x7F\xB4\xE0\x44\x01\xF0\x80\x36\x90\x7F\xEA\xE0\x70\x20\x90"},
+ {0x40,0x0b06,
+ 	"\x7F\xEC\xE0\xF4\x54\x80\xFF\xC4\x54\x0F\xFF\xE0\x54\x07\x2F\x25\xE0\x24\xB4\xF5\x82\xE4\x34\x7F\xF5\x83\x74\x01\xF0\x80\x10\x90\x7F\xB4\xE0\x44\x01\xF0\x80\x07\x90\x7F\xB4\xE0\x44\x01\xF0\x90\x7F\xB4\xE0\x44\x02\xF0\x22\x20\x15\x03\x02\x0B\xCF\xE5\x31\x60"},
+ {0x40,0x0b46,
+ 	"\x02\x15\x31\xE5\x36\x60\x4F\x65\x34\x70\x45\xE5\x32\xF4\x60\x02\x05\x32\xE5\x32\xC3\x95\x41\x40\x3D\xC2\xAF\x30\x01\x18\x90\x7F\xB8\xE0\x20\xE1\x27\x90\x7F\xB7\xE5\x36\xF0\xC2\x01\xE4\xF5\x36\xF5\x32\xF5\x34\x80\x16\x90\x7F\xB6\xE0\x20\xE1\x0F\x90\x7F\xB9"},
+ {0x40,0x0b86,
+ 	"\xE5\x36\xF0\xD2\x01\xE4\xF5\x36\xF5\x32\xF5\x34\xD2\xAF\x80\x06\x85\x36\x34\xE4\xF5\x32\xE5\x2C\x60\x2F\x20\x0C\x07\x90\x7F\x9B\xE0\x30\xE0\x0F\xE5\x2D\x60\x06\xE4\xF5\x2D\x43\x33\x01\xE4\xF5\x30\x80\x14\xE5\x30\xD3\x95\x42\x50\x0D\xE5\x30\xB5\x42\x06\x75"},
+ {0x40,0x0bc6,
+ 	"\x2D\x01\x43\x33\x01\x05\x30\xC2\x0C\x22\x75\x12\x01\xC2\x14\xC2\x18\xC2\x13\xC2\x17\xC2\x15\xC2\x12\xD2\x16\xE4\xF5\x18\x90\x7F\x92\xE0\x54\xFD\xF0\x90\x7F\xAE\xE0\xFF\xD3\x92\x13\xE4\x33\xFE\xEF\x4E\xF0\xD2\xE8\x43\xD8\x20\x90\x7F\xDE\x74\x01\xF0\x90\x7F"},
+ {0x40,0x0c06,
+ 	"\xDF\xF0\x90\x7F\xAB\x74\xFF\xF0\x90\x7F\xA9\xF0\x90\x7F\xAA\xF0\x53\x91\xEF\x90\x7F\xAF\xE0\x44\x01\xF0\x90\x7F\xAE\xE0\x44\x0D\xF0\xD2\xAF\xD2\xBC\xD2\x19\x12\x0F\x36\xC2\x14\x30\x15\x03\x12\x05\x80\x90\x7F\xD8\xE0\x65\x11\x60\x08\xE0\xF5\x11\x12\x0B\x3D"},
+ {0x40,0x0c46,
+ 	"\x80\xEA\x30\x14\x07\xC2\x14\x12\x09\x1A\x80\xE0\x30\x18\xDD\xC2\x18\x12\x00\x26\x80\xD6\x22\x78\x7F\xE4\xF6\xD8\xFD\x75\x81\x50\x02\x0C\xA4\x02\x0B\xD0\xE4\x93\xA3\xF8\xE4\x93\xA3\x40\x03\xF6\x80\x01\xF2\x08\xDF\xF4\x80\x29\xE4\x93\xA3\xF8\x54\x07\x24\x0C"},
+ {0x40,0x0c86,
+ 	"\xC8\xC3\x33\xC4\x54\x0F\x44\x20\xC8\x83\x40\x04\xF4\x56\x80\x01\x46\xF6\xDF\xE4\x80\x0B\x01\x02\x04\x08\x10\x20\x40\x80\x90\x0E\x00\xE4\x7E\x01\x93\x60\xBC\xA3\xFF\x54\x3F\x30\xE5\x09\x54\x1F\xFE\xE4\x93\xA3\x60\x01\x0E\xCF\x54\xC0\x25\xE0\x60\xA8\x40\xB8"},
+ {0x40,0x0cc6,
+ 	"\xE4\x93\xA3\xFA\xE4\x93\xA3\xF8\xE4\x93\xA3\xC8\xC5\x82\xC8\xCA\xC5\x83\xCA\xF0\xA3\xC8\xC5\x82\xC8\xCA\xC5\x83\xCA\xDF\xE9\xDE\xE7\x80\xBE\xBB\x01\x06\x89\x82\x8A\x83\xE0\x22\x50\x02\xE7\x22\xBB\xFE\x02\xE3\x22\x89\x82\x8A\x83\xE4\x93\x22\xBB\x01\x0C\xE5"},
+ {0x40,0x0d06,
+ 	"\x82\x29\xF5\x82\xE5\x83\x3A\xF5\x83\xE0\x22\x50\x06\xE9\x25\x82\xF8\xE6\x22\xBB\xFE\x06\xE9\x25\x82\xF8\xE2\x22\xE5\x82\x29\xF5\x82\xE5\x83\x3A\xF5\x83\xE4\x93\x22\xBB\x01\x06\x89\x82\x8A\x83\xF0\x22\x50\x02\xF7\x22\xBB\xFE\x01\xF3\x22\xD0\x83\xD0\x82\xF8"},
+ {0x40,0x0d46,
+ 	"\xE4\x93\x70\x12\x74\x01\x93\x70\x0D\xA3\xA3\x93\xF8\x74\x01\x93\xF5\x82\x88\x83\xE4\x73\x74\x02\x93\x68\x60\xEF\xA3\xA3\xA3\x80\xDF\xE4\x90\x7F\x93\xF0\x90\x7F\x9C\x74\x30\xF0\x90\x7F\x96\x74\x10\xF0\x90\x7F\x94\x74\x01\xF0\x90\x7F\x9D\x04\xF0\x90\x7F\x97"},
+ {0x40,0x0d86,
+ 	"\x74\x20\xF0\x90\x7F\x95\x74\x03\xF0\x90\x7F\x9E\x74\x84\xF0\xE4\x90\x7F\x98\xF0\x90\x7F\xC7\xF0\x90\x7F\xC9\xF0\x90\x7F\xCB\xF0\x75\x98\x40\x43\xA8\x10\x90\x7F\xDE\x74\x1F\xF0\x90\x7F\xDF\x74\x0F\xF0\xD2\x15\x22\xE4\x90\x7F\x95\xF0\x90\x7F\x94\xF0\x90\x7F"},
+ {0x40,0x0dc6,
+ 	"\x93\xF0\x90\x7F\x9D\xE0\x44\x02\xF0\x90\x7F\x97\xE0\x44\x02\xF0\x90\x7F\x9D\xE0\x54\xFD\xF0\x90\x7F\x9C\x74\x20\xF0\xE4\x90\x7F\x96\xF0\x90\x7F\x9D\xE0\x44\xFD\xF0\xE4\x90\x7F\x97\xF0\x90\x7F\x9E\x74\xFF\xF0\xE4\x90\x7F\x98\xF0\x22\x0C\x24\x00\x00\x00\x00"},
+ {0x40,0x0e06,
+ 	"\x00\x00\x00\x00\x00\x00\x00\x00\x01\x30\x00\x01\x33\x01\x01\x32\x00\x01\x37\x00\x01\x50\x00\x01\x36\x00\x01\x34\x00\xC1\x05\xC1\x0C\xC1\x03\xC1\x0F\xC1\x04\xC1\x0E\xC1\x11\xC1\x0A\xC1\x10\xC1\x08\xC1\x09\xC1\x06\xC1\x00\xC1\x0D\xC1\x81\xC1\x82\x00\x8F\x13"},
+ {0x40,0x0e46,
+ 	"\xE4\xF5\x14\x75\x15\xFF\x75\x16\x0F\x75\x17\xB9\xAB\x15\xAA\x16\xA9\x17\x90\x00\x01\x12\x0D\x02\xB4\x03\x1D\xAF\x14\x05\x14\xEF\xB5\x13\x01\x22\x12\x0C\xE9\x7E\x00\x29\xFF\xEE\x3A\xA9\x07\x75\x15\xFF\xF5\x16\x89\x17\x80\xD4\x7B\x00\x7A\x00\x79\x00\x22\xC0"},
+ {0x40,0x0e86,
+ 	"\xE0\xC0\x83\xC0\x82\xC0\x85\xC0\x84\xC0\x86\x75\x86\x00\x30\x16\x04\xC2\x16\x80\x02\xD2\x18\x53\x91\xEF\x90\x7F\xAB\x74\x08\xF0\xD0\x86\xD0\x84\xD0\x85\xD0\x82\xD0\x83\xD0\xE0\x32\xC0\xE0\xC0\x83\xC0\x82\xC0\x85\xC0\x84\xC0\x86\x75\x86\x00\x90\x7F\xC4\xE4"},
+ {0x40,0x0ec6,
+ 	"\xF0\x53\x91\xEF\x90\x7F\xAB\x74\x04\xF0\xD0\x86\xD0\x84\xD0\x85\xD0\x82\xD0\x83\xD0\xE0\x32\x74\x00\xF5\x86\x90\xFD\xA5\x7C\x05\xA3\xE5\x82\x45\x83\x70\xF9\x22\x90\x7F\xD6\xE0\x44\x80\xF0\x43\x87\x01\x00\x00\x00\x00\x00\x22\x00\x00\x02\x0F\x0F\x00\x02\x0F"},
+ {0x40,0x0f06,
+ 	"\x04\x00\x02\x0E\xB3\x00\x02\x0E\x85\xC0\xE0\xC0\x83\xC0\x82\xC0\x85\xC0\x84\xC0\x86\x75\x86\x00\xD2\x14\x53\x91\xEF\x90\x7F\xAB\x74\x01\xF0\xD0\x86\xD0\x84\xD0\x85\xD0\x82\xD0\x83\xD0\xE0\x32\x90\x7F\xD6\xE0\x54\xFB\xF0\xE0\x44\x08\xF0\x30\x19\x04\xE0\x44"},
+ {0x40,0x0f46,
+ 	"\x02\xF0\x7F\xF4\x7E\x01\x12\x00\x03\x90\x7F\xD6\xE0\x54\xF7\xF0\xE0\x44\x04\xF0\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x01\x00\x01\xFF\x00\x00\x40\xCD\x06\x07\x01\x01\x00\x01\x02\x00\x02\x09\x02\x43\x00\x01\x01\x00\x80\x32\x09\x04\x00\x00\x07\xFF\x00"},
+ {0x40,0x0f86,
+ 	"\x00\x00\x07\x05\x01\x02\x40\x00\x00\x07\x05\x02\x02\x40\x00\x00\x07\x05\x03\x02\x40\x00\x00\x07\x05\x81\x02\x40\x00\x01\x07\x05\x82\x02\x40\x00\x01\x07\x05\x83\x02\x40\x00\x01\x07\x05\x84\x02\x40\x00\x01\x04\x03\x09\x04\x10\x03\x4B\x00\x65\x00\x79\x00\x73"},
+ {0x17,0x0fc6,
+ 	"\x00\x70\x00\x61\x00\x6E\x00\x0E\x03\x53\x00\x65\x00\x72\x00\x69\x00\x61\x00\x6C\x00\x00\x00"},
+ {0x00,0xffff,
+ 	""},