diff options
author | Kevin Lo <kevlo@cvs.openbsd.org> | 2023-04-28 01:24:15 +0000 |
---|---|---|
committer | Kevin Lo <kevlo@cvs.openbsd.org> | 2023-04-28 01:24:15 +0000 |
commit | b2cbd08f0fb3abb9202ad6db1439587a50c0eae0 (patch) | |
tree | 661787a63f772751850bc7fc8a31ece2ff4350fe | |
parent | 0f75be51a50da9f76eac648408c7be1ce46780a4 (diff) |
Add support for RTL8188FTV chip to urtwn(4).
Tested with Comfast CF-WU710N v4.
"go ahead" deraadt@
OK stsp@
-rw-r--r-- | distrib/amd64/ramdisk_cd/list | 3 | ||||
-rw-r--r-- | distrib/arm64/ramdisk/list | 3 | ||||
-rw-r--r-- | distrib/armv7/ramdisk/list | 3 | ||||
-rw-r--r-- | distrib/i386/ramdisk_cd/list | 3 | ||||
-rw-r--r-- | distrib/macppc/ramdisk/list | 3 | ||||
-rw-r--r-- | distrib/octeon/ramdisk/list | 3 | ||||
-rw-r--r-- | distrib/riscv64/ramdisk/list | 3 | ||||
-rw-r--r-- | share/man/man4/urtwn.4 | 18 | ||||
-rw-r--r-- | share/man/man4/usb.4 | 6 | ||||
-rw-r--r-- | sys/dev/ic/r92creg.h | 248 | ||||
-rw-r--r-- | sys/dev/ic/rtwn.c | 263 | ||||
-rw-r--r-- | sys/dev/ic/rtwnvar.h | 5 | ||||
-rw-r--r-- | sys/dev/microcode/urtwn/Makefile | 5 | ||||
-rw-r--r-- | sys/dev/microcode/urtwn/build.c | 3 | ||||
-rw-r--r-- | sys/dev/microcode/urtwn/microcode.h | 1916 | ||||
-rw-r--r-- | sys/dev/usb/if_urtwn.c | 180 | ||||
-rw-r--r-- | sys/dev/usb/usbdevs | 3 |
17 files changed, 2539 insertions, 129 deletions
diff --git a/distrib/amd64/ramdisk_cd/list b/distrib/amd64/ramdisk_cd/list index f1cd0cdcdb0..2daf2d018ed 100644 --- a/distrib/amd64/ramdisk_cd/list +++ b/distrib/amd64/ramdisk_cd/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.5 2021/10/04 01:34:29 kevlo Exp $ +# $OpenBSD: list,v 1.6 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -97,6 +97,7 @@ COPY ${DESTDIR}/etc/firmware/rtwn-rtl8192cU_B etc/firmware/rtwn-rtl8192cU_B COPY ${DESTDIR}/etc/firmware/rtwn-rtl8723 etc/firmware/rtwn-rtl8723 COPY ${DESTDIR}/etc/firmware/rtwn-rtl8723_B etc/firmware/rtwn-rtl8723_B COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/distrib/arm64/ramdisk/list b/distrib/arm64/ramdisk/list index d8971aa9f7a..38f938ecc1d 100644 --- a/distrib/arm64/ramdisk/list +++ b/distrib/arm64/ramdisk/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.21 2023/04/03 10:51:50 kn Exp $ +# $OpenBSD: list,v 1.22 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -96,6 +96,7 @@ COPY ${DESTDIR}/etc/firmware/atu-rfmd2958smc-ext etc/firmware/atu-rfmd2958smc-ex COPY ${DESTDIR}/etc/firmware/atu-rfmd2958smc-int etc/firmware/atu-rfmd2958smc-int COPY ${DESTDIR}/etc/firmware/rsu-rtl8712 etc/firmware/rsu-rtl8712 COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/distrib/armv7/ramdisk/list b/distrib/armv7/ramdisk/list index 3d3dfff0df9..ad58619d228 100644 --- a/distrib/armv7/ramdisk/list +++ b/distrib/armv7/ramdisk/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.47 2022/02/19 08:33:28 visa Exp $ +# $OpenBSD: list,v 1.48 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -96,6 +96,7 @@ COPY ${DESTDIR}/etc/firmware/atu-rfmd2958smc-ext etc/firmware/atu-rfmd2958smc-ex COPY ${DESTDIR}/etc/firmware/atu-rfmd2958smc-int etc/firmware/atu-rfmd2958smc-int COPY ${DESTDIR}/etc/firmware/rsu-rtl8712 etc/firmware/rsu-rtl8712 COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/distrib/i386/ramdisk_cd/list b/distrib/i386/ramdisk_cd/list index 80b80d3725c..d582b5bdffc 100644 --- a/distrib/i386/ramdisk_cd/list +++ b/distrib/i386/ramdisk_cd/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.4 2021/10/04 01:34:29 kevlo Exp $ +# $OpenBSD: list,v 1.5 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -97,6 +97,7 @@ COPY ${DESTDIR}/etc/firmware/rtwn-rtl8192cU_B etc/firmware/rtwn-rtl8192cU_B COPY ${DESTDIR}/etc/firmware/rtwn-rtl8723 etc/firmware/rtwn-rtl8723 COPY ${DESTDIR}/etc/firmware/rtwn-rtl8723_B etc/firmware/rtwn-rtl8723_B COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/distrib/macppc/ramdisk/list b/distrib/macppc/ramdisk/list index db7d84b9ec2..62d9d91dd6b 100644 --- a/distrib/macppc/ramdisk/list +++ b/distrib/macppc/ramdisk/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.78 2022/05/23 16:58:10 krw Exp $ +# $OpenBSD: list,v 1.79 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -79,6 +79,7 @@ COPY ${DESTDIR}/etc/firmware/rum-rt2573 etc/firmware/rum-rt2573 COPY ${DESTDIR}/etc/firmware/run-rt2870 etc/firmware/run-rt2870 COPY ${DESTDIR}/etc/firmware/run-rt3071 etc/firmware/run-rt3071 COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/distrib/octeon/ramdisk/list b/distrib/octeon/ramdisk/list index f50acd58245..a54d69ed4ca 100644 --- a/distrib/octeon/ramdisk/list +++ b/distrib/octeon/ramdisk/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.32 2021/10/04 01:34:29 kevlo Exp $ +# $OpenBSD: list,v 1.33 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -69,6 +69,7 @@ SPECIAL rm bin/md5 # firmware we might need COPY ${DESTDIR}/etc/firmware/rsu-rtl8712 etc/firmware/rsu-rtl8712 COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/distrib/riscv64/ramdisk/list b/distrib/riscv64/ramdisk/list index b765f96d74d..d04c6addcd8 100644 --- a/distrib/riscv64/ramdisk/list +++ b/distrib/riscv64/ramdisk/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.6 2022/02/03 10:27:33 visa Exp $ +# $OpenBSD: list,v 1.7 2023/04/28 01:24:14 kevlo Exp $ SRCDIRS distrib/special @@ -74,6 +74,7 @@ SPECIAL rm usr/bin/ftp-ssl # firmware we might need COPY ${DESTDIR}/etc/firmware/rsu-rtl8712 etc/firmware/rsu-rtl8712 COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188eu etc/firmware/urtwn-rtl8188eu +COPY ${DESTDIR}/etc/firmware/urtwn-rtl8188ftv etc/firmware/urtwn-rtl8188ftv COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cT etc/firmware/urtwn-rtl8192cT COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192cU etc/firmware/urtwn-rtl8192cU COPY ${DESTDIR}/etc/firmware/urtwn-rtl8192eu etc/firmware/urtwn-rtl8192eu diff --git a/share/man/man4/urtwn.4 b/share/man/man4/urtwn.4 index f76c2c332f8..6dc933d834c 100644 --- a/share/man/man4/urtwn.4 +++ b/share/man/man4/urtwn.4 @@ -1,4 +1,4 @@ -.\" $OpenBSD: urtwn.4,v 1.53 2021/10/24 12:32:42 kn Exp $ +.\" $OpenBSD: urtwn.4,v 1.54 2023/04/28 01:24:14 kevlo Exp $ .\" .\" Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> .\" @@ -14,12 +14,12 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: October 24 2021 $ +.Dd $Mdocdate: April 28 2023 $ .Dt URTWN 4 .Os .Sh NAME .Nm urtwn -.Nd Realtek RTL8188CU/RTL8188EU/RTL8192CU/RTL8192EU USB IEEE 802.11b/g/n wireless +.Nd Realtek RTL8188CU/RTL8188EU/RTL8188FTV/RTL8192CU/RTL8192EU USB IEEE 802.11b/g/n wireless network device .Sh SYNOPSIS .Cd "urtwn* at uhub? port ?" @@ -27,10 +27,10 @@ network device The .Nm driver supports USB 2.0 wireless network devices based on Realtek -RTL8188CU, RTL8188CE-VAU, RTL8188EU, RTL8188RU, RTL8192CU and RTL8192EU -chipsets. +RTL8188CU, RTL8188CE-VAU, RTL8188EU, RTL8188FTV, RTL8188RU, RTL8192CU +and RTL8192EU chipsets. .Pp -The RTL8188CU and RTL8188EU are highly integrated 802.11n adapters +The RTL8188CU, RTL8188EU and RTL8188FTV are highly integrated 802.11n adapters that combine a MAC, a 1T1R capable baseband and an RF in a single chip. They operate in the 2GHz spectrum only. The RTL8188RU is a high-power variant of the RTL8188CU. @@ -92,6 +92,7 @@ the driver when the device is attached: .It Pa /etc/firmware/urtwn-rtl8192cU .It Pa /etc/firmware/urtwn-rtl8192eu .It Pa /etc/firmware/urtwn-rtl8188eu +.It Pa /etc/firmware/urtwn-rtl8188ftv .El .Sh HARDWARE The following adapters should work: @@ -105,9 +106,10 @@ The following adapters should work: .It Asus USB-N10 NANO B1 .It B-Link BL-LW05-5R .It Belkin F7D1102 Surf Wireless Micro +.It Comfast CF-WU710N v4 .It D-Link DWA-121 -.It D-Link DWA-123 rev \&D1 -.It D-Link DWA-125 rev \&D1 +.It D-Link DWA-123 rev D1 +.It D-Link DWA-125 rev D1 .It D-Link DWA-131 rev B, E1 .It D-Link DWA-133 .It D-Link DWA-135 diff --git a/share/man/man4/usb.4 b/share/man/man4/usb.4 index 75262e2b4c3..f65bc86f457 100644 --- a/share/man/man4/usb.4 +++ b/share/man/man4/usb.4 @@ -1,4 +1,4 @@ -.\" $OpenBSD: usb.4,v 1.214 2023/03/31 13:48:34 jmc Exp $ +.\" $OpenBSD: usb.4,v 1.215 2023/04/28 01:24:14 kevlo Exp $ .\" $NetBSD: usb.4,v 1.15 1999/07/29 14:20:32 augustss Exp $ .\" .\" Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: March 31 2023 $ +.Dd $Mdocdate: April 28 2023 $ .Dt USB 4 .Os .Sh NAME @@ -163,7 +163,7 @@ Ralink Technology/MediaTek USB IEEE 802.11b/g wireless network device .It Xr urtw 4 Realtek RTL8187L/RTL8187B USB IEEE 802.11b/g wireless network device .It Xr urtwn 4 -Realtek RTL8188CU/RTL8188EU/RTL8192CU/RTL8192EU USB IEEE 802.11b/g/n wireless +Realtek RTL8188CU/RTL8188EU/RTL8188FTV/RTL8192CU/RTL8192EU USB IEEE 802.11b/g/n wireless network device .It Xr wi 4 Intersil PRISM 2-3 IEEE 802.11b wireless network device diff --git a/sys/dev/ic/r92creg.h b/sys/dev/ic/r92creg.h index b8d1a2f5ed7..cd8b8dab458 100644 --- a/sys/dev/ic/r92creg.h +++ b/sys/dev/ic/r92creg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: r92creg.h,v 1.29 2023/04/27 03:19:45 kevlo Exp $ */ +/* $OpenBSD: r92creg.h,v 1.30 2023/04/28 01:24:14 kevlo Exp $ */ /*- * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> @@ -40,6 +40,7 @@ #define R92C_LDOHCI12_CTRL 0x022 #define R92C_LPLDO_CTRL 0x023 #define R92C_AFE_XTAL_CTRL 0x024 +#define R92C_AFE_LDO_CTRL 0x027 #define R92C_AFE_PLL_CTRL 0x028 #define R92C_AFE_CTRL3 0x02c #define R92C_EFUSE_CTRL 0x030 @@ -148,14 +149,14 @@ #define R92C_UART_TX_DES 0x370 #define R92C_UART_RX_DES 0x378 -#define R92C_VOQ_INFORMATION 0x0400 -#define R92C_VIQ_INFORMATION 0x0404 -#define R92C_BEQ_INFORMATION 0x0408 -#define R92C_BKQ_INFORMATION 0x040C -#define R92C_MGQ_INFORMATION 0x0410 -#define R92C_HGQ_INFORMATION 0x0414 -#define R92C_BCNQ_INFORMATION 0x0418 -#define R92C_CPU_MGQ_INFORMATION 0x041C +#define R92C_VOQ_INFORMATION 0x0400 +#define R92C_VIQ_INFORMATION 0x0404 +#define R92C_BEQ_INFORMATION 0x0408 +#define R92C_BKQ_INFORMATION 0x040c +#define R92C_MGQ_INFORMATION 0x0410 +#define R92C_HGQ_INFORMATION 0x0414 +#define R92C_BCNQ_INFORMATION 0x0418 +#define R92C_CPU_MGQ_INFORMATION 0x041c /* Protocol Configuration. */ #define R92C_FWHW_TXQ_CTRL 0x420 @@ -168,6 +169,7 @@ #define R92C_RARFRC 0x438 #define R92C_RRSR 0x440 #define R92C_ARFR(i) (0x444 + (i) * 4) +#define R88F_AMPDU_MAX_TIME 0x456 #define R92C_AGGLEN_LMT 0x458 #define R92C_AMPDU_MIN_SPACE 0x45c #define R92C_TXPKTBUF_WMAC_LBK_BF_HD 0x45d @@ -177,6 +179,7 @@ #define R92E_DATA_SC 0x483 #define R92C_INIDATA_RATE_SEL(macid) (0x484 + (macid)) #define R92C_QUEUE_CTRL 0x4c6 +#define R88F_HT_SINGLE_AMPDU 0x4c7 #define R92C_MAX_AGGR_NUM 0x4ca #define R92C_BAR_MODE_CTRL 0x4cc #define R88E_TX_RPT_CTRL 0x4ec @@ -230,10 +233,12 @@ #define R92C_BWOPMODE 0x603 #define R92C_TCR 0x604 #define R92C_RCR 0x608 +#define R88F_RX_PKT_LIMIT 0x60c #define R92C_RX_DRVINFO_SZ 0x60f #define R92C_MACID 0x610 #define R92C_BSSID 0x618 #define R92C_MAR 0x620 +#define R88F_USTIME_EDCA 0x638 #define R92C_MAC_SPEC_SIFS 0x63a #define R92C_RESP_SIFS_CCK 0x63c #define R92C_RESP_SIFS_OFDM 0x63e @@ -363,6 +368,10 @@ #define R92C_EFUSE_CTRL_ADDR_S 8 #define R92C_EFUSE_CTRL_VALID 0x80000000 +/* Bits for R92C_EFUSE_TEST. */ +#define R92C_EFUSE_TEST_SEL_M 0x00000300 +#define R92C_EFUSE_TEST_SEL_S 8 + /* Bits for R92C_GPIO_MUXCFG. */ #define R92C_GPIO_MUXCFG_RFKILL 0x0008 #define R92C_GPIO_MUXCFG_ENBT 0x0020 @@ -553,7 +562,10 @@ #define R92C_TXDMA_OFFSET_CHK_DROP_DATA_EN 0x00000200 /* Bits for R92E_AUTO_LLT. */ -#define R92E_AUTO_LLT_EN 0x00010000 +#define R92E_AUTO_LLT_EN 0x00010000 + +/* Bits for R92E_RXDMA_PRO. */ +#define R92E_RXDMA_PRO_DMA_MODE 0x02 /* Bits for R92C_FWHW_TXQ_CTRL. */ #define R92C_FWHW_TXQ_CTRL_AMPDU_RTY_NEW 0x80 @@ -579,6 +591,9 @@ #define R92C_RRSR_RSC_UPSUBCHNL 0x00400000 #define R92C_RRSR_SHORT 0x00800000 +/* Bits for R88F_HT_SINGLE_AMPDU. */ +#define R88F_HT_SINGLE_AMPDU_EN 0x80 + /* Bits for R88E_TX_RPT_CTRL. */ #define R88E_TX_RPT_CTRL_EN 0x01 #define R88E_TX_RPT_CTRL_TIMER_EN 0x02 @@ -798,10 +813,12 @@ #define R92C_HSPI_READBACK(chain) (0x8b8 + (chain) * 4) #define R92C_FPGA1_RFMOD 0x900 #define R92C_FPGA1_TXINFO 0x90c +#define R88F_RX_DFIR 0x954 #define R92C_CCK0_SYSTEM 0xa00 #define R92C_CCK0_AFESETTING 0xa04 #define R92C_OFDM0_TRXPATHENA 0xc04 #define R92C_OFDM0_TRMUXPAR 0xc08 +#define R92C_OFDM0_RXAFE 0xc10 #define R92C_OFDM0_RXIQIMBALANCE(chain) (0xc14 + (chain) * 8) #define R92C_OFDM0_ECCATHRESHOLD 0xc4c #define R92C_OFDM0_AGCCORE1(chain) (0xc50 + (chain) * 8) @@ -1363,6 +1380,35 @@ struct r88e_rom { } __packed; /* + * RTL8188FTV ROM image. + */ +struct r88f_rom { + uint16_t id; + uint8_t reserved1[14]; + struct r88e_tx_pwr txpwr; + uint8_t reserved2[156]; + uint8_t channel_plan; + uint8_t xtal; + uint8_t thermal_meter; + uint8_t iqk_lck; + uint8_t pa_type; + uint8_t lna_type_2g; + uint8_t reserved3[3]; + uint8_t rf_board_opt; + uint8_t rf_feature_opt; + uint8_t rf_bt_opt; + uint8_t eeprom_version; + uint8_t eeprom_customer_id; + uint8_t reserved4[10]; + uint16_t vid; + uint16_t pid; + uint8_t usb_optional_function; + uint8_t reserved5[2]; + uint8_t macaddr[IEEE80211_ADDR_LEN]; + uint8_t reserved6[291]; +} __packed; + +/* * RTL8723A ROM images. */ struct r23a_rom { @@ -1811,6 +1857,33 @@ static const struct { { 0x63f, 0x0e }, { 0x640, 0x40 }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 }, { 0x70b, 0x87 } +}, rtl8188ftv_mac[] = { + { 0x024, 0xdf }, { 0x025, 0x07 }, { 0x02b, 0x1c }, { 0x283, 0x20 }, + { 0x421, 0x0f }, { 0x428, 0x0a }, { 0x429, 0x10 }, { 0x430, 0x00 }, + { 0x431, 0x00 }, { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, + { 0x435, 0x05 }, { 0x436, 0x07 }, { 0x437, 0x08 }, { 0x43c, 0x04 }, + { 0x43d, 0x05 }, { 0x43e, 0x07 }, { 0x43f, 0x08 }, { 0x440, 0x5d }, + { 0x441, 0x01 }, { 0x442, 0x00 }, { 0x444, 0x10 }, { 0x445, 0x00 }, + { 0x446, 0x00 }, { 0x447, 0x00 }, { 0x448, 0x00 }, { 0x449, 0xf0 }, + { 0x44a, 0x0f }, { 0x44b, 0x3e }, { 0x44c, 0x10 }, { 0x44d, 0x00 }, + { 0x44e, 0x00 }, { 0x44f, 0x00 }, { 0x450, 0x00 }, { 0x451, 0xf0 }, + { 0x452, 0x0f }, { 0x453, 0x00 }, { 0x456, 0x5e }, { 0x460, 0x44 }, + { 0x461, 0x44 }, { 0x4bc, 0xc0 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, + { 0x4cc, 0xff }, { 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, + { 0x501, 0xa2 }, { 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, + { 0x505, 0xa3 }, { 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, + { 0x509, 0xa4 }, { 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, + { 0x50d, 0xa4 }, { 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, + { 0x514, 0x0a }, { 0x516, 0x0a }, { 0x525, 0x4f }, { 0x550, 0x10 }, + { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55c, 0x28 }, { 0x55d, 0xff }, + { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff }, + { 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff }, + { 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x28 }, + { 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e }, + { 0x640, 0x40 }, { 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 }, + { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 }, + { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 }, + { 0x70b, 0x87 } }, rtl8192cu_mac[] = { { 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 }, { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, @@ -2378,6 +2451,104 @@ static const struct r92c_bb_prog rtl8188eu_bb_prog = { }; /* + * RTL8188FTV. + */ +static const uint16_t rtl8188ftv_bb_regs[] = { + 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c, 0x820, + 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844, + 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868, + 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 0x888, 0x88c, + 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908, 0x90c, 0x910, + 0x914, 0x948, 0x94c, 0x950, 0x954, 0x958, 0x95c, 0x96c, 0xa00, + 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24, + 0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xa84, 0xa88, + 0xa8c, 0xa90, 0xa94, 0xa98, 0xa9c, 0xaa0, 0xb2c, 0xc00, 0xc04, + 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, + 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, + 0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, + 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, + 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, + 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, + 0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, + 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, + 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, + 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, + 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, + 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe60, 0xe64, + 0xe6c, 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, + 0xed0, 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xf14, 0xf4c, 0xf00 +}; + +static const uint32_t rtl8188ftv_bb_vals[] = { + 0x80045700, 0x00000001, 0x0000fc00, 0x0000000a, 0x10001331, + 0x020c3d10, 0x00200385, 0x00000000, 0x01000100, 0x00390204, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, + 0x00030000, 0x00000000, 0x569a569a, 0x569a569a, 0x00000130, + 0x00000000, 0x00000000, 0x27272700, 0x00000000, 0x25004000, + 0x00000808, 0x004f0201, 0xb0000b1e, 0x00000007, 0x00000000, + 0xccc000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00706050, + 0x00000000, 0x00000023, 0x00000000, 0x81121111, 0x00000002, + 0x00000201, 0x99000000, 0x00000010, 0x20003000, 0x4a880000, + 0x4bc5d87a, 0x04eb9b79, 0x00000003, 0x00d047c8, 0x80ff800c, + 0x8c898300, 0x2e7f120f, 0x9500bb78, 0x1114d028, 0x00881117, + 0x89140f00, 0xd1d80000, 0x5a7da0bd, 0x0000223b, 0x00d30000, + 0x101fbf00, 0x00000007, 0x00000900, 0x225b0606, 0x218075b1, + 0x00120000, 0x040c0000, 0x12345678, 0xabcdef00, 0x001b1b89, + 0x05100000, 0x3f000000, 0x00000000, 0x00000000, 0x48071d40, + 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x18800000, 0x40000100, + 0x08800000, 0x40000100, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x69e9cc4a, 0x31000040, 0x21688080, 0x00001714, + 0x1f78403f, 0x00010036, 0xec020107, 0x007f037f, 0x69553420, + 0x43bc0094, 0x00013169, 0x00250492, 0x00000000, 0x7112848b, + 0x47c07bff, 0x00000036, 0x2c7f000d, 0x020600db, 0x0000001f, + 0x00b91612, 0x390000e4, 0x11f60000, 0x40000100, 0x20200000, + 0x00091521, 0x00000000, 0x00121820, 0x00007f7f, 0x00000000, + 0x000300a0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x28000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 0x00766932, + 0x00222222, 0x10000000, 0x37644302, 0x2f97d40c, 0x04030740, + 0x40020401, 0x0000907f, 0x20010201, 0xa0633333, 0x3333bc53, + 0x7a8f5b6f, 0xcb979975, 0x00000000, 0x80608000, 0x98000000, + 0x40127353, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x6437140a, 0x00000000, 0x00000282, 0x30032064, 0x4653de68, + 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 0x322c2220, + 0x000e3c24, 0x2d2d2d2d, 0x2d2d2d2d, 0x0390272d, 0x2d2d2d2d, + 0x2d2d2d2d, 0x2d2d2d2d, 0x2d2d2d2d, 0x00000000, 0x1000dc1f, + 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800, + 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102, + 0x28160d05, 0x00000008, 0x021400a0, 0x281600a0, 0x01c00010, + 0x01c00010, 0x02000010, 0x02000010, 0x02000010, 0x02000010, + 0x01c00010, 0x02000010, 0x01c00010, 0x01c00010, 0x01c00010, + 0x01c00010, 0x00000010, 0x00000010, 0x03c00010, 0x00000003, + 0x00000000, 0x00000300 +}; + +static const uint32_t rtl8188ftv_agc_vals[] = { + 0xfc000001, 0xfb010001, 0xfa020001, 0xf9030001, 0xf8040001, + 0xf7050001, 0xf6060001, 0xf5070001, 0xf4080001, 0xf3090001, + 0xf20a0001, 0xf10b0001, 0xf00c0001, 0xef0d0001, 0xee0e0001, + 0xed0f0001, 0xec100001, 0xeb110001, 0xea120001, 0xe9130001, + 0xe8140001, 0xe7150001, 0xe6160001, 0xe5170001, 0xe4180001, + 0xe3190001, 0xe21a0001, 0xe11b0001, 0xe01c0001, 0xc21d0001, + 0xc11e0001, 0xc01f0001, 0xa5200001, 0xa4210001, 0xa3220001, + 0xa2230001, 0xa1240001, 0xa0250001, 0x65260001, 0x64270001, + 0x63280001, 0x62290001, 0x612a0001, 0x442b0001, 0x432c0001, + 0x422d0001, 0x412e0001, 0x402f0001, 0x21300001, 0x20310001, + 0x05320001, 0x04330001, 0x03340001, 0x02350001, 0x01360001, + 0x00370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, + 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001 +}; + +static const struct r92c_bb_prog rtl8188ftv_bb_prog = { + nitems(rtl8188ftv_bb_regs), + rtl8188ftv_bb_regs, + rtl8188ftv_bb_vals, + nitems(rtl8188ftv_agc_vals), + rtl8188ftv_agc_vals +}; + +/* * RTL8188RU. */ static const uint16_t rtl8188ru_bb_regs[] = { @@ -2570,14 +2741,14 @@ static const struct r92c_bb_prog rtl8723a_bb_prog = { */ struct r92c_rf_prog { int count; - const uint8_t *regs; + const uint16_t *regs; const uint32_t *vals; }; /* * RTL8192CU and RTL8192CE-VAU. */ -static const uint8_t rtl8192ce_rf1_regs[] = { +static const uint16_t rtl8192ce_rf1_regs[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b, @@ -2617,7 +2788,7 @@ static const uint32_t rtl8192ce_rf1_vals[] = { 0x30159 }; -static const uint8_t rtl8192ce_rf2_regs[] = { +static const uint16_t rtl8192ce_rf2_regs[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, @@ -2720,7 +2891,7 @@ static const struct r92c_rf_prog rtl8188cu_rf_prog[] = { /* * RTL8192EE and RTL8192EU. */ -static const uint8_t rtl8192e_rf_regs[] = { +static const uint16_t rtl8192e_rf_regs[] = { 0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f, 0x42, 0x57, 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, @@ -2751,7 +2922,7 @@ static const uint32_t rtl8192e_rf_vals[] = { 0x00000, 0x00000, 0x00001, 0x80000, 0x33e70 }; -static const uint8_t rtl8192e_rf2_regs[] = { +static const uint16_t rtl8192e_rf2_regs[] = { 0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f, 0x42, 0x57, 0x58, 0x67, 0x7f, 0x81, 0x83, 0x1c, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, @@ -2793,7 +2964,7 @@ static const struct r92c_rf_prog rtl8192e_rf_prog[] = { /* * RTL8188EU. */ -static const uint8_t rtl8188eu_rf_regs[] = { +static const uint16_t rtl8188eu_rf_regs[] = { 0x00, 0x08, 0x18, 0x19, 0x1e, 0x1f, 0x2f, 0x3f, 0x42, 0x57, 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, @@ -2831,6 +3002,49 @@ static const struct r92c_rf_prog rtl8188eu_rf_prog[] = { }; /* + * RTL8188FTV. + */ +static const uint16_t rtl8188ftv_rf_regs[] = { + 0x000, 0x008, 0x018, 0x019, 0x01b, 0x01e, 0x01f, 0x02f, 0x03f, 0x042, + 0x057, 0x058, 0x067, 0x083, 0x0b0, 0x0b1, 0x0b2, 0x0b4, 0x0b5, 0x0b6, + 0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bf, 0x0c2, 0x0c3, 0x0c4, 0x0c5, + 0x0c6, 0x0c7, 0x0c8, 0x0c9, 0x0ca, 0x0df, 0x0ef, 0x051, 0x052, 0x053, + 0x056, 0x035, 0x035, 0x035, 0x036, 0x036, 0x036, 0x036, 0x018, 0x05a, + 0x019, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, + 0x034, 0x034, 0x000, 0x084, 0x086, 0x087, 0x08e, 0x08f, 0x0ef, 0x03b, + 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, + 0x03b, 0x03b, 0x03b, 0x03b, 0x03b, 0x0ef, 0x0ef, 0x03b, 0x03b, 0x0ef, + 0x0ef, 0x030, 0x031, 0x032, 0x0ef, 0x000, 0x018, 0xffe, 0xffe, 0x01f, + 0xffe, 0xffe, 0x01e, 0x01f, 0x000 +}; + +static const uint32_t rtl8188ftv_rf_vals[] = { + 0x30000, 0x08400, 0x00407, 0x00012, 0x01c6c, 0x80009, 0x00880, + 0x1a060, 0x28000, 0x060c0, 0xd0000, 0xc0160, 0x01552, 0x00000, + 0xff9f0, 0x22218, 0x34c00, 0x4484b, 0x0112a, 0x0053e, 0x10408, + 0x10200, 0x80001, 0x40001, 0x00400, 0xc0000, 0x02400, 0x00009, + 0x40c91, 0x99999, 0x000a3, 0x8f820, 0x76c06, 0x00000, 0x80000, + 0x00180, 0x001a0, 0xe8231, 0xfac2c, 0x00141, 0x517f0, 0x00090, + 0x00190, 0x00290, 0x01064, 0x09064, 0x11064, 0x19064, 0x00c07, + 0x48000, 0x739d0, 0x0add2, 0x09dd0, 0x08cf3, 0x07cf0, 0x06ced, + 0x05cd2, 0x04ccf, 0x03ccc, 0x02cc9, 0x01c4c, 0x00c49, 0x30159, + 0x48000, 0x0002a, 0x00025, 0x65540, 0x88000, 0x020a0, 0xf0f00, + 0xe0b00, 0xd0900, 0xc0700, 0xb0600, 0xa0400, 0x90200, 0x80000, + 0x7bf00, 0x60b00, 0x5c900, 0x40700, 0x30600, 0x2d500, 0x10200, + 0x0e000, 0x000a0, 0x00010, 0x0c0a8, 0x10400, 0x00000, 0x80000, + 0x10000, 0x0000f, 0x07efe, 0x00000, 0x10159, 0x0fc07, 0x00000, + 0x00000, 0x80003, 0x00000, 0x00000, 0x00001, 0x80000, 0x33d95 +}; + +static const struct r92c_rf_prog rtl8188ftv_rf_prog[] = { + { + nitems(rtl8188ftv_rf_regs), + rtl8188ftv_rf_regs, + rtl8188ftv_rf_vals + } +}; + +/* * RTL8192EE and RTL8192EU. */ static const uint16_t rtl8192e_bb_regs[] = { @@ -2982,7 +3196,7 @@ static const struct r92c_rf_prog rtl8188ru_rf_prog[] = { * RTL8723AE and RTL8723AU. */ -static const uint8_t rtl8723a_rf_regs[] = { +static const uint16_t rtl8723a_rf_regs[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b, diff --git a/sys/dev/ic/rtwn.c b/sys/dev/ic/rtwn.c index bf5d79a0c5d..b9b83bbfe11 100644 --- a/sys/dev/ic/rtwn.c +++ b/sys/dev/ic/rtwn.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rtwn.c,v 1.56 2023/04/27 03:28:34 kevlo Exp $ */ +/* $OpenBSD: rtwn.c,v 1.57 2023/04/28 01:24:14 kevlo Exp $ */ /*- * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> @@ -115,7 +115,7 @@ uint8_t rtwn_read_1(struct rtwn_softc *, uint16_t); uint16_t rtwn_read_2(struct rtwn_softc *, uint16_t); uint32_t rtwn_read_4(struct rtwn_softc *, uint16_t); int rtwn_fw_cmd(struct rtwn_softc *, uint8_t, const void *, int); -void rtwn_rf_write(struct rtwn_softc *, int, uint8_t, uint32_t); +void rtwn_rf_write(struct rtwn_softc *, int, uint16_t, uint32_t); uint32_t rtwn_rf_read(struct rtwn_softc *, int, uint8_t); void rtwn_cam_write(struct rtwn_softc *, uint32_t, uint32_t); uint8_t rtwn_efuse_read_1(struct rtwn_softc *, uint16_t); @@ -126,6 +126,7 @@ void rtwn_read_rom(struct rtwn_softc *); void rtwn_r92c_read_rom(struct rtwn_softc *); void rtwn_r92e_read_rom(struct rtwn_softc *); void rtwn_r88e_read_rom(struct rtwn_softc *); +void rtwn_r88f_read_rom(struct rtwn_softc *); void rtwn_r23a_read_rom(struct rtwn_softc *); int rtwn_media_change(struct ifnet *); int rtwn_ra_init(struct rtwn_softc *); @@ -140,6 +141,7 @@ void rtwn_update_short_preamble(struct ieee80211com *); void rtwn_r92c_update_short_preamble(struct rtwn_softc *); void rtwn_r88e_update_short_preamble(struct rtwn_softc *); int8_t rtwn_r88e_get_rssi(struct rtwn_softc *, int, void *); +int8_t rtwn_r88f_get_rssi(struct rtwn_softc *, int, void *); void rtwn_watchdog(struct ifnet *); void rtwn_fw_reset(struct rtwn_softc *); void rtwn_r92c_fw_reset(struct rtwn_softc *); @@ -168,6 +170,7 @@ void rtwn_set_txpower(struct rtwn_softc *, struct ieee80211_channel *, struct ieee80211_channel *); void rtwn_set_chan(struct rtwn_softc *, struct ieee80211_channel *, struct ieee80211_channel *); +int rtwn_chan2group(int); int rtwn_iq_calib_chain(struct rtwn_softc *, int, uint16_t[2], uint16_t[2]); void rtwn_iq_calib_run(struct rtwn_softc *, int, uint16_t[2][2], @@ -238,6 +241,7 @@ rtwn_attach(struct device *pdev, struct rtwn_softc *sc) (sc->chip & RTWN_CHIP_92C) ? "8192CU" : (sc->chip & RTWN_CHIP_92E) ? "8192EU" : (sc->chip & RTWN_CHIP_88E) ? "8188EU" : + (sc->chip & RTWN_CHIP_88F) ? "8188FTV" : (sc->board_type == R92C_BOARD_TYPE_HIGHPA) ? "8188RU" : (sc->board_type == R92C_BOARD_TYPE_MINICARD) ? "8188CE-VAU" : "8188CUS", @@ -431,7 +435,7 @@ rtwn_fw_cmd(struct rtwn_softc *sc, uint8_t id, const void *buf, int len) } void -rtwn_rf_write(struct rtwn_softc *sc, int chain, uint8_t addr, uint32_t val) +rtwn_rf_write(struct rtwn_softc *sc, int chain, uint16_t addr, uint32_t val) { uint32_t param_addr; @@ -440,7 +444,7 @@ rtwn_rf_write(struct rtwn_softc *sc, int chain, uint8_t addr, uint32_t val) rtwn_read_4(sc, R92C_FPGA0_POWER_SAVE) & ~0x20000); } - if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) + if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E)) param_addr = SM(R88E_LSSI_PARAM_ADDR, addr); else param_addr = SM(R92C_LSSI_PARAM_ADDR, addr); @@ -531,6 +535,13 @@ rtwn_efuse_read(struct rtwn_softc *sc, uint8_t *rom, size_t size) rtwn_efuse_switch_power(sc); + /* Switch bank to 0 for wifi/bt later use. */ + if (sc->chip & RTWN_CHIP_88F) { + reg = rtwn_read_4(sc, R92C_EFUSE_TEST); + reg = RW(reg, R92C_EFUSE_TEST_SEL, 0); + rtwn_write_4(sc, R92C_EFUSE_TEST, reg); + } + memset(rom, 0xff, size); len = (sc->chip & RTWN_CHIP_88E) ? 256 : 512; while (addr < len) { @@ -579,7 +590,7 @@ rtwn_efuse_switch_power(struct rtwn_softc *sc) { uint16_t reg; - if (!(sc->chip & RTWN_CHIP_92E)) { + if (!(sc->chip & (RTWN_CHIP_88F | RTWN_CHIP_92E))) { reg = rtwn_read_2(sc, R92C_SYS_ISO_CTRL); if (!(reg & R92C_SYS_ISO_CTRL_PWC_EV12V)) { rtwn_write_2(sc, R92C_SYS_ISO_CTRL, @@ -604,7 +615,7 @@ rtwn_read_chipid(struct rtwn_softc *sc) { uint32_t reg; - if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) { + if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E)) { sc->sc_flags |= RTWN_FLAG_EXT_HDR; return (0); } @@ -648,6 +659,8 @@ rtwn_read_rom(struct rtwn_softc *sc) { if (sc->chip & RTWN_CHIP_88E) rtwn_r88e_read_rom(sc); + else if (sc->chip & RTWN_CHIP_88F) + rtwn_r88f_read_rom(sc); else if (sc->chip & RTWN_CHIP_92E) rtwn_r92e_read_rom(sc); else if (sc->chip & RTWN_CHIP_23A) @@ -721,6 +734,21 @@ rtwn_r88e_read_rom(struct rtwn_softc *sc) } void +rtwn_r88f_read_rom(struct rtwn_softc *sc) +{ + struct ieee80211com *ic = &sc->sc_ic; + struct r88f_rom *rom = &sc->sc_r88f_rom; + + /* Read full ROM image. */ + rtwn_efuse_read(sc, (uint8_t *)&sc->sc_r88f_rom, + sizeof(sc->sc_r88f_rom)); + + sc->crystal_cap = rom->xtal; + + IEEE80211_ADDR_COPY(ic->ic_myaddr, rom->macaddr); +} + +void rtwn_r23a_read_rom(struct rtwn_softc *sc) { struct ieee80211com *ic = &sc->sc_ic; @@ -803,7 +831,7 @@ rtwn_ra_init(struct rtwn_softc *sc) rtwn_write_4(sc, R92C_ARFR(0), rates & 0x07f5); } - if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) { + if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E)) { error = rtwn_r88e_ra_init(sc, mode, rates, maxrate, basicrates, maxbasicrate); /* We use AMRR with this chip. Start with the lowest rate. */ @@ -1432,6 +1460,8 @@ rtwn_get_rssi(struct rtwn_softc *sc, int rate, void *physt) if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) return rtwn_r88e_get_rssi(sc, rate, physt); + else if (sc->chip & RTWN_CHIP_88E) + return rtwn_r88f_get_rssi(sc, rate, physt); if (rate <= 3) { cck = (struct r92c_rx_cck *)physt; @@ -1474,6 +1504,45 @@ rtwn_r88e_get_rssi(struct rtwn_softc *sc, int rate, void *physt) return (rssi); } +int8_t +rtwn_r88f_get_rssi(struct rtwn_softc *sc, int rate, void *physt) +{ + struct r88e_rx_phystat *phy; + uint8_t lna_idx, vga_idx; + int8_t rssi; + + phy = (struct r88e_rx_phystat *)physt; + lna_idx = (phy->agc_rpt & 0xe0) >> 5; + vga_idx = (phy->agc_rpt & 0x1f); + rssi = -(2 * vga_idx); + + if (rate <= 3) { + switch (lna_idx) { + case 7: + if (vga_idx > 27) + rssi = -100; + else + rssi += -46; + break; + case 5: + rssi += -32; + break; + case 3: + rssi += -20; + break; + case 1: + rssi += -6; + break; + default: + rssi = 0; + break; + } + } else { /* OFDM/HT. */ + rssi = ((le32toh(phy->sq_rpt) >> 1) & 0x7f) - 110; + } + return (rssi); +} + void rtwn_start(struct ifnet *ifp) { @@ -1609,7 +1678,7 @@ rtwn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) void rtwn_fw_reset(struct rtwn_softc *sc) { - if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) + if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E)) rtwn_r88e_fw_reset(sc); else rtwn_r92c_fw_reset(sc); @@ -1646,11 +1715,11 @@ sleep: void rtwn_r88e_fw_reset(struct rtwn_softc *sc) { - uint16_t reg; - /* Reset MCU IO wrapper. */ - rtwn_write_1(sc, R92C_RSV_CTRL, - rtwn_read_1(sc, R92C_RSV_CTRL) & ~R92C_RSV_CTRL_WLOCK_00); + if (!(sc->chip & RTWN_CHIP_88F)) { + rtwn_write_1(sc, R92C_RSV_CTRL, + rtwn_read_1(sc, R92C_RSV_CTRL) & ~R92C_RSV_CTRL_WLOCK_00); + } if (sc->chip & RTWN_CHIP_88E) { rtwn_write_2(sc, R92C_RSV_CTRL, rtwn_read_2(sc, R92C_RSV_CTRL) & ~R88E_RSV_CTRL_MCU_RST); @@ -1658,12 +1727,14 @@ rtwn_r88e_fw_reset(struct rtwn_softc *sc) rtwn_write_2(sc, R92C_RSV_CTRL, rtwn_read_2(sc, R92C_RSV_CTRL) & ~R88E_RSV_CTRL_MIO_EN); } - reg = rtwn_read_2(sc, R92C_SYS_FUNC_EN); - rtwn_write_2(sc, R92C_SYS_FUNC_EN, reg & ~R92C_SYS_FUNC_EN_CPUEN); + rtwn_write_2(sc, R92C_SYS_FUNC_EN, + rtwn_read_2(sc, R92C_SYS_FUNC_EN) & ~R92C_SYS_FUNC_EN_CPUEN); /* Enable MCU IO wrapper. */ - rtwn_write_1(sc, R92C_RSV_CTRL, - rtwn_read_1(sc, R92C_RSV_CTRL) & ~R92C_RSV_CTRL_WLOCK_00); + if (!(sc->chip & RTWN_CHIP_88F)) { + rtwn_write_1(sc, R92C_RSV_CTRL, + rtwn_read_1(sc, R92C_RSV_CTRL) & ~R92C_RSV_CTRL_WLOCK_00); + } if (sc->chip & RTWN_CHIP_88E) { rtwn_write_2(sc, R92C_RSV_CTRL, rtwn_read_2(sc, R92C_RSV_CTRL) | R88E_RSV_CTRL_MCU_RST); @@ -1671,7 +1742,8 @@ rtwn_r88e_fw_reset(struct rtwn_softc *sc) rtwn_write_2(sc, R92C_RSV_CTRL, rtwn_read_2(sc, R92C_RSV_CTRL) | R88E_RSV_CTRL_MIO_EN); } - rtwn_write_2(sc, R92C_SYS_FUNC_EN, reg | R92C_SYS_FUNC_EN_CPUEN); + rtwn_write_2(sc, R92C_SYS_FUNC_EN, + rtwn_read_2(sc, R92C_SYS_FUNC_EN) | R92C_SYS_FUNC_EN_CPUEN); } int @@ -1699,6 +1771,7 @@ rtwn_load_firmware(struct rtwn_softc *sc) if ((letoh16(hdr->signature) >> 4) == 0x230 || (letoh16(hdr->signature) >> 4) == 0x88c || (letoh16(hdr->signature) >> 4) == 0x88e || + (letoh16(hdr->signature) >> 4) == 0x88f || (letoh16(hdr->signature) >> 4) == 0x92c || (letoh16(hdr->signature) >> 4) == 0x92e) { DPRINTF(("FW V%d.%d %02d-%02d %02d:%02d\n", @@ -1713,7 +1786,7 @@ rtwn_load_firmware(struct rtwn_softc *sc) rtwn_fw_reset(sc); } - if (sc->chip & RTWN_CHIP_PCI) { + if ((sc->chip & RTWN_CHIP_PCI) || (sc->chip & RTWN_CHIP_88F)) { rtwn_write_2(sc, R92C_SYS_FUNC_EN, rtwn_read_2(sc, R92C_SYS_FUNC_EN) | R92C_SYS_FUNC_EN_CPUEN); } @@ -1760,7 +1833,7 @@ rtwn_load_firmware(struct rtwn_softc *sc) rtwn_read_1(sc, R92C_MCUFWDL) & ~R92C_MCUFWDL_EN); /* Reserved for fw extension. */ - if (!(sc->chip & RTWN_CHIP_92E)) + if (!(sc->chip & (RTWN_CHIP_88F | RTWN_CHIP_92E))) rtwn_write_1(sc, R92C_MCUFWDL + 1, 0); reg = rtwn_read_4(sc, R92C_MCUFWDL); @@ -1788,6 +1861,9 @@ rtwn_load_firmware(struct rtwn_softc *sc) } fail: free(fw, M_DEVBUF, len0); + /* Init H2C command. */ + if (sc->chip & RTWN_CHIP_88F) + rtwn_write_1(sc, R92C_HMETFR, 0xf); return (error); } @@ -1801,6 +1877,8 @@ rtwn_rf_init(struct rtwn_softc *sc) /* Select RF programming based on board type. */ if (sc->chip & RTWN_CHIP_88E) prog = rtl8188eu_rf_prog; + else if (sc->chip & RTWN_CHIP_88F) + prog = rtl8188ftv_rf_prog; else if (sc->chip & RTWN_CHIP_92E) prog = rtl8192e_rf_prog; else if (!(sc->chip & RTWN_CHIP_92C)) { @@ -1844,6 +1922,7 @@ rtwn_rf_init(struct rtwn_softc *sc) for (j = 0; j < prog[i].count; j++) { switch (prog[i].regs[j]) { case 0xfe: + case 0xffe: DELAY(50000); continue; case 0xfd: @@ -1957,8 +2036,13 @@ rtwn_edca_init(struct rtwn_softc *sc) rtwn_write_2(sc, R92C_MAC_SPEC_SIFS, 0x100a); rtwn_write_2(sc, R92C_SIFS_CCK, 0x100a); rtwn_write_2(sc, R92C_SIFS_OFDM, 0x100a); - rtwn_write_2(sc, R92C_RESP_SIFS_CCK, 0x100a); - rtwn_write_2(sc, R92C_RESP_SIFS_OFDM, 0x100a); + if (!(sc->chip & RTWN_CHIP_88F)) { + rtwn_write_2(sc, R92C_RESP_SIFS_CCK, 0x100a); + rtwn_write_2(sc, R92C_RESP_SIFS_OFDM, 0x100a); + } else { + rtwn_write_2(sc, R92C_RESP_SIFS_CCK, 0x0808); + rtwn_write_2(sc, R92C_RESP_SIFS_OFDM, 0x0a0a); + } if (ic->ic_curmode == IEEE80211_MODE_AUTO) mode = IEEE80211_MODE_11G; /* XXX */ @@ -2061,7 +2145,7 @@ void rtwn_get_txpower(struct rtwn_softc *sc, int chain, struct ieee80211_channel *c, struct ieee80211_channel *extc, uint16_t power[RTWN_POWER_COUNT]) { - if (sc->chip & RTWN_CHIP_88E) + if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F)) rtwn_r88e_get_txpower(sc, chain, c, extc, power); else if (sc->chip & RTWN_CHIP_92E) rtwn_r92e_get_txpower(sc, chain, c, extc, power); @@ -2182,16 +2266,7 @@ rtwn_r92e_get_txpower(struct rtwn_softc *sc, int chain, /* Determine channel group. */ chan = ieee80211_chan2ieee(ic, c); /* XXX center freq! */ - if (chan <= 2) - group = 0; - else if (chan <= 5) - group = 1; - else if (chan <= 8) - group = 2; - else if (chan <= 11) - group = 3; - else - group = 4; + group = rtwn_chan2group(chan); memset(power, 0, RTWN_POWER_COUNT * sizeof(power[0])); @@ -2253,31 +2328,42 @@ rtwn_r88e_get_txpower(struct rtwn_softc *sc, int chain, /* Determine channel group. */ chan = ieee80211_chan2ieee(ic, c); /* XXX center freq! */ - if (chan <= 2) - group = 0; - else if (chan <= 5) - group = 1; - else if (chan <= 8) - group = 2; - else if (chan <= 11) - group = 3; - else if (chan <= 13) - group = 4; - else - group = 5; + if (sc->chip & RTWN_CHIP_88F) + group = rtwn_chan2group(chan); + else { + if (chan <= 2) + group = 0; + else if (chan <= 5) + group = 1; + else if (chan <= 8) + group = 2; + else if (chan <= 11) + group = 3; + else if (chan <= 13) + group = 4; + else + group = 5; + } memset(power, 0, RTWN_POWER_COUNT * sizeof(power[0])); /* Compute per-CCK rate Tx power. */ cckpow = rom->txpwr.cck_tx_pwr[group]; for (ridx = RTWN_RIDX_CCK1; ridx <= RTWN_RIDX_CCK11; ridx++) { - power[ridx] = (ridx == RTWN_RIDX_CCK2) ? cckpow - 9 : cckpow; + if (sc->chip & RTWN_CHIP_88F) + power[ridx] = cckpow; + else + power[ridx] = (ridx == RTWN_RIDX_CCK2) ? + cckpow - 9 : cckpow; if (power[ridx] > R92C_MAX_TX_PWR) power[ridx] = R92C_MAX_TX_PWR; } - htpow = (group == 5) ? rom->txpwr.ht40_tx_pwr[group - 1] : - rom->txpwr.ht40_tx_pwr[group]; + if (sc->chip & RTWN_CHIP_88F) + htpow = rom->txpwr.ht40_tx_pwr[group]; + else + htpow = (group == 5) ? rom->txpwr.ht40_tx_pwr[group - 1] : + rom->txpwr.ht40_tx_pwr[group]; /* Compute per-OFDM rate Tx power. */ diff = RTWN_SIGN4TO8(MS(rom->txpwr.ht20_ofdm_tx_pwr_diff, @@ -2386,7 +2472,7 @@ rtwn_set_chan(struct rtwn_softc *sc, struct ieee80211_channel *c, reg &= ~R92C_WMAC_TRXPTCL_CTL_BW_MASK; rtwn_write_2(sc, R92C_WMAC_TRXPTCL_CTL, reg); rtwn_write_1(sc, R92E_DATA_SC, 0); - } else { + } else if (!(sc->chip & RTWN_CHIP_88F)) { rtwn_write_1(sc, R92C_BWOPMODE, rtwn_read_1(sc, R92C_BWOPMODE) | R92C_BWOPMODE_20MHZ); @@ -2397,22 +2483,60 @@ rtwn_set_chan(struct rtwn_softc *sc, struct ieee80211_channel *c, rtwn_bb_write(sc, R92C_FPGA1_RFMOD, rtwn_bb_read(sc, R92C_FPGA1_RFMOD) & ~R92C_RFMOD_40MHZ); - if (!(sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E))) { + if (!(sc->chip & + (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E))) { rtwn_bb_write(sc, R92C_FPGA0_ANAPARAM2, rtwn_bb_read(sc, R92C_FPGA0_ANAPARAM2) | R92C_FPGA0_ANAPARAM2_CBW20); - } else if (sc->chip & RTWN_CHIP_92E) { - reg = rtwn_read_4(sc, R92C_OFDM0_TX_PSDO_NOISE_WEIGHT); + } else if (sc->chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) { + if (sc->chip & RTWN_CHIP_88F) { + reg = rtwn_bb_read(sc, R92C_FPGA0_RFMOD); + reg = (reg & ~0x00000700) | 0x7 << 8; + rtwn_bb_write(sc, R92C_FPGA0_RFMOD, reg); + reg = rtwn_bb_read(sc, R92C_FPGA0_RFMOD); + reg = (reg & ~0x00007000) | 0x5 << 12; + rtwn_bb_write(sc, R92C_FPGA0_RFMOD, reg); + } + + reg = rtwn_bb_read(sc, R92C_OFDM0_TX_PSDO_NOISE_WEIGHT); reg &= ~0xc0000000; - rtwn_write_4(sc, R92C_OFDM0_TX_PSDO_NOISE_WEIGHT, reg); + rtwn_bb_write(sc, R92C_OFDM0_TX_PSDO_NOISE_WEIGHT, reg); + + if (sc->chip & RTWN_CHIP_88F) { + /* Small bandwidth */ + reg = rtwn_bb_read(sc, + R92C_OFDM0_TX_PSDO_NOISE_WEIGHT); + reg |= 0x30000000; + rtwn_bb_write(sc, + R92C_OFDM0_TX_PSDO_NOISE_WEIGHT, reg); + /* ADC buffer clk */ + rtwn_bb_write(sc, R92C_OFDM0_RXAFE, + rtwn_bb_read(sc, R92C_OFDM0_RXAFE) | + 0x30000000); + /* OFDM Rx DFIR */ + rtwn_bb_write(sc, R88F_RX_DFIR, + rtwn_bb_read(sc, R88F_RX_DFIR) & + ~0x00080000); + reg = rtwn_bb_read(sc, R88F_RX_DFIR); + reg = (reg & ~0x00f00000) | 0x3 << 15; + rtwn_bb_write(sc, R88F_RX_DFIR, reg); + } } /* Select 20MHz bandwidth. */ for (i = 0; i < sc->nrxchains; i++) { rtwn_rf_write(sc, i, R92C_RF_CHNLBW, (sc->rf_chnlbw[i] & ~0xfff) | chan | - ((sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) ? + ((sc->chip & + (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E)) ? R88E_RF_CHNLBW_BW20 : R92C_RF_CHNLBW_BW20)); + + if (sc->chip & RTWN_CHIP_88F) { + rtwn_rf_write(sc, i, 0x87, 0x65); + rtwn_rf_write(sc, i, 0x1c, 0); + rtwn_rf_write(sc, i, 0xdf, 0x0140); + rtwn_rf_write(sc, i, 0x1b, 0x1c6c);; + } } } @@ -2421,6 +2545,25 @@ rtwn_set_chan(struct rtwn_softc *sc, struct ieee80211_channel *c, } int +rtwn_chan2group(int chan) +{ + int group; + + if (chan <= 2) + group = 0; + else if (chan <= 5) + group = 1; + else if (chan <= 8) + group = 2; + else if (chan <= 11) + group = 3; + else + group = 4; + + return (group); +} + +int rtwn_iq_calib_chain(struct rtwn_softc *sc, int chain, uint16_t tx[2], uint16_t rx[2]) { @@ -3047,7 +3190,7 @@ rtwn_init(struct ifnet *ifp) /* Set info size in Rx descriptors (in 64-bit words). */ rtwn_write_1(sc, R92C_RX_DRVINFO_SZ, 4); - if (sc->chip & RTWN_CHIP_USB) { + if ((sc->chip & RTWN_CHIP_USB) && !(sc->chip & RTWN_CHIP_88F)) { /* Init interrupts. */ rtwn_enable_intr(sc); } else if (sc->chip & RTWN_CHIP_PCI) { @@ -3107,11 +3250,12 @@ rtwn_init(struct ifnet *ifp) rtwn_write_2(sc, R92C_BCN_CTRL, (R92C_BCN_CTRL_DIS_TSF_UDT0 << 8) | R92C_BCN_CTRL_DIS_TSF_UDT0); rtwn_write_2(sc, R92C_TBTT_PROHIBIT, 0x6404); - rtwn_write_1(sc, R92C_DRVERLYINT, R92C_DRVERLYINT_INIT_TIME); + if (!(sc->chip & RTWN_CHIP_88F)) + rtwn_write_1(sc, R92C_DRVERLYINT, R92C_DRVERLYINT_INIT_TIME); rtwn_write_1(sc, R92C_BCNDMATIM, R92C_BCNDMATIM_INIT_TIME); rtwn_write_2(sc, R92C_BCNTCFG, 0x660f); - if (!(sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E))) { + if (!(sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E))) { /* Setup AMPDU aggregation. */ rtwn_write_4(sc, R92C_AGGLEN_LMT, 0x99997631); /* MCS7~0 */ rtwn_write_1(sc, R92C_AGGR_BREAK_TIME, 0x16); @@ -3135,7 +3279,7 @@ rtwn_init(struct ifnet *ifp) sc->sc_ops.bb_init(sc->sc_ops.cookie); rtwn_rf_init(sc); - if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E)) { + if (sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E)) { rtwn_write_2(sc, R92C_CR, rtwn_read_2(sc, R92C_CR) | R92C_CR_MACTXEN | R92C_CR_MACRXEN); @@ -3175,7 +3319,8 @@ rtwn_init(struct ifnet *ifp) /* Fix USB interference issue. */ if (sc->chip & RTWN_CHIP_USB) { - if (!(sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E))) { + if (!(sc->chip & + (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E))) { rtwn_write_1(sc, 0xfe40, 0xe0); rtwn_write_1(sc, 0xfe41, 0x8d); rtwn_write_1(sc, 0xfe42, 0x80); @@ -3189,7 +3334,7 @@ rtwn_init(struct ifnet *ifp) rtwn_read_1(sc, R92C_GPIO_MUXCFG) & ~R92C_GPIO_MUXCFG_ENBT); /* Fix for lower temperature. */ - if (!(sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_92E))) + if (!(sc->chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E))) rtwn_write_1(sc, 0x15, 0xe9); /* Set default channel. */ diff --git a/sys/dev/ic/rtwnvar.h b/sys/dev/ic/rtwnvar.h index e7ee10c0fc5..2b3ca85b346 100644 --- a/sys/dev/ic/rtwnvar.h +++ b/sys/dev/ic/rtwnvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: rtwnvar.h,v 1.15 2019/03/11 06:19:33 kevlo Exp $ */ +/* $OpenBSD: rtwnvar.h,v 1.16 2023/04/28 01:24:14 kevlo Exp $ */ /*- * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> @@ -84,6 +84,7 @@ struct rtwn_softc { #define RTWN_CHIP_92E 0x00000040 #define RTWN_CHIP_23A 0x00000080 #define RTWN_CHIP_23B 0x00000100 +#define RTWN_CHIP_88F 0x00000200 #define RTWN_CHIP_PCI 0x40000000 #define RTWN_CHIP_USB 0x80000000 @@ -105,11 +106,13 @@ struct rtwn_softc { struct r92c_rom r92c_rom; struct r92e_rom r92e_rom; struct r88e_rom r88e_rom; + struct r88f_rom r88f_rom; struct r23a_rom r23a_rom; } u; #define sc_r92c_rom u.r92c_rom #define sc_r92e_rom u.r92e_rom #define sc_r88e_rom u.r88e_rom +#define sc_r88f_rom u.r88f_rom #define sc_r23a_rom u.r23a_rom uint32_t rf_chnlbw[R92C_MAX_CHAINS]; diff --git a/sys/dev/microcode/urtwn/Makefile b/sys/dev/microcode/urtwn/Makefile index 5e0e2f702bb..412fddfd1f6 100644 --- a/sys/dev/microcode/urtwn/Makefile +++ b/sys/dev/microcode/urtwn/Makefile @@ -1,10 +1,11 @@ -# $OpenBSD: Makefile,v 1.1 2021/10/04 01:33:42 kevlo Exp $ +# $OpenBSD: Makefile,v 1.2 2023/04/28 01:24:14 kevlo Exp $ NOPROG= NOMAN= CC=${HOSTCC} -FIRM= urtwn-rtl8188eu urtwn-rtl8192cT urtwn-rtl8192cU urtwn-rtl8192eu +FIRM= urtwn-rtl8188eu urtwn-rtl8188ftv urtwn-rtl8192cT urtwn-rtl8192cU \ + urtwn-rtl8192eu PROG= build diff --git a/sys/dev/microcode/urtwn/build.c b/sys/dev/microcode/urtwn/build.c index 870ce85b9c8..ae66d2ae314 100644 --- a/sys/dev/microcode/urtwn/build.c +++ b/sys/dev/microcode/urtwn/build.c @@ -1,4 +1,4 @@ -/* $OpenBSD: build.c,v 1.1 2021/10/04 01:33:42 kevlo Exp $ */ +/* $OpenBSD: build.c,v 1.2 2023/04/28 01:24:14 kevlo Exp $ */ /*- * Copyright (c) 2006 @@ -51,6 +51,7 @@ int main(void) { output("urtwn-rtl8188eu", rtl8188eu, sizeof rtl8188eu); + output("urtwn-rtl8188ftv", rtl8188ftv, sizeof rtl8188ftv); output("urtwn-rtl8192cT", rtl8192cT, sizeof rtl8192cT); output("urtwn-rtl8192cU", rtl8192cU, sizeof rtl8192cU); output("urtwn-rtl8192eu", rtl8192eu, sizeof rtl8192eu); diff --git a/sys/dev/microcode/urtwn/microcode.h b/sys/dev/microcode/urtwn/microcode.h index 7a6546d0430..94dffb7ef66 100644 --- a/sys/dev/microcode/urtwn/microcode.h +++ b/sys/dev/microcode/urtwn/microcode.h @@ -1,4 +1,4 @@ -/* $OpenBSD: microcode.h,v 1.1 2021/10/04 01:29:57 kevlo Exp $ */ +/* $OpenBSD: microcode.h,v 1.2 2023/04/28 01:24:14 kevlo Exp $ */ /*- * Copyright (C) 2009-2021 Realtek Corporation @@ -1301,6 +1301,1920 @@ static const uint8_t rtl8188eu[] = { 0x1c, 0xf0, 0xe4, 0x90, 0x81, 0x48, 0xf0, 0x22, 0x00, 0xbb, 0x8e }; +static const uint8_t rtl8188ftv[] = { + 0xf1, 0x88, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x22, 0x17, + 0x36, 0xfc, 0x51, 0x02, 0x00, 0xbc, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x87, 0x7d, 0x02, 0xc8, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xb5, 0x27, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0xc8, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xc8, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc2, 0x21, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc8, 0xa6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x88, 0x18, 0x02, 0x8a, + 0xd9, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0xa9, 0x59, 0x02, + 0xa3, 0x0c, 0x02, 0xb6, 0x62, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, + 0x02, 0x80, 0x9b, 0x02, 0x80, 0x9e, 0x02, 0x80, 0xa1, 0x02, 0x80, + 0xa4, 0x02, 0x80, 0xa7, 0x02, 0x80, 0xaa, 0x02, 0x80, 0xad, 0x02, + 0x80, 0xb0, 0x02, 0xa0, 0x3d, 0x02, 0x80, 0xb6, 0x02, 0x80, 0xb9, + 0x02, 0xb3, 0x1b, 0x02, 0xb8, 0xcd, 0x02, 0xb8, 0x52, 0x02, 0xb7, + 0xf9, 0x02, 0xb1, 0x62, 0x02, 0xb3, 0x7c, 0x02, 0x80, 0xce, 0x02, + 0x80, 0xd1, 0x02, 0x80, 0xd4, 0x02, 0x80, 0xd7, 0x00, 0x00, 0x00, + 0x02, 0x80, 0xdd, 0x02, 0x80, 0xe0, 0x02, 0x80, 0xe3, 0x02, 0x80, + 0xe6, 0x02, 0x80, 0xe9, 0x02, 0x80, 0xec, 0x02, 0x80, 0xef, 0x02, + 0x80, 0xf2, 0x02, 0x80, 0xf5, 0x02, 0x80, 0xf8, 0x02, 0x80, 0xfb, + 0x02, 0x80, 0xfe, 0x02, 0x81, 0x01, 0x02, 0x81, 0x04, 0x02, 0x81, + 0x07, 0x02, 0x81, 0x0a, 0x02, 0x81, 0x0d, 0x02, 0x81, 0x10, 0x02, + 0x81, 0x13, 0x02, 0x81, 0x16, 0x02, 0x81, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0xbf, 0x8b, 0x02, 0xc9, 0x2d, 0x02, 0x96, 0xee, 0x02, 0x98, 0xe3, + 0x02, 0x81, 0x40, 0x02, 0xa4, 0x6b, 0x02, 0xcd, 0xf1, 0x02, 0x81, + 0x49, 0x02, 0x81, 0x4c, 0x02, 0x81, 0x4f, 0x02, 0x81, 0x52, 0x02, + 0x81, 0x55, 0x02, 0x81, 0x58, 0x02, 0x81, 0x5b, 0x02, 0x99, 0xf8, + 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xc6, 0xb7, 0x02, 0xcf, + 0xe8, 0x02, 0xd0, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xf0, 0xff, 0x0f, 0x00, 0x00, + 0x00, 0x15, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x05, 0xf0, 0xff, + 0x0f, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x10, 0xf0, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0xf5, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x08, 0x03, 0x03, 0x00, 0x04, 0x09, 0x07, 0x03, + 0x03, 0x00, 0x04, 0x08, 0x06, 0x03, 0x02, 0x00, 0x04, 0x08, 0x05, + 0x03, 0x01, 0x00, 0x04, 0x0d, 0x0a, 0x07, 0x05, 0x00, 0x08, 0x0c, + 0x0a, 0x07, 0x04, 0x00, 0x08, 0x0b, 0x0a, 0x06, 0x05, 0x00, 0x08, + 0x0b, 0x0a, 0x05, 0x03, 0x00, 0x08, 0x0b, 0x0a, 0x03, 0x02, 0x00, + 0x08, 0x14, 0x12, 0x0c, 0x04, 0x00, 0x10, 0x14, 0x12, 0x09, 0x04, + 0x00, 0x10, 0x24, 0x22, 0x1c, 0x12, 0x00, 0x20, 0x24, 0x22, 0x18, + 0x0c, 0x00, 0x20, 0x24, 0x22, 0x14, 0x06, 0x00, 0x20, 0x24, 0x22, + 0x0f, 0x04, 0x00, 0x20, 0x24, 0x21, 0x0a, 0x04, 0x00, 0x20, 0x23, + 0x21, 0x0c, 0x04, 0x00, 0x20, 0x23, 0x1f, 0x0a, 0x04, 0x00, 0x20, + 0x22, 0x1f, 0x0f, 0x04, 0x00, 0x20, 0x21, 0x1f, 0x16, 0x0c, 0x00, + 0x20, 0x31, 0x2f, 0x20, 0x14, 0x00, 0x30, 0x31, 0x2f, 0x18, 0x10, + 0x00, 0x30, 0x31, 0x2c, 0x18, 0x0c, 0x00, 0x30, 0x31, 0x2a, 0x14, + 0x0c, 0x00, 0x30, 0x31, 0x28, 0x14, 0x00, 0x00, 0x30, 0x31, 0x24, + 0x14, 0x00, 0x00, 0x30, 0x31, 0x1e, 0x14, 0x00, 0x00, 0x30, 0x02, + 0x02, 0x03, 0x04, 0x04, 0x08, 0x09, 0x09, 0x0c, 0x0e, 0x10, 0x12, + 0x02, 0x09, 0x0b, 0x0e, 0x0d, 0x0f, 0x10, 0x12, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00, 0x2d, 0x00, 0x50, + 0x00, 0x91, 0x00, 0xc3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5e, 0x00, + 0x8c, 0x00, 0xc8, 0x00, 0xdc, 0x01, 0x5e, 0x01, 0x68, 0x01, 0x9a, + 0x01, 0xcc, 0x01, 0xea, 0x02, 0x02, 0x04, 0x08, 0x0c, 0x12, 0x18, + 0x24, 0x30, 0x48, 0x60, 0x6c, 0x14, 0x28, 0x32, 0x50, 0x78, 0xa0, + 0xc8, 0xe6, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x03, + 0x03, 0x04, 0x04, 0x02, 0x04, 0x06, 0x07, 0x07, 0x08, 0x08, 0x08, + 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x03, 0x03, 0x03, 0x02, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x19, 0x06, 0x04, 0x02, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc2, 0xaf, 0x80, 0xfe, 0x32, 0x12, 0x84, 0x04, 0x85, 0xd0, 0x0b, + 0x75, 0xd0, 0x08, 0xaa, 0xe0, 0xc2, 0x8c, 0xe5, 0x8a, 0x24, 0x67, + 0xf5, 0x8a, 0xe5, 0x8c, 0x34, 0x79, 0xf5, 0x8c, 0xd2, 0x8c, 0xec, + 0x24, 0x87, 0xf8, 0xe6, 0xbc, 0x02, 0x02, 0x74, 0xff, 0xc3, 0x95, + 0x81, 0xb4, 0x40, 0x00, 0x40, 0xce, 0x79, 0x03, 0x78, 0x80, 0x16, + 0xe6, 0x08, 0x70, 0x0b, 0xc2, 0xaf, 0xe6, 0x30, 0xe1, 0x03, 0x44, + 0x18, 0xf6, 0xd2, 0xaf, 0x08, 0xd9, 0xed, 0xea, 0x8b, 0xd0, 0x22, + 0xe5, 0x0c, 0xff, 0x23, 0x24, 0x81, 0xf8, 0x0f, 0x08, 0x08, 0xbf, + 0x03, 0x04, 0x7f, 0x00, 0x78, 0x81, 0xe6, 0x30, 0xe4, 0xf2, 0x00, + 0xe5, 0x0c, 0xc3, 0x9f, 0x50, 0x20, 0x05, 0x0c, 0x74, 0x86, 0x25, + 0x0c, 0xf8, 0xe6, 0xfd, 0xa6, 0x81, 0x08, 0xe6, 0xae, 0x0c, 0xbe, + 0x02, 0x02, 0x74, 0xff, 0xcd, 0xf8, 0xe8, 0x6d, 0x60, 0xe0, 0x08, + 0xe6, 0xc0, 0xe0, 0x80, 0xf6, 0xe5, 0x0c, 0xd3, 0x9f, 0x40, 0x27, + 0xe5, 0x0c, 0x24, 0x87, 0xf8, 0xe6, 0xae, 0x0c, 0xbe, 0x02, 0x02, + 0x74, 0xff, 0xfd, 0x18, 0xe6, 0xcd, 0xf8, 0xe5, 0x81, 0x6d, 0x60, + 0x06, 0xd0, 0xe0, 0xf6, 0x18, 0x80, 0xf5, 0xe5, 0x0c, 0x24, 0x86, + 0xc8, 0xf6, 0x15, 0x0c, 0x80, 0xd3, 0xe5, 0x0c, 0x23, 0x24, 0x81, + 0xf8, 0x7f, 0x04, 0xc2, 0xaf, 0xe6, 0x30, 0xe0, 0x03, 0x10, 0xe2, + 0x0c, 0x7f, 0x00, 0x30, 0xe1, 0x07, 0x30, 0xe3, 0x04, 0x7f, 0x08, + 0x54, 0xf4, 0x54, 0x7c, 0xc6, 0xd2, 0xaf, 0x54, 0x80, 0x42, 0x07, + 0x22, 0x78, 0x86, 0xa6, 0x81, 0x74, 0x02, 0x60, 0x06, 0xff, 0x08, + 0x76, 0xff, 0xdf, 0xfb, 0x7f, 0x03, 0xe4, 0x78, 0x80, 0xf6, 0x08, + 0xf6, 0x08, 0xdf, 0xfa, 0x78, 0x81, 0x76, 0x30, 0x90, 0x88, 0x0d, + 0x74, 0x01, 0x93, 0xc0, 0xe0, 0xe4, 0x93, 0xc0, 0xe0, 0x43, 0x89, + 0x01, 0x75, 0x8a, 0x60, 0x75, 0x8c, 0x79, 0xd2, 0x8c, 0xd2, 0xaf, + 0x22, 0x02, 0xef, 0xd3, 0x94, 0x02, 0x40, 0x03, 0x7f, 0xff, 0x22, + 0x74, 0x81, 0x2f, 0x2f, 0xf8, 0xe6, 0x20, 0xe5, 0xf4, 0xc2, 0xaf, + 0xe6, 0x44, 0x30, 0xf6, 0xd2, 0xaf, 0xae, 0x0c, 0xee, 0xc3, 0x9f, + 0x50, 0x21, 0x0e, 0x74, 0x86, 0x2e, 0xf8, 0xe6, 0xf9, 0x08, 0xe6, + 0x18, 0xbe, 0x02, 0x02, 0x74, 0xff, 0xfd, 0xed, 0x69, 0x60, 0x09, + 0x09, 0xe7, 0x19, 0x19, 0xf7, 0x09, 0x09, 0x80, 0xf3, 0x16, 0x16, + 0x80, 0xda, 0xee, 0xd3, 0x9f, 0x40, 0x04, 0x05, 0x81, 0x05, 0x81, + 0xee, 0xd3, 0x9f, 0x40, 0x22, 0x74, 0x86, 0x2e, 0xf8, 0x08, 0xe6, + 0xf9, 0xee, 0xb5, 0x0c, 0x02, 0xa9, 0x81, 0x18, 0x06, 0x06, 0xe6, + 0xfd, 0xed, 0x69, 0x60, 0x09, 0x19, 0x19, 0xe7, 0x09, 0x09, 0xf7, + 0x19, 0x80, 0xf3, 0x1e, 0x80, 0xd9, 0xef, 0x24, 0x86, 0xf8, 0xe6, + 0x04, 0xf8, 0xef, 0x2f, 0x04, 0x90, 0x88, 0x0d, 0x93, 0xf6, 0x08, + 0xef, 0x2f, 0x93, 0xf6, 0x7f, 0x00, 0x22, 0xef, 0xd3, 0x94, 0x02, + 0x40, 0x03, 0x7f, 0xff, 0x22, 0xef, 0x23, 0x24, 0x81, 0xf8, 0xe6, + 0x30, 0xe5, 0xf4, 0xc2, 0xaf, 0xe6, 0x54, 0x8c, 0xf6, 0xd2, 0xaf, + 0xe5, 0x0c, 0xb5, 0x07, 0x0a, 0x74, 0x86, 0x2f, 0xf8, 0xe6, 0xf5, + 0x81, 0x02, 0x84, 0x4d, 0x50, 0x2e, 0x74, 0x87, 0x2f, 0xf8, 0xe6, + 0xbf, 0x02, 0x02, 0x74, 0xff, 0xfd, 0x18, 0xe6, 0xf9, 0x74, 0x86, + 0x2f, 0xf8, 0xfb, 0xe6, 0xfc, 0xe9, 0x6c, 0x60, 0x08, 0xa8, 0x05, + 0xe7, 0xf6, 0x1d, 0x19, 0x80, 0xf4, 0xa8, 0x03, 0xa6, 0x05, 0x1f, + 0xe5, 0x0c, 0xb5, 0x07, 0xe3, 0x7f, 0x00, 0x22, 0x74, 0x87, 0x2f, + 0xf8, 0xe6, 0xfd, 0x18, 0x86, 0x01, 0x0f, 0x74, 0x86, 0x2f, 0xf8, + 0xa6, 0x01, 0x08, 0x86, 0x04, 0xe5, 0x0c, 0xb5, 0x07, 0x02, 0xac, + 0x81, 0xed, 0x6c, 0x60, 0x08, 0x0d, 0x09, 0xa8, 0x05, 0xe6, 0xf7, + 0x80, 0xf4, 0xe5, 0x0c, 0xb5, 0x07, 0xde, 0x89, 0x81, 0x7f, 0x00, + 0x22, 0xef, 0xd3, 0x94, 0x02, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xef, + 0x23, 0x24, 0x81, 0xf8, 0xc2, 0xaf, 0xe6, 0x30, 0xe5, 0x05, 0x30, + 0xe0, 0x02, 0xd2, 0xe4, 0xd2, 0xe2, 0xc6, 0xd2, 0xaf, 0x7f, 0x00, + 0x30, 0xe2, 0x01, 0x0f, 0x02, 0x84, 0x4c, 0x8f, 0xf0, 0xe4, 0xff, + 0xfe, 0xe5, 0x0c, 0x23, 0x24, 0x80, 0xf8, 0xc2, 0xa9, 0x30, 0xf7, + 0x0d, 0x7f, 0x08, 0xe6, 0x60, 0x0b, 0x2d, 0xf6, 0x60, 0x30, 0x50, + 0x2e, 0x80, 0x07, 0x30, 0xf1, 0x06, 0xed, 0xf6, 0x60, 0x25, 0x7e, + 0x02, 0x08, 0x30, 0xf0, 0x10, 0xc2, 0xaf, 0xe6, 0x10, 0xe7, 0x23, + 0x0e, 0x30, 0xe2, 0x0c, 0xd2, 0xaf, 0x7f, 0x04, 0x80, 0x12, 0xc2, + 0xaf, 0xe6, 0x10, 0xe7, 0x13, 0x54, 0xec, 0x4e, 0xf6, 0xd2, 0xaf, + 0x02, 0x84, 0x4d, 0x7f, 0x08, 0x08, 0xef, 0x44, 0x83, 0xf4, 0xc2, + 0xaf, 0x56, 0xc6, 0xd2, 0xaf, 0x54, 0x80, 0x4f, 0xff, 0x22, 0xef, + 0x2b, 0xff, 0xee, 0x3a, 0xfe, 0xed, 0x39, 0xfd, 0xec, 0x38, 0xfc, + 0x22, 0xc3, 0xef, 0x9b, 0xff, 0xee, 0x9a, 0xfe, 0xed, 0x99, 0xfd, + 0xec, 0x98, 0xfc, 0x22, 0xe8, 0x8f, 0xf0, 0xa4, 0xcc, 0x8b, 0xf0, + 0xa4, 0x2c, 0xfc, 0xe9, 0x8e, 0xf0, 0xa4, 0x2c, 0xfc, 0x8a, 0xf0, + 0xed, 0xa4, 0x2c, 0xfc, 0xea, 0x8e, 0xf0, 0xa4, 0xcd, 0xa8, 0xf0, + 0x8b, 0xf0, 0xa4, 0x2d, 0xcc, 0x38, 0x25, 0xf0, 0xfd, 0xe9, 0x8f, + 0xf0, 0xa4, 0x2c, 0xcd, 0x35, 0xf0, 0xfc, 0xeb, 0x8e, 0xf0, 0xa4, + 0xfe, 0xa9, 0xf0, 0xeb, 0x8f, 0xf0, 0xa4, 0xcf, 0xc5, 0xf0, 0x2e, + 0xcd, 0x39, 0xfe, 0xe4, 0x3c, 0xfc, 0xea, 0xa4, 0x2d, 0xce, 0x35, + 0xf0, 0xfd, 0xe4, 0x3c, 0xfc, 0x22, 0xef, 0x5b, 0xff, 0xee, 0x5a, + 0xfe, 0xed, 0x59, 0xfd, 0xec, 0x58, 0xfc, 0x22, 0xef, 0x4b, 0xff, + 0xee, 0x4a, 0xfe, 0xed, 0x49, 0xfd, 0xec, 0x48, 0xfc, 0x22, 0xe0, + 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x22, + 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, + 0x22, 0xe0, 0xfb, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xf9, 0x22, 0xeb, + 0xf0, 0xa3, 0xea, 0xf0, 0xa3, 0xe9, 0xf0, 0x22, 0xd0, 0x83, 0xd0, + 0x82, 0xf8, 0xe4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0d, + 0xa3, 0xa3, 0x93, 0xf8, 0x74, 0x01, 0x93, 0xf5, 0x82, 0x88, 0x83, + 0xe4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xef, 0xa3, 0xa3, 0xa3, + 0x80, 0xdf, 0x02, 0x87, 0xbb, 0x02, 0x84, 0xdd, 0xe4, 0x93, 0xa3, + 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2, 0x08, + 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, + 0x0c, 0xc8, 0xc3, 0x33, 0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, + 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf, 0xe4, 0x80, + 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x88, + 0x00, 0xe4, 0x7e, 0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, + 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93, 0xa3, 0x60, 0x01, + 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, + 0x93, 0xa3, 0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, + 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xf0, 0xa3, 0xc8, 0xc5, + 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, + 0xbe, 0x41, 0x95, 0x11, 0x00, 0x41, 0x95, 0x12, 0x00, 0x41, 0x95, + 0x19, 0x00, 0x00, 0xbb, 0x20, 0xc0, 0x66, 0xc8, 0x01, 0x12, 0x5e, + 0x10, 0x7f, 0x04, 0x90, 0x95, 0x17, 0xef, 0xf0, 0x7f, 0x02, 0x12, + 0x86, 0x27, 0x90, 0x84, 0xc1, 0xe0, 0xff, 0x90, 0x95, 0x17, 0xe0, + 0xfe, 0xef, 0x4e, 0x90, 0x84, 0xc1, 0xf0, 0x22, 0x90, 0x93, 0xfb, + 0xef, 0xf0, 0x51, 0x7e, 0x7f, 0xf4, 0x7e, 0x00, 0x12, 0x64, 0x37, + 0xbf, 0x01, 0x08, 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x1c, 0xf0, + 0x51, 0x7e, 0x7f, 0xf5, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, + 0x08, 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x1d, 0xf0, 0x51, 0x7e, + 0x7f, 0xf6, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, + 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x1e, 0xf0, 0x51, 0x7e, 0x7f, 0xf7, + 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, 0x94, 0x1a, + 0xe0, 0x90, 0x94, 0x1f, 0xf0, 0x51, 0x7e, 0x7f, 0xf8, 0x7e, 0x00, + 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, 0x94, 0x1a, 0xe0, 0x90, + 0x94, 0x20, 0xf0, 0x51, 0x7e, 0x12, 0xbf, 0x6c, 0xbf, 0x01, 0x08, + 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x21, 0xf0, 0x51, 0x7e, 0x51, + 0x85, 0x70, 0x52, 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x22, 0xf0, + 0x54, 0x07, 0x60, 0x08, 0x90, 0x94, 0x1a, 0xe0, 0x54, 0xe0, 0x70, + 0x3e, 0x7b, 0x01, 0x7a, 0x94, 0x79, 0x1b, 0x7f, 0xfa, 0x51, 0x87, + 0x70, 0x32, 0x90, 0x94, 0x1a, 0xe0, 0xfc, 0x54, 0x07, 0x70, 0x12, + 0x90, 0x94, 0x22, 0xe0, 0xfe, 0x90, 0x94, 0x1b, 0xe0, 0x54, 0x07, + 0xfd, 0xee, 0x4d, 0x90, 0x94, 0x22, 0xf0, 0xec, 0x54, 0xe0, 0x70, + 0x12, 0x90, 0x94, 0x22, 0xe0, 0xff, 0x90, 0x94, 0x1b, 0xe0, 0x54, + 0xe0, 0xfe, 0xef, 0x4e, 0x90, 0x94, 0x22, 0xf0, 0x51, 0x7e, 0x7f, + 0xfd, 0x51, 0x87, 0x70, 0x47, 0x90, 0x94, 0x1a, 0xe0, 0xfe, 0x54, + 0xcc, 0x90, 0x94, 0x23, 0xf0, 0xee, 0x54, 0x0c, 0xff, 0x60, 0x08, + 0x90, 0x94, 0x1a, 0xe0, 0x54, 0xc0, 0x70, 0x2e, 0xef, 0x70, 0x12, + 0x90, 0x94, 0x23, 0xe0, 0xff, 0x90, 0x94, 0x1a, 0xe0, 0x54, 0x03, + 0x12, 0xd1, 0xca, 0x90, 0x94, 0x23, 0xf0, 0x90, 0x94, 0x1a, 0xe0, + 0xff, 0x54, 0xc0, 0x70, 0x10, 0x90, 0x94, 0x23, 0xe0, 0xfe, 0xef, + 0x54, 0x30, 0x25, 0xe0, 0x25, 0xe0, 0xff, 0xee, 0x4f, 0xf0, 0x51, + 0x7e, 0x7f, 0xf0, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, + 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x24, 0xf0, 0x51, 0x7e, 0x7f, + 0xf1, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, 0x94, + 0x1a, 0xe0, 0x90, 0x94, 0x25, 0xf0, 0x51, 0x7e, 0x7f, 0xf2, 0x7e, + 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, 0x94, 0x1a, 0xe0, + 0x90, 0x94, 0x26, 0xf0, 0x51, 0x7e, 0x7f, 0xf3, 0x7e, 0x00, 0x12, + 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, + 0x27, 0xf0, 0x51, 0x7e, 0x7f, 0xfc, 0x7e, 0x00, 0x12, 0x64, 0x37, + 0xbf, 0x01, 0x08, 0x90, 0x94, 0x1a, 0xe0, 0x90, 0x94, 0x28, 0xf0, + 0x90, 0x93, 0xfc, 0x74, 0x19, 0xf0, 0x90, 0x94, 0x0a, 0x74, 0x08, + 0xf0, 0x90, 0x94, 0x1c, 0xe0, 0x90, 0x93, 0xfe, 0xf0, 0x90, 0x94, + 0x1d, 0xe0, 0x90, 0x93, 0xff, 0xf0, 0x90, 0x94, 0x1e, 0xe0, 0x90, + 0x94, 0x00, 0xf0, 0x90, 0x94, 0x1f, 0xe0, 0x90, 0x94, 0x01, 0xf0, + 0x90, 0x94, 0x20, 0xe0, 0x90, 0x94, 0x02, 0xf0, 0x90, 0x94, 0x21, + 0xe0, 0x90, 0x94, 0x03, 0xf0, 0x90, 0x94, 0x22, 0xe0, 0x90, 0x94, + 0x04, 0xf0, 0x90, 0x94, 0x23, 0xe0, 0x90, 0x94, 0x05, 0xf0, 0x90, + 0x94, 0x0b, 0x74, 0x1a, 0xf0, 0x90, 0x94, 0x19, 0x74, 0x05, 0xf0, + 0x90, 0x94, 0x24, 0xe0, 0x90, 0x94, 0x0d, 0xf0, 0x90, 0x94, 0x25, + 0xe0, 0x90, 0x94, 0x0e, 0xf0, 0x90, 0x94, 0x26, 0xe0, 0x90, 0x94, + 0x0f, 0xf0, 0x90, 0x94, 0x27, 0xe0, 0x90, 0x94, 0x10, 0xf0, 0x90, + 0x94, 0x28, 0xe0, 0x90, 0x94, 0x11, 0xf0, 0x90, 0x93, 0xfb, 0xe0, + 0xb4, 0x01, 0x16, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xfc, 0x12, 0x5e, + 0x10, 0x7b, 0x01, 0x7a, 0x94, 0x79, 0x0b, 0x12, 0x5e, 0x10, 0x7f, + 0x04, 0x01, 0x18, 0x75, 0x1b, 0x01, 0x75, 0x1c, 0x93, 0x75, 0x1d, + 0xfc, 0x75, 0x1e, 0x0a, 0x7b, 0x01, 0x7a, 0x01, 0x79, 0xa0, 0x12, + 0x6a, 0x21, 0x75, 0x1b, 0x01, 0x75, 0x1c, 0x94, 0x75, 0x1d, 0x0d, + 0x75, 0x1e, 0x05, 0x7b, 0x01, 0x7a, 0x01, 0x79, 0xaa, 0x02, 0x6a, + 0x21, 0x7b, 0x01, 0x7a, 0x94, 0x79, 0x1a, 0x22, 0x7f, 0xfb, 0x7e, + 0x00, 0x12, 0x64, 0x37, 0xef, 0x64, 0x01, 0x22, 0x12, 0xa0, 0x37, + 0x12, 0x02, 0xf6, 0xff, 0xf1, 0x73, 0xfe, 0x54, 0x03, 0xfd, 0xee, + 0x13, 0x13, 0x54, 0x07, 0xfb, 0xc0, 0x03, 0xf1, 0x58, 0xf1, 0xf3, + 0x12, 0xd0, 0x6a, 0xd0, 0x03, 0x12, 0xa9, 0x59, 0xf1, 0x58, 0xf1, + 0x73, 0x71, 0xbe, 0x90, 0x93, 0xc6, 0x74, 0x10, 0xf0, 0x90, 0x93, + 0xd4, 0x74, 0x07, 0xf0, 0xf1, 0x58, 0x12, 0x02, 0xf6, 0x90, 0x93, + 0xc8, 0xf0, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xc6, 0x12, 0x5e, 0x10, + 0x7f, 0x04, 0x01, 0x18, 0x90, 0x93, 0xc0, 0x12, 0x87, 0x4e, 0x90, + 0x93, 0xbf, 0xef, 0xf0, 0x12, 0x87, 0x57, 0x8b, 0x33, 0x00, 0x8b, + 0x37, 0x01, 0x8b, 0x3c, 0x06, 0x8b, 0x4d, 0x10, 0x8b, 0x52, 0x11, + 0x8b, 0x57, 0x12, 0x8b, 0x5c, 0x14, 0x8b, 0xa9, 0x15, 0x8b, 0x61, + 0x16, 0x8b, 0x65, 0x18, 0x8b, 0x6a, 0x19, 0x8b, 0x6f, 0x1c, 0x8b, + 0x73, 0x20, 0x8b, 0x78, 0x24, 0x8b, 0x7d, 0x25, 0x8b, 0x82, 0x27, + 0x8b, 0x87, 0x40, 0x8b, 0x8c, 0x42, 0x8b, 0xa9, 0x47, 0x8b, 0x91, + 0x49, 0x8b, 0x96, 0xc3, 0x8b, 0x41, 0xc6, 0x8b, 0x41, 0xc7, 0x8b, + 0x41, 0xc8, 0x00, 0x00, 0x8b, 0x9a, 0x71, 0xaa, 0xe1, 0xf9, 0x71, + 0xaa, 0x02, 0x98, 0x09, 0x71, 0xaa, 0x02, 0xb9, 0x3f, 0x90, 0x93, + 0xbf, 0xe0, 0xff, 0xa3, 0x12, 0x87, 0x45, 0x02, 0xb9, 0xda, 0x71, + 0xaa, 0x02, 0x9f, 0xff, 0x71, 0xaa, 0x02, 0x91, 0x0f, 0x71, 0xaa, + 0x02, 0xb0, 0x32, 0x71, 0xaa, 0x02, 0xb1, 0x0c, 0x71, 0xaa, 0xe1, + 0xca, 0x71, 0xaa, 0x02, 0xa8, 0x01, 0x71, 0xaa, 0x02, 0xaf, 0xed, + 0x71, 0xaa, 0x41, 0x90, 0x71, 0xaa, 0x02, 0x90, 0x3f, 0x71, 0xaa, + 0x02, 0xa4, 0xb6, 0x71, 0xaa, 0x02, 0xb1, 0x1b, 0x71, 0xaa, 0x02, + 0xb1, 0x23, 0x71, 0xaa, 0x02, 0xa0, 0x3d, 0x71, 0xaa, 0x02, 0x4e, + 0x29, 0x71, 0xaa, 0x02, 0xca, 0xe1, 0x71, 0xaa, 0xe1, 0xb5, 0x90, + 0x01, 0xc0, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x93, 0xbf, 0xe0, 0x90, + 0x01, 0xc2, 0xf0, 0x22, 0x90, 0x93, 0xc0, 0x02, 0x87, 0x45, 0x75, + 0xf0, 0x1b, 0xa4, 0x24, 0x38, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, + 0x83, 0xe0, 0xfe, 0x54, 0x03, 0xff, 0xee, 0x13, 0x13, 0x54, 0x07, + 0xfd, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x95, 0x15, + 0xed, 0xf0, 0xe4, 0xa3, 0xf0, 0xef, 0x14, 0x60, 0x02, 0x81, 0xaf, + 0x90, 0x06, 0x03, 0xe0, 0x54, 0xfb, 0xf0, 0x90, 0x95, 0x15, 0xe0, + 0xfb, 0xc4, 0x33, 0x54, 0xe0, 0xfe, 0x90, 0x04, 0x42, 0xe0, 0x54, + 0x9f, 0x4e, 0xfe, 0xf0, 0xe4, 0xfd, 0x12, 0xcd, 0x05, 0x90, 0x95, + 0x16, 0xef, 0xf0, 0x90, 0x04, 0x83, 0xf0, 0x90, 0x94, 0xd3, 0x12, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xd7, 0x12, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x01, 0xb1, 0x82, 0x12, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x01, 0x90, 0x94, 0xd7, 0x12, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x01, 0x7f, 0x00, 0x7e, 0x09, 0xb1, 0x86, 0x12, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x10, 0x90, 0x95, 0x15, 0xb1, 0xa5, 0xef, 0x54, + 0x03, 0xff, 0xe4, 0x78, 0x01, 0x12, 0x04, 0xc5, 0x78, 0x04, 0xf1, + 0x64, 0x7f, 0x00, 0x7e, 0x0a, 0xb1, 0x86, 0x12, 0x04, 0xf7, 0x00, + 0x00, 0x0c, 0x00, 0x90, 0x95, 0x15, 0xb1, 0xa5, 0xef, 0x54, 0x03, + 0xff, 0xe4, 0x78, 0x0a, 0xf1, 0x64, 0x7f, 0x00, 0x7e, 0x0d, 0xb1, + 0x86, 0x12, 0x04, 0xf7, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x95, 0x16, + 0xb1, 0xa5, 0xef, 0x54, 0x03, 0xff, 0xe4, 0x78, 0x1a, 0xf1, 0x64, + 0x7f, 0x18, 0xb1, 0x84, 0x12, 0x04, 0xf7, 0x00, 0x00, 0x0c, 0x00, + 0x90, 0x94, 0xd7, 0x12, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x00, 0xb1, + 0x18, 0x90, 0x94, 0xc1, 0x12, 0x04, 0xf7, 0x00, 0x00, 0x0c, 0x00, + 0x90, 0x94, 0xc5, 0x12, 0x04, 0xf7, 0x00, 0x00, 0x04, 0x00, 0x80, + 0x5b, 0x90, 0x06, 0x03, 0xe0, 0x44, 0x04, 0xf0, 0x90, 0x94, 0xd3, + 0x12, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xd7, 0x12, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x82, 0x12, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xd7, 0x12, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0x00, 0x7e, 0x09, 0xb1, 0x86, 0x12, 0x04, + 0xf7, 0x00, 0x00, 0x0c, 0x00, 0x90, 0x94, 0xd7, 0x12, 0x04, 0xf7, + 0x00, 0x00, 0x0c, 0x00, 0xb1, 0x18, 0x90, 0x94, 0xc1, 0x12, 0x04, + 0xf7, 0x00, 0x00, 0x0c, 0x00, 0x90, 0x94, 0xc5, 0x12, 0x04, 0xf7, + 0x00, 0x00, 0x0c, 0x00, 0x7d, 0x18, 0x7c, 0x00, 0xe4, 0xff, 0x12, + 0xa9, 0xd2, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x7f, 0x84, 0x7e, 0x08, + 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x94, 0xd1, 0xee, + 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x70, 0x61, 0x90, 0x94, 0xdb, 0x12, + 0x04, 0xeb, 0x90, 0x94, 0xd3, 0x12, 0x87, 0x2d, 0x12, 0x04, 0xa7, + 0x90, 0x94, 0xdb, 0xf1, 0x5e, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, + 0xc0, 0x07, 0x90, 0x94, 0xd3, 0x12, 0x87, 0x2d, 0x90, 0x94, 0xd7, + 0xf1, 0x5e, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, + 0x87, 0x20, 0x90, 0x94, 0xdf, 0x12, 0x04, 0xeb, 0x90, 0x94, 0xdf, + 0x12, 0x87, 0x2d, 0x90, 0x91, 0x66, 0x12, 0x04, 0xeb, 0x90, 0x94, + 0xd1, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x71, 0x18, 0xd0, 0xd0, + 0x92, 0xaf, 0x22, 0x7f, 0x00, 0x7e, 0x08, 0xb1, 0x1c, 0x90, 0x94, + 0xd3, 0x22, 0x90, 0x05, 0x61, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0xfe, + 0x78, 0x08, 0x12, 0x04, 0xd8, 0xa8, 0x04, 0xa9, 0x05, 0xaa, 0x06, + 0xab, 0x07, 0x90, 0x05, 0x60, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0xfe, + 0x22, 0x90, 0x92, 0x0a, 0xe0, 0x20, 0xe0, 0x02, 0xe1, 0x49, 0x90, + 0x92, 0xb6, 0xe0, 0x04, 0xf0, 0x12, 0x94, 0x0e, 0x04, 0xff, 0x90, + 0x94, 0x6f, 0xf0, 0x90, 0x92, 0x0b, 0xe0, 0xb5, 0x07, 0x05, 0xe4, + 0x90, 0x94, 0x6f, 0xf0, 0x90, 0x92, 0xb4, 0xe0, 0xff, 0x60, 0x17, + 0x90, 0x94, 0x6f, 0xf1, 0x7c, 0xe0, 0xc3, 0x9f, 0x90, 0x91, 0x6f, + 0x12, 0xaf, 0x91, 0xfb, 0xfd, 0x7f, 0x50, 0x7e, 0x01, 0x12, 0x61, + 0x41, 0x90, 0x94, 0x6f, 0xe0, 0xff, 0xf1, 0xa6, 0x54, 0x07, 0xfe, + 0x64, 0x02, 0x60, 0x03, 0xee, 0x70, 0x11, 0xef, 0xf1, 0x7d, 0xe0, + 0x24, 0xfc, 0xff, 0xe4, 0x90, 0x91, 0x6e, 0xf0, 0xa3, 0xef, 0x12, + 0xc6, 0x20, 0x90, 0x92, 0x0a, 0xe0, 0xf1, 0xa2, 0x54, 0x07, 0xff, + 0x14, 0x60, 0x0f, 0x14, 0x60, 0x07, 0x14, 0x60, 0x09, 0x24, 0x03, + 0x70, 0x0b, 0x12, 0xcc, 0x5e, 0x80, 0x03, 0x12, 0x97, 0xee, 0x12, + 0x94, 0x17, 0x90, 0x92, 0xb3, 0xe0, 0xff, 0x90, 0x92, 0xb6, 0xe0, + 0xd3, 0x9f, 0x40, 0x02, 0xe1, 0x49, 0xb1, 0x8c, 0x12, 0x87, 0x20, + 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x05, 0x62, + 0xb1, 0xa5, 0x78, 0x10, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, + 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, + 0xc0, 0x06, 0xc0, 0x07, 0xa3, 0xb1, 0xa5, 0x78, 0x18, 0x12, 0x04, + 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, + 0x20, 0x90, 0x94, 0x70, 0x12, 0x04, 0xeb, 0x90, 0x05, 0x65, 0xb1, + 0xa5, 0x12, 0xae, 0x80, 0x90, 0x05, 0x64, 0xb1, 0xa5, 0x12, 0x87, + 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x05, + 0x66, 0xb1, 0xa5, 0x78, 0x10, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, + 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, + 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xa3, 0xb1, 0xa5, 0x78, 0x18, 0x12, + 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, + 0x87, 0x20, 0x90, 0x94, 0x74, 0x12, 0x04, 0xeb, 0x90, 0x94, 0x6f, + 0xf1, 0x7c, 0xb1, 0xa5, 0x12, 0xaf, 0xa6, 0x90, 0x94, 0x70, 0x12, + 0x87, 0x39, 0x12, 0x86, 0xa9, 0x90, 0x94, 0x78, 0x12, 0x04, 0xeb, + 0x90, 0x94, 0x70, 0x12, 0x87, 0x2d, 0x90, 0x94, 0x78, 0x12, 0xaf, + 0x9f, 0x50, 0x11, 0xf1, 0x4c, 0x12, 0xb9, 0x37, 0xe4, 0x3d, 0xfd, + 0xe4, 0x3c, 0xfc, 0x90, 0x94, 0x74, 0x12, 0x04, 0xeb, 0xf1, 0x4c, + 0x12, 0xaf, 0xb7, 0xf1, 0x4a, 0x12, 0xaf, 0xc0, 0xf1, 0x4a, 0x12, + 0xaf, 0xc9, 0xf1, 0x4a, 0x90, 0x05, 0x88, 0xef, 0xf0, 0x90, 0x94, + 0x78, 0x12, 0x87, 0x2d, 0x12, 0xaf, 0xd2, 0xef, 0xf0, 0x90, 0x94, + 0x78, 0x12, 0x87, 0x2d, 0x12, 0xaf, 0xdb, 0xef, 0xf0, 0x90, 0x94, + 0x78, 0x12, 0x87, 0x2d, 0x12, 0xaf, 0xe4, 0xef, 0xf0, 0x90, 0x94, + 0x78, 0x12, 0x87, 0x2d, 0x12, 0xd1, 0x1f, 0x22, 0xef, 0xf0, 0x90, + 0x94, 0x74, 0x02, 0x87, 0x2d, 0x24, 0x03, 0xff, 0xe4, 0x33, 0xfe, + 0x90, 0x93, 0xc3, 0x02, 0x87, 0x45, 0x12, 0x87, 0x39, 0x02, 0x87, + 0x13, 0x12, 0x04, 0xd8, 0x90, 0x94, 0xd7, 0x02, 0x04, 0xeb, 0xab, + 0x5b, 0xaa, 0x5c, 0xa9, 0x5d, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0f, + 0x90, 0x94, 0x7e, 0xe0, 0x75, 0xf0, 0x1b, 0xa4, 0x24, 0x39, 0xf5, + 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0x22, 0xf1, 0x8f, 0xa1, 0xac, + 0x90, 0x92, 0x09, 0xe0, 0x30, 0xe0, 0x0b, 0x12, 0xaf, 0x8a, 0xe4, + 0x90, 0x92, 0x0c, 0xf0, 0x12, 0xc5, 0xf1, 0x22, 0xc3, 0x13, 0x54, + 0x07, 0x75, 0xf0, 0x1b, 0xa4, 0x24, 0x3a, 0xf5, 0x82, 0xe4, 0x34, + 0x92, 0xf5, 0x83, 0xe0, 0x22, 0x12, 0x02, 0xf6, 0xff, 0x90, 0x92, + 0xbc, 0xf0, 0xbf, 0x01, 0x09, 0x7f, 0x01, 0x11, 0x33, 0xe4, 0x90, + 0x92, 0xbc, 0xf0, 0x22, 0x12, 0xaf, 0xae, 0x90, 0x92, 0x3c, 0xf0, + 0xf1, 0x73, 0x90, 0x92, 0x3d, 0xf1, 0xf2, 0x90, 0x92, 0x57, 0xf0, + 0x12, 0x91, 0x09, 0x90, 0x92, 0x58, 0xf0, 0x12, 0x97, 0xe7, 0x90, + 0x92, 0x72, 0x12, 0x97, 0xf5, 0x90, 0x92, 0x73, 0xf0, 0x22, 0x4f, + 0xf0, 0x90, 0x00, 0x02, 0x02, 0x03, 0x0f, 0x90, 0x02, 0x09, 0xe0, + 0xf5, 0x5b, 0x12, 0x02, 0xf6, 0x25, 0x5b, 0x90, 0x84, 0xc6, 0xf0, + 0x12, 0x8f, 0x73, 0x25, 0x5b, 0x90, 0x84, 0xc7, 0x12, 0x8f, 0xf2, + 0x25, 0x5b, 0x90, 0x84, 0xc8, 0xf0, 0x31, 0x09, 0x25, 0x5b, 0x90, + 0x84, 0xc9, 0xf0, 0xf1, 0xe7, 0x25, 0x5b, 0x90, 0x84, 0xca, 0xf1, + 0xf5, 0x25, 0x5b, 0x90, 0x84, 0xcb, 0xf0, 0x11, 0x39, 0x25, 0x5b, + 0x90, 0x84, 0xcc, 0xf0, 0x22, 0x90, 0x00, 0x06, 0x02, 0x03, 0x0f, + 0x12, 0xa0, 0x37, 0x12, 0x02, 0xf6, 0xff, 0x54, 0x7f, 0x90, 0x85, + 0xc5, 0xf0, 0xef, 0x12, 0xa3, 0x01, 0xa3, 0xf0, 0x12, 0x8f, 0x73, + 0xfd, 0x54, 0xf0, 0xc4, 0x54, 0x0f, 0xff, 0x90, 0x85, 0xc3, 0xe0, + 0x54, 0xf0, 0x4f, 0xf0, 0x31, 0x09, 0xfc, 0x54, 0x01, 0x25, 0xe0, + 0xff, 0x90, 0x85, 0xc1, 0xe0, 0x54, 0xfd, 0x4f, 0xf0, 0xec, 0x54, + 0x04, 0xff, 0x90, 0x92, 0xc9, 0xe0, 0x54, 0xfb, 0x4f, 0xf0, 0xed, + 0x54, 0x0f, 0xc4, 0x54, 0xf0, 0xff, 0x12, 0xb7, 0xdc, 0x12, 0x8f, + 0xf1, 0x90, 0x85, 0xc4, 0xf0, 0x11, 0x39, 0x30, 0xe0, 0x50, 0xc3, + 0x13, 0x54, 0x07, 0xff, 0xc3, 0x94, 0x04, 0x90, 0x85, 0xd8, 0x50, + 0x04, 0xef, 0xf0, 0x80, 0x27, 0x74, 0x03, 0xf0, 0x12, 0x8f, 0x58, + 0xe9, 0x24, 0x06, 0x12, 0xa7, 0xee, 0xff, 0x74, 0x03, 0x24, 0xfd, + 0xfe, 0xef, 0xc4, 0x54, 0x0f, 0xfd, 0xef, 0x54, 0x0f, 0xff, 0xed, + 0x2e, 0x54, 0x0f, 0xfe, 0xc4, 0x54, 0xf0, 0x4f, 0x12, 0x03, 0x3c, + 0x12, 0x8f, 0x58, 0x11, 0x39, 0xc4, 0x54, 0x0f, 0xff, 0xc3, 0x94, + 0x04, 0x90, 0x85, 0xcd, 0x50, 0x05, 0x74, 0x04, 0xf0, 0x80, 0x02, + 0xef, 0xf0, 0x12, 0x8f, 0x58, 0xf1, 0xe7, 0xfd, 0x7f, 0x02, 0x12, + 0x57, 0x82, 0x12, 0x8f, 0x58, 0x12, 0x71, 0xcb, 0x12, 0xc2, 0xd4, + 0xf0, 0x90, 0x85, 0xc5, 0x12, 0xd1, 0x6e, 0x12, 0xb7, 0xdb, 0x90, + 0x01, 0xbe, 0xf0, 0x22, 0x90, 0x00, 0x03, 0x02, 0x03, 0x0f, 0x12, + 0xaf, 0xae, 0xc4, 0x54, 0x0f, 0xff, 0xbf, 0x0f, 0x15, 0x90, 0x92, + 0x09, 0xe0, 0x54, 0xfe, 0xf0, 0x12, 0xaf, 0x8a, 0x12, 0x98, 0xd7, + 0x54, 0x0f, 0xff, 0x51, 0xc7, 0x02, 0xbc, 0x2f, 0x12, 0x8f, 0x6d, + 0x12, 0xd1, 0xf1, 0xf1, 0xfc, 0xf5, 0x83, 0xef, 0x12, 0x8f, 0xf2, + 0x54, 0x03, 0xff, 0x51, 0xb7, 0x54, 0xfc, 0x12, 0x8f, 0xf1, 0x54, + 0x1c, 0xff, 0xee, 0x54, 0x0f, 0xfe, 0x51, 0xb8, 0x54, 0xe3, 0x12, + 0x8f, 0xf1, 0x54, 0xe0, 0xff, 0xee, 0x51, 0xb8, 0x54, 0x1f, 0x4f, + 0xf0, 0xf1, 0xe7, 0xff, 0x12, 0x02, 0xf6, 0x54, 0x0f, 0xfd, 0xe4, + 0xfb, 0x51, 0xae, 0xf1, 0xf6, 0xff, 0x12, 0x02, 0xf6, 0x54, 0x0f, + 0xfd, 0x7b, 0x01, 0x51, 0xae, 0x31, 0x09, 0x33, 0x33, 0x33, 0x54, + 0xf8, 0x12, 0xd1, 0xf1, 0xfd, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0x16, + 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xef, 0xf0, 0x31, 0x09, + 0xc4, 0x13, 0x54, 0x07, 0xff, 0xed, 0x75, 0xf0, 0x0e, 0xa4, 0x24, + 0x17, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xef, 0xf0, 0xee, + 0xc4, 0x54, 0x0f, 0xff, 0x14, 0x6d, 0x70, 0x21, 0x90, 0x92, 0x0b, + 0xef, 0xf0, 0x11, 0x39, 0x54, 0x0f, 0xc4, 0x54, 0xf0, 0xff, 0x90, + 0x92, 0x0a, 0xe0, 0x54, 0x0f, 0x4f, 0xf0, 0x54, 0xf1, 0xf0, 0x90, + 0x92, 0x09, 0xe0, 0x44, 0x01, 0x12, 0xd1, 0x23, 0x22, 0x8f, 0x5e, + 0x8d, 0x5f, 0xae, 0x03, 0x74, 0x1f, 0xc3, 0x95, 0x5e, 0x40, 0x0a, + 0x51, 0xa6, 0xe4, 0xfd, 0x51, 0x9e, 0x24, 0xd4, 0x80, 0x31, 0x74, + 0x3f, 0xc3, 0x95, 0x5e, 0x40, 0x0a, 0x51, 0xa6, 0x7d, 0x20, 0x51, + 0x9c, 0x24, 0x88, 0x80, 0x20, 0x74, 0x5f, 0xc3, 0x95, 0x5e, 0x40, + 0x0a, 0x51, 0xa6, 0x7d, 0x40, 0x51, 0x9c, 0x24, 0xd0, 0x80, 0x0f, + 0x74, 0x7f, 0xc3, 0x95, 0x5e, 0x40, 0x20, 0x51, 0xa6, 0x7d, 0x60, + 0x51, 0x9c, 0x24, 0x84, 0xfd, 0xe4, 0x34, 0x04, 0xfc, 0xe5, 0x5f, + 0x12, 0xd1, 0x13, 0xf5, 0x83, 0x75, 0xf0, 0x03, 0xee, 0x12, 0x05, + 0x28, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0x22, 0xc3, 0xef, 0x9d, 0xf5, + 0x60, 0xc3, 0x94, 0x08, 0x50, 0x1c, 0xe4, 0xf5, 0x61, 0x71, 0x9f, + 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x93, 0xc7, 0xe0, 0xd0, 0x82, 0xd0, + 0x83, 0x75, 0xf0, 0x03, 0x12, 0x05, 0x28, 0xe5, 0x60, 0xf0, 0x80, + 0x3e, 0xe5, 0x60, 0xc3, 0x94, 0x10, 0x50, 0x09, 0x75, 0x61, 0x01, + 0xe5, 0x60, 0x24, 0xf8, 0x80, 0x17, 0xe5, 0x60, 0xc3, 0x94, 0x18, + 0x50, 0x09, 0x75, 0x61, 0x02, 0xe5, 0x60, 0x24, 0xf0, 0x80, 0x07, + 0x75, 0x61, 0x03, 0xe5, 0x60, 0x24, 0xe8, 0xff, 0x71, 0x9f, 0xc0, + 0x83, 0xc0, 0x82, 0x90, 0x93, 0xc7, 0xe0, 0xd0, 0x82, 0xd0, 0x83, + 0x75, 0xf0, 0x03, 0x12, 0x05, 0x28, 0xef, 0xf0, 0xaf, 0x61, 0x22, + 0xaf, 0x5e, 0x51, 0x35, 0x90, 0x93, 0xc3, 0xef, 0xf0, 0x22, 0x90, + 0x93, 0xc7, 0xee, 0xf0, 0xab, 0x5f, 0x22, 0x31, 0xd4, 0xab, 0x5b, + 0xaa, 0x5c, 0xa9, 0x5d, 0x22, 0xed, 0x75, 0xf0, 0x0e, 0xa4, 0x24, + 0x0e, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0x22, 0x8f, + 0x5e, 0xd1, 0xe6, 0xe5, 0x5e, 0xf1, 0xfd, 0xf5, 0x83, 0xe0, 0xfc, + 0xe5, 0x5e, 0x51, 0xb8, 0x12, 0xd0, 0x5a, 0xaf, 0x04, 0x12, 0xa9, + 0x59, 0xe5, 0x5e, 0x51, 0xb8, 0x12, 0x8b, 0xbe, 0xe5, 0x5e, 0x12, + 0xaa, 0xe3, 0xfd, 0xb1, 0x92, 0xb1, 0x82, 0xad, 0x5e, 0x7f, 0x01, + 0x80, 0x00, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x94, + 0xf9, 0xef, 0xf0, 0xa3, 0xed, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x94, + 0xfb, 0xe0, 0xff, 0xc3, 0x94, 0x03, 0x40, 0x02, 0x61, 0x9a, 0x90, + 0x94, 0xfa, 0xe0, 0xfe, 0x12, 0xd1, 0x13, 0xf5, 0x83, 0x75, 0xf0, + 0x03, 0xef, 0x12, 0xd1, 0x7b, 0xe0, 0x90, 0x94, 0xfc, 0xf0, 0x90, + 0x94, 0xf9, 0xe0, 0xfc, 0xb4, 0x02, 0x20, 0x90, 0x94, 0xfc, 0xe0, + 0xfd, 0xee, 0x71, 0xa0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x94, 0xfb, + 0xe0, 0xd0, 0x82, 0xd0, 0x83, 0x12, 0xb2, 0x7b, 0x80, 0x02, 0xc3, + 0x33, 0xd8, 0xfc, 0x4d, 0x80, 0x20, 0xec, 0xb4, 0x01, 0x20, 0x12, + 0xd1, 0x9d, 0x71, 0xa0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x94, 0xfb, + 0xe0, 0xd0, 0x82, 0xd0, 0x83, 0x12, 0xb2, 0x7b, 0x80, 0x02, 0xc3, + 0x33, 0xd8, 0xfc, 0xf4, 0x5f, 0x90, 0x94, 0xfc, 0xf0, 0x12, 0xd1, + 0x9d, 0x12, 0xd1, 0x13, 0xf5, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0x90, + 0x94, 0xfb, 0xe0, 0xd0, 0x82, 0xd0, 0x83, 0x75, 0xf0, 0x03, 0x12, + 0xd1, 0x7b, 0xef, 0xf0, 0x90, 0x94, 0xfb, 0xe0, 0x04, 0xf0, 0x61, + 0x08, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xeb, 0x75, 0xf0, 0x0e, 0xa4, + 0x24, 0x11, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0x22, 0x12, + 0xd0, 0xa7, 0xb5, 0x07, 0x04, 0xee, 0x54, 0xf1, 0xf0, 0x12, 0xc5, + 0xf1, 0xe4, 0x90, 0x92, 0x0c, 0xf0, 0xd1, 0xee, 0x12, 0xd0, 0xbe, + 0xf1, 0xfc, 0xf5, 0x83, 0xe0, 0xfa, 0x51, 0xb7, 0xfc, 0x54, 0x03, + 0xfd, 0xec, 0x13, 0x13, 0x54, 0x07, 0xfb, 0xee, 0x12, 0xd0, 0x69, + 0xaf, 0x02, 0x12, 0xa9, 0x59, 0x91, 0x0e, 0x51, 0xb8, 0x12, 0x8b, + 0xbe, 0x91, 0x0e, 0xff, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0x18, 0xf5, + 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0x04, 0xf0, 0x12, 0xaa, + 0xe2, 0xfd, 0xb1, 0x92, 0xe4, 0xfb, 0xfd, 0x91, 0x0a, 0xfd, 0x7f, + 0x01, 0x41, 0xf6, 0x7f, 0xff, 0xb1, 0x87, 0x90, 0x92, 0x0a, 0xe0, + 0xc3, 0x13, 0x54, 0x07, 0x22, 0xe4, 0x90, 0x94, 0x7f, 0xf0, 0x90, + 0x92, 0x0a, 0xe0, 0xff, 0x20, 0xe0, 0x02, 0xa1, 0x81, 0x12, 0x8f, + 0xa2, 0x54, 0x07, 0x90, 0x94, 0x7c, 0xf0, 0x60, 0x07, 0xe0, 0x64, + 0x02, 0x60, 0x02, 0xa1, 0x25, 0x90, 0x92, 0x0c, 0xe0, 0x70, 0x2e, + 0x12, 0xd1, 0xb0, 0x7b, 0x4e, 0x7d, 0x6f, 0x91, 0x0a, 0xf1, 0xd9, + 0xe0, 0xff, 0x7e, 0x00, 0x7b, 0x04, 0x7d, 0x01, 0xb1, 0x92, 0xbf, + 0x01, 0x0d, 0xf1, 0x5a, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x92, 0x0c, + 0x74, 0x01, 0xf0, 0x22, 0x90, 0x94, 0x7d, 0xe0, 0xfd, 0x7b, 0x4f, + 0x81, 0xfd, 0x90, 0x92, 0x0c, 0xe0, 0x64, 0x01, 0x60, 0x02, 0xa1, + 0x16, 0x91, 0x0e, 0xff, 0x12, 0x8f, 0xa6, 0xfe, 0xc4, 0x54, 0x0f, + 0x30, 0xe0, 0x02, 0xa1, 0x14, 0xef, 0xf1, 0x62, 0xe0, 0xff, 0x30, + 0xe0, 0x08, 0x90, 0x94, 0x7f, 0x74, 0x01, 0xf0, 0x80, 0x17, 0xef, + 0xc3, 0x13, 0x20, 0xe0, 0x11, 0x90, 0x94, 0x7f, 0x74, 0x01, 0xf0, + 0x12, 0xd1, 0xb0, 0x7b, 0x50, 0x7d, 0x6f, 0x7f, 0xff, 0xb1, 0x87, + 0x90, 0x94, 0x7f, 0xe0, 0x60, 0x64, 0x90, 0x92, 0xbb, 0xe0, 0xff, + 0x90, 0x92, 0xba, 0xe0, 0x6f, 0x60, 0x43, 0xe0, 0x04, 0xf0, 0xe0, + 0xd3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x94, 0x80, 0x74, 0x04, 0xf0, + 0x80, 0x05, 0xe4, 0x90, 0x94, 0x80, 0xf0, 0x91, 0x0e, 0xf1, 0xd9, + 0xe0, 0xff, 0x7e, 0x00, 0x90, 0x94, 0x80, 0xe0, 0xfb, 0x7d, 0x01, + 0xb1, 0x92, 0xbf, 0x01, 0x0e, 0x12, 0xd1, 0x57, 0xf0, 0xe4, 0xfb, + 0xfd, 0x7f, 0x58, 0x7e, 0x01, 0x02, 0x61, 0x41, 0x90, 0x94, 0x7d, + 0xe0, 0xfd, 0x7b, 0x51, 0xe4, 0xff, 0xa1, 0x87, 0xe4, 0x90, 0x92, + 0xba, 0xf1, 0xed, 0x90, 0x92, 0x0a, 0xe0, 0xff, 0xf1, 0x5e, 0xe0, + 0x54, 0xfb, 0xf0, 0x80, 0x02, 0xf1, 0xee, 0x90, 0x92, 0x0c, 0xe0, + 0x64, 0x05, 0x70, 0x63, 0xd1, 0x37, 0xef, 0x70, 0x5e, 0x80, 0x57, + 0x90, 0x94, 0x7c, 0xe0, 0xff, 0x64, 0x03, 0x60, 0x05, 0xef, 0x64, + 0x01, 0x70, 0x4e, 0x90, 0x92, 0x0c, 0xe0, 0x64, 0x05, 0x70, 0x46, + 0x90, 0x94, 0x7c, 0xe0, 0x64, 0x01, 0x70, 0x2c, 0x12, 0x8f, 0x79, + 0xe0, 0xd3, 0x94, 0x1f, 0x90, 0x92, 0x0a, 0xe0, 0x40, 0x0a, 0xf1, + 0xd6, 0xe0, 0xff, 0x7d, 0x00, 0x7c, 0x7c, 0x80, 0x12, 0xc3, 0xf1, + 0xd6, 0xe0, 0xfb, 0x12, 0x8f, 0x79, 0xe0, 0x7d, 0x00, 0x25, 0xe0, + 0x25, 0xe0, 0xfc, 0xaf, 0x03, 0x12, 0x98, 0xee, 0x91, 0x0e, 0xfd, + 0x7f, 0x02, 0x12, 0xaa, 0x52, 0xd1, 0x37, 0xef, 0x70, 0x05, 0x7f, + 0x06, 0x12, 0xaa, 0xf7, 0x22, 0xe4, 0xfb, 0xfd, 0x7f, 0xff, 0x90, + 0x05, 0x22, 0xed, 0xf0, 0x90, 0x92, 0x01, 0xeb, 0xf0, 0x22, 0xd3, + 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x94, 0xf2, 0xee, 0xf0, + 0xa3, 0x12, 0xb1, 0x03, 0x90, 0x04, 0x1d, 0xe0, 0x60, 0x27, 0x90, + 0x05, 0x22, 0xe0, 0x90, 0x94, 0xf8, 0xf0, 0x7b, 0x14, 0xd1, 0xe8, + 0xef, 0x64, 0x01, 0x70, 0x05, 0x12, 0xd0, 0x71, 0x80, 0x04, 0x7f, + 0x00, 0x80, 0x15, 0x90, 0x94, 0xf8, 0xe0, 0xfd, 0x7b, 0x15, 0xe4, + 0xff, 0xb1, 0x87, 0x80, 0x03, 0x12, 0xd0, 0x71, 0x12, 0x9f, 0xf8, + 0x7f, 0x01, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x90, 0x92, 0x09, 0xe0, + 0x30, 0xe0, 0x53, 0x90, 0x92, 0x0c, 0xe0, 0x70, 0x25, 0x7b, 0x16, + 0x7d, 0x6f, 0xd1, 0xea, 0x91, 0x0e, 0x12, 0xaa, 0xe3, 0x7d, 0x01, + 0xb1, 0x92, 0x91, 0x0e, 0x12, 0xc5, 0x01, 0xe0, 0x44, 0x01, 0xf0, + 0x12, 0xd1, 0x57, 0x12, 0xc6, 0x20, 0x90, 0x92, 0x0c, 0x74, 0x01, + 0xf0, 0x22, 0x90, 0x92, 0x0c, 0xe0, 0x64, 0x01, 0x70, 0x1e, 0x91, + 0x0e, 0x12, 0xc5, 0x00, 0xe0, 0x30, 0xe0, 0x15, 0x12, 0xaa, 0xe2, + 0x7d, 0x01, 0xb1, 0x92, 0x12, 0xd1, 0x57, 0xf0, 0xe4, 0xfb, 0xfd, + 0x7f, 0x54, 0x7e, 0x01, 0x02, 0x61, 0x41, 0x71, 0xae, 0x22, 0xd1, + 0xee, 0xef, 0x70, 0x02, 0xff, 0x22, 0x91, 0x0e, 0x90, 0x92, 0x88, + 0xf0, 0x12, 0xd0, 0xa7, 0xb5, 0x07, 0x04, 0xee, 0x54, 0xf1, 0xf0, + 0x91, 0x0e, 0xf5, 0x77, 0xe4, 0x90, 0x92, 0x0c, 0xf0, 0xe5, 0x77, + 0x75, 0xf0, 0x1b, 0xa4, 0x24, 0x3b, 0xf5, 0x82, 0xe4, 0x34, 0x92, + 0xf5, 0x83, 0xe0, 0x30, 0xe0, 0x27, 0xf1, 0x4e, 0xe0, 0x24, 0x8b, + 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0xff, 0x12, 0xaa, + 0xd2, 0xef, 0xf1, 0x4d, 0xe0, 0x04, 0xf1, 0x4d, 0xe0, 0xff, 0x90, + 0x92, 0x8a, 0xe0, 0xfe, 0xef, 0xb5, 0x06, 0x04, 0xf1, 0x4e, 0xe4, + 0xf0, 0x12, 0xaa, 0xd2, 0xe0, 0xfc, 0x90, 0x92, 0x88, 0xe0, 0x12, + 0xaa, 0xd4, 0xe0, 0x6c, 0x60, 0x0f, 0xe5, 0x77, 0x12, 0xd0, 0x4c, + 0xaf, 0x04, 0x12, 0xa9, 0x59, 0xe5, 0x77, 0x12, 0x8b, 0xb0, 0xe5, + 0x77, 0x12, 0x8f, 0xa6, 0x54, 0x07, 0xff, 0x60, 0x03, 0xbf, 0x02, + 0x0e, 0xe5, 0x77, 0xf1, 0xd9, 0xe0, 0xff, 0x7e, 0x00, 0x7b, 0x04, + 0xe4, 0xfd, 0xb1, 0x92, 0xad, 0x77, 0x7f, 0x01, 0x12, 0xaa, 0x52, + 0x90, 0x92, 0x89, 0xe0, 0xc3, 0x13, 0x54, 0x03, 0xff, 0xbf, 0x02, + 0x05, 0xe4, 0xff, 0x12, 0xaa, 0xf7, 0x7f, 0x01, 0x22, 0x7b, 0x17, + 0x7d, 0xff, 0x7f, 0xff, 0xb1, 0x87, 0xe4, 0x90, 0x95, 0x05, 0xf0, + 0xa3, 0xf0, 0x90, 0x05, 0x22, 0xe0, 0x90, 0x95, 0x07, 0xf0, 0x7d, + 0x47, 0x7f, 0xff, 0x12, 0x98, 0xe3, 0x90, 0x05, 0xf8, 0xe0, 0x70, + 0x15, 0xa3, 0xe0, 0x70, 0x11, 0xa3, 0xe0, 0x70, 0x0d, 0xa3, 0xe0, + 0x70, 0x09, 0x12, 0xd1, 0xe9, 0x12, 0x98, 0xe3, 0x7f, 0x01, 0x22, + 0xd3, 0x90, 0x95, 0x06, 0xe0, 0x94, 0xe8, 0x90, 0x95, 0x05, 0xe0, + 0x94, 0x03, 0x40, 0x10, 0x90, 0x01, 0xc0, 0xe0, 0x44, 0x20, 0xf0, + 0x12, 0xd1, 0xe9, 0x12, 0x98, 0xe3, 0x7f, 0x00, 0x22, 0x7f, 0x32, + 0x7e, 0x00, 0x12, 0x7c, 0x9f, 0x90, 0x95, 0x05, 0x12, 0xbd, 0xff, + 0x80, 0xb7, 0xf0, 0x74, 0xae, 0x25, 0x77, 0xf5, 0x82, 0xe4, 0x34, + 0x92, 0xf5, 0x83, 0x22, 0x90, 0x92, 0x0a, 0xe0, 0xc3, 0x13, 0x54, + 0x07, 0x75, 0xf0, 0x1b, 0xa4, 0x24, 0x3e, 0xf5, 0x82, 0xe4, 0x34, + 0x92, 0xf5, 0x83, 0x22, 0xe4, 0x90, 0x94, 0x6f, 0xf0, 0x90, 0x92, + 0x0a, 0xe0, 0x30, 0xe0, 0x59, 0xc3, 0x13, 0x54, 0x07, 0xff, 0xf1, + 0x62, 0xe0, 0xfe, 0x30, 0xe0, 0x4d, 0xef, 0xf1, 0x62, 0xee, 0x54, + 0xfe, 0xf0, 0xef, 0xf1, 0x62, 0x12, 0xc4, 0xb9, 0x30, 0xe0, 0x11, + 0x90, 0x92, 0x0a, 0xe0, 0xfe, 0xf1, 0x5e, 0xef, 0x54, 0xfb, 0xf0, + 0x90, 0x94, 0x6f, 0x74, 0x01, 0xf0, 0x90, 0x04, 0xe0, 0xe0, 0x30, + 0xe1, 0x1d, 0xf1, 0xee, 0xf1, 0x5a, 0xe0, 0x44, 0x02, 0xf0, 0xe4, + 0x90, 0x92, 0xba, 0xf0, 0x91, 0x0e, 0xfd, 0x7f, 0x02, 0x12, 0xaa, + 0x52, 0x90, 0x94, 0x6f, 0xe0, 0x60, 0x0a, 0x81, 0x17, 0xf1, 0x5a, + 0xe0, 0x54, 0xfd, 0xf0, 0xb1, 0x82, 0x22, 0x13, 0x54, 0x07, 0x75, + 0xf0, 0x1b, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, + 0x83, 0x22, 0x90, 0x00, 0x04, 0x02, 0x03, 0x0f, 0xf0, 0x90, 0x92, + 0x0c, 0x74, 0x05, 0xf0, 0x22, 0xf0, 0x90, 0x00, 0x05, 0x02, 0x03, + 0x0f, 0xfd, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0x0d, 0xf5, 0x82, 0xe4, + 0x34, 0x92, 0x22, 0x8b, 0x5b, 0x8a, 0x5c, 0x89, 0x5d, 0x90, 0x92, + 0xbd, 0xe0, 0x70, 0x10, 0x12, 0x02, 0xf6, 0x13, 0x13, 0x54, 0x3f, + 0x30, 0xe0, 0x06, 0x90, 0x92, 0xc3, 0x74, 0x01, 0xf0, 0x90, 0x92, + 0xbf, 0xe0, 0x70, 0x0f, 0x11, 0xd7, 0xc4, 0x54, 0x0f, 0xff, 0xbf, + 0x05, 0x06, 0x90, 0x92, 0xc4, 0x74, 0x01, 0xf0, 0x12, 0x8f, 0x6d, + 0xff, 0xf5, 0x5f, 0x12, 0x02, 0xf6, 0xfe, 0xc3, 0x13, 0x30, 0xe0, + 0x07, 0x12, 0x8f, 0xf3, 0xf5, 0x60, 0x80, 0x02, 0x8f, 0x60, 0x85, + 0x5f, 0x5e, 0xe5, 0x5e, 0xd3, 0x95, 0x60, 0x50, 0x28, 0x11, 0xd7, + 0x54, 0x01, 0xfd, 0xaf, 0x5e, 0x12, 0x6e, 0x5f, 0xaf, 0x5e, 0x12, + 0x77, 0x39, 0xef, 0xaf, 0x5e, 0x70, 0x04, 0x11, 0x9f, 0x80, 0x02, + 0xf1, 0xe0, 0x90, 0x92, 0xc4, 0xe0, 0x60, 0x04, 0xaf, 0x5e, 0x11, + 0x9f, 0x05, 0x5e, 0x80, 0xd1, 0xe5, 0x5f, 0x70, 0x16, 0xff, 0x12, + 0x77, 0x39, 0xef, 0x70, 0x0f, 0x12, 0xbf, 0x8b, 0x12, 0x79, 0x61, + 0x12, 0xc6, 0xa5, 0x54, 0xbf, 0xf0, 0x54, 0x7f, 0xf0, 0x22, 0x7d, + 0x01, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x93, 0xc3, + 0xef, 0xf0, 0xa3, 0xed, 0xf0, 0x7d, 0x44, 0x7f, 0x6f, 0x51, 0x81, + 0x90, 0x93, 0xc4, 0xe0, 0x90, 0x93, 0xc3, 0xb4, 0x01, 0x09, 0xe0, + 0x51, 0xbc, 0xe0, 0x44, 0x04, 0xf0, 0x80, 0x07, 0xe0, 0x51, 0xbc, + 0xe0, 0x54, 0xfb, 0xf0, 0x11, 0xe0, 0xd0, 0xd0, 0x92, 0xaf, 0x22, + 0xab, 0x5b, 0xaa, 0x5c, 0xa9, 0x5d, 0x02, 0x02, 0xf6, 0xe4, 0xfd, + 0xff, 0x90, 0x05, 0x22, 0xef, 0xf0, 0x90, 0x92, 0x01, 0xed, 0xf0, + 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x94, 0x81, + 0xef, 0xf0, 0xa3, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0x90, 0x04, 0x1d, + 0xe0, 0x60, 0x1c, 0x90, 0x05, 0x22, 0xe0, 0x90, 0x94, 0x86, 0xf0, + 0x7d, 0x36, 0x51, 0x7f, 0xbf, 0x01, 0x02, 0x31, 0xd4, 0x90, 0x94, + 0x86, 0xe0, 0xff, 0x7d, 0x37, 0x11, 0xe3, 0x80, 0x02, 0x31, 0xd4, + 0x90, 0x05, 0x22, 0xe0, 0x54, 0x6f, 0xff, 0x7d, 0x38, 0x11, 0xe3, + 0xf1, 0xf8, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xd3, 0x10, 0xaf, 0x01, + 0xc3, 0xc0, 0xd0, 0x90, 0x94, 0xfe, 0xed, 0xf0, 0xa3, 0xeb, 0xf0, + 0x90, 0x94, 0xfd, 0xef, 0xf0, 0xe4, 0xfd, 0xfc, 0x12, 0x7b, 0x2a, + 0x7c, 0x00, 0xad, 0x07, 0x90, 0x94, 0xfd, 0xe0, 0x90, 0x04, 0x25, + 0xf0, 0x90, 0x94, 0xfe, 0xe0, 0x60, 0x05, 0x51, 0xac, 0x44, 0x80, + 0xf0, 0xaf, 0x05, 0x74, 0x20, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0xfc, + 0xf5, 0x83, 0xe0, 0x54, 0xc0, 0xf0, 0x51, 0xac, 0x54, 0xc0, 0xf0, + 0x90, 0x95, 0x00, 0xe0, 0xff, 0xae, 0x05, 0x74, 0x18, 0x2e, 0xf5, + 0x82, 0xe4, 0x34, 0xfc, 0xf5, 0x83, 0xef, 0xf0, 0x51, 0x8e, 0xf5, + 0x83, 0xe0, 0x20, 0xe1, 0x17, 0x54, 0x01, 0xff, 0x90, 0x94, 0xff, + 0xe0, 0x25, 0xe0, 0x25, 0xe0, 0xfb, 0xef, 0x44, 0x02, 0x4b, 0xff, + 0x51, 0x8e, 0xf5, 0x83, 0xef, 0xf0, 0xaf, 0x05, 0x74, 0x11, 0x2f, + 0xf5, 0x82, 0xe4, 0x34, 0xfc, 0xf5, 0x83, 0x74, 0xff, 0xf0, 0x74, + 0x29, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0xfc, 0xf5, 0x83, 0xe0, 0x54, + 0xf7, 0xf0, 0xae, 0x04, 0xaf, 0x05, 0xd0, 0xd0, 0x92, 0xaf, 0x22, + 0x90, 0x94, 0x81, 0xe0, 0xff, 0x90, 0x95, 0x00, 0x74, 0x0c, 0xf0, + 0xe4, 0xfb, 0x7d, 0x01, 0x31, 0x36, 0x90, 0x94, 0x84, 0xee, 0xf0, + 0xa3, 0xef, 0xf0, 0x90, 0x94, 0x82, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, + 0x02, 0x77, 0xd8, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, + 0x94, 0x92, 0xef, 0xf0, 0xa3, 0xed, 0xf0, 0x90, 0x84, 0xc3, 0xe0, + 0x04, 0xf0, 0x90, 0x04, 0x1d, 0xe0, 0x60, 0x35, 0x90, 0x05, 0x22, + 0xe0, 0x90, 0x94, 0x96, 0xf0, 0x7d, 0x26, 0x51, 0x7f, 0xef, 0x64, + 0x01, 0x70, 0x17, 0x51, 0x97, 0xfb, 0x7d, 0x01, 0x12, 0x3a, 0xc2, + 0x12, 0xd0, 0xfc, 0x20, 0xe0, 0x09, 0x90, 0x92, 0x09, 0xe0, 0x20, + 0xe0, 0x02, 0x51, 0xa1, 0x90, 0x94, 0x96, 0xe0, 0xff, 0x7d, 0x27, + 0x11, 0xe3, 0x51, 0x86, 0x80, 0x1e, 0x51, 0x86, 0x51, 0x97, 0xfb, + 0x90, 0x95, 0x00, 0x74, 0x0a, 0xf0, 0x7d, 0x01, 0x31, 0x36, 0x12, + 0xd0, 0xfc, 0x20, 0xe0, 0x09, 0x90, 0x92, 0x09, 0xe0, 0x20, 0xe0, + 0x02, 0x51, 0xa1, 0xf1, 0xf8, 0x90, 0x84, 0xbf, 0xa3, 0xe0, 0x24, + 0x7f, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0xf5, 0x83, 0x74, 0x01, 0xf0, + 0xff, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x7f, 0xff, 0x11, 0xe3, 0x02, + 0x96, 0xee, 0x90, 0x94, 0x92, 0xe0, 0xff, 0x02, 0x5c, 0xa3, 0x74, + 0x12, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0xfc, 0x22, 0x90, 0x84, 0xc8, + 0xe0, 0xff, 0x90, 0x94, 0x93, 0xe0, 0x22, 0x90, 0x94, 0x94, 0xe0, + 0xfe, 0xa3, 0xe0, 0xff, 0x02, 0x50, 0xd7, 0x74, 0x21, 0x2f, 0xf5, + 0x82, 0xe4, 0x34, 0xfc, 0xf5, 0x83, 0xe0, 0x22, 0xe0, 0xfd, 0xe5, + 0x76, 0xc4, 0x54, 0xf0, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x81, + 0xf5, 0x83, 0x22, 0x8d, 0x76, 0xef, 0x30, 0xe6, 0x1a, 0x71, 0x48, + 0x51, 0xb8, 0xe0, 0x54, 0x03, 0x90, 0x91, 0x0b, 0xf0, 0xe4, 0xfb, + 0xaf, 0x76, 0x12, 0x27, 0x3d, 0x71, 0x3b, 0xd1, 0x5d, 0x74, 0x01, + 0x80, 0x49, 0xd1, 0x64, 0x04, 0xf0, 0xd1, 0x64, 0x64, 0x02, 0x70, + 0x1e, 0x74, 0xa9, 0x25, 0x76, 0xf1, 0x41, 0xe0, 0xfd, 0xf4, 0x60, + 0x02, 0x80, 0x04, 0x71, 0x48, 0xe0, 0xfd, 0x51, 0xba, 0x12, 0xd1, + 0x3b, 0x71, 0x48, 0xd1, 0x5d, 0x74, 0x02, 0x80, 0x21, 0xd1, 0x64, + 0xd3, 0x94, 0x03, 0x40, 0x0d, 0xaf, 0x76, 0x12, 0x6d, 0x94, 0x71, + 0x3b, 0xd1, 0x5d, 0x74, 0x03, 0x80, 0x0d, 0x71, 0x48, 0x51, 0xb8, + 0x12, 0xd1, 0x3b, 0x71, 0x48, 0xd1, 0x5d, 0x74, 0x02, 0xf0, 0xab, + 0x76, 0xe4, 0xfd, 0xff, 0x02, 0x52, 0xc3, 0x74, 0xbc, 0x25, 0x76, + 0xf5, 0x82, 0xe4, 0x34, 0x90, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x76, + 0xc4, 0x54, 0xf0, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x81, 0xf5, + 0x83, 0x22, 0x90, 0x04, 0x85, 0xe0, 0xf5, 0x6b, 0x90, 0x94, 0xa8, + 0xe0, 0x04, 0xf0, 0xe4, 0xf5, 0x63, 0x90, 0x85, 0xbb, 0xe0, 0xff, + 0xe5, 0x63, 0xc3, 0x9f, 0x40, 0x02, 0xc1, 0x44, 0xe5, 0x63, 0x71, + 0x4a, 0xe0, 0xf5, 0x6d, 0x12, 0xd1, 0x87, 0xe0, 0x65, 0x6d, 0x60, + 0x16, 0x90, 0x8a, 0x71, 0xe5, 0x6d, 0xf0, 0xe4, 0xa3, 0xf0, 0xab, + 0x63, 0xfd, 0xff, 0x12, 0x52, 0xc3, 0x12, 0xd1, 0x87, 0xe5, 0x6d, + 0xf0, 0x90, 0x04, 0xa0, 0xe0, 0x64, 0x01, 0x70, 0x4c, 0xa3, 0xe0, + 0x65, 0x63, 0x70, 0x46, 0xa3, 0xe0, 0xf5, 0x64, 0xa3, 0xe0, 0x90, + 0x94, 0x45, 0xf0, 0xe5, 0x63, 0x71, 0x4a, 0xe0, 0x65, 0x64, 0x70, + 0x02, 0xc1, 0x40, 0xe5, 0x63, 0x71, 0x4a, 0xe5, 0x64, 0xf0, 0xe5, + 0x63, 0x51, 0xbc, 0xe0, 0x54, 0xfc, 0xff, 0x90, 0x94, 0x45, 0xe0, + 0x54, 0x03, 0x4f, 0xff, 0xe5, 0x63, 0x51, 0xbc, 0xef, 0xf0, 0x90, + 0x8a, 0x71, 0xe5, 0x64, 0xf0, 0xa3, 0x74, 0xff, 0xf0, 0xab, 0x63, + 0xe4, 0xfd, 0xff, 0x12, 0x52, 0xc3, 0xc1, 0x40, 0xaf, 0x63, 0x12, + 0x77, 0x39, 0xef, 0x70, 0x02, 0xc1, 0x40, 0x75, 0xf0, 0x12, 0xe5, + 0x63, 0x12, 0xa1, 0x8f, 0x12, 0xa3, 0x01, 0x30, 0xe0, 0x02, 0xc1, + 0x40, 0xe5, 0x63, 0x13, 0x13, 0x13, 0x54, 0x1f, 0x24, 0x75, 0x12, + 0xb3, 0x11, 0x7c, 0x00, 0xe5, 0x63, 0x12, 0xb2, 0x90, 0x80, 0x05, + 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xee, 0x5c, 0xfe, + 0xef, 0x5d, 0x4e, 0x60, 0x02, 0xc1, 0x40, 0xf1, 0xd5, 0xe0, 0xfe, + 0xa3, 0xe0, 0x4e, 0x70, 0x07, 0xf1, 0xca, 0xe0, 0x70, 0x02, 0xc1, + 0x40, 0xe5, 0x63, 0x75, 0xf0, 0x12, 0xa4, 0x24, 0x44, 0xf9, 0x74, + 0x89, 0x35, 0xf0, 0xfa, 0x7b, 0x01, 0x90, 0x94, 0x40, 0x12, 0x87, + 0x4e, 0x90, 0x00, 0x02, 0x12, 0x04, 0x18, 0xff, 0x12, 0x03, 0xed, + 0x2f, 0xff, 0x12, 0xd1, 0xe1, 0xff, 0x12, 0xd1, 0xb9, 0x90, 0x00, + 0x08, 0x12, 0x04, 0x18, 0x2f, 0xf5, 0x6c, 0xf1, 0xd5, 0xe0, 0xf5, + 0x68, 0xa3, 0xe0, 0xf5, 0x69, 0xf1, 0xca, 0xe0, 0xff, 0x90, 0x94, + 0x43, 0xe4, 0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x63, 0x71, 0x4a, 0xe0, + 0xf5, 0x64, 0x54, 0x80, 0xff, 0xe5, 0x64, 0x54, 0x7f, 0xf5, 0x65, + 0x75, 0xf0, 0x12, 0xe5, 0x63, 0x12, 0xb5, 0x17, 0xfe, 0xe5, 0x65, + 0xd3, 0x9e, 0x40, 0x07, 0x8e, 0x65, 0xe5, 0x65, 0x4f, 0xf5, 0x64, + 0x74, 0x7c, 0x25, 0x63, 0xf5, 0x82, 0xe4, 0x34, 0x90, 0xf5, 0x83, + 0xe0, 0xc3, 0x94, 0x05, 0x40, 0x02, 0xc1, 0x3d, 0xe5, 0x65, 0x90, + 0x82, 0xe1, 0x93, 0xf5, 0x6a, 0xef, 0x60, 0x04, 0x05, 0x6a, 0x05, + 0x6a, 0xe5, 0x65, 0xc3, 0x94, 0x0c, 0x40, 0x21, 0x74, 0x98, 0x25, + 0x63, 0xf5, 0x82, 0xe4, 0x34, 0x94, 0xf5, 0x83, 0xe0, 0xff, 0x54, + 0x7f, 0xfe, 0xef, 0x30, 0xe7, 0x06, 0xe5, 0x6a, 0x2e, 0xff, 0x80, + 0x05, 0xc3, 0xe5, 0x6a, 0x9e, 0xff, 0x8f, 0x6a, 0xe5, 0x6a, 0xd3, + 0x94, 0x1a, 0xaf, 0x6a, 0x40, 0x02, 0x7f, 0x1a, 0x8f, 0x6a, 0xe5, + 0x64, 0x90, 0x83, 0x59, 0x93, 0xff, 0xd3, 0x90, 0x94, 0x44, 0xe0, + 0x9f, 0x90, 0x94, 0x43, 0xe0, 0x94, 0x00, 0x40, 0x02, 0xa1, 0xfd, + 0xc3, 0xe5, 0x69, 0x94, 0x0a, 0xe5, 0x68, 0x94, 0x00, 0x40, 0x02, + 0xa1, 0xb8, 0xd1, 0x45, 0xe0, 0xc3, 0x94, 0x01, 0x40, 0x05, 0xd1, + 0x45, 0xe0, 0x14, 0xf0, 0x90, 0x94, 0x40, 0x12, 0x87, 0x45, 0x90, + 0x00, 0x08, 0x12, 0x04, 0x18, 0xff, 0x90, 0x94, 0x44, 0xe0, 0x2f, + 0xff, 0x90, 0x94, 0x43, 0xe0, 0x35, 0xf0, 0xfe, 0x12, 0xd1, 0xb9, + 0xee, 0x35, 0xf0, 0xfe, 0x12, 0xd1, 0xe1, 0xfd, 0xee, 0x35, 0xf0, + 0xfc, 0xe5, 0x68, 0xc3, 0x13, 0xfe, 0xe5, 0x69, 0x13, 0xff, 0xd3, + 0xed, 0x9f, 0xec, 0x9e, 0x40, 0x0d, 0xe5, 0x63, 0x94, 0x05, 0x50, + 0x05, 0xd1, 0x45, 0x74, 0x03, 0xf0, 0xa1, 0xfd, 0x90, 0x94, 0x40, + 0x12, 0x87, 0x45, 0x12, 0x03, 0xed, 0x65, 0x6c, 0x70, 0x02, 0xe5, + 0xf0, 0x70, 0x2a, 0xe5, 0x63, 0xc3, 0x94, 0x05, 0x50, 0x0a, 0xd1, + 0x45, 0xe0, 0xd3, 0x94, 0x00, 0x40, 0x02, 0x80, 0x07, 0xe5, 0x6c, + 0xc3, 0x94, 0x03, 0x50, 0x08, 0x7d, 0x06, 0xaf, 0x63, 0xf1, 0x6f, + 0xc1, 0x40, 0xe4, 0xfd, 0xaf, 0x63, 0xd1, 0x71, 0xf1, 0x6b, 0xc1, + 0x3d, 0x12, 0xd1, 0xd2, 0xc1, 0x3d, 0xd1, 0x45, 0xe4, 0xf0, 0x90, + 0x94, 0x4a, 0x74, 0x02, 0xf0, 0xab, 0x6a, 0xad, 0x63, 0xaf, 0x69, + 0xae, 0x68, 0x12, 0xcb, 0x6f, 0x8e, 0x66, 0x8f, 0x67, 0x12, 0xd1, + 0x49, 0xc3, 0x74, 0x01, 0x93, 0x95, 0x67, 0xe4, 0x93, 0x95, 0x66, + 0x50, 0x0c, 0xd1, 0x51, 0xe4, 0xf0, 0x7d, 0x01, 0xaf, 0x63, 0xd1, + 0x71, 0x80, 0x51, 0x12, 0xd1, 0xd9, 0xc3, 0xe5, 0x67, 0x9f, 0xe5, + 0x66, 0x94, 0x00, 0x50, 0x0d, 0xd1, 0x51, 0xe4, 0xf0, 0x7d, 0x01, + 0xaf, 0x63, 0x12, 0xb4, 0x58, 0x80, 0x37, 0xf1, 0x6b, 0xd1, 0x51, + 0xe0, 0x04, 0xf0, 0xe5, 0x65, 0x90, 0x83, 0x6d, 0x93, 0xff, 0xd1, + 0x51, 0xe0, 0xc3, 0x9f, 0x40, 0x22, 0xd1, 0x51, 0xe4, 0xf0, 0x12, + 0xd1, 0xd9, 0x12, 0xd1, 0x49, 0x74, 0x01, 0x93, 0x2f, 0xff, 0xe4, + 0x93, 0x34, 0x00, 0xc3, 0x13, 0xfe, 0xef, 0x13, 0xff, 0xe5, 0x63, + 0xf1, 0x5f, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0xd1, 0xd2, 0x05, + 0x63, 0x61, 0x66, 0x22, 0x74, 0xb9, 0x25, 0x63, 0xf5, 0x82, 0xe4, + 0x34, 0x94, 0xf5, 0x83, 0x22, 0x74, 0xac, 0x25, 0x63, 0xf5, 0x82, + 0xe4, 0x34, 0x8f, 0xf5, 0x83, 0x22, 0xe0, 0x90, 0x8a, 0x71, 0xf0, + 0xa3, 0x22, 0x74, 0xbc, 0x25, 0x76, 0xf5, 0x82, 0xe4, 0x34, 0x90, + 0xf5, 0x83, 0xe0, 0x22, 0x8f, 0x6e, 0x8d, 0x6f, 0xef, 0x71, 0x4a, + 0xe0, 0xfd, 0x54, 0x7f, 0xf5, 0x70, 0xed, 0x54, 0x80, 0xf5, 0x71, + 0x75, 0xf0, 0x12, 0xef, 0x12, 0xb5, 0x17, 0xf5, 0x73, 0x75, 0xf0, + 0x12, 0xef, 0x12, 0xa1, 0x8f, 0xc4, 0x54, 0x03, 0xf5, 0x74, 0xf1, + 0x3d, 0x74, 0xff, 0xf0, 0xf1, 0x49, 0xee, 0xf0, 0xa3, 0xef, 0xf0, + 0xe5, 0x71, 0x4d, 0xff, 0x12, 0xb5, 0x0b, 0xef, 0xf0, 0xe5, 0x6e, + 0x51, 0xbc, 0xe0, 0x54, 0x03, 0xf5, 0x72, 0x74, 0x4c, 0x25, 0x6e, + 0x12, 0xb5, 0x1f, 0xe5, 0x72, 0xf0, 0xe5, 0x70, 0x65, 0x73, 0x70, + 0x27, 0x75, 0xf0, 0x12, 0xe5, 0x6e, 0x12, 0xa2, 0xee, 0xc4, 0x13, + 0x54, 0x07, 0x30, 0xe0, 0x0b, 0xe5, 0x71, 0x70, 0x07, 0xe5, 0x70, + 0x44, 0x80, 0xfd, 0x80, 0x50, 0xf1, 0x49, 0xee, 0xf0, 0xa3, 0xef, + 0xf0, 0x7d, 0x07, 0xaf, 0x6e, 0xe1, 0x6f, 0xe5, 0x70, 0xc3, 0x95, + 0x73, 0x50, 0x35, 0xab, 0x6e, 0xad, 0x73, 0xaf, 0x70, 0x12, 0x72, + 0xea, 0xad, 0x07, 0xe5, 0x70, 0xc3, 0x94, 0x0c, 0x40, 0x2a, 0x75, + 0xf0, 0x12, 0xe5, 0x6e, 0x12, 0xa2, 0xee, 0xfe, 0xc4, 0x13, 0x54, + 0x07, 0x30, 0xe0, 0x1a, 0xe5, 0x6f, 0x60, 0x16, 0xe5, 0x71, 0x70, + 0x12, 0xe5, 0x70, 0x44, 0x80, 0xfd, 0xf1, 0x3d, 0xef, 0xf0, 0x80, + 0x07, 0x12, 0xb5, 0x0b, 0xe5, 0x73, 0xf0, 0xfd, 0x90, 0x91, 0x0b, + 0xe5, 0x72, 0xf0, 0xab, 0x6f, 0xaf, 0x6e, 0x02, 0x27, 0x3d, 0x74, + 0xa9, 0x25, 0x6e, 0xf5, 0x82, 0xe4, 0x34, 0x94, 0xf5, 0x83, 0x22, + 0xe5, 0x70, 0x25, 0xe0, 0x24, 0xf5, 0xf5, 0x82, 0xe4, 0x34, 0x82, + 0xf5, 0x83, 0xe4, 0x93, 0xfe, 0x74, 0x01, 0x93, 0xff, 0xe5, 0x6e, + 0x25, 0xe0, 0x24, 0x7b, 0xf5, 0x82, 0xe4, 0x34, 0x8f, 0xf5, 0x83, + 0x22, 0x7d, 0x07, 0xaf, 0x63, 0xed, 0x30, 0xe0, 0x22, 0x75, 0xf0, + 0x12, 0xef, 0x90, 0x89, 0x44, 0xf1, 0xbe, 0x90, 0x89, 0x46, 0xf1, + 0xbe, 0x90, 0x89, 0x48, 0xf1, 0xbe, 0x90, 0x89, 0x4a, 0xf1, 0xbe, + 0x90, 0x89, 0x4c, 0x12, 0x05, 0x28, 0xe4, 0xf0, 0xa3, 0xf0, 0xed, + 0x30, 0xe1, 0x0a, 0x75, 0xf0, 0x12, 0xef, 0xf1, 0xda, 0xe4, 0xf0, + 0xa3, 0xf0, 0xed, 0x30, 0xe2, 0x08, 0x75, 0xf0, 0x12, 0xef, 0xf1, + 0xcf, 0xe4, 0xf0, 0x12, 0xd1, 0x60, 0xe0, 0x54, 0xbf, 0x44, 0x80, + 0xfe, 0x12, 0xd1, 0x60, 0xee, 0xf0, 0x22, 0x12, 0x05, 0x28, 0xe4, + 0xf0, 0xa3, 0xf0, 0x75, 0xf0, 0x12, 0xef, 0x22, 0x75, 0xf0, 0x12, + 0xe5, 0x63, 0x90, 0x89, 0x42, 0x02, 0x05, 0x28, 0x75, 0xf0, 0x12, + 0xe5, 0x63, 0x90, 0x89, 0x40, 0x02, 0x05, 0x28, 0xe4, 0xfd, 0x01, + 0xa1, 0x7d, 0x1f, 0x7f, 0x6f, 0x11, 0xe3, 0x90, 0x05, 0x27, 0xe0, + 0x54, 0xbf, 0xf0, 0x90, 0x85, 0xbf, 0x74, 0x04, 0xf0, 0x22, 0x90, + 0x04, 0x1f, 0x74, 0x20, 0xf0, 0x22, 0x11, 0x37, 0x90, 0x04, 0x24, + 0xe0, 0xf5, 0x5b, 0xe4, 0xff, 0x12, 0x8f, 0x58, 0x11, 0x2a, 0x75, + 0xf0, 0x0e, 0xa4, 0x24, 0x19, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, + 0x83, 0xee, 0xf0, 0x11, 0x2a, 0x12, 0x97, 0xd9, 0xee, 0xf0, 0x0f, + 0xef, 0xb4, 0x03, 0xe0, 0x22, 0x8f, 0x82, 0x75, 0x83, 0x00, 0x12, + 0x03, 0x0f, 0x25, 0x5b, 0xfe, 0xef, 0x22, 0x90, 0x93, 0xc3, 0x02, + 0x87, 0x4e, 0x11, 0x37, 0x12, 0x8f, 0x58, 0x12, 0x02, 0xf6, 0x54, + 0x7f, 0xfd, 0x12, 0x8f, 0x73, 0xfe, 0x54, 0x1f, 0x90, 0x93, 0xc7, + 0x51, 0xfd, 0x90, 0x93, 0xc6, 0x12, 0x8f, 0xf2, 0xfe, 0x54, 0x03, + 0xfc, 0xee, 0x54, 0x30, 0xc4, 0x54, 0x0f, 0x90, 0x93, 0xc9, 0x12, + 0x8f, 0xf2, 0xfe, 0x54, 0x40, 0xc4, 0x13, 0x13, 0x54, 0x03, 0x90, + 0x93, 0xc8, 0x51, 0xfd, 0xff, 0x12, 0x8f, 0xf3, 0xfb, 0x54, 0x08, + 0x13, 0x13, 0x13, 0x54, 0x1f, 0x90, 0x93, 0xcb, 0xf0, 0xfa, 0xeb, + 0x54, 0x04, 0x13, 0x13, 0x54, 0x3f, 0xa3, 0xf0, 0xef, 0x54, 0x01, + 0xc4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x31, 0x8a, 0x54, 0x7f, 0x4f, + 0xf0, 0x90, 0x93, 0xc8, 0xe0, 0x54, 0x01, 0xc4, 0x33, 0x33, 0x54, + 0xc0, 0x31, 0x8a, 0x54, 0xbf, 0x4f, 0xf0, 0xea, 0x60, 0x02, 0x21, + 0x89, 0x90, 0x93, 0xc7, 0xe0, 0x54, 0x1f, 0x51, 0xe9, 0x54, 0xe0, + 0x4f, 0xf0, 0xec, 0x54, 0x03, 0x31, 0x8a, 0x54, 0xfc, 0x4f, 0xf0, + 0xec, 0x54, 0x03, 0x25, 0xe0, 0x25, 0xe0, 0x31, 0x8a, 0x54, 0xf3, + 0x4f, 0xf0, 0x90, 0x93, 0xc6, 0xe0, 0x54, 0x01, 0xc4, 0x33, 0x54, + 0xe0, 0x51, 0xe9, 0x54, 0xdf, 0x4f, 0xf0, 0x90, 0x93, 0xc9, 0xe0, + 0x54, 0x03, 0xc4, 0x54, 0xf0, 0x31, 0x8a, 0x54, 0xcf, 0x4f, 0xf1, + 0x24, 0xe0, 0x54, 0xfb, 0xf1, 0x24, 0xc0, 0x83, 0xc0, 0x82, 0xe0, + 0xff, 0x90, 0x93, 0xcc, 0xe0, 0x12, 0xd1, 0xca, 0xd0, 0x82, 0xd0, + 0x83, 0xf0, 0x90, 0x92, 0xc3, 0xe0, 0x60, 0x31, 0x12, 0x8f, 0x58, + 0xe9, 0x24, 0x03, 0xf1, 0xee, 0x54, 0x1f, 0x12, 0x03, 0x3c, 0x90, + 0x93, 0xca, 0x74, 0x01, 0xf0, 0x90, 0x93, 0xca, 0xe0, 0xff, 0xc3, + 0x94, 0x04, 0x50, 0x14, 0xef, 0x12, 0x8f, 0x52, 0x8f, 0x82, 0x8e, + 0x83, 0xe4, 0x12, 0x03, 0x4e, 0x90, 0x93, 0xca, 0xe0, 0x04, 0xf0, + 0x80, 0xe2, 0x90, 0x92, 0xc1, 0xe0, 0x54, 0x07, 0xff, 0xbf, 0x05, + 0x0a, 0xec, 0xb4, 0x01, 0x06, 0x90, 0x92, 0xc6, 0x74, 0x01, 0xf0, + 0xe4, 0x90, 0x93, 0xca, 0xf0, 0x90, 0x93, 0xca, 0xe0, 0xfc, 0x12, + 0x8f, 0x52, 0x8f, 0x82, 0x8e, 0x83, 0x12, 0x03, 0x0f, 0xff, 0xed, + 0xf1, 0xf5, 0xf5, 0x83, 0xe5, 0x82, 0x2c, 0xf1, 0x36, 0xef, 0xf0, + 0x90, 0x93, 0xca, 0xe0, 0x04, 0xf0, 0xe0, 0xb4, 0x04, 0xda, 0xaf, + 0x05, 0x12, 0x17, 0x8e, 0x22, 0xff, 0x75, 0xf0, 0x12, 0xed, 0x90, + 0x89, 0x3f, 0x12, 0x05, 0x28, 0xe0, 0x22, 0xd3, 0x10, 0xaf, 0x01, + 0xc3, 0xc0, 0xd0, 0xd1, 0x14, 0x20, 0xe6, 0x02, 0x41, 0xb0, 0x90, + 0x00, 0x8c, 0xe0, 0x90, 0x95, 0x08, 0xf0, 0x7f, 0x8d, 0x12, 0x7b, + 0x51, 0x90, 0x95, 0x09, 0xef, 0xf0, 0x90, 0x00, 0x8e, 0xe0, 0x90, + 0x95, 0x0a, 0xf0, 0x90, 0x95, 0x09, 0xe0, 0x24, 0xfc, 0x60, 0x0f, + 0x24, 0x03, 0x60, 0x02, 0x41, 0xa9, 0x90, 0x95, 0x08, 0xe0, 0xff, + 0xd1, 0x1b, 0x41, 0xa9, 0x90, 0x95, 0x08, 0xe0, 0x24, 0xdc, 0xf5, + 0x82, 0xe4, 0x34, 0x8f, 0x51, 0xf6, 0xff, 0x51, 0xe2, 0x75, 0xf0, + 0x12, 0x31, 0x8f, 0x13, 0x13, 0x54, 0x03, 0xfb, 0x0d, 0xe4, 0xff, + 0x51, 0xe2, 0x75, 0xf0, 0x12, 0x31, 0x8f, 0x71, 0x01, 0xfb, 0x0d, + 0xe4, 0xff, 0x51, 0xe2, 0x75, 0xf0, 0x12, 0x31, 0x8f, 0xc4, 0x54, + 0x03, 0xfb, 0x0d, 0xe4, 0xff, 0x51, 0xe2, 0x75, 0xf0, 0x12, 0x12, + 0xb5, 0x17, 0xfb, 0xe4, 0xfd, 0x0f, 0x51, 0xe2, 0x75, 0xf0, 0x12, + 0x90, 0x89, 0x3d, 0x12, 0x05, 0x28, 0x51, 0xdf, 0x75, 0xf0, 0x12, + 0x51, 0xee, 0xc4, 0x13, 0x54, 0x01, 0xfb, 0x0d, 0x7f, 0x01, 0x51, + 0xe2, 0x75, 0xf0, 0x12, 0x51, 0xee, 0x54, 0x1f, 0x51, 0xe0, 0xf1, + 0xf5, 0x51, 0xf6, 0x0f, 0x51, 0xe2, 0x75, 0xf0, 0x08, 0xa4, 0x24, + 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0x51, 0xdd, 0x75, 0xf0, 0x08, + 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0x51, 0xdd, 0x75, + 0xf0, 0x08, 0xa4, 0x24, 0x03, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0x51, + 0xdd, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x34, + 0x82, 0x51, 0xf6, 0x0f, 0x51, 0xe2, 0x75, 0xf0, 0x08, 0xa4, 0x24, + 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0x51, 0xdd, 0x75, 0xf0, 0x08, + 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0x51, 0xdd, 0x75, + 0xf0, 0x08, 0xa4, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0xf5, + 0x83, 0xe0, 0xfb, 0x0d, 0x51, 0xb5, 0xd1, 0x14, 0x30, 0xe0, 0x02, + 0xf1, 0xd2, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xef, 0x70, 0x04, 0x74, + 0xf0, 0x80, 0x16, 0xef, 0xb4, 0x01, 0x04, 0x74, 0xf4, 0x80, 0x0e, + 0xef, 0xb4, 0x02, 0x04, 0x74, 0xf8, 0x80, 0x06, 0xef, 0xb4, 0x03, + 0x0c, 0x74, 0xfc, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, + 0xeb, 0xf0, 0x22, 0xf5, 0x83, 0xe0, 0xfb, 0x0d, 0x51, 0xb5, 0x90, + 0x95, 0x08, 0xe0, 0x22, 0xff, 0x75, 0xf0, 0x12, 0xed, 0x90, 0x89, + 0x3e, 0x12, 0x05, 0x28, 0xe0, 0x22, 0xf5, 0x83, 0xe0, 0xfb, 0xe4, + 0xfd, 0x22, 0xf0, 0xee, 0x54, 0x80, 0xc4, 0x13, 0x13, 0x13, 0x54, + 0x01, 0x22, 0x7d, 0x01, 0x7f, 0x04, 0xd3, 0x10, 0xaf, 0x01, 0xc3, + 0xc0, 0xd0, 0x90, 0x95, 0x1b, 0xed, 0xf0, 0x90, 0x85, 0xc1, 0xe0, + 0xfe, 0xc4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xe0, 0x02, 0x81, 0x66, + 0xee, 0x71, 0x01, 0x30, 0xe0, 0x02, 0x81, 0x66, 0x90, 0x85, 0xc8, + 0xe0, 0xfe, 0x6f, 0x70, 0x02, 0x81, 0x66, 0xef, 0x70, 0x02, 0x61, + 0xd1, 0x24, 0xfe, 0x70, 0x02, 0x81, 0x0e, 0x24, 0xfe, 0x60, 0x4d, + 0x24, 0xfc, 0x70, 0x02, 0x81, 0x4d, 0x24, 0xfc, 0x60, 0x02, 0x81, + 0x5f, 0xee, 0xb4, 0x0e, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xc8, + 0xe0, 0x70, 0x05, 0x7f, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xc8, + 0xe0, 0xb4, 0x06, 0x03, 0x12, 0x73, 0x8e, 0x90, 0x85, 0xc8, 0xe0, + 0xb4, 0x04, 0x0f, 0x90, 0x95, 0x1b, 0xe0, 0xff, 0x60, 0x05, 0x12, + 0x6d, 0x4c, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90, 0x85, 0xc8, 0xe0, + 0x64, 0x08, 0x60, 0x02, 0x81, 0x5f, 0x12, 0x7a, 0xb9, 0x81, 0x5f, + 0x90, 0x85, 0xc8, 0xe0, 0x70, 0x05, 0x7f, 0x01, 0x12, 0x79, 0x80, + 0x90, 0x85, 0xc8, 0xe0, 0xb4, 0x06, 0x03, 0x12, 0x73, 0x8e, 0x90, + 0x85, 0xc8, 0xe0, 0xb4, 0x0e, 0x08, 0x91, 0x6b, 0xbf, 0x01, 0x03, + 0x12, 0x74, 0x93, 0x90, 0x85, 0xc8, 0xe0, 0x64, 0x0c, 0x60, 0x02, + 0x81, 0x5f, 0x91, 0x6b, 0xef, 0x64, 0x01, 0x60, 0x02, 0x81, 0x5f, + 0x12, 0x70, 0x9e, 0x81, 0x5f, 0x90, 0x85, 0xc8, 0xe0, 0xb4, 0x0e, + 0x08, 0x91, 0x6b, 0xbf, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, + 0xc8, 0xe0, 0xb4, 0x06, 0x03, 0x12, 0x73, 0x8e, 0x90, 0x85, 0xc8, + 0xe0, 0xb4, 0x0c, 0x08, 0x91, 0x6b, 0xbf, 0x01, 0x03, 0x12, 0x70, + 0x9e, 0x90, 0x85, 0xc8, 0xe0, 0x64, 0x04, 0x70, 0x5e, 0x12, 0xcd, + 0xf1, 0xef, 0x64, 0x01, 0x70, 0x56, 0x12, 0x77, 0xfe, 0x80, 0x51, + 0x90, 0x85, 0xc8, 0xe0, 0xb4, 0x0e, 0x08, 0x91, 0x6b, 0xbf, 0x01, + 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xc8, 0xe0, 0xb4, 0x06, 0x03, + 0x12, 0x73, 0x8e, 0x90, 0x85, 0xc8, 0xe0, 0xb4, 0x0c, 0x08, 0x91, + 0x6b, 0xbf, 0x01, 0x03, 0x12, 0x70, 0x9e, 0x90, 0x85, 0xc8, 0xe0, + 0x70, 0x05, 0x7f, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xc8, 0xe0, + 0xb4, 0x04, 0x17, 0x12, 0x79, 0xf3, 0x80, 0x12, 0x90, 0x85, 0xc8, + 0xe0, 0xb4, 0x0c, 0x0b, 0x12, 0xc3, 0x4e, 0x54, 0x3f, 0x30, 0xe0, + 0x03, 0x12, 0x7a, 0x8a, 0x90, 0x85, 0xc8, 0x12, 0xd1, 0x6e, 0xf0, + 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, + 0xd0, 0x12, 0x7a, 0x29, 0xef, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0f, + 0x01, 0x80, 0x24, 0x90, 0x85, 0xc1, 0xe0, 0x13, 0x13, 0x13, 0x54, + 0x1f, 0x30, 0xe0, 0x05, 0x75, 0x0f, 0x02, 0x80, 0x13, 0x90, 0x85, + 0xc7, 0xe0, 0xd3, 0x94, 0x04, 0x40, 0x05, 0x75, 0x0f, 0x08, 0x80, + 0x05, 0x12, 0xbf, 0x73, 0x80, 0x0e, 0x90, 0x01, 0xb9, 0x74, 0x02, + 0xf0, 0x90, 0x01, 0xb8, 0xe5, 0x0f, 0xf0, 0x7f, 0x00, 0xd0, 0xd0, + 0x92, 0xaf, 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x8b, + 0x5b, 0x8a, 0x5c, 0x89, 0x5d, 0x90, 0x05, 0x27, 0xe0, 0xf5, 0x5e, + 0x8b, 0x1b, 0x8a, 0x1c, 0x89, 0x1d, 0x75, 0x1e, 0x01, 0x7b, 0x01, + 0x7a, 0x85, 0x79, 0xbc, 0x12, 0x6a, 0x21, 0x12, 0x98, 0xd7, 0xff, + 0xc3, 0x13, 0x20, 0xe0, 0x02, 0xa1, 0x6b, 0x90, 0x85, 0xbc, 0xe0, + 0x30, 0xe0, 0x6c, 0xd1, 0x69, 0x75, 0x5e, 0x21, 0xd1, 0x79, 0x30, + 0xe0, 0x05, 0x12, 0xd1, 0x2b, 0x80, 0x0d, 0xe4, 0x90, 0x85, 0xbd, + 0xf0, 0xa3, 0xf0, 0x7d, 0x40, 0xff, 0x12, 0x7c, 0x41, 0xd1, 0x70, + 0x54, 0x1f, 0x30, 0xe0, 0x03, 0x43, 0x5e, 0x12, 0xef, 0xc4, 0x54, + 0x0f, 0x30, 0xe0, 0x03, 0x43, 0x5e, 0x14, 0x90, 0x85, 0xbc, 0xe0, + 0xc4, 0x13, 0x54, 0x07, 0x30, 0xe0, 0x03, 0x43, 0x5e, 0x80, 0xf1, + 0xe2, 0x20, 0xe0, 0x03, 0x43, 0x5e, 0x40, 0xd1, 0x0d, 0x90, 0x85, + 0xbf, 0xe0, 0x70, 0x05, 0x7f, 0x01, 0x12, 0xc9, 0x5e, 0xd1, 0x82, + 0x30, 0xe0, 0x04, 0x7f, 0x04, 0x80, 0x0b, 0xd1, 0x8d, 0xef, 0x60, + 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x02, 0x12, 0xc9, 0x5e, 0x80, + 0x7e, 0xd1, 0x0a, 0x90, 0x85, 0xbf, 0xe0, 0x64, 0x04, 0x60, 0x02, + 0xc1, 0x05, 0xff, 0x12, 0xc9, 0x5e, 0xc1, 0x05, 0x90, 0x85, 0xbc, + 0xe0, 0x30, 0xe0, 0x6d, 0xd1, 0x69, 0x43, 0x5e, 0x31, 0xd1, 0x79, + 0x30, 0xe0, 0x05, 0x12, 0xd1, 0x2b, 0x80, 0x07, 0x7d, 0x40, 0xe4, + 0xff, 0x12, 0x7c, 0x41, 0xd1, 0x70, 0x54, 0x1f, 0x30, 0xe0, 0x03, + 0x43, 0x5e, 0x02, 0xef, 0xc4, 0x54, 0x0f, 0x30, 0xe0, 0x03, 0x43, + 0x5e, 0x04, 0xd1, 0x0d, 0xd1, 0x82, 0x30, 0xe0, 0x0a, 0xf1, 0x6c, + 0x60, 0x30, 0xe4, 0xfd, 0x7f, 0x02, 0x80, 0x1e, 0x12, 0xca, 0xc2, + 0x90, 0x85, 0xc0, 0xe0, 0xb4, 0x02, 0x18, 0x12, 0x7a, 0xa2, 0xd1, + 0x8d, 0xbf, 0x01, 0x09, 0x90, 0x85, 0xc7, 0xe0, 0xff, 0x7d, 0x01, + 0x80, 0x03, 0xe4, 0xfd, 0xff, 0x71, 0x0c, 0x80, 0x08, 0x90, 0x85, + 0xc8, 0xe0, 0x90, 0x85, 0xc0, 0xf0, 0x90, 0x05, 0x40, 0x74, 0x22, + 0xf0, 0x80, 0x26, 0xd1, 0x0a, 0x90, 0x85, 0xc0, 0xe0, 0xb4, 0x02, + 0x06, 0x7d, 0x01, 0x7f, 0x04, 0x80, 0x0b, 0x90, 0x85, 0xc0, 0xe0, + 0xb4, 0x08, 0x06, 0x7d, 0x01, 0x7f, 0x0c, 0x71, 0x0c, 0xf1, 0xd9, + 0x90, 0x85, 0xc7, 0xf1, 0xcc, 0x12, 0xcd, 0x91, 0xd0, 0xd0, 0x92, + 0xaf, 0x22, 0x75, 0x5e, 0x01, 0x90, 0x05, 0x27, 0xe5, 0x5e, 0xf0, + 0x22, 0x7f, 0x8f, 0x12, 0x7b, 0x51, 0xef, 0x22, 0xd3, 0x10, 0xaf, + 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x95, 0x13, 0xef, 0xf0, 0xd1, 0x14, + 0x30, 0xe6, 0x38, 0x7f, 0x8d, 0x12, 0x7b, 0x51, 0xef, 0x64, 0x01, + 0x70, 0x2e, 0x90, 0x95, 0x14, 0xf0, 0x90, 0x95, 0x14, 0xe0, 0xfd, + 0x90, 0x95, 0x13, 0xe0, 0x12, 0x9b, 0x4a, 0xe5, 0x82, 0x2d, 0xf1, + 0x36, 0xe0, 0xfb, 0xe4, 0xff, 0x51, 0xb5, 0x90, 0x95, 0x14, 0xe0, + 0x04, 0xf0, 0xe0, 0xc3, 0x94, 0x10, 0x40, 0xdd, 0xd1, 0x14, 0x30, + 0xe0, 0x02, 0xf1, 0xd2, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x7d, 0x03, + 0x7f, 0x02, 0x02, 0x7b, 0xfd, 0x90, 0x85, 0xbc, 0xe0, 0xff, 0x13, + 0x13, 0x13, 0x22, 0x90, 0x85, 0xbc, 0xe0, 0x13, 0x13, 0x54, 0x3f, + 0x22, 0x90, 0x85, 0xbc, 0xe0, 0xff, 0xc4, 0x13, 0x13, 0x54, 0x03, + 0x22, 0x90, 0x05, 0x43, 0xe0, 0x7f, 0x00, 0x30, 0xe7, 0x02, 0x7f, + 0x01, 0x22, 0xe4, 0xf5, 0x75, 0x90, 0x85, 0xc5, 0xe0, 0x60, 0x6f, + 0x12, 0xc4, 0x67, 0x70, 0x6a, 0x12, 0xc7, 0xc0, 0x75, 0x75, 0x01, + 0x90, 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x11, 0x90, 0x85, 0xc0, 0xe0, + 0xb4, 0x02, 0x03, 0xe4, 0xf5, 0x75, 0xd1, 0x8d, 0xef, 0x70, 0x02, + 0xf5, 0x75, 0xe5, 0x75, 0x60, 0x48, 0x90, 0x85, 0xc8, 0xe0, 0x20, + 0xe2, 0x02, 0x71, 0x08, 0x90, 0x85, 0xc9, 0xe0, 0x44, 0x10, 0xf0, + 0x90, 0x85, 0xce, 0xe0, 0x60, 0x04, 0x64, 0x01, 0x70, 0x17, 0xe4, + 0x90, 0x91, 0x6e, 0xf0, 0x90, 0x85, 0xce, 0xe0, 0xf1, 0x12, 0x90, + 0x91, 0x6f, 0x12, 0xc6, 0x20, 0x90, 0x85, 0xce, 0xe0, 0x80, 0x11, + 0xe4, 0x90, 0x91, 0x6e, 0xf0, 0xf1, 0x19, 0xf1, 0x12, 0x90, 0x91, + 0x6f, 0x12, 0xc6, 0x20, 0xf1, 0x19, 0xf1, 0x12, 0x90, 0x85, 0xde, + 0xf0, 0x22, 0xff, 0x90, 0x85, 0xcd, 0xe0, 0x2f, 0x22, 0x90, 0x85, + 0xce, 0xe0, 0x75, 0xf0, 0x03, 0xa4, 0x24, 0xfe, 0x22, 0xf0, 0x74, + 0xcc, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x8f, 0xf5, 0x83, 0x22, 0x12, + 0x05, 0x28, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, + 0x83, 0x22, 0xae, 0x07, 0xd1, 0x8d, 0xbf, 0x01, 0x0e, 0xf1, 0xe2, + 0x20, 0xe0, 0x09, 0xaf, 0x06, 0x7d, 0x01, 0x71, 0x0c, 0x7f, 0x01, + 0x22, 0x7f, 0x00, 0x22, 0xd1, 0x82, 0x30, 0xe0, 0x0a, 0xf1, 0x6c, + 0x60, 0x06, 0x7d, 0x01, 0x7f, 0x02, 0x71, 0x0c, 0xf1, 0x6c, 0x60, + 0x02, 0xf1, 0x73, 0x22, 0x90, 0x85, 0xc0, 0xe0, 0x64, 0x02, 0x22, + 0x90, 0x85, 0xc5, 0xe0, 0x64, 0x02, 0x60, 0x10, 0x12, 0xb7, 0xdc, + 0x60, 0x0b, 0x12, 0x7a, 0x29, 0xef, 0x70, 0x05, 0xfd, 0x7f, 0x0c, + 0x71, 0x0c, 0x22, 0x90, 0x85, 0xc5, 0xe0, 0x64, 0x01, 0x70, 0x19, + 0x12, 0xb7, 0xdc, 0x60, 0x0c, 0xe4, 0xfd, 0x7f, 0x0c, 0x71, 0x0c, + 0x12, 0x98, 0xe0, 0x02, 0x6b, 0x98, 0x90, 0x85, 0xc8, 0xe0, 0x70, + 0x02, 0x71, 0x08, 0x22, 0x90, 0x85, 0xc5, 0xe0, 0x70, 0x07, 0x90, + 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x10, 0x90, 0x85, 0xbc, 0xe0, 0x30, + 0xe0, 0x07, 0xd1, 0x8d, 0xbf, 0x01, 0x04, 0x80, 0xaa, 0xf1, 0x8c, + 0x22, 0xe0, 0xff, 0x7d, 0x01, 0x61, 0x0c, 0xe4, 0xfd, 0x7f, 0x8d, + 0x02, 0x7b, 0x3e, 0x12, 0x7a, 0x29, 0xef, 0x70, 0x02, 0xf1, 0x8c, + 0x22, 0x90, 0x85, 0xbc, 0xe0, 0xc4, 0x13, 0x13, 0x54, 0x03, 0x22, + 0x21, 0x97, 0xf9, 0xe4, 0x3a, 0xfa, 0x02, 0x02, 0xf6, 0x75, 0xf0, + 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0x22, 0xf1, + 0xae, 0xff, 0x54, 0x0f, 0xf5, 0x5e, 0xef, 0xc4, 0x54, 0x0f, 0x64, + 0x0f, 0x70, 0x3b, 0x90, 0x92, 0x0a, 0xe0, 0x54, 0xfe, 0xff, 0xf0, + 0xe5, 0x5e, 0x54, 0x07, 0x25, 0xe0, 0xfe, 0xef, 0x54, 0xf1, 0x4e, + 0xf0, 0x12, 0x97, 0xe7, 0xc4, 0x13, 0x54, 0x07, 0x90, 0x92, 0xbb, + 0x20, 0xe0, 0x05, 0x74, 0x06, 0xf0, 0x80, 0x03, 0x74, 0x01, 0xf0, + 0xf1, 0x8a, 0xaf, 0x5e, 0x31, 0x03, 0xbf, 0x01, 0x05, 0xe4, 0xfd, + 0xff, 0x51, 0x52, 0x7f, 0x02, 0x21, 0x00, 0xe5, 0x5e, 0x75, 0xf0, + 0x1b, 0xa4, 0x24, 0x37, 0xf9, 0x74, 0x92, 0x35, 0xf0, 0xfa, 0x7b, + 0x01, 0xc0, 0x02, 0xc0, 0x01, 0xe5, 0x5d, 0x24, 0x01, 0xf9, 0xe4, + 0x35, 0x5c, 0x85, 0x5b, 0x1b, 0xf5, 0x1c, 0x89, 0x1d, 0x75, 0x1e, + 0x04, 0xd0, 0x01, 0xd0, 0x02, 0x12, 0x6a, 0x21, 0xe5, 0x5e, 0x12, + 0x8f, 0xa6, 0x54, 0xf7, 0xf0, 0x12, 0x98, 0xd7, 0xc4, 0x54, 0x0f, + 0x14, 0x65, 0x5e, 0x70, 0x77, 0x90, 0x85, 0xc5, 0xe0, 0x70, 0x07, + 0x90, 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x04, 0x7f, 0x05, 0x80, 0x64, + 0x12, 0x98, 0xd7, 0xc4, 0x54, 0x0f, 0x90, 0x92, 0x0b, 0xf0, 0x12, + 0x90, 0x39, 0xfc, 0x54, 0x0f, 0xc4, 0x54, 0xf0, 0xfe, 0x90, 0x92, + 0x0a, 0xe0, 0x54, 0x0f, 0x4e, 0xf0, 0xec, 0x54, 0x60, 0xc4, 0x54, + 0x0f, 0xff, 0x90, 0x92, 0x89, 0xe0, 0x54, 0xf9, 0x4f, 0xf0, 0x90, + 0x92, 0x0a, 0xe0, 0x54, 0xf1, 0xf0, 0x90, 0x05, 0x58, 0x74, 0x02, + 0xf0, 0x90, 0x92, 0xb1, 0xe0, 0x90, 0x92, 0xb5, 0x30, 0xe0, 0x0b, + 0xe0, 0x54, 0xfe, 0xf0, 0x54, 0xc1, 0x44, 0x02, 0xf0, 0x80, 0x07, + 0xe0, 0x44, 0x01, 0xf0, 0x54, 0xc1, 0xf0, 0x90, 0x92, 0xb5, 0xe0, + 0x54, 0xbf, 0xf0, 0x90, 0x92, 0x0a, 0xe0, 0x44, 0x01, 0xf0, 0x7f, + 0x03, 0x51, 0xf7, 0x22, 0x8f, 0x5f, 0x90, 0x05, 0x22, 0xe0, 0x90, + 0x93, 0xc3, 0xf0, 0x12, 0x96, 0xe6, 0xef, 0x64, 0x01, 0x70, 0x35, + 0xe5, 0x5f, 0x51, 0xd4, 0xe0, 0xfc, 0xe5, 0x5f, 0x12, 0xd0, 0x4c, + 0xaf, 0x04, 0x31, 0x59, 0xe5, 0x5f, 0x12, 0x8b, 0xb0, 0xe5, 0x5f, + 0x12, 0x8f, 0xa6, 0x54, 0x07, 0xff, 0x60, 0x03, 0xbf, 0x02, 0x0b, + 0xe5, 0x5f, 0x12, 0x97, 0xd9, 0x51, 0xf0, 0xfd, 0x12, 0x95, 0x92, + 0xad, 0x5f, 0x7f, 0x01, 0x51, 0x52, 0x7f, 0x01, 0x22, 0x90, 0x93, + 0xc3, 0xe0, 0xfd, 0x7b, 0x49, 0xe4, 0xff, 0x12, 0x95, 0x87, 0x7f, + 0x00, 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x95, + 0x01, 0xef, 0xf0, 0xed, 0x64, 0x01, 0x70, 0x2e, 0xeb, 0xb4, 0x01, + 0x07, 0xe0, 0x24, 0x02, 0xf5, 0x0e, 0x80, 0x08, 0x90, 0x95, 0x01, + 0xe0, 0x24, 0xfe, 0xf5, 0x0e, 0x90, 0x94, 0xc1, 0x12, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0xff, 0xaf, 0x0e, 0x31, 0xc3, 0x51, 0x4a, 0x12, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xaf, 0x0e, 0x80, 0x20, 0x90, + 0x94, 0xc1, 0x12, 0x04, 0xf7, 0x00, 0x00, 0x00, 0xff, 0x90, 0x95, + 0x01, 0x12, 0x8d, 0xa5, 0x31, 0xc7, 0x51, 0x4a, 0x12, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0xff, 0x90, 0x95, 0x01, 0xe0, 0xff, 0x31, 0xc3, + 0x7f, 0x01, 0x31, 0xd2, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xe4, 0xfc, + 0xfd, 0xfe, 0x90, 0x94, 0xc5, 0x12, 0x04, 0xeb, 0x7d, 0x18, 0x7c, + 0x00, 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x94, + 0xbf, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0x90, 0x94, 0xbe, 0xef, 0xf0, + 0xa3, 0xa3, 0xe0, 0xfd, 0x12, 0x7b, 0xe0, 0x90, 0x94, 0xc9, 0x12, + 0x04, 0xeb, 0x90, 0x94, 0xc1, 0x12, 0x87, 0x2d, 0x12, 0x04, 0xa7, + 0x90, 0x94, 0xc9, 0x12, 0x8f, 0x5e, 0xc0, 0x04, 0xc0, 0x05, 0xc0, + 0x06, 0xc0, 0x07, 0x90, 0x94, 0xc1, 0x12, 0x87, 0x2d, 0x90, 0x94, + 0xc5, 0x12, 0x8f, 0x5e, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, + 0x00, 0x12, 0x87, 0x20, 0x90, 0x94, 0xcd, 0x12, 0x04, 0xeb, 0x90, + 0x94, 0xbf, 0xa3, 0xe0, 0xfd, 0xc0, 0x05, 0x90, 0x94, 0xcd, 0x12, + 0x87, 0x2d, 0x90, 0x8d, 0x9d, 0x12, 0x04, 0xeb, 0x90, 0x94, 0xbe, + 0xe0, 0xff, 0xd0, 0x05, 0x12, 0x78, 0xdd, 0xd0, 0xd0, 0x92, 0xaf, + 0x22, 0xe4, 0xff, 0x31, 0xd2, 0x90, 0x94, 0xc1, 0x22, 0xd3, 0x10, + 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x94, 0x82, 0xed, 0xf0, 0x90, + 0x94, 0x81, 0xef, 0xf0, 0x64, 0x02, 0x70, 0x24, 0x90, 0x05, 0x22, + 0xe0, 0x90, 0x94, 0x83, 0xf0, 0x7b, 0x4a, 0x7d, 0x6f, 0x12, 0x96, + 0xea, 0xbf, 0x01, 0x07, 0x90, 0x04, 0xd4, 0x74, 0xff, 0x80, 0x48, + 0x90, 0x94, 0x83, 0xe0, 0xfd, 0x7b, 0x46, 0x31, 0x51, 0x80, 0x42, + 0x90, 0x94, 0x81, 0xe0, 0x64, 0x01, 0x70, 0x31, 0x12, 0x95, 0x83, + 0x90, 0x94, 0x82, 0xe0, 0xff, 0x75, 0xf0, 0x1b, 0xa4, 0x24, 0x3c, + 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0xf4, 0x90, 0x04, + 0xd4, 0xf0, 0xef, 0x75, 0xf0, 0x1b, 0xa4, 0x24, 0x3d, 0xf5, 0x82, + 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0xf4, 0x90, 0x04, 0xd5, 0xf0, + 0x80, 0x07, 0x90, 0x04, 0xd4, 0xe4, 0xf0, 0xa3, 0xf0, 0x7f, 0x01, + 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xe5, 0x77, 0x75, 0xf0, 0x1b, 0xa4, + 0x24, 0x37, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0x22, 0xef, + 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0x19, 0xf5, 0x82, 0xe4, 0x34, 0x92, + 0xf5, 0x83, 0xe0, 0xff, 0x7e, 0x00, 0xe4, 0xfb, 0x22, 0xd3, 0x10, + 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0xad, 0x07, 0x90, 0x05, 0x63, 0xe0, + 0xfe, 0x90, 0x05, 0x62, 0xe0, 0x7a, 0x00, 0x24, 0x00, 0xff, 0xea, + 0x3e, 0x90, 0x94, 0x90, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x05, 0x61, + 0xe0, 0xfe, 0x90, 0x05, 0x60, 0xe0, 0x24, 0x00, 0xff, 0xea, 0x3e, + 0xfe, 0xed, 0xb4, 0x08, 0x0a, 0x90, 0x05, 0x58, 0xe0, 0xfc, 0x2f, + 0xff, 0xea, 0x3e, 0xfe, 0x90, 0x94, 0x81, 0x74, 0x17, 0xf0, 0x90, + 0x94, 0x8f, 0x74, 0x06, 0xf0, 0x90, 0x94, 0x83, 0xed, 0xf0, 0x90, + 0x92, 0x0a, 0xe0, 0xfd, 0xc3, 0x13, 0x54, 0x07, 0x51, 0xd4, 0xe0, + 0x90, 0x94, 0x84, 0xf0, 0xa3, 0xef, 0xf0, 0xee, 0xa3, 0xf0, 0x90, + 0x94, 0x90, 0xe0, 0xfe, 0xa3, 0xe0, 0x90, 0x94, 0x87, 0xf0, 0xee, + 0xa3, 0xf0, 0x7b, 0x01, 0x7a, 0x94, 0x79, 0x81, 0x12, 0x88, 0x13, + 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x90, 0x92, 0x0a, 0xe0, 0xff, 0x20, + 0xe0, 0x02, 0xc1, 0x4d, 0x90, 0x92, 0xb5, 0xe0, 0xfe, 0x20, 0xe0, + 0x02, 0x81, 0xbb, 0x90, 0x92, 0xb3, 0xe0, 0xfd, 0x90, 0x92, 0xb6, + 0xe0, 0xd3, 0x9d, 0x50, 0x02, 0x81, 0xbb, 0x90, 0x05, 0x58, 0xe0, + 0x90, 0x94, 0x5d, 0xf0, 0xef, 0x12, 0x8f, 0xa3, 0x54, 0x07, 0xff, + 0x64, 0x02, 0x60, 0x03, 0xef, 0x70, 0x23, 0xee, 0xc4, 0x13, 0x13, + 0x54, 0x03, 0x20, 0xe0, 0x1a, 0x90, 0x92, 0xb5, 0xe0, 0x44, 0x40, + 0xf1, 0x91, 0x90, 0x94, 0x5d, 0xe0, 0xff, 0x90, 0x92, 0xb2, 0xe0, + 0x2f, 0x24, 0xfd, 0x90, 0x91, 0x6f, 0x12, 0xc6, 0x20, 0x12, 0x8d, + 0x8c, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, + 0x07, 0x90, 0x05, 0x62, 0x12, 0x8d, 0xa5, 0x78, 0x10, 0x12, 0x04, + 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, + 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xa3, 0x12, + 0x8d, 0xa5, 0x78, 0x18, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, + 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, 0x90, 0x94, 0x51, 0x12, + 0x04, 0xeb, 0x90, 0x05, 0x65, 0x12, 0x8d, 0xa5, 0xd1, 0x80, 0x90, + 0x05, 0x64, 0x12, 0x8d, 0xa5, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, + 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x05, 0x66, 0x12, 0x8d, 0xa5, + 0x78, 0x10, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, + 0xd0, 0x00, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, + 0xc0, 0x07, 0xa3, 0x12, 0x8d, 0xa5, 0x78, 0x18, 0x12, 0x04, 0xd8, + 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, + 0xd1, 0x7a, 0x90, 0x92, 0xb2, 0xe0, 0xfb, 0xe4, 0xfa, 0xf9, 0xf8, + 0x90, 0x94, 0x5d, 0x12, 0x8d, 0xa5, 0x12, 0x86, 0xa9, 0xe4, 0xfb, + 0x7a, 0x04, 0x12, 0x86, 0xc4, 0xd1, 0x67, 0x12, 0x86, 0xa9, 0x90, + 0x94, 0x59, 0xd1, 0x5e, 0x90, 0x94, 0x59, 0xf1, 0x9f, 0x50, 0x04, + 0xd1, 0x50, 0xd1, 0x6d, 0xd1, 0x50, 0xf1, 0xb7, 0xd1, 0x4e, 0xf1, + 0xc0, 0xd1, 0x4e, 0xf1, 0xc9, 0xd1, 0x4e, 0x90, 0x05, 0x88, 0xd1, + 0x56, 0xf1, 0xd2, 0xd1, 0x56, 0xf1, 0xdb, 0xd1, 0x56, 0xf1, 0xe4, + 0xd1, 0x56, 0x12, 0xd1, 0x1f, 0xe4, 0x90, 0x92, 0xb6, 0xf0, 0x90, + 0x92, 0xb1, 0xe0, 0x20, 0xe0, 0x02, 0xc1, 0x4d, 0x90, 0x92, 0xb5, + 0xe0, 0xff, 0xc3, 0x13, 0xfe, 0x54, 0x1f, 0x70, 0x02, 0xc1, 0x4d, + 0xef, 0x54, 0xc1, 0xff, 0xee, 0x14, 0x54, 0x1f, 0xfe, 0x25, 0xe0, + 0x4f, 0xf0, 0xe0, 0xc3, 0x13, 0x54, 0x1f, 0x60, 0x02, 0xc1, 0x4d, + 0x90, 0x05, 0x22, 0xe0, 0x44, 0x40, 0xfd, 0x7b, 0x58, 0x7f, 0x40, + 0x12, 0x95, 0x87, 0x90, 0x05, 0x50, 0xe0, 0x54, 0xf7, 0xf0, 0x90, + 0x05, 0x69, 0x12, 0x8d, 0xa5, 0xd1, 0x80, 0x90, 0x05, 0x68, 0x12, + 0x8d, 0xa5, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, + 0xc0, 0x07, 0x90, 0x05, 0x6a, 0x12, 0x8d, 0xa5, 0x78, 0x10, 0x12, + 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, + 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xa3, + 0x12, 0x8d, 0xa5, 0x78, 0x18, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, + 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, 0x90, 0x94, 0x51, + 0xd1, 0x5e, 0x90, 0x94, 0x59, 0x12, 0x04, 0xeb, 0x90, 0x05, 0x6d, + 0x12, 0x8d, 0xa5, 0xd1, 0x80, 0x90, 0x05, 0x6c, 0x12, 0x8d, 0xa5, + 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, + 0x90, 0x05, 0x6e, 0x12, 0x8d, 0xa5, 0x78, 0x10, 0x12, 0x04, 0xd8, + 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, + 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xa3, 0x12, 0x8d, + 0xa5, 0x78, 0x18, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, + 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, 0xd1, 0x7a, 0xd1, 0x67, 0xc0, + 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0x90, 0x92, 0xb1, 0xe0, + 0xc3, 0x13, 0x54, 0x7f, 0xff, 0xe4, 0xfc, 0xfd, 0xfe, 0xf1, 0xa6, + 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x86, 0xa9, + 0x90, 0x94, 0x51, 0x12, 0x04, 0xeb, 0xd1, 0x58, 0xd1, 0x67, 0xc3, + 0x12, 0x04, 0xb4, 0x50, 0x04, 0xd1, 0x50, 0xd1, 0x6d, 0xd1, 0x50, + 0x78, 0x18, 0x12, 0x04, 0xc5, 0x90, 0x05, 0x67, 0xd1, 0x4e, 0x78, + 0x10, 0x12, 0x04, 0xc5, 0x90, 0x05, 0x66, 0xd1, 0x4e, 0x78, 0x08, + 0x12, 0x04, 0xc5, 0x90, 0x05, 0x65, 0xd1, 0x4e, 0x90, 0x05, 0x64, + 0xef, 0xf0, 0xd1, 0x61, 0x78, 0x18, 0x12, 0x04, 0xc5, 0x90, 0x05, + 0x63, 0xef, 0xf0, 0xd1, 0x61, 0x78, 0x10, 0x12, 0x04, 0xc5, 0x90, + 0x05, 0x62, 0xef, 0xf0, 0xd1, 0x61, 0x78, 0x08, 0x12, 0x04, 0xc5, + 0x90, 0x05, 0x61, 0xef, 0xf0, 0xd1, 0x61, 0x90, 0x05, 0x60, 0xef, + 0xf0, 0x90, 0x05, 0x50, 0xe0, 0x44, 0x08, 0xf0, 0x90, 0x05, 0x22, + 0xe0, 0x54, 0xbf, 0xfd, 0x7b, 0x59, 0x7f, 0x40, 0x12, 0x95, 0x87, + 0x7f, 0x08, 0x51, 0xf7, 0x90, 0x92, 0xb5, 0xe0, 0x54, 0xc1, 0x44, + 0x28, 0xf0, 0x44, 0x01, 0xf0, 0x22, 0xef, 0xf0, 0x90, 0x94, 0x55, + 0x02, 0x87, 0x2d, 0xef, 0xf0, 0x90, 0x94, 0x59, 0x02, 0x87, 0x2d, + 0x12, 0x04, 0xeb, 0x90, 0x94, 0x51, 0x02, 0x87, 0x2d, 0x90, 0x94, + 0x51, 0x02, 0x87, 0x39, 0xef, 0x24, 0x01, 0xff, 0xe4, 0x3e, 0xfe, + 0xe4, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0x90, 0x94, 0x55, 0x02, 0x04, + 0xeb, 0x78, 0x08, 0x12, 0x04, 0xd8, 0xa8, 0x04, 0xa9, 0x05, 0xaa, + 0x06, 0xab, 0x07, 0x22, 0x90, 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x10, + 0xa3, 0x74, 0x01, 0xf0, 0x90, 0x85, 0xbc, 0xe0, 0xff, 0xc3, 0x13, + 0x30, 0xe0, 0x02, 0xd1, 0xae, 0x12, 0xa6, 0x99, 0xe4, 0xff, 0xd1, + 0xc9, 0x61, 0x77, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x12, + 0xa6, 0x8d, 0xbf, 0x01, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x02, + 0x12, 0xc9, 0x5e, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xd3, 0x10, 0xaf, + 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x92, 0xc9, 0xe0, 0xfe, 0x13, 0x13, + 0x54, 0x3f, 0x30, 0xe0, 0x1f, 0x90, 0x94, 0xe3, 0x74, 0x1e, 0xf0, + 0x90, 0x94, 0xf1, 0x74, 0x01, 0xf0, 0x90, 0x94, 0xe5, 0xef, 0xf0, + 0x7b, 0x01, 0x7a, 0x94, 0x79, 0xe3, 0x12, 0x5e, 0x10, 0x7f, 0x04, + 0x12, 0xb6, 0x62, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x12, 0xc5, 0x8a, + 0xf1, 0x7a, 0x7f, 0x01, 0xd1, 0xc9, 0x90, 0x92, 0x04, 0xe0, 0x30, + 0xe0, 0x14, 0xf1, 0x81, 0x90, 0x92, 0x07, 0xe0, 0x60, 0x05, 0x14, + 0xf0, 0x02, 0x7a, 0x8a, 0x12, 0xb1, 0x58, 0xe4, 0xff, 0xf1, 0x25, + 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0xef, 0x64, 0x01, + 0x70, 0x1a, 0xf1, 0x72, 0x60, 0x09, 0xf1, 0x6b, 0x12, 0x7b, 0xfd, + 0xf1, 0x81, 0x80, 0x08, 0xf1, 0x6b, 0x12, 0x7b, 0xbf, 0x12, 0xb7, + 0x2f, 0x12, 0x7a, 0x8a, 0x80, 0x17, 0xf1, 0x72, 0x60, 0x07, 0xf1, + 0x6b, 0x12, 0x7b, 0xfd, 0x80, 0x05, 0xf1, 0x6b, 0x12, 0x7b, 0xbf, + 0xf1, 0x7a, 0xf1, 0x98, 0x12, 0x7a, 0xb9, 0xd0, 0xd0, 0x92, 0xaf, + 0x22, 0xf0, 0x90, 0x01, 0x3f, 0x74, 0x10, 0xf0, 0xfd, 0x7f, 0x03, + 0x22, 0x90, 0x92, 0x06, 0xe0, 0x90, 0x01, 0x3f, 0x22, 0x7d, 0x02, + 0x7f, 0x02, 0x02, 0x7c, 0xa9, 0x90, 0x92, 0x06, 0xe0, 0x90, 0x05, + 0x73, 0xf0, 0x22, 0x7d, 0x20, 0xe4, 0xff, 0x02, 0x7b, 0xbf, 0xf0, + 0xe4, 0x90, 0x91, 0x6e, 0xf0, 0x22, 0x7d, 0x01, 0x7f, 0x02, 0x02, + 0x7c, 0xa9, 0x12, 0x87, 0x39, 0xd3, 0x02, 0x04, 0xb4, 0xfb, 0x7a, + 0x04, 0xf9, 0xf8, 0x02, 0x86, 0xc4, 0x8b, 0x5b, 0x8a, 0x5c, 0x89, + 0x5d, 0x02, 0x02, 0xf6, 0x78, 0x18, 0x12, 0x04, 0xc5, 0x90, 0x05, + 0x8b, 0x22, 0x78, 0x10, 0x12, 0x04, 0xc5, 0x90, 0x05, 0x8a, 0x22, + 0x78, 0x08, 0x12, 0x04, 0xc5, 0x90, 0x05, 0x89, 0x22, 0x78, 0x18, + 0x12, 0x04, 0xc5, 0x90, 0x05, 0x87, 0x22, 0x78, 0x10, 0x12, 0x04, + 0xc5, 0x90, 0x05, 0x86, 0x22, 0x78, 0x08, 0x12, 0x04, 0xc5, 0x90, + 0x05, 0x85, 0x22, 0xf1, 0xae, 0xff, 0x54, 0x01, 0xfe, 0x90, 0x92, + 0xb1, 0x12, 0xb1, 0x50, 0x54, 0xfe, 0xff, 0xee, 0x54, 0x01, 0x4f, + 0xf0, 0x12, 0x8f, 0x73, 0x90, 0x92, 0xb2, 0x12, 0x8f, 0xf2, 0x90, + 0x92, 0xb3, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x92, 0xb3, 0xe0, 0xff, + 0xb4, 0x64, 0x05, 0x74, 0x01, 0xf0, 0x80, 0x0a, 0xef, 0xb4, 0x96, + 0x06, 0x90, 0x92, 0xb3, 0x74, 0x03, 0xf0, 0x90, 0x92, 0xb3, 0xe0, + 0x04, 0x90, 0x92, 0xb6, 0xf0, 0x22, 0x12, 0x02, 0xf6, 0xff, 0x90, + 0x92, 0x03, 0xf0, 0xbf, 0x01, 0x07, 0x11, 0x45, 0xe4, 0x90, 0x92, + 0x03, 0xf0, 0x22, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xc3, 0x7f, 0xef, + 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x06, 0x90, 0x93, 0xc3, + 0xe0, 0xa3, 0xf0, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xc3, 0x7f, 0xee, + 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, 0x93, 0xc3, + 0xe0, 0x90, 0x93, 0xc5, 0xf0, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xc3, + 0x7f, 0xed, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x08, 0x90, + 0x93, 0xc3, 0xe0, 0x90, 0x93, 0xc6, 0xf0, 0x7b, 0x01, 0x7a, 0x93, + 0x79, 0xc3, 0x7f, 0xec, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, + 0x08, 0x90, 0x93, 0xc3, 0xe0, 0x90, 0x93, 0xc7, 0xf0, 0x7b, 0x01, + 0x7a, 0x93, 0x79, 0xc3, 0x7f, 0xeb, 0x7e, 0x00, 0x12, 0x64, 0x37, + 0xbf, 0x01, 0x08, 0x90, 0x93, 0xc3, 0xe0, 0x90, 0x93, 0xc8, 0xf0, + 0x90, 0x93, 0xc4, 0xe0, 0xff, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfb, + 0xa3, 0xe0, 0x90, 0x93, 0xcc, 0xf0, 0x90, 0x93, 0xc8, 0xe0, 0x90, + 0x93, 0xcd, 0xf0, 0x90, 0x93, 0xce, 0x74, 0x12, 0xf0, 0x90, 0x93, + 0xdc, 0x74, 0x05, 0xf0, 0x90, 0x93, 0xd0, 0x31, 0x03, 0x90, 0x93, + 0xcc, 0xe0, 0x90, 0x93, 0xd3, 0xf0, 0x90, 0x93, 0xcd, 0xe0, 0x90, + 0x93, 0xd4, 0xf0, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xce, 0x12, 0x5e, + 0x10, 0x7f, 0x04, 0x02, 0x88, 0x18, 0xef, 0xf0, 0xa3, 0xed, 0xf0, + 0xa3, 0xeb, 0xf0, 0x22, 0x12, 0x02, 0xf6, 0x54, 0x01, 0xff, 0x90, + 0x92, 0xc8, 0xe0, 0x54, 0xfe, 0x4f, 0xf0, 0x22, 0x12, 0x02, 0xf6, + 0x90, 0x86, 0x71, 0xf0, 0x22, 0x12, 0x02, 0xf6, 0xff, 0x54, 0x01, + 0xfe, 0x90, 0x92, 0x04, 0x31, 0x50, 0x54, 0x02, 0xff, 0xee, 0x54, + 0xfd, 0x4f, 0xf0, 0x12, 0x8f, 0x73, 0x90, 0x92, 0x05, 0x12, 0x8f, + 0xf2, 0x90, 0x92, 0x06, 0xf0, 0x31, 0x58, 0x90, 0x92, 0x04, 0xe0, + 0x54, 0x01, 0xff, 0x02, 0xaf, 0x25, 0xe0, 0x54, 0xfe, 0x4e, 0xfe, + 0xf0, 0xef, 0x22, 0x90, 0x92, 0x05, 0xe0, 0x14, 0x90, 0x92, 0x07, + 0xf0, 0x22, 0x90, 0x01, 0xcc, 0xe0, 0x54, 0x0f, 0x90, 0x93, 0xbd, + 0xf0, 0x90, 0x93, 0xbd, 0xe0, 0xfd, 0x70, 0x02, 0x41, 0x5f, 0x90, + 0x85, 0x1d, 0xe0, 0xff, 0x70, 0x06, 0xa3, 0xe0, 0x64, 0x09, 0x60, + 0x0a, 0xef, 0x14, 0xff, 0x90, 0x85, 0x1e, 0xe0, 0xb5, 0x07, 0x04, + 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xef, 0x60, 0x08, 0x90, 0x01, + 0xc1, 0xe0, 0x44, 0x01, 0xf0, 0x22, 0x90, 0x95, 0x11, 0xe0, 0x51, + 0x92, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, + 0xef, 0x5d, 0x70, 0x02, 0x41, 0x42, 0xe4, 0x90, 0x93, 0xbe, 0xf0, + 0x90, 0x93, 0xbe, 0xe0, 0xf9, 0xc3, 0x94, 0x04, 0x50, 0x36, 0x51, + 0x61, 0xa4, 0xff, 0xe9, 0xfd, 0x7c, 0x00, 0x2f, 0xff, 0xec, 0x35, + 0xf0, 0xfe, 0x74, 0xd0, 0x51, 0x69, 0x90, 0x84, 0xcd, 0x12, 0xa7, + 0x30, 0xef, 0x51, 0x60, 0xa4, 0x2d, 0xff, 0xec, 0x35, 0xf0, 0xfe, + 0x74, 0xf0, 0x51, 0x69, 0x90, 0x84, 0xd1, 0x12, 0xa7, 0x30, 0xef, + 0xf0, 0x90, 0x93, 0xbe, 0xe0, 0x04, 0xf0, 0x80, 0xc0, 0x90, 0x93, + 0xbd, 0xe0, 0xff, 0x90, 0x95, 0x11, 0x51, 0x81, 0x80, 0x02, 0xc3, + 0x33, 0xd8, 0xfc, 0xf4, 0x5f, 0x90, 0x93, 0xbd, 0xf0, 0x90, 0x95, + 0x11, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, + 0x33, 0xd8, 0xfc, 0x90, 0x01, 0xcc, 0xf0, 0x90, 0x95, 0x11, 0xe0, + 0x04, 0xf0, 0xe0, 0x54, 0x03, 0xf0, 0x90, 0x85, 0x1e, 0x51, 0x89, + 0xb4, 0x0a, 0x02, 0x7f, 0x01, 0xef, 0x70, 0x02, 0x21, 0x6c, 0xe4, + 0x90, 0x85, 0x1e, 0xf0, 0x21, 0x6c, 0x90, 0x01, 0xc0, 0xe0, 0x44, + 0x02, 0xf0, 0x90, 0x95, 0x11, 0xe0, 0x44, 0x80, 0x90, 0x00, 0x8a, + 0x51, 0x60, 0x90, 0x01, 0xd0, 0x12, 0x05, 0x28, 0xe0, 0x90, 0x01, + 0xc3, 0xf0, 0x22, 0xf0, 0x90, 0x95, 0x11, 0xe0, 0x75, 0xf0, 0x04, + 0x22, 0x2f, 0xf5, 0x82, 0x74, 0x01, 0x3e, 0xf5, 0x83, 0xe0, 0xff, + 0x90, 0x85, 0x1e, 0xe0, 0x75, 0xf0, 0x08, 0x22, 0x75, 0xf0, 0x03, + 0x12, 0x05, 0x28, 0xe0, 0xfe, 0x74, 0x01, 0xa8, 0x06, 0x08, 0x22, + 0xe0, 0x04, 0xf0, 0xe0, 0x7f, 0x00, 0x22, 0x54, 0x07, 0xff, 0x74, + 0x01, 0x7e, 0x00, 0xa8, 0x07, 0x08, 0x22, 0xe4, 0xf5, 0x75, 0x90, + 0x85, 0xbb, 0xe0, 0xff, 0xe5, 0x75, 0xc3, 0x9f, 0x50, 0x65, 0xaf, + 0x75, 0x12, 0x77, 0x39, 0xef, 0x60, 0x59, 0xe5, 0x75, 0x13, 0x13, + 0x13, 0x54, 0x1f, 0xff, 0xe5, 0x75, 0x54, 0x07, 0xfe, 0x74, 0x75, + 0x2f, 0x71, 0x11, 0xaf, 0x06, 0x51, 0x93, 0x80, 0x05, 0xc3, 0x33, + 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xef, 0x5d, 0x60, 0x35, 0xe5, + 0x75, 0xc4, 0x54, 0xf0, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x81, + 0xf5, 0x83, 0xe0, 0x20, 0xe7, 0x02, 0x80, 0x13, 0xe5, 0x75, 0xc4, + 0x54, 0xf0, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x81, 0xf5, 0x83, + 0xe0, 0xff, 0x20, 0xe7, 0x09, 0x90, 0x01, 0xc1, 0xe0, 0x44, 0x20, + 0xf0, 0x80, 0x05, 0xad, 0x75, 0x12, 0x9a, 0xc9, 0x05, 0x75, 0x80, + 0x90, 0x22, 0x80, 0x8a, 0xf5, 0x82, 0xe4, 0x34, 0x8f, 0xf5, 0x83, + 0xe0, 0xfd, 0x22, 0x90, 0x85, 0xb5, 0xe0, 0xff, 0x70, 0x06, 0xa3, + 0xe0, 0x64, 0x09, 0x60, 0x0a, 0xef, 0x14, 0xff, 0x90, 0x85, 0xb6, + 0xe0, 0xb5, 0x07, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xef, + 0x60, 0x08, 0x90, 0x01, 0xc1, 0xe0, 0x44, 0x02, 0xf0, 0x22, 0xc0, + 0x01, 0x90, 0x85, 0xb6, 0xe0, 0x75, 0xf0, 0x0f, 0xa4, 0x24, 0x1f, + 0xf9, 0x74, 0x85, 0x35, 0xf0, 0xa8, 0x01, 0xfc, 0x7d, 0x01, 0xd0, + 0x01, 0x7e, 0x00, 0x7f, 0x0f, 0x12, 0x02, 0xd0, 0x7d, 0xcc, 0x7f, + 0xfe, 0x12, 0x7b, 0x3e, 0x90, 0x85, 0xb6, 0x51, 0x89, 0xb4, 0x0a, + 0x02, 0x7f, 0x01, 0xef, 0x60, 0x05, 0xe4, 0x90, 0x85, 0xb6, 0xf0, + 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x85, 0x1e, + 0xe0, 0xff, 0x90, 0x85, 0x1d, 0xe0, 0xb5, 0x07, 0x04, 0x7f, 0x01, + 0x80, 0x02, 0x7f, 0x00, 0xef, 0x70, 0x47, 0x90, 0x85, 0x1d, 0xe0, + 0xfe, 0x75, 0xf0, 0x08, 0x90, 0x84, 0xcd, 0x12, 0x05, 0x28, 0xe0, + 0xfd, 0xee, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xce, 0xf9, 0x74, 0x84, + 0x35, 0xf0, 0xfa, 0x7b, 0x01, 0xaf, 0x05, 0x12, 0x8a, 0xd9, 0x90, + 0x85, 0x1d, 0x51, 0x89, 0xb4, 0x0a, 0x02, 0x7f, 0x01, 0xef, 0x60, + 0x05, 0xe4, 0x90, 0x85, 0x1d, 0xf0, 0x7d, 0x68, 0x7f, 0xfe, 0x12, + 0x7b, 0x3e, 0x12, 0x40, 0xb9, 0x90, 0x84, 0xc1, 0xe0, 0x44, 0x02, + 0xf0, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xe4, 0xf5, 0x73, 0xef, 0x14, + 0xf5, 0x72, 0xed, 0xff, 0xe5, 0x72, 0xf5, 0x82, 0x33, 0x95, 0xe0, + 0xf5, 0x83, 0xc3, 0xe5, 0x82, 0x9f, 0x74, 0x80, 0xf8, 0x65, 0x83, + 0x98, 0x40, 0x53, 0xe5, 0x72, 0x78, 0x03, 0xa2, 0xe7, 0x13, 0xd8, + 0xfb, 0xff, 0x33, 0x95, 0xe0, 0xfe, 0xeb, 0x12, 0xa7, 0xf5, 0xf5, + 0x83, 0xe5, 0x82, 0x2f, 0xf5, 0x82, 0xe5, 0x83, 0x3e, 0xf5, 0x83, + 0xe0, 0xf5, 0x82, 0x75, 0x83, 0x00, 0xe5, 0x72, 0x51, 0x90, 0x80, + 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xee, 0x55, + 0x83, 0xfe, 0xef, 0x55, 0x82, 0x4e, 0x60, 0x13, 0x85, 0x72, 0x74, + 0x05, 0x73, 0x90, 0x94, 0x4b, 0xe0, 0x65, 0x73, 0x60, 0x0a, 0xe5, + 0x74, 0xd3, 0x9d, 0x40, 0x04, 0x15, 0x72, 0x80, 0x96, 0xaf, 0x74, + 0x22, 0xaa, 0x07, 0xa9, 0x05, 0xea, 0x12, 0x9b, 0x4a, 0xe0, 0xf5, + 0x6e, 0x54, 0x7f, 0xf5, 0x70, 0x75, 0xf0, 0x12, 0xea, 0x90, 0x89, + 0x3d, 0x12, 0x05, 0x28, 0xe0, 0x90, 0x94, 0x47, 0xf0, 0x75, 0xf0, + 0x12, 0xea, 0xb1, 0x17, 0xff, 0xea, 0x12, 0x9a, 0xbc, 0xe0, 0x54, + 0x03, 0xf5, 0x6f, 0xe5, 0x70, 0x90, 0x83, 0x1d, 0x93, 0xfd, 0xea, + 0x12, 0x9f, 0x5f, 0xe4, 0xf0, 0xa3, 0xed, 0xf0, 0x75, 0xf0, 0x12, + 0xea, 0x12, 0xa1, 0x8f, 0xfe, 0xc4, 0x54, 0x03, 0x90, 0x94, 0x46, + 0xf0, 0x74, 0xcc, 0x2a, 0xb1, 0x0f, 0xe5, 0x70, 0xf0, 0x74, 0x4c, + 0x2a, 0xb1, 0x1f, 0xe5, 0x6f, 0xf0, 0xe5, 0x70, 0xd3, 0x9f, 0x40, + 0x04, 0x8f, 0x70, 0x8f, 0x6e, 0x89, 0x71, 0xe4, 0xff, 0xef, 0xc3, + 0x95, 0x71, 0x50, 0x33, 0xe5, 0x6e, 0x30, 0xe7, 0x09, 0x85, 0x70, + 0x6e, 0x19, 0xe9, 0x70, 0x24, 0x80, 0x25, 0x90, 0x94, 0x47, 0xe0, + 0xfd, 0xe5, 0x70, 0xd3, 0x9d, 0x40, 0x0f, 0xab, 0x02, 0x90, 0x94, + 0x4b, 0xe9, 0xf0, 0xaf, 0x70, 0x71, 0xe4, 0x8f, 0x6e, 0x80, 0x0b, + 0x90, 0x94, 0x47, 0xe0, 0xf5, 0x6e, 0x80, 0x03, 0x0f, 0x80, 0xc7, + 0xaf, 0x02, 0x90, 0x91, 0x0b, 0xe5, 0x6f, 0xf0, 0xe4, 0xfb, 0xad, + 0x6e, 0x02, 0x27, 0x3d, 0x74, 0xcc, 0x25, 0x6e, 0xf5, 0x82, 0xe4, + 0x34, 0x90, 0xf5, 0x83, 0x22, 0x90, 0x89, 0x3c, 0x12, 0x05, 0x28, + 0xe0, 0x22, 0xf5, 0x82, 0xe4, 0x34, 0x90, 0xf5, 0x83, 0x22, 0xc0, + 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, + 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, + 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x01, 0xc4, 0x74, 0x27, + 0xf0, 0x74, 0xb5, 0xa3, 0xf0, 0x12, 0x71, 0x90, 0xe5, 0x4c, 0x30, + 0xe1, 0x02, 0xb1, 0xdf, 0xe5, 0x4c, 0x30, 0xe4, 0x02, 0xd1, 0x5d, + 0xe5, 0x4c, 0x30, 0xe5, 0x03, 0x12, 0xcc, 0xc9, 0xe5, 0x4c, 0x30, + 0xe6, 0x03, 0x12, 0xc8, 0xd8, 0xe5, 0x4e, 0x30, 0xe0, 0x03, 0x12, + 0xae, 0x8e, 0xe5, 0x4e, 0x30, 0xe1, 0x02, 0xd1, 0x71, 0xe5, 0x4e, + 0x30, 0xe2, 0x03, 0x12, 0xc7, 0x9e, 0xe5, 0x4e, 0x30, 0xe3, 0x02, + 0xf1, 0x3d, 0xe5, 0x4e, 0x30, 0xe4, 0x03, 0x12, 0xc1, 0x8d, 0xe5, + 0x4e, 0x30, 0xe5, 0x02, 0xf1, 0x71, 0xe5, 0x4e, 0x30, 0xe6, 0x02, + 0xf1, 0x51, 0xe5, 0x4f, 0x30, 0xe1, 0x03, 0x12, 0xa7, 0xae, 0xe5, + 0x4f, 0x30, 0xe4, 0x02, 0xf1, 0xe3, 0xe5, 0x4f, 0x30, 0xe5, 0x02, + 0x71, 0x0f, 0x74, 0x27, 0x04, 0x90, 0x01, 0xc4, 0xf0, 0x74, 0xb5, + 0xa3, 0xf0, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, + 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, + 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0xe4, 0xff, 0x90, 0x94, + 0x51, 0xef, 0xf0, 0x90, 0x04, 0x7e, 0xe0, 0xff, 0xa3, 0xe0, 0x90, + 0x94, 0x61, 0xf0, 0xe0, 0xfe, 0x6f, 0x60, 0x66, 0x90, 0x94, 0x52, + 0x74, 0x03, 0xf0, 0x90, 0x94, 0x60, 0x74, 0x08, 0xf0, 0xee, 0x04, + 0x54, 0x0f, 0xff, 0xe4, 0xfe, 0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, + 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x80, 0xf5, 0x83, 0xe5, 0x82, 0x2e, + 0x12, 0xa7, 0x36, 0xe0, 0xfd, 0x74, 0x54, 0x2e, 0xf5, 0x82, 0xe4, + 0x34, 0x94, 0xf5, 0x83, 0xed, 0xf0, 0x0e, 0xee, 0xb4, 0x08, 0xd9, + 0x7b, 0x01, 0x7a, 0x94, 0x79, 0x52, 0x12, 0x5e, 0x10, 0x90, 0x94, + 0x61, 0xe0, 0x04, 0x54, 0x0f, 0xff, 0xf0, 0xbf, 0x0f, 0x02, 0xe4, + 0xf0, 0x90, 0x94, 0x61, 0xe0, 0x90, 0x04, 0x7f, 0xf0, 0x90, 0x94, + 0x51, 0xe0, 0x7f, 0x04, 0x70, 0x02, 0x80, 0x09, 0x12, 0x88, 0x18, + 0x22, 0x12, 0x40, 0xb9, 0x7f, 0x02, 0x8f, 0x0d, 0x7f, 0x02, 0x12, + 0x86, 0x27, 0x90, 0x84, 0xc1, 0xe0, 0x45, 0x0d, 0xf0, 0x22, 0x90, + 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x06, 0x90, 0x85, 0xbe, 0x74, 0x01, + 0xf0, 0x90, 0x85, 0xc5, 0xe0, 0x70, 0x02, 0xe1, 0x1a, 0x90, 0x85, + 0xdc, 0xe0, 0x04, 0xf0, 0x12, 0x8d, 0x8c, 0x12, 0x87, 0x20, 0xc0, + 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x05, 0x62, 0x12, + 0x8d, 0xa5, 0x78, 0x10, 0x12, 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, + 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x87, 0x20, 0xc0, 0x04, 0xc0, 0x05, + 0xc0, 0x06, 0xc0, 0x07, 0xa3, 0x12, 0x8d, 0xa5, 0x78, 0x18, 0x12, + 0x04, 0xd8, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, + 0x87, 0x20, 0x90, 0x85, 0xfc, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x90, + 0x92, 0xc9, 0xe0, 0x54, 0xfe, 0xf0, 0xe0, 0xc3, 0x13, 0x30, 0xe0, + 0x0d, 0x12, 0xc7, 0x7d, 0x12, 0x51, 0x7d, 0x90, 0x92, 0xc9, 0xe0, + 0x54, 0xfd, 0xf0, 0x90, 0x85, 0xc2, 0xe0, 0x13, 0x13, 0x13, 0x54, + 0x1f, 0x30, 0xe0, 0x09, 0x90, 0x01, 0x3b, 0xe0, 0x30, 0xe4, 0x02, + 0xf1, 0x2f, 0x90, 0x95, 0x18, 0xe0, 0x04, 0xf0, 0xe0, 0xc3, 0x94, + 0x80, 0x40, 0x0b, 0x90, 0x01, 0x98, 0xe0, 0x54, 0xfe, 0xf0, 0xe0, + 0x44, 0x01, 0xf0, 0x7f, 0x01, 0xd1, 0x62, 0x90, 0x92, 0x04, 0xe0, + 0x30, 0xe0, 0x09, 0x90, 0x01, 0x3b, 0xe0, 0x30, 0xe4, 0x02, 0xf1, + 0x2f, 0x22, 0x7d, 0x02, 0x7f, 0x02, 0x12, 0x7c, 0x41, 0x7d, 0x01, + 0x7f, 0x02, 0x02, 0x7c, 0x41, 0x12, 0xc4, 0x67, 0x70, 0x0e, 0x90, + 0x85, 0xc5, 0xe0, 0x60, 0x08, 0x12, 0xc4, 0x80, 0xf1, 0xeb, 0x12, + 0xc6, 0x20, 0x22, 0xe4, 0xff, 0x12, 0x77, 0x39, 0xbf, 0x01, 0x0f, + 0x90, 0x85, 0xc5, 0xe0, 0x60, 0x09, 0xf1, 0x69, 0x54, 0x07, 0x70, + 0x03, 0x12, 0xc1, 0x7b, 0x22, 0x90, 0x85, 0xc9, 0xe0, 0x54, 0xfe, + 0xf0, 0x22, 0xe4, 0xff, 0x12, 0x77, 0x39, 0xbf, 0x01, 0x12, 0x90, + 0x85, 0xc5, 0xe0, 0x60, 0x0c, 0xf1, 0xdc, 0x64, 0x02, 0x60, 0x03, + 0x02, 0x77, 0x61, 0x12, 0x79, 0x41, 0x22, 0xe4, 0xf5, 0x75, 0x90, + 0x06, 0xa9, 0xe0, 0xf5, 0x75, 0x54, 0xc0, 0x70, 0x08, 0xf1, 0x69, + 0x54, 0xfd, 0xf0, 0x02, 0xc1, 0x7b, 0xe5, 0x75, 0x30, 0xe6, 0x18, + 0x90, 0x85, 0xc5, 0xe0, 0x64, 0x01, 0x70, 0x12, 0xf1, 0xd5, 0x64, + 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07, 0x12, 0x79, 0x41, + 0x80, 0x02, 0xf1, 0x69, 0xe5, 0x75, 0x90, 0x85, 0xc9, 0x30, 0xe7, + 0x08, 0xf1, 0xe8, 0x12, 0xc6, 0x20, 0x02, 0xc6, 0x9d, 0xe0, 0x54, + 0xfd, 0xf0, 0x22, 0x90, 0x85, 0xc9, 0xe0, 0x44, 0x01, 0xf0, 0x90, + 0x85, 0xc3, 0xe0, 0x54, 0x0f, 0x22, 0xe4, 0xff, 0x02, 0x2d, 0xbd, + 0xe0, 0x44, 0x02, 0xf0, 0xe4, 0x90, 0x91, 0x6e, 0xf0, 0x90, 0x86, + 0x6e, 0xe0, 0x90, 0x91, 0x6f, 0x22, 0xe4, 0xfc, 0xed, 0x2c, 0x24, + 0x00, 0x11, 0x4a, 0xe4, 0xf0, 0x0c, 0xec, 0xb4, 0x18, 0xf3, 0x74, + 0x00, 0x2d, 0x11, 0x4a, 0xef, 0xf0, 0xee, 0x54, 0x3f, 0xff, 0x74, + 0x01, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0xfb, 0xf5, 0x83, 0xef, 0xf0, + 0x74, 0x02, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0xfb, 0xf5, 0x83, 0xe0, + 0x54, 0xf0, 0xf0, 0x74, 0x03, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0xfb, + 0xf5, 0x83, 0xe0, 0x44, 0x80, 0xf0, 0x74, 0x0b, 0x2d, 0xf5, 0x82, + 0xe4, 0x34, 0xfb, 0xf5, 0x83, 0xe0, 0x44, 0x10, 0xf0, 0x22, 0xf5, + 0x82, 0xe4, 0x34, 0xfb, 0xf5, 0x83, 0x22, 0x90, 0x93, 0xf3, 0xef, + 0xf0, 0xa3, 0x12, 0x87, 0x4e, 0x90, 0x95, 0x12, 0xe0, 0xfe, 0x04, + 0xf0, 0x90, 0x00, 0x01, 0xee, 0x12, 0x03, 0x4e, 0x74, 0x00, 0x2f, + 0xf9, 0xe4, 0x34, 0xfb, 0xfa, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, + 0xc0, 0x01, 0x90, 0x93, 0xf4, 0x12, 0x87, 0x45, 0x8b, 0x1b, 0x8a, + 0x1c, 0x89, 0x1d, 0x75, 0x1e, 0x02, 0xd0, 0x01, 0xd0, 0x02, 0xd0, + 0x03, 0x12, 0x6a, 0x21, 0x90, 0x93, 0xf3, 0xe0, 0x24, 0x02, 0xf9, + 0xe4, 0x34, 0xfb, 0xfa, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, + 0x01, 0xa3, 0x12, 0x87, 0x45, 0xe9, 0x24, 0x02, 0xf9, 0xe4, 0x3a, + 0x8b, 0x1b, 0xf5, 0x1c, 0x89, 0x1d, 0x90, 0x93, 0xf4, 0x11, 0xc4, + 0xf5, 0x1e, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x02, 0x6a, 0x21, + 0x12, 0x87, 0x45, 0x90, 0x00, 0x0e, 0x02, 0x03, 0x0f, 0xd3, 0x10, + 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x90, 0x93, 0xf7, 0x12, 0x87, 0x4e, + 0x7f, 0x96, 0x7e, 0x02, 0x12, 0x66, 0x80, 0xef, 0x60, 0x4e, 0x90, + 0x01, 0x17, 0xe0, 0xfe, 0x90, 0x01, 0x16, 0xe0, 0x7c, 0x00, 0x24, + 0x00, 0xff, 0xec, 0x3e, 0xfe, 0x31, 0x37, 0x90, 0x93, 0xfa, 0xef, + 0xf0, 0xee, 0xff, 0x90, 0xfd, 0x11, 0xf0, 0x90, 0x93, 0xfa, 0xe0, + 0xfd, 0x90, 0x02, 0x94, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x93, 0xf7, + 0x11, 0xc4, 0x24, 0x02, 0xff, 0xe4, 0x33, 0xfe, 0x12, 0x5a, 0xa5, + 0x90, 0x93, 0xfa, 0xe0, 0x24, 0x18, 0xff, 0x90, 0x93, 0xf7, 0x12, + 0x87, 0x45, 0x12, 0x56, 0xf4, 0x90, 0x02, 0x96, 0x74, 0x01, 0xf0, + 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xef, 0x24, 0x01, 0xff, 0xe4, 0x3e, + 0xfe, 0x22, 0x12, 0x02, 0xf6, 0x64, 0x01, 0x60, 0x02, 0x21, 0xd0, + 0x90, 0x93, 0xe2, 0xf0, 0x90, 0x93, 0xe2, 0xe0, 0xff, 0xc3, 0x94, + 0x10, 0x50, 0x27, 0xef, 0x31, 0xd1, 0x7a, 0x93, 0x79, 0xe1, 0x12, + 0x64, 0x37, 0xbf, 0x01, 0x12, 0x90, 0x93, 0xe1, 0xe0, 0xff, 0xa3, + 0xe0, 0x24, 0xe3, 0xf5, 0x82, 0xe4, 0x34, 0x93, 0xf5, 0x83, 0xef, + 0xf0, 0x90, 0x93, 0xe2, 0xe0, 0x04, 0xf0, 0x80, 0xcf, 0x75, 0x1b, + 0x01, 0x75, 0x1c, 0x93, 0x75, 0x1d, 0xe3, 0x75, 0x1e, 0x08, 0x7b, + 0x01, 0x7a, 0x93, 0x79, 0xc5, 0x12, 0x6a, 0x21, 0x90, 0x93, 0xc3, + 0x74, 0x24, 0xf0, 0x90, 0x93, 0xd1, 0x74, 0x08, 0xf0, 0x75, 0x1b, + 0x01, 0x75, 0x1c, 0x93, 0x75, 0x1d, 0xeb, 0xf5, 0x1e, 0x7b, 0x01, + 0x7a, 0x93, 0x79, 0xd4, 0x12, 0x6a, 0x21, 0x90, 0x93, 0xd2, 0x74, + 0x25, 0xf0, 0x90, 0x93, 0xe0, 0x74, 0x08, 0xf0, 0x7b, 0x01, 0x7a, + 0x93, 0x79, 0xc3, 0x12, 0x5e, 0x10, 0x7b, 0x01, 0x7a, 0x93, 0x79, + 0xd2, 0x12, 0x88, 0x13, 0x22, 0x24, 0xde, 0xff, 0xe4, 0x33, 0xfe, + 0x7b, 0x01, 0x22, 0x12, 0xa0, 0x37, 0x12, 0x02, 0xf6, 0x64, 0x01, + 0x60, 0x02, 0x41, 0x6e, 0xef, 0x24, 0x39, 0x60, 0x12, 0x14, 0x60, + 0x19, 0x24, 0x02, 0x70, 0x1f, 0xe4, 0x90, 0x93, 0xc9, 0xf0, 0xa3, + 0x74, 0x06, 0xf0, 0x80, 0x14, 0x90, 0x93, 0xc9, 0x74, 0x06, 0xf0, + 0xa3, 0xf0, 0x80, 0x0a, 0x90, 0x93, 0xc9, 0x74, 0x0c, 0xf0, 0xa3, + 0x74, 0x04, 0xf0, 0x51, 0x81, 0xf0, 0x51, 0x6f, 0x40, 0x1c, 0x90, + 0x93, 0xc7, 0xe0, 0x31, 0xd1, 0x7a, 0x93, 0x79, 0xc6, 0x12, 0x64, + 0x37, 0xbf, 0x01, 0x07, 0x90, 0x93, 0xc6, 0xe0, 0xf4, 0x70, 0x3f, + 0x51, 0x77, 0xf0, 0x80, 0xe0, 0x51, 0x81, 0xf0, 0x51, 0x6f, 0x40, + 0x33, 0x90, 0x93, 0xc7, 0xe0, 0xfd, 0x7c, 0x00, 0x24, 0xde, 0xff, + 0xec, 0x33, 0xfe, 0xed, 0x24, 0x01, 0xfd, 0xec, 0x33, 0xfc, 0x90, + 0x93, 0xc9, 0xe0, 0xfb, 0xc3, 0xed, 0x9b, 0xfd, 0xec, 0x94, 0x00, + 0xfc, 0x12, 0x8f, 0x58, 0x8d, 0x82, 0x8c, 0x83, 0x12, 0x03, 0x0f, + 0xfd, 0x51, 0x91, 0x51, 0x77, 0xf0, 0x80, 0xc9, 0x22, 0x90, 0x93, + 0xc8, 0xe0, 0xd3, 0x94, 0x00, 0x22, 0x90, 0x93, 0xc7, 0xe0, 0x04, + 0xf0, 0xa3, 0xe0, 0x14, 0x22, 0x90, 0x93, 0xc9, 0xe0, 0x90, 0x93, + 0xc7, 0xf0, 0x90, 0x93, 0xca, 0xe0, 0x90, 0x93, 0xc8, 0x22, 0x8e, + 0x5b, 0x8f, 0x5c, 0x8d, 0x5d, 0xe4, 0x90, 0x93, 0xcb, 0xf0, 0x90, + 0x00, 0x37, 0xe0, 0x44, 0x80, 0xfd, 0x7f, 0x37, 0x12, 0x7b, 0x3e, + 0x7d, 0x69, 0x7f, 0xcf, 0x12, 0x7b, 0x3e, 0xe5, 0x5c, 0xfd, 0x7f, + 0x31, 0x12, 0x7b, 0x3e, 0xe5, 0x5b, 0x54, 0x03, 0xff, 0x90, 0x00, + 0x32, 0xe0, 0x54, 0xfc, 0x4f, 0xfd, 0x7f, 0x32, 0x12, 0x7b, 0x3e, + 0xad, 0x5d, 0x7f, 0x30, 0x12, 0x7b, 0x3e, 0x90, 0x00, 0x33, 0xe0, + 0x44, 0x80, 0xfd, 0x7f, 0x33, 0x12, 0x7b, 0x3e, 0x90, 0x00, 0x33, + 0xe0, 0x30, 0xe7, 0x09, 0x71, 0x08, 0x50, 0x05, 0xe0, 0x04, 0xf0, + 0x80, 0xf0, 0xe4, 0xfd, 0x7f, 0xcf, 0x12, 0x7b, 0x3e, 0x90, 0x00, + 0x37, 0xe0, 0x54, 0x7f, 0xfd, 0x7f, 0x37, 0x12, 0x7b, 0x3e, 0x71, + 0x08, 0x7f, 0x00, 0x50, 0x02, 0x7f, 0x01, 0x22, 0x90, 0x93, 0xcb, + 0xe0, 0xc3, 0x94, 0x64, 0x22, 0xe4, 0x90, 0x84, 0xc1, 0xf0, 0xa3, + 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0x90, 0x92, 0x01, 0xf0, 0x22, 0x90, + 0x00, 0x80, 0xe0, 0x44, 0x80, 0xfd, 0x7f, 0x80, 0x12, 0x7b, 0x3e, + 0x12, 0xc7, 0xe8, 0x12, 0xcc, 0x75, 0x12, 0x7b, 0x9c, 0x91, 0x43, + 0x71, 0x10, 0x7f, 0x01, 0x12, 0x85, 0x15, 0x90, 0x92, 0x08, 0x74, + 0x02, 0xf0, 0xff, 0x12, 0x85, 0x15, 0x90, 0x92, 0x08, 0xe0, 0x04, + 0xf0, 0x91, 0x68, 0x91, 0x1d, 0x90, 0x01, 0xcc, 0x74, 0x0f, 0xf0, + 0x90, 0x00, 0x80, 0xe0, 0x44, 0x40, 0xfd, 0x7f, 0x80, 0x12, 0x7b, + 0x3e, 0x75, 0x20, 0xff, 0x12, 0x7c, 0xcd, 0x90, 0x01, 0xa0, 0xe0, + 0xb4, 0xfd, 0x05, 0xe4, 0xff, 0x12, 0x88, 0x33, 0x91, 0xcd, 0x90, + 0x00, 0x81, 0xe0, 0x44, 0x04, 0xfd, 0x7f, 0x81, 0x12, 0x7b, 0x3e, + 0x12, 0xc0, 0x2b, 0x71, 0x8e, 0xe4, 0xff, 0x02, 0x85, 0x9e, 0x7e, + 0x00, 0x7f, 0x0b, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x92, 0x79, 0xbd, + 0x12, 0x06, 0xde, 0x91, 0x16, 0xf1, 0x6c, 0xbf, 0x01, 0x1c, 0x90, + 0x93, 0xfb, 0xe0, 0xfe, 0x54, 0x01, 0x90, 0x92, 0xbd, 0xf0, 0xee, + 0x54, 0x04, 0x90, 0x92, 0xbf, 0xf0, 0x90, 0x93, 0xfb, 0xe0, 0x54, + 0x08, 0x90, 0x92, 0xbe, 0xf0, 0x91, 0x16, 0x12, 0x8a, 0x85, 0x70, + 0x34, 0x90, 0x93, 0xfb, 0xe0, 0x54, 0x07, 0x70, 0x14, 0x7b, 0x01, + 0x7a, 0x93, 0x79, 0xfc, 0x7f, 0xfa, 0xfe, 0x12, 0x64, 0x37, 0xbf, + 0x01, 0x0f, 0x90, 0x93, 0xfc, 0x80, 0x03, 0x90, 0x93, 0xfb, 0xe0, + 0x54, 0x07, 0x90, 0x92, 0xc1, 0xf0, 0x90, 0x93, 0xfb, 0xe0, 0x54, + 0xe0, 0xc4, 0x13, 0x54, 0x07, 0x90, 0x92, 0xc0, 0xf0, 0x91, 0x16, + 0x7f, 0xfd, 0x7e, 0x00, 0x12, 0x64, 0x37, 0xbf, 0x01, 0x0e, 0x90, + 0x93, 0xfb, 0xe0, 0x54, 0x0c, 0x13, 0x13, 0x54, 0x3f, 0x90, 0x92, + 0xc2, 0xf0, 0x22, 0x7b, 0x01, 0x7a, 0x93, 0x79, 0xfb, 0x22, 0xb1, + 0xf9, 0x12, 0x7b, 0xef, 0x12, 0x3c, 0x03, 0x12, 0xca, 0xe9, 0x12, + 0xcd, 0x91, 0xb1, 0x1e, 0x91, 0x3e, 0x7e, 0x00, 0x7f, 0xb3, 0x7d, + 0x00, 0x7b, 0x01, 0x7a, 0x92, 0x79, 0x09, 0x02, 0x06, 0xde, 0xb1, + 0xec, 0x02, 0x06, 0xde, 0x90, 0x00, 0x00, 0xe0, 0x54, 0xfb, 0xfd, + 0xe4, 0xff, 0xf1, 0x7b, 0x44, 0x04, 0xfd, 0x7f, 0x01, 0x12, 0x7b, + 0x3e, 0x90, 0x01, 0x98, 0x74, 0x80, 0xf0, 0xa3, 0x74, 0x88, 0xf0, + 0xa3, 0xe4, 0xf0, 0xa3, 0x74, 0x80, 0xf0, 0x22, 0x12, 0x7c, 0x4e, + 0x90, 0x84, 0xc5, 0xef, 0xf0, 0x91, 0x9c, 0x90, 0x01, 0x64, 0x74, + 0x01, 0xf0, 0x90, 0x04, 0x23, 0xe0, 0x44, 0x80, 0xf0, 0x90, 0x00, + 0x17, 0xe0, 0x54, 0xfc, 0x44, 0x04, 0xfd, 0x7f, 0x17, 0x12, 0x7b, + 0x3e, 0x90, 0x00, 0x38, 0xe0, 0x44, 0x40, 0xfd, 0x7f, 0x38, 0x12, + 0x7b, 0x3e, 0x02, 0x68, 0xe2, 0x12, 0x75, 0xb6, 0x12, 0x75, 0x58, + 0xf1, 0xe5, 0x12, 0xc0, 0x0c, 0xe4, 0xf5, 0x40, 0xf5, 0x41, 0xf5, + 0x42, 0x75, 0x43, 0x80, 0xad, 0x40, 0x7f, 0x50, 0x12, 0x7b, 0x3e, + 0xad, 0x41, 0x7f, 0x51, 0x12, 0x7b, 0x3e, 0xad, 0x42, 0x7f, 0x52, + 0x12, 0x7b, 0x3e, 0xad, 0x43, 0x7f, 0x53, 0x02, 0x7b, 0x3e, 0xe4, + 0x90, 0x93, 0xfb, 0xf0, 0xa3, 0xf0, 0x12, 0xcc, 0xa0, 0xef, 0x64, + 0x01, 0x60, 0x3b, 0xc3, 0x90, 0x93, 0xfc, 0xe0, 0x94, 0x88, 0x90, + 0x93, 0xfb, 0xe0, 0x94, 0x13, 0x40, 0x0f, 0x90, 0x01, 0xc1, 0xe0, + 0x44, 0x10, 0xf0, 0x90, 0x01, 0xc7, 0x74, 0xfd, 0xf0, 0x80, 0x1d, + 0x90, 0x93, 0xfb, 0xb1, 0xff, 0xd1, 0x57, 0xd3, 0x90, 0x93, 0xfc, + 0xe0, 0x94, 0x32, 0x90, 0x93, 0xfb, 0xe0, 0x94, 0x00, 0x40, 0xc4, + 0x90, 0x01, 0xc6, 0xe0, 0x30, 0xe3, 0xbd, 0x90, 0x01, 0xc7, 0x74, + 0xfe, 0xf0, 0x22, 0x7e, 0x00, 0x7f, 0xac, 0x7d, 0x00, 0x7b, 0x01, + 0x7a, 0x85, 0x79, 0xc1, 0x12, 0x06, 0xde, 0xb1, 0xec, 0x12, 0x06, + 0xde, 0x90, 0x85, 0xc4, 0x74, 0x02, 0xf0, 0x90, 0x85, 0xcb, 0x14, + 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x90, 0x85, 0xd1, 0xe4, + 0xf0, 0xa3, 0x74, 0x02, 0xb1, 0xdc, 0x12, 0xce, 0x89, 0xe4, 0xfd, + 0xff, 0x12, 0x57, 0x82, 0x7d, 0x0c, 0x7f, 0x02, 0x12, 0x57, 0x82, + 0x7d, 0x0c, 0x7f, 0x01, 0x12, 0x57, 0x82, 0x90, 0x84, 0xc5, 0xe0, + 0xff, 0xb4, 0x01, 0x08, 0x90, 0x85, 0xd0, 0x74, 0xdd, 0xf0, 0x80, + 0x0f, 0xef, 0x90, 0x85, 0xd0, 0xb4, 0x03, 0x05, 0x74, 0xd4, 0xf0, + 0x80, 0x03, 0x74, 0x40, 0xf0, 0x7f, 0x2c, 0x12, 0x7b, 0x51, 0xef, + 0x54, 0x0f, 0xff, 0xbf, 0x05, 0x08, 0x90, 0x85, 0xfb, 0x74, 0x02, + 0xf0, 0x80, 0x05, 0xe4, 0x90, 0x85, 0xfb, 0xf0, 0x90, 0x86, 0x6d, + 0x74, 0x02, 0xf0, 0xa3, 0x74, 0x0f, 0xf0, 0xa3, 0xe0, 0x54, 0x01, + 0x44, 0x28, 0xf0, 0xa3, 0x74, 0x07, 0xb1, 0xdc, 0xe4, 0x90, 0x85, + 0xd7, 0xf0, 0xa3, 0xf0, 0x7f, 0x01, 0x12, 0x69, 0x33, 0x90, 0x05, + 0x58, 0x74, 0x02, 0xf0, 0x90, 0x06, 0x04, 0xe0, 0x54, 0x7f, 0xf0, + 0x90, 0x06, 0x0a, 0xe0, 0x54, 0xf8, 0xf0, 0x90, 0x05, 0x22, 0xe4, + 0xf0, 0x90, 0x86, 0x71, 0xf0, 0x22, 0xf0, 0x90, 0x85, 0xfb, 0xe0, + 0x24, 0x04, 0x90, 0x85, 0xdd, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x22, + 0x7e, 0x00, 0x7f, 0x04, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x92, 0x79, + 0x04, 0x22, 0xe4, 0xfd, 0xff, 0x02, 0x6e, 0x5f, 0xe4, 0x75, 0xf0, + 0x01, 0x02, 0x07, 0x0a, 0x90, 0x95, 0x0b, 0xef, 0xf0, 0xe4, 0xa3, + 0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x09, 0xe0, 0x7f, 0x00, 0x30, 0xe7, + 0x02, 0x7f, 0x01, 0x90, 0x95, 0x0b, 0xe0, 0x6f, 0x60, 0x34, 0xc3, + 0x90, 0x95, 0x0d, 0xe0, 0x94, 0x88, 0x90, 0x95, 0x0c, 0xe0, 0x94, + 0x13, 0x40, 0x08, 0x90, 0x01, 0xc0, 0xe0, 0x44, 0x10, 0xf0, 0x22, + 0x90, 0x95, 0x0c, 0xb1, 0xff, 0xd1, 0x57, 0xd3, 0x90, 0x95, 0x0d, + 0xe0, 0x94, 0x32, 0x90, 0x95, 0x0c, 0xe0, 0x94, 0x00, 0x40, 0xc1, + 0x90, 0x01, 0xc6, 0xe0, 0x30, 0xe0, 0xba, 0x22, 0x7f, 0x14, 0x7e, + 0x00, 0x02, 0x7c, 0x9f, 0x12, 0xcd, 0x72, 0x7f, 0x08, 0x12, 0x7b, + 0x51, 0xef, 0x54, 0xef, 0xfd, 0x7f, 0x08, 0x12, 0x7b, 0x3e, 0xe4, + 0xff, 0xd1, 0x06, 0x7d, 0x35, 0x7f, 0x27, 0x12, 0x7b, 0x3e, 0x90, + 0x85, 0xc2, 0xe0, 0x54, 0xef, 0xf0, 0x22, 0xd3, 0x10, 0xaf, 0x01, + 0xc3, 0xc0, 0xd0, 0xd1, 0x92, 0xd1, 0x5e, 0xd0, 0xd0, 0x92, 0xaf, + 0x22, 0x90, 0x85, 0xc2, 0xe0, 0x44, 0x10, 0xf0, 0x90, 0x85, 0xd0, + 0xe0, 0xfd, 0x7f, 0x93, 0x12, 0x7b, 0x3e, 0x90, 0x85, 0xc6, 0xe0, + 0x60, 0x12, 0x90, 0x01, 0x2f, 0xe0, 0x30, 0xe7, 0x05, 0x74, 0x10, + 0xf0, 0x80, 0x06, 0x90, 0x01, 0x2f, 0x74, 0x90, 0xf0, 0x7f, 0x08, + 0x12, 0x7b, 0x51, 0xef, 0x44, 0x10, 0xfd, 0x7f, 0x08, 0x12, 0x7b, + 0x3e, 0x7f, 0x01, 0xd1, 0x06, 0x7d, 0x34, 0x7f, 0x27, 0x12, 0x7b, + 0x3e, 0x7f, 0x90, 0xf1, 0x83, 0x7f, 0x90, 0x12, 0x7b, 0x3e, 0x7f, + 0x14, 0x7e, 0x00, 0x02, 0x7c, 0x9f, 0x90, 0x85, 0xc8, 0xe0, 0xff, + 0x60, 0x03, 0xb4, 0x08, 0x0d, 0xf1, 0x1d, 0xbf, 0x01, 0x08, 0xd1, + 0x82, 0x90, 0x01, 0xe5, 0xe0, 0x04, 0xf0, 0x22, 0x90, 0x85, 0xc1, + 0xe0, 0x30, 0xe0, 0x19, 0x90, 0x85, 0xbc, 0xe0, 0xff, 0x30, 0xe0, + 0x0f, 0xc3, 0x13, 0x30, 0xe0, 0x08, 0x12, 0xcd, 0xb3, 0xbf, 0x01, + 0x06, 0x80, 0x02, 0x80, 0x00, 0xd1, 0xe4, 0x22, 0x90, 0x92, 0x04, + 0xe0, 0xc3, 0x13, 0x20, 0xe0, 0x35, 0x90, 0x02, 0x87, 0xe0, 0x60, + 0x02, 0x80, 0x08, 0x90, 0x01, 0x00, 0xe0, 0x64, 0x3f, 0x60, 0x05, + 0x75, 0x62, 0x01, 0x80, 0x22, 0x90, 0x02, 0x96, 0xe0, 0x60, 0x05, + 0x75, 0x62, 0x10, 0x80, 0x17, 0x90, 0x02, 0x86, 0xe0, 0x20, 0xe1, + 0x02, 0x80, 0x07, 0x90, 0x02, 0x86, 0xe0, 0x30, 0xe3, 0x05, 0x75, + 0x62, 0x04, 0x80, 0x02, 0x80, 0x16, 0x90, 0x01, 0xb9, 0x74, 0x08, + 0xf0, 0x90, 0x01, 0xb8, 0xe5, 0x62, 0xf0, 0x7f, 0x00, 0x22, 0x7f, + 0xf9, 0x7e, 0x00, 0x02, 0x64, 0x37, 0x90, 0x01, 0xb8, 0xe4, 0xf0, + 0x7f, 0x01, 0x22, 0x12, 0x7b, 0x3e, 0x90, 0x01, 0x01, 0xe0, 0x22, + 0x12, 0x7b, 0x51, 0xef, 0x44, 0x01, 0xfd, 0x22, 0xd3, 0x10, 0xaf, + 0x01, 0xc3, 0xc0, 0xd0, 0x7f, 0x02, 0xf1, 0x83, 0x7f, 0x02, 0xf1, + 0x7b, 0x44, 0x02, 0xf0, 0x90, 0x01, 0x00, 0x74, 0xff, 0xf0, 0x90, + 0x06, 0xb7, 0x74, 0x09, 0xf0, 0x90, 0x06, 0xb4, 0x74, 0x86, 0xf0, + 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0xf1, 0x8b, 0x12, 0xca, 0xa8, 0x74, + 0x01, 0xf0, 0x22, 0xf1, 0xb4, 0x90, 0x05, 0x27, 0xe0, 0x54, 0xbf, + 0xf0, 0xe4, 0x90, 0x85, 0xbf, 0xf0, 0x22, 0xf1, 0xd0, 0x80, 0xef, + 0xe4, 0xfd, 0xff, 0x12, 0x98, 0xe3, 0x12, 0xca, 0xc2, 0x90, 0x85, + 0xbf, 0x74, 0x01, 0xf0, 0x22, 0x12, 0xca, 0xa2, 0x80, 0xda, 0x75, + 0x48, 0x12, 0xe4, 0xf5, 0x49, 0x75, 0x4a, 0x07, 0x75, 0x4b, 0x32, + 0xf5, 0x50, 0x90, 0x01, 0x30, 0xe5, 0x48, 0xf0, 0xa3, 0xe5, 0x49, + 0xf0, 0xa3, 0xe5, 0x4a, 0xf0, 0xa3, 0xe5, 0x4b, 0xf0, 0x90, 0x01, + 0x20, 0xe5, 0x50, 0xf0, 0x22, 0x75, 0x52, 0x06, 0x75, 0x53, 0x01, + 0x75, 0x54, 0x03, 0x75, 0x55, 0x62, 0x90, 0x01, 0x38, 0xe5, 0x52, + 0xf0, 0xa3, 0xe5, 0x53, 0xf0, 0xa3, 0xe5, 0x54, 0xf0, 0xa3, 0xe5, + 0x55, 0xf0, 0x22, 0x90, 0x01, 0xe4, 0x74, 0x04, 0xf0, 0xa3, 0xe4, + 0xf0, 0x22, 0x7d, 0x02, 0x90, 0x01, 0xc4, 0x74, 0x35, 0xf0, 0x74, + 0xc0, 0xa3, 0xf0, 0x90, 0x92, 0x08, 0xe0, 0xff, 0xed, 0xc3, 0x9f, + 0x50, 0x18, 0xed, 0x25, 0xe0, 0x24, 0x81, 0xf8, 0xe6, 0x30, 0xe4, + 0x0b, 0x90, 0x01, 0xb8, 0x74, 0x08, 0xf0, 0xa3, 0xf0, 0x7f, 0x00, + 0x22, 0x0d, 0x80, 0xde, 0x7f, 0x01, 0x22, 0xe4, 0x90, 0x94, 0x29, + 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0x90, 0x94, 0x29, 0xe0, 0x64, 0x01, + 0xf0, 0x90, 0x92, 0xc6, 0xe0, 0x70, 0x18, 0x90, 0x92, 0xc3, 0xe0, + 0x70, 0x12, 0xa3, 0xe0, 0x70, 0x0e, 0x90, 0x94, 0x29, 0xe0, 0x24, + 0x66, 0x90, 0x01, 0xc4, 0xf0, 0x74, 0xc0, 0xa3, 0xf0, 0x12, 0x7c, + 0x66, 0xbf, 0x01, 0x03, 0x12, 0x5b, 0x25, 0x90, 0x85, 0xc5, 0xe0, + 0x60, 0x0e, 0x90, 0x85, 0xc8, 0xe0, 0xff, 0x90, 0x85, 0xc7, 0xe0, + 0x6f, 0x60, 0x02, 0x31, 0x7b, 0xc2, 0xaf, 0x11, 0x35, 0xbf, 0x01, + 0x03, 0x12, 0xbe, 0xfc, 0xd2, 0xaf, 0x11, 0xc7, 0x12, 0xa7, 0xec, + 0x12, 0x84, 0x4d, 0x80, 0xa8, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, + 0xd0, 0x90, 0x92, 0xc3, 0xe0, 0x60, 0x25, 0x7f, 0x54, 0x7e, 0x09, + 0x12, 0x70, 0x61, 0x31, 0x6f, 0xef, 0x44, 0xfe, 0xff, 0xee, 0x44, + 0x03, 0xfe, 0xed, 0x44, 0x04, 0xfd, 0xec, 0x31, 0x6f, 0x90, 0x91, + 0x66, 0x12, 0x04, 0xeb, 0x7f, 0x54, 0x7e, 0x09, 0x12, 0x71, 0x18, + 0x90, 0x92, 0xbe, 0xe0, 0x70, 0x24, 0x90, 0x07, 0xcc, 0xe0, 0x30, + 0xe0, 0x1d, 0xe4, 0xf0, 0x90, 0x94, 0x30, 0x74, 0x22, 0xf0, 0x90, + 0x94, 0x3e, 0x74, 0x01, 0xf0, 0x90, 0x94, 0x32, 0x74, 0x03, 0xf0, + 0x7b, 0x01, 0x7a, 0x94, 0x79, 0x30, 0x12, 0x88, 0x13, 0x90, 0x92, + 0xc6, 0xe0, 0xff, 0x70, 0x0a, 0x90, 0x92, 0xc3, 0xe0, 0x70, 0x04, + 0xa3, 0xe0, 0x60, 0x15, 0x90, 0x00, 0x1f, 0xe0, 0x54, 0xf0, 0xf0, + 0x90, 0x01, 0xc5, 0x74, 0xea, 0xf0, 0xa3, 0x74, 0xef, 0xf0, 0xa3, + 0x74, 0xfd, 0xf0, 0xef, 0x60, 0x06, 0x90, 0x01, 0xc4, 0x74, 0x07, + 0xf0, 0x90, 0x92, 0xc3, 0xe0, 0x60, 0x06, 0x90, 0x01, 0xc4, 0x74, + 0x01, 0xf0, 0x90, 0x92, 0xc4, 0xe0, 0x60, 0x06, 0x90, 0x01, 0xc4, + 0x74, 0x02, 0xf0, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x90, 0x94, 0x2c, + 0x12, 0x04, 0xeb, 0x90, 0x94, 0x2c, 0x02, 0x87, 0x2d, 0x90, 0x85, + 0xbc, 0xe0, 0x90, 0x85, 0xc7, 0x30, 0xe0, 0x05, 0xe0, 0xff, 0x02, + 0xa7, 0x3e, 0x02, 0xa7, 0xcc, 0x91, 0x67, 0x70, 0x15, 0x90, 0x85, + 0xc5, 0xe0, 0x60, 0x0f, 0x91, 0x80, 0xf0, 0x90, 0x85, 0xc1, 0xe0, + 0x91, 0xae, 0x54, 0x07, 0x70, 0x02, 0x31, 0x7b, 0x22, 0x90, 0x85, + 0xc5, 0xe0, 0x60, 0x10, 0x90, 0x06, 0x92, 0xe0, 0x30, 0xe1, 0x05, + 0x12, 0x6b, 0x98, 0x80, 0x04, 0xd1, 0xa5, 0x31, 0x7b, 0x90, 0x92, + 0x0c, 0xe0, 0xb4, 0x01, 0x03, 0x12, 0x94, 0x17, 0x22, 0x90, 0x85, + 0xc1, 0x12, 0xa6, 0x85, 0x30, 0xe0, 0x19, 0xef, 0x54, 0xbf, 0x51, + 0xcb, 0x30, 0xe0, 0x06, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x09, 0xe0, + 0x54, 0xfe, 0xf0, 0x51, 0xd4, 0x74, 0x04, 0xf0, 0x31, 0x7b, 0x22, + 0x90, 0x85, 0xc1, 0xe0, 0xff, 0x12, 0xa3, 0x01, 0x30, 0xe0, 0x1e, + 0xef, 0x54, 0x7f, 0x51, 0xcb, 0x30, 0xe1, 0x06, 0xe0, 0x44, 0x02, + 0xf0, 0x80, 0x08, 0xe0, 0x54, 0xfd, 0xf0, 0x51, 0xd4, 0x04, 0xf0, + 0x90, 0x85, 0xc5, 0xe0, 0x60, 0x02, 0x31, 0x7b, 0x90, 0x04, 0xe0, + 0xe0, 0x30, 0xe1, 0x05, 0x91, 0xd9, 0x12, 0x97, 0x70, 0x22, 0xc0, + 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, + 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, + 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x01, 0xc4, 0x74, 0x21, + 0xf0, 0x74, 0xc2, 0xa3, 0xf0, 0x12, 0x75, 0x28, 0xe5, 0x56, 0x30, + 0xe0, 0x02, 0xf1, 0x8b, 0xe5, 0x56, 0x30, 0xe1, 0x02, 0x51, 0xde, + 0xe5, 0x56, 0x30, 0xe2, 0x02, 0x31, 0xa7, 0xe5, 0x56, 0x30, 0xe5, + 0x03, 0x12, 0x8f, 0x8b, 0xe5, 0x57, 0x30, 0xe0, 0x02, 0xb1, 0x0f, + 0xe5, 0x58, 0x30, 0xe1, 0x02, 0xb1, 0x42, 0xe5, 0x58, 0x30, 0xe0, + 0x03, 0x12, 0xc8, 0xe5, 0xe5, 0x58, 0x30, 0xe4, 0x02, 0xd1, 0x9c, + 0xe5, 0x59, 0x30, 0xe1, 0x05, 0x7f, 0x04, 0x12, 0xb6, 0x62, 0xe5, + 0x59, 0x30, 0xe4, 0x03, 0x12, 0xaf, 0x00, 0xe5, 0x59, 0x30, 0xe5, + 0x02, 0x31, 0xc8, 0xe5, 0x59, 0x30, 0xe6, 0x02, 0x31, 0xeb, 0x74, + 0x21, 0x04, 0x90, 0x01, 0xc4, 0xf0, 0x74, 0xc2, 0xa3, 0xf0, 0xd0, + 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, + 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, + 0xf0, 0xd0, 0xe0, 0x32, 0xf0, 0x90, 0x04, 0xe0, 0xe0, 0x90, 0x85, + 0xc2, 0x22, 0x90, 0x01, 0xb9, 0x74, 0x01, 0xf0, 0x90, 0x01, 0xb8, + 0x22, 0x90, 0x85, 0xc5, 0xe0, 0x60, 0x02, 0x51, 0xec, 0x12, 0x95, + 0xdc, 0x02, 0x94, 0x17, 0x71, 0x4e, 0x13, 0x54, 0x1f, 0x30, 0xe0, + 0x0b, 0xef, 0xc4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xe0, 0x02, 0x91, + 0x79, 0x90, 0x85, 0xc1, 0x91, 0xb9, 0x30, 0xe0, 0x09, 0xef, 0x91, + 0xae, 0x54, 0x07, 0x70, 0x37, 0x80, 0x33, 0x91, 0xc0, 0x40, 0x2f, + 0x91, 0x67, 0x70, 0x2d, 0x12, 0xb7, 0xdc, 0x70, 0x05, 0x12, 0x70, + 0xdb, 0x80, 0x24, 0x12, 0x70, 0xdb, 0x90, 0x85, 0xcf, 0xe0, 0x04, + 0xf0, 0xe0, 0xd3, 0x94, 0x02, 0x40, 0x09, 0x71, 0x46, 0xe4, 0x90, + 0x85, 0xcf, 0xf0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xe4, 0x90, 0x85, + 0xce, 0xf0, 0x22, 0x31, 0x7b, 0x22, 0x90, 0x85, 0xc2, 0xe0, 0x54, + 0xfb, 0xf0, 0x22, 0x90, 0x85, 0xc2, 0xe0, 0xff, 0x13, 0x13, 0x22, + 0x91, 0x67, 0x60, 0x02, 0x81, 0x4b, 0x90, 0x85, 0xc5, 0xe0, 0x70, + 0x02, 0x81, 0x4b, 0x90, 0x05, 0x63, 0xe0, 0x90, 0x92, 0xce, 0xf0, + 0x90, 0x05, 0x62, 0xe0, 0x90, 0x92, 0xcf, 0xf0, 0x90, 0x05, 0x61, + 0xe0, 0x90, 0x92, 0xd0, 0xf0, 0x90, 0x05, 0x60, 0xe0, 0x90, 0x92, + 0xd1, 0xf0, 0x91, 0x80, 0xf0, 0x90, 0x85, 0xc9, 0xe0, 0x54, 0xec, + 0xf0, 0x91, 0x70, 0x24, 0xfd, 0x50, 0x02, 0x80, 0x0e, 0x90, 0x85, + 0xbc, 0xe0, 0x30, 0xe0, 0x04, 0xd1, 0x2b, 0x80, 0x03, 0x12, 0xb7, + 0x8c, 0x91, 0x70, 0x64, 0x01, 0x70, 0x30, 0x90, 0x06, 0xab, 0xe0, + 0x90, 0x85, 0xcc, 0xf0, 0x90, 0x06, 0xa9, 0xe0, 0x30, 0xe5, 0x05, + 0xa3, 0xe0, 0xff, 0x80, 0x05, 0x90, 0x85, 0xcb, 0xe0, 0xff, 0x90, + 0x85, 0xcb, 0xef, 0xf0, 0xa3, 0xe0, 0xff, 0x70, 0x08, 0x90, 0x85, + 0xcb, 0xe0, 0xfe, 0xff, 0x80, 0x00, 0x90, 0x85, 0xcc, 0xef, 0xf0, + 0x12, 0xce, 0xa1, 0xe4, 0x90, 0x85, 0xce, 0xf0, 0xd1, 0xad, 0x71, + 0x4e, 0x13, 0x54, 0x1f, 0x30, 0xe0, 0x5d, 0xef, 0xc4, 0x13, 0x13, + 0x54, 0x03, 0x20, 0xe0, 0x24, 0x91, 0x5f, 0x6f, 0x70, 0x4f, 0xef, + 0x60, 0x4c, 0x90, 0x85, 0xc2, 0xe0, 0x44, 0x40, 0xf0, 0xb1, 0xe9, + 0x12, 0xaf, 0x67, 0x12, 0x7b, 0xfd, 0x12, 0xb7, 0x36, 0x91, 0x79, + 0x90, 0x85, 0xcc, 0xe0, 0x14, 0xf0, 0x80, 0x30, 0x90, 0x85, 0xc3, + 0xe0, 0xc4, 0x54, 0x0f, 0x64, 0x01, 0x70, 0x25, 0x91, 0x5f, 0xfe, + 0x6f, 0x60, 0x1f, 0x90, 0x05, 0x73, 0xe0, 0xff, 0xee, 0x6f, 0x60, + 0x16, 0x71, 0x4e, 0x54, 0x3f, 0x30, 0xe0, 0x0f, 0xef, 0x54, 0xbf, + 0x12, 0xaf, 0x67, 0x12, 0x7b, 0xbf, 0x12, 0xaf, 0x98, 0x12, 0xaf, + 0x7a, 0x91, 0x57, 0x90, 0x85, 0xbc, 0xe0, 0xc3, 0x13, 0x20, 0xe0, + 0x02, 0x91, 0x57, 0x22, 0x90, 0x85, 0xc2, 0xe0, 0x44, 0x04, 0xf0, + 0x22, 0x90, 0x85, 0xcb, 0xe0, 0xff, 0xa3, 0xe0, 0x22, 0xe4, 0xff, + 0x12, 0x77, 0x39, 0xef, 0x64, 0x01, 0x22, 0x90, 0x85, 0xc3, 0xe0, + 0xff, 0xc4, 0x54, 0x0f, 0x22, 0x7d, 0x02, 0x7f, 0x02, 0x02, 0x7c, + 0x41, 0x90, 0x01, 0x57, 0xe4, 0xf0, 0x90, 0x01, 0x3c, 0x74, 0x02, + 0x22, 0x90, 0x01, 0x57, 0xe0, 0x60, 0x1c, 0x91, 0x83, 0xf0, 0x90, + 0x85, 0xc1, 0x91, 0xb9, 0x30, 0xe0, 0x03, 0xef, 0x80, 0x0f, 0x91, + 0xc0, 0x40, 0x0a, 0xe4, 0xff, 0x12, 0x77, 0x39, 0xbf, 0x01, 0x02, + 0x71, 0x46, 0x22, 0x54, 0xfb, 0xf0, 0x90, 0x85, 0xc9, 0xe0, 0x54, + 0xfd, 0xf0, 0x22, 0xe0, 0xff, 0x13, 0x13, 0x54, 0x3f, 0x22, 0x90, + 0x85, 0xce, 0xe0, 0x04, 0xf0, 0x90, 0x85, 0xc9, 0xe0, 0x54, 0xef, + 0xf0, 0x90, 0x86, 0x6d, 0xe0, 0xff, 0x90, 0x85, 0xce, 0xe0, 0xd3, + 0x9f, 0x22, 0x90, 0x92, 0x09, 0xe0, 0x30, 0xe0, 0x1f, 0xa3, 0xe0, + 0xc3, 0x13, 0x54, 0x07, 0xb1, 0x00, 0xe0, 0xfe, 0x30, 0xe0, 0x12, + 0xef, 0xb1, 0x01, 0xee, 0x54, 0xfe, 0x12, 0x97, 0xed, 0x12, 0x94, + 0x0e, 0xfd, 0x7f, 0x02, 0x12, 0x92, 0xf6, 0x22, 0xff, 0x75, 0xf0, + 0x0e, 0xa4, 0x24, 0x15, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, + 0x22, 0x12, 0xcd, 0x2d, 0x90, 0x94, 0x6f, 0xef, 0xf0, 0x30, 0xe0, + 0x05, 0x7d, 0x01, 0xe4, 0x80, 0x02, 0xe4, 0xfd, 0xff, 0x12, 0x57, + 0x82, 0x90, 0x94, 0x6f, 0xe0, 0x30, 0xe6, 0x11, 0x90, 0x01, 0x2f, + 0xe0, 0x30, 0xe7, 0x04, 0xe4, 0xf0, 0x80, 0x06, 0x90, 0x01, 0x2f, + 0x74, 0x80, 0xf0, 0xf1, 0x7d, 0x02, 0x51, 0x7d, 0x90, 0x85, 0xbc, + 0xe0, 0xff, 0x30, 0xe0, 0x3f, 0x90, 0x85, 0xc0, 0xe0, 0x7e, 0x00, + 0xb4, 0x02, 0x02, 0x7e, 0x01, 0x90, 0x85, 0xbf, 0xe0, 0x7d, 0x00, + 0xb4, 0x04, 0x02, 0x7d, 0x01, 0xed, 0x4e, 0x70, 0x25, 0xef, 0xc3, + 0x13, 0x30, 0xe0, 0x03, 0x02, 0xae, 0xae, 0x91, 0x8b, 0x90, 0x85, + 0xc0, 0xe0, 0xb4, 0x0c, 0x06, 0xe4, 0xfd, 0x7f, 0x08, 0x80, 0x0a, + 0x90, 0x85, 0xc0, 0xe0, 0xb4, 0x04, 0x06, 0xe4, 0xfd, 0xff, 0x12, + 0xa3, 0x0c, 0x22, 0xe4, 0x90, 0x94, 0x6f, 0xf0, 0x90, 0x85, 0xc5, + 0xe0, 0x60, 0x53, 0x91, 0x67, 0x70, 0x4f, 0xb1, 0xe9, 0xf0, 0xf1, + 0xc0, 0x90, 0x94, 0x6f, 0x74, 0x01, 0xf0, 0xe4, 0x90, 0x85, 0xcc, + 0xf0, 0x90, 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x16, 0x90, 0x85, 0xc0, + 0xe0, 0xb4, 0x02, 0x05, 0xe4, 0x90, 0x94, 0x6f, 0xf0, 0x12, 0xa6, + 0x8d, 0xef, 0x70, 0x04, 0x90, 0x94, 0x6f, 0xf0, 0x90, 0x94, 0x6f, + 0xe0, 0x60, 0x1c, 0x90, 0x85, 0xc8, 0xe0, 0x20, 0xe2, 0x03, 0x12, + 0xa3, 0x08, 0x90, 0x85, 0xc9, 0xe0, 0x44, 0x10, 0x12, 0xaf, 0x91, + 0x90, 0x85, 0xcd, 0xe0, 0x90, 0x91, 0x6f, 0xd1, 0x20, 0x22, 0x90, + 0x85, 0xcb, 0xe0, 0x90, 0x05, 0x73, 0x22, 0x90, 0x92, 0x0a, 0xe0, + 0xc3, 0x13, 0x54, 0x07, 0xff, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0x17, + 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0xfe, 0xef, 0x75, + 0xf0, 0x0e, 0xa4, 0x24, 0x16, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, + 0x83, 0xe0, 0x90, 0x91, 0x6f, 0xf0, 0x90, 0x91, 0x6e, 0xee, 0xf0, + 0xe4, 0xfb, 0xfd, 0x7f, 0x54, 0x7e, 0x01, 0x02, 0x61, 0x41, 0x90, + 0x06, 0xa9, 0xe0, 0x90, 0x94, 0x51, 0xf0, 0xe0, 0xfd, 0x54, 0xc0, + 0x70, 0x05, 0x12, 0xb7, 0x69, 0x80, 0x5a, 0xed, 0x30, 0xe6, 0x41, + 0x90, 0x85, 0xc5, 0xe0, 0x64, 0x02, 0x70, 0x28, 0x90, 0x85, 0xc1, + 0xe0, 0xff, 0xc3, 0x13, 0x20, 0xe0, 0x09, 0x90, 0x85, 0xc9, 0xe0, + 0x44, 0x01, 0xf0, 0x80, 0x1c, 0x12, 0xb7, 0xdc, 0x64, 0x01, 0x70, + 0x22, 0x90, 0x85, 0xc9, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x01, 0x12, + 0x62, 0x8e, 0x80, 0x14, 0x12, 0xb7, 0xd5, 0x64, 0x02, 0x60, 0x05, + 0x12, 0x77, 0x61, 0x80, 0x08, 0x12, 0x79, 0x41, 0x80, 0x03, 0x12, + 0xb7, 0x69, 0x90, 0x94, 0x51, 0xe0, 0x90, 0x85, 0xc9, 0x30, 0xe7, + 0x07, 0x12, 0xb7, 0xe8, 0xd1, 0x20, 0x80, 0x06, 0xe0, 0x54, 0xfd, + 0xf0, 0x22, 0x22, 0x90, 0x85, 0xc1, 0xe0, 0x44, 0x04, 0xf0, 0x22, + 0x90, 0x85, 0xc1, 0xe0, 0x54, 0xf7, 0xf0, 0x22, 0x90, 0x85, 0xd1, + 0xa3, 0xe0, 0x90, 0x05, 0x58, 0xf0, 0x22, 0xac, 0x07, 0x90, 0x92, + 0xc9, 0xe0, 0xf9, 0x30, 0xe0, 0x02, 0xe1, 0x6b, 0x90, 0x85, 0xc1, + 0xe0, 0x30, 0xe0, 0x16, 0x90, 0x85, 0xfb, 0xe0, 0x24, 0x04, 0x90, + 0x85, 0xda, 0xf0, 0x90, 0x85, 0xfb, 0xe0, 0x24, 0x03, 0x90, 0x85, + 0xd9, 0xf0, 0x80, 0x0d, 0x90, 0x85, 0xda, 0x74, 0x02, 0xf0, 0x90, + 0x85, 0xd9, 0x14, 0xf0, 0x0b, 0x0b, 0x90, 0x85, 0xd9, 0xe0, 0xfa, + 0x90, 0x85, 0xd8, 0xe0, 0xd3, 0x9a, 0x50, 0x0e, 0x90, 0x85, 0xcd, + 0xeb, 0xf0, 0x90, 0x85, 0xda, 0xe0, 0xc3, 0x9d, 0x2c, 0x80, 0x11, + 0xc3, 0xed, 0x9a, 0x2b, 0x90, 0x85, 0xcd, 0xf0, 0x90, 0x85, 0xd9, + 0xe0, 0xff, 0xa3, 0xe0, 0xc3, 0x9f, 0x90, 0x85, 0xdd, 0xf0, 0x90, + 0x85, 0xda, 0xe0, 0xff, 0x24, 0x0a, 0xfd, 0xe4, 0x33, 0xfc, 0x90, + 0x85, 0xdd, 0xf1, 0x73, 0x98, 0x40, 0x04, 0xef, 0x24, 0x0a, 0xf0, + 0x90, 0x85, 0xdd, 0xe0, 0xff, 0x24, 0x23, 0xfd, 0xe4, 0x33, 0xfc, + 0x90, 0x85, 0xcd, 0xf1, 0x73, 0x98, 0x40, 0x04, 0xef, 0x24, 0x23, + 0xf0, 0x90, 0x85, 0xdd, 0xe0, 0xff, 0x7e, 0x00, 0x90, 0x85, 0xd1, + 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x05, 0x58, 0xe0, 0x6f, 0x70, + 0x01, 0xe4, 0x60, 0x02, 0xd1, 0xad, 0xe9, 0x54, 0xfd, 0x80, 0x03, + 0xe9, 0x44, 0x02, 0x90, 0x92, 0xc9, 0xf0, 0x22, 0xe0, 0xd3, 0x9d, + 0xec, 0x64, 0x80, 0xf8, 0x74, 0x80, 0x22, 0x90, 0x85, 0xd7, 0xe0, + 0xff, 0xa3, 0xe0, 0xfd, 0x90, 0x85, 0xde, 0xe0, 0xfb, 0x22, 0x90, + 0x92, 0x0a, 0xe0, 0x30, 0xe0, 0x0b, 0x90, 0x92, 0xb4, 0xe0, 0x60, + 0x05, 0x7f, 0x07, 0x12, 0xaa, 0xf7, 0x22, 0x90, 0x85, 0xbc, 0xe0, + 0xff, 0x30, 0xe0, 0x05, 0x12, 0xa7, 0x6c, 0x60, 0x14, 0x90, 0x85, + 0xc5, 0xe0, 0x70, 0x04, 0xef, 0x30, 0xe0, 0x0a, 0x90, 0x85, 0xc8, + 0xe0, 0x64, 0x02, 0x60, 0x02, 0x71, 0x56, 0x22, 0x90, 0x05, 0x63, + 0xe0, 0x90, 0x92, 0xd2, 0xf0, 0x90, 0x05, 0x62, 0xe0, 0x90, 0x92, + 0xd3, 0xf0, 0x90, 0x05, 0x61, 0xe0, 0x90, 0x92, 0xd4, 0xf0, 0x90, + 0x05, 0x60, 0xe0, 0x90, 0x92, 0xd5, 0xf0, 0x90, 0x92, 0xc9, 0xe0, + 0x44, 0x01, 0xf0, 0x22, 0x90, 0x84, 0xa1, 0x74, 0x02, 0xf0, 0xa3, + 0x74, 0x9a, 0xf0, 0xa3, 0x74, 0x26, 0xf0, 0x90, 0x84, 0xa7, 0x74, + 0x80, 0xf0, 0xa3, 0x74, 0x03, 0xf0, 0x22, 0xe4, 0xfb, 0xfa, 0xfd, + 0x7f, 0x01, 0x12, 0x86, 0x4e, 0x90, 0x94, 0x3f, 0xef, 0xf0, 0x60, + 0xf0, 0x90, 0x84, 0xc1, 0xe0, 0xff, 0x70, 0x04, 0xa3, 0xe0, 0x60, + 0xe5, 0xc2, 0xaf, 0xef, 0x30, 0xe0, 0x0f, 0x90, 0x84, 0xc1, 0xe0, + 0x54, 0xfe, 0xf0, 0xe4, 0xff, 0x12, 0x2d, 0xbd, 0x12, 0x9b, 0x57, + 0x11, 0x4b, 0x30, 0xe1, 0x06, 0x54, 0xfd, 0xf0, 0x12, 0x60, 0x5d, + 0x11, 0x4b, 0x30, 0xe2, 0x06, 0x54, 0xfb, 0xf0, 0x12, 0x6a, 0x6d, + 0xd2, 0xaf, 0x80, 0xc6, 0xd2, 0xaf, 0xc2, 0xaf, 0x90, 0x84, 0xc1, + 0xe0, 0xff, 0x22, 0x32, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, + 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, + 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, + 0x90, 0x01, 0xc4, 0x74, 0x56, 0xf0, 0x74, 0xc8, 0xa3, 0xf0, 0x12, + 0x6c, 0xbc, 0x74, 0x56, 0x04, 0x90, 0x01, 0xc4, 0xf0, 0x74, 0xc8, + 0xa3, 0xf0, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, + 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, + 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0x32, 0xc0, 0xe0, 0xc0, + 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x05, 0xc0, + 0x07, 0x7d, 0xa7, 0x90, 0x01, 0xc4, 0xed, 0xf0, 0x74, 0xc8, 0xff, + 0xa3, 0xf0, 0xed, 0x04, 0x90, 0x01, 0xc4, 0xf0, 0xa3, 0xef, 0xf0, + 0xd0, 0x07, 0xd0, 0x05, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, + 0xe0, 0x32, 0x90, 0x85, 0xbc, 0xe0, 0x30, 0xe0, 0x05, 0xe4, 0xa3, + 0xf0, 0xa3, 0xf0, 0x22, 0x90, 0x85, 0xbc, 0xe0, 0xff, 0x30, 0xe0, + 0x3f, 0x90, 0x85, 0xc0, 0xe0, 0x7e, 0x00, 0xb4, 0x02, 0x02, 0x7e, + 0x01, 0x90, 0x85, 0xbf, 0xe0, 0x7d, 0x00, 0xb4, 0x04, 0x02, 0x7d, + 0x01, 0xed, 0x4e, 0x70, 0x25, 0xef, 0xc3, 0x13, 0x30, 0xe0, 0x03, + 0x02, 0xae, 0xae, 0x12, 0xa7, 0x56, 0x90, 0x85, 0xc0, 0xe0, 0xb4, + 0x08, 0x06, 0xe4, 0xfd, 0x7f, 0x0c, 0x80, 0x09, 0x90, 0x85, 0xc0, + 0xe0, 0x70, 0x06, 0xfd, 0x7f, 0x04, 0x12, 0xa3, 0x0c, 0x22, 0xd3, + 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x12, 0x96, 0xee, 0x7f, 0x02, + 0x12, 0x7b, 0x51, 0xef, 0x54, 0xfe, 0xfd, 0x7f, 0x02, 0x12, 0x7b, + 0x3e, 0x90, 0x01, 0x00, 0x74, 0x3f, 0xf0, 0xa3, 0xe0, 0x54, 0xfd, + 0xf0, 0x90, 0x05, 0x53, 0xe0, 0x44, 0x20, 0xf0, 0xd0, 0xd0, 0x92, + 0xaf, 0x22, 0x41, 0x77, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, + 0x90, 0x85, 0xbf, 0xe0, 0x90, 0x95, 0x1a, 0xf0, 0x6f, 0x70, 0x02, + 0x41, 0x6b, 0xef, 0x14, 0x60, 0x46, 0x14, 0x60, 0x72, 0x14, 0x70, + 0x02, 0x41, 0x16, 0x14, 0x70, 0x02, 0x41, 0x41, 0x24, 0x04, 0x60, + 0x02, 0x41, 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x04, 0x05, 0x12, + 0xbf, 0xcc, 0x41, 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x02, 0x05, + 0x12, 0xbf, 0xbd, 0x41, 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x03, + 0x05, 0x12, 0xbf, 0xe0, 0x41, 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0x64, + 0x01, 0x60, 0x02, 0x41, 0x6b, 0x12, 0xbf, 0xbf, 0x41, 0x6b, 0x90, + 0x95, 0x1a, 0xe0, 0xb4, 0x04, 0x05, 0x12, 0xbf, 0xd0, 0x41, 0x6b, + 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x02, 0x05, 0x12, 0xbf, 0xb4, 0x41, + 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x03, 0x04, 0x51, 0xa2, 0x41, + 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0x60, 0x02, 0x41, 0x6b, 0x51, 0x8f, + 0x41, 0x6b, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x04, 0x04, 0x51, 0x80, + 0x80, 0x75, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x01, 0x04, 0x51, 0x70, + 0x80, 0x6a, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x03, 0x04, 0x31, 0x5c, + 0x80, 0x5f, 0x90, 0x95, 0x1a, 0xe0, 0x70, 0x59, 0x51, 0x86, 0x80, + 0x55, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x04, 0x04, 0x51, 0xb2, 0x80, + 0x4a, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x01, 0x04, 0x51, 0x98, 0x80, + 0x3f, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x02, 0x04, 0x51, 0xd7, 0x80, + 0x34, 0x90, 0x95, 0x1a, 0xe0, 0x70, 0x2e, 0x51, 0x96, 0x80, 0x2a, + 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x03, 0x04, 0x51, 0xca, 0x80, 0x1f, + 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x01, 0x05, 0x12, 0x9f, 0xe4, 0x80, + 0x13, 0x90, 0x95, 0x1a, 0xe0, 0xb4, 0x02, 0x04, 0x51, 0xcf, 0x80, + 0x08, 0x90, 0x95, 0x1a, 0xe0, 0x70, 0x02, 0x51, 0x8a, 0xd0, 0xd0, + 0x92, 0xaf, 0x22, 0x7d, 0x20, 0x7f, 0xff, 0x12, 0x98, 0xe3, 0x31, + 0x2d, 0x90, 0x85, 0xbf, 0x74, 0x02, 0xf0, 0x22, 0x51, 0xc2, 0x7d, + 0x23, 0x80, 0xec, 0x51, 0x8f, 0x80, 0xe6, 0x51, 0x8f, 0x02, 0x9f, + 0xe4, 0x90, 0x85, 0xbf, 0x74, 0x01, 0xf0, 0x22, 0x51, 0x8f, 0x7d, + 0x21, 0x7f, 0xff, 0x51, 0xab, 0x74, 0x03, 0xf0, 0x22, 0x51, 0xa8, + 0x74, 0x01, 0xf0, 0x22, 0xe4, 0xfd, 0xff, 0x12, 0x98, 0xe3, 0x90, + 0x85, 0xbf, 0x22, 0x7d, 0x22, 0x7f, 0xff, 0x12, 0x98, 0xe3, 0x51, + 0xc2, 0x90, 0x85, 0xbf, 0x74, 0x03, 0xf0, 0x22, 0x90, 0x05, 0x27, + 0xe0, 0x44, 0x40, 0xf0, 0x22, 0x7d, 0x25, 0x02, 0x9f, 0xe6, 0x12, + 0xbf, 0x8b, 0x7d, 0x24, 0x02, 0x9f, 0xe6, 0x12, 0xbf, 0x8b, 0x90, + 0x85, 0xbf, 0x74, 0x03, 0xf0, 0x22, 0x12, 0x02, 0xf6, 0x90, 0x94, + 0x97, 0xf0, 0x22, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x90, 0x89, + 0x1b, 0x12, 0x87, 0x4e, 0x7b, 0xff, 0x7a, 0x82, 0x79, 0x00, 0x90, + 0x89, 0x1e, 0x12, 0x87, 0x4e, 0x7a, 0x82, 0x79, 0x3f, 0x90, 0x89, + 0x21, 0x12, 0x87, 0x4e, 0x7a, 0x82, 0x79, 0xe1, 0x90, 0x89, 0x27, + 0x12, 0x87, 0x4e, 0x7a, 0x82, 0x79, 0xf5, 0x90, 0x89, 0x2a, 0x12, + 0x87, 0x4e, 0x7a, 0x83, 0x79, 0x1d, 0x90, 0x89, 0x2d, 0x12, 0x87, + 0x4e, 0x7a, 0x83, 0x79, 0x31, 0x90, 0x89, 0x33, 0x12, 0x87, 0x4e, + 0x7a, 0x83, 0x79, 0x59, 0x90, 0x89, 0x36, 0x12, 0x87, 0x4e, 0x7a, + 0x83, 0x79, 0x81, 0x90, 0x89, 0x39, 0x12, 0x87, 0x4e, 0xe4, 0x90, + 0x94, 0xa8, 0xf0, 0x90, 0x94, 0x97, 0xf0, 0x90, 0x93, 0xfb, 0xf0, + 0x90, 0x93, 0xfb, 0xe0, 0xff, 0xc3, 0x94, 0x05, 0x50, 0x10, 0x74, + 0xb9, 0x2f, 0x12, 0x9e, 0x49, 0xe4, 0xf0, 0x90, 0x93, 0xfb, 0xe0, + 0x04, 0xf0, 0x80, 0xe6, 0x22, 0x90, 0x94, 0x46, 0xee, 0xf0, 0xa3, + 0xef, 0xf0, 0xa3, 0xed, 0xf0, 0xeb, 0x75, 0xf0, 0x06, 0xa4, 0xff, + 0x90, 0x89, 0x21, 0x12, 0x87, 0x45, 0xe9, 0x2f, 0xf9, 0xea, 0x35, + 0xf0, 0xfa, 0x90, 0x94, 0x4e, 0x12, 0x87, 0x4e, 0x90, 0x94, 0x48, + 0xe0, 0x12, 0x9f, 0x5f, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x94, 0x4b, + 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x94, 0x4e, + 0x12, 0x87, 0x45, 0x90, 0x94, 0x4d, 0xe0, 0xff, 0xf5, 0x82, 0x75, + 0x83, 0x00, 0x12, 0x03, 0x0f, 0xfd, 0x7c, 0x00, 0x90, 0x94, 0x48, + 0xe0, 0x75, 0xf0, 0x12, 0x90, 0x89, 0x44, 0x12, 0x05, 0x28, 0x75, + 0xf0, 0x02, 0xef, 0x12, 0x05, 0x28, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, + 0x90, 0x94, 0x4a, 0xe0, 0xfb, 0xef, 0xa8, 0x03, 0x08, 0x80, 0x05, + 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0x91, 0x56, 0xee, 0x8f, + 0xf0, 0x12, 0x07, 0x0a, 0x90, 0x94, 0x4d, 0xe0, 0x04, 0xf0, 0xe0, + 0xb4, 0x05, 0xad, 0x90, 0x94, 0x4e, 0x12, 0x87, 0x45, 0x12, 0x97, + 0xf6, 0xfd, 0x7c, 0x00, 0x90, 0x94, 0x4a, 0xe0, 0xff, 0x90, 0x94, + 0x46, 0xe0, 0xfe, 0xa3, 0xe0, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xce, + 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0x91, 0x56, 0xe0, 0xfc, 0xa3, + 0xe0, 0xfd, 0xd3, 0x9f, 0xec, 0x9e, 0x40, 0x08, 0xed, 0x9f, 0xff, + 0xec, 0x9e, 0xfe, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x00, 0x90, 0x94, + 0x4b, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x94, 0x4b, 0xe0, 0xfe, + 0xa3, 0xe0, 0xff, 0x90, 0x94, 0x48, 0xe0, 0x12, 0x9f, 0x5f, 0xee, + 0xf0, 0xa3, 0xef, 0xf0, 0x22, 0xff, 0x12, 0x03, 0x70, 0x90, 0x94, + 0x4b, 0x22, 0x12, 0x97, 0x5a, 0xe0, 0x20, 0xe0, 0x08, 0xc3, 0x13, + 0x30, 0xe0, 0x0a, 0x02, 0x97, 0xee, 0x12, 0x97, 0x5a, 0xe0, 0x44, + 0x04, 0xf0, 0x22, 0x90, 0x01, 0x94, 0xe0, 0x44, 0x01, 0xf0, 0x90, + 0x01, 0xc7, 0xe4, 0xf0, 0x22, 0x90, 0x01, 0x9a, 0xe0, 0x54, 0xc0, + 0x44, 0x0b, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x7c, 0x9f, 0x90, + 0x01, 0x98, 0xe0, 0x54, 0xc0, 0x7f, 0x00, 0xb4, 0x40, 0x02, 0x7f, + 0x01, 0x22, 0x90, 0x01, 0x98, 0xe4, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, + 0x11, 0xf0, 0xa3, 0xe4, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x7c, 0x9f, + 0x90, 0x01, 0x99, 0xe0, 0x54, 0x30, 0xff, 0x64, 0x10, 0x60, 0x04, + 0xef, 0xb4, 0x20, 0x03, 0x7f, 0x01, 0x22, 0x7f, 0x00, 0x22, 0x90, + 0x01, 0xcf, 0xe0, 0x90, 0x94, 0x51, 0xf0, 0xe0, 0xff, 0x30, 0xe0, + 0x07, 0x90, 0x01, 0xcf, 0xe0, 0x54, 0xfe, 0xf0, 0xef, 0x30, 0xe5, + 0x23, 0x90, 0x01, 0xcf, 0xe0, 0x54, 0xdf, 0xf0, 0x90, 0x01, 0x34, + 0x74, 0x20, 0xf0, 0xe4, 0xf5, 0xa8, 0xf5, 0xe8, 0x12, 0x75, 0xb6, + 0x90, 0x00, 0x03, 0xe0, 0x54, 0xfb, 0xfd, 0x7f, 0x03, 0x12, 0x7b, + 0x3e, 0x80, 0xfe, 0x22, 0xd3, 0x10, 0xaf, 0x01, 0xc3, 0xc0, 0xd0, + 0xe4, 0xfe, 0xfd, 0xef, 0xb4, 0x01, 0x0d, 0xeb, 0xb4, 0x02, 0x03, + 0x0d, 0x80, 0x06, 0xeb, 0xb4, 0x01, 0x02, 0x7d, 0x02, 0xaf, 0x06, + 0xef, 0xc4, 0x54, 0xf0, 0x4d, 0xff, 0xd0, 0xd0, 0x92, 0xaf, 0x22, + 0xe4, 0x90, 0x94, 0x71, 0xf0, 0xa3, 0xf0, 0x7f, 0x83, 0x12, 0x7b, + 0x51, 0x90, 0x94, 0x70, 0xef, 0xf0, 0x7f, 0x83, 0x12, 0x7b, 0x51, + 0xae, 0x07, 0x90, 0x94, 0x70, 0xe0, 0xff, 0xb5, 0x06, 0x01, 0x22, + 0xc3, 0x90, 0x94, 0x72, 0xe0, 0x94, 0x64, 0x90, 0x94, 0x71, 0xe0, + 0x94, 0x00, 0x40, 0x0d, 0x90, 0x01, 0xc0, 0xe0, 0x44, 0x40, 0xf0, + 0x90, 0x94, 0x70, 0xe0, 0xff, 0x22, 0x90, 0x94, 0x71, 0x12, 0xbd, + 0xff, 0x80, 0xc2, 0x90, 0x01, 0xc4, 0x74, 0x72, 0xf0, 0x74, 0xcd, + 0xa3, 0xf0, 0x7f, 0x90, 0x12, 0x7b, 0x51, 0xef, 0x20, 0xe0, 0xf7, + 0x74, 0x72, 0x04, 0x90, 0x01, 0xc4, 0xf0, 0x74, 0xcd, 0xa3, 0xf0, + 0x22, 0x7e, 0x00, 0x7f, 0x01, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x85, + 0x79, 0xbc, 0x12, 0x06, 0xde, 0x90, 0x85, 0xbc, 0xe0, 0x54, 0xfd, + 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x0c, + 0xf0, 0x22, 0x90, 0x85, 0xbf, 0xe0, 0x64, 0x02, 0x7f, 0x01, 0x60, + 0x02, 0x7f, 0x00, 0x22, 0x90, 0x95, 0x0e, 0x12, 0x87, 0x4e, 0x12, + 0x71, 0x54, 0x90, 0x85, 0xc5, 0xe0, 0xff, 0x12, 0x60, 0xd0, 0x90, + 0x85, 0xc5, 0xe0, 0x60, 0x19, 0x90, 0x95, 0x0e, 0x12, 0x87, 0x45, + 0x12, 0x8f, 0x73, 0x54, 0x0f, 0xff, 0x12, 0x8f, 0xf3, 0xfd, 0x12, + 0x6a, 0xb8, 0x12, 0xc7, 0x7d, 0x12, 0x51, 0x7d, 0x22, 0xd3, 0x10, + 0xaf, 0x01, 0xc3, 0xc0, 0xd0, 0x12, 0x7a, 0x29, 0xef, 0x64, 0x01, + 0x60, 0x05, 0x75, 0x10, 0x01, 0x80, 0x71, 0x90, 0x85, 0xc9, 0xe0, + 0xff, 0x54, 0x03, 0x60, 0x05, 0x75, 0x10, 0x02, 0x80, 0x63, 0x90, + 0x85, 0xc7, 0xe0, 0xfe, 0xe4, 0xc3, 0x9e, 0x50, 0x05, 0x75, 0x10, + 0x04, 0x80, 0x54, 0xef, 0x30, 0xe2, 0x05, 0x75, 0x10, 0x08, 0x80, + 0x4b, 0x90, 0x85, 0xc9, 0xe0, 0x30, 0xe4, 0x05, 0x75, 0x10, 0x10, + 0x80, 0x3f, 0x90, 0x85, 0xc2, 0xe0, 0x13, 0x13, 0x54, 0x3f, 0x20, + 0xe0, 0x05, 0x75, 0x10, 0x20, 0x80, 0x2f, 0x90, 0x86, 0x71, 0xe0, + 0x60, 0x05, 0x75, 0x10, 0x80, 0x80, 0x24, 0x90, 0x06, 0x62, 0xe0, + 0x30, 0xe1, 0x05, 0x75, 0x10, 0x11, 0x80, 0x18, 0x90, 0x06, 0x62, + 0xe0, 0x30, 0xe0, 0x0c, 0xe0, 0x54, 0xfc, 0xff, 0xbf, 0x80, 0x05, + 0x75, 0x10, 0x12, 0x80, 0x05, 0x12, 0xbf, 0x73, 0x80, 0x0e, 0x90, + 0x01, 0xb9, 0x74, 0x04, 0xf0, 0x90, 0x01, 0xb8, 0xe5, 0x10, 0xf0, + 0x7f, 0x00, 0xd0, 0xd0, 0x92, 0xaf, 0x22, 0x90, 0x93, 0x03, 0x74, + 0x04, 0xf0, 0x14, 0xf0, 0xa3, 0xf0, 0xa3, 0xe4, 0xf0, 0xa3, 0x74, + 0x64, 0xf0, 0xa3, 0x74, 0x05, 0xf0, 0xa3, 0xf0, 0x22, 0xe4, 0x90, + 0x94, 0x51, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0x90, 0x92, 0xd2, 0x12, + 0x87, 0x2d, 0x90, 0x92, 0xce, 0x12, 0x87, 0x39, 0xc3, 0x12, 0x04, + 0xb4, 0x40, 0x49, 0x90, 0x85, 0xc1, 0xe0, 0x90, 0x92, 0xd2, 0x30, + 0xe0, 0x10, 0x12, 0xd0, 0xc8, 0x90, 0x85, 0xfb, 0xe0, 0x24, 0x04, + 0x2f, 0xff, 0x90, 0x93, 0x03, 0x80, 0x06, 0x12, 0xd0, 0xc8, 0x90, + 0x93, 0x04, 0xe0, 0xfe, 0xc3, 0xef, 0x9e, 0x90, 0x94, 0x52, 0xf0, + 0x90, 0x94, 0x52, 0xe0, 0xff, 0xc3, 0x94, 0x2d, 0x50, 0x16, 0x74, + 0xd6, 0x2f, 0x12, 0xd0, 0x44, 0xe0, 0x04, 0xf0, 0x90, 0x85, 0xdb, + 0xe0, 0x04, 0xf0, 0xe0, 0xfd, 0x7f, 0xfe, 0x12, 0x7b, 0x3e, 0x90, + 0x85, 0xdb, 0xe0, 0xff, 0xd3, 0x90, 0x93, 0x06, 0xe0, 0x9f, 0x90, + 0x93, 0x05, 0xe0, 0x94, 0x00, 0x40, 0x02, 0xe1, 0xe7, 0x12, 0xd1, + 0x93, 0x12, 0xd1, 0xa7, 0x50, 0x1e, 0x12, 0xd0, 0xe5, 0xff, 0x90, + 0x94, 0x53, 0xe0, 0xd3, 0x9f, 0x40, 0x0a, 0x90, 0x94, 0x51, 0xe0, + 0x90, 0x94, 0x54, 0xf0, 0x80, 0x08, 0x90, 0x94, 0x51, 0xe0, 0x04, + 0xf0, 0x80, 0xdd, 0x12, 0xd1, 0x93, 0x12, 0xd1, 0xa7, 0x50, 0x2e, + 0x12, 0xd0, 0xe5, 0xff, 0xc3, 0x90, 0x93, 0x06, 0xe0, 0x9f, 0xff, + 0x90, 0x93, 0x05, 0xe0, 0x94, 0x00, 0xfe, 0x90, 0x94, 0x53, 0xe0, + 0xd3, 0x9f, 0xe4, 0x9e, 0x40, 0x0a, 0x90, 0x94, 0x51, 0xe0, 0x90, + 0x94, 0x55, 0xf0, 0x80, 0x08, 0x90, 0x94, 0x51, 0xe0, 0x04, 0xf0, + 0x80, 0xcd, 0x90, 0x94, 0x54, 0xe0, 0x90, 0x85, 0xe0, 0xf0, 0x90, + 0x94, 0x55, 0xe0, 0x90, 0x85, 0xe1, 0x12, 0xd1, 0xc2, 0x94, 0x0a, + 0x40, 0x0a, 0xef, 0x24, 0xf6, 0x90, 0x85, 0xd8, 0xf0, 0xe4, 0x80, + 0x0a, 0xe4, 0x90, 0x85, 0xd8, 0x12, 0xd1, 0xc2, 0x74, 0x0a, 0x9f, + 0x90, 0x85, 0xd7, 0xf0, 0x90, 0x85, 0xe0, 0xe0, 0xff, 0xa3, 0xe0, + 0xc3, 0x9f, 0x90, 0x85, 0xde, 0xf0, 0x90, 0x85, 0xc1, 0xe0, 0x30, + 0xe0, 0x05, 0x90, 0x93, 0x03, 0x80, 0x03, 0x90, 0x93, 0x04, 0xe0, + 0xff, 0x90, 0x85, 0xde, 0xe0, 0x2f, 0x04, 0xf0, 0x90, 0x85, 0xde, + 0xe0, 0xc3, 0x94, 0x0a, 0x50, 0x03, 0x74, 0x0a, 0xf0, 0x90, 0x85, + 0xde, 0xe0, 0x24, 0x02, 0xf0, 0x12, 0xc7, 0x7d, 0x12, 0x51, 0x7d, + 0xe4, 0xff, 0x12, 0x69, 0x33, 0x22, 0x12, 0xc4, 0xcd, 0x40, 0x2f, + 0x90, 0x85, 0xdf, 0xe0, 0x04, 0xf0, 0x90, 0x93, 0x08, 0xe0, 0xff, + 0x90, 0x85, 0xdf, 0xe0, 0xd3, 0x9f, 0x50, 0x1c, 0x90, 0x85, 0xd7, + 0xe0, 0x04, 0xf0, 0x12, 0xa7, 0x19, 0x12, 0xa7, 0x12, 0x90, 0x85, + 0xde, 0xf0, 0xfb, 0x90, 0x85, 0xd7, 0xe0, 0xff, 0xa3, 0xe0, 0xfd, + 0x12, 0x51, 0x7d, 0x22, 0xe4, 0xfe, 0x74, 0xd6, 0x2e, 0x11, 0x44, + 0xe4, 0xf0, 0x0e, 0xee, 0xb4, 0x2d, 0xf4, 0xe4, 0x90, 0x85, 0xdc, + 0xf0, 0x90, 0x85, 0xdb, 0xf0, 0x90, 0x85, 0xdf, 0xf0, 0xef, 0xb4, + 0x01, 0x07, 0xa3, 0x74, 0x2d, 0xf0, 0xe4, 0xa3, 0xf0, 0x22, 0xf5, + 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0x22, 0x75, 0xf0, 0x1b, 0xa4, + 0x24, 0x38, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0xfe, + 0x54, 0x03, 0xfd, 0xee, 0x13, 0x13, 0x54, 0x07, 0xfb, 0x90, 0x92, + 0x0a, 0xe0, 0xfe, 0xc4, 0x54, 0x0f, 0x90, 0x95, 0x04, 0xf0, 0x22, + 0x90, 0x94, 0xf2, 0xa3, 0xe0, 0xff, 0x90, 0x95, 0x00, 0x74, 0x03, + 0xf0, 0x7b, 0x06, 0x7d, 0x01, 0x12, 0x99, 0x36, 0x90, 0x94, 0xf6, + 0xee, 0xf0, 0xfc, 0xa3, 0xef, 0xf0, 0xfd, 0x90, 0x94, 0xf5, 0xe0, + 0xff, 0x74, 0x10, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0xfc, 0xf5, 0x83, + 0xef, 0xf0, 0x90, 0x94, 0xf4, 0xe0, 0xff, 0x02, 0x65, 0x61, 0x90, + 0x92, 0x0a, 0xe0, 0xff, 0xc3, 0x13, 0xfe, 0xef, 0x54, 0xf1, 0xff, + 0xee, 0x04, 0x54, 0x07, 0x25, 0xe0, 0x4f, 0xf0, 0xa3, 0xe0, 0xff, + 0x90, 0x92, 0x0a, 0xe0, 0xfe, 0xc3, 0x13, 0x54, 0x07, 0x22, 0x12, + 0x87, 0x39, 0x90, 0x92, 0xce, 0x12, 0x87, 0x2d, 0x12, 0x86, 0xb6, + 0x78, 0x0a, 0x12, 0x04, 0xc5, 0x90, 0x85, 0xdd, 0xe0, 0xfe, 0xc3, + 0x74, 0x0a, 0x9e, 0x2f, 0xff, 0x22, 0x74, 0xd6, 0x2f, 0xf5, 0x82, + 0xe4, 0x34, 0x92, 0xf5, 0x83, 0xe0, 0xff, 0x90, 0x94, 0x53, 0xe0, + 0x2f, 0xf0, 0x90, 0x93, 0x07, 0xe0, 0x22, 0x90, 0x94, 0x94, 0xee, + 0xf0, 0xfc, 0xa3, 0xef, 0xf0, 0xfd, 0x90, 0x94, 0x92, 0xe0, 0xff, + 0x12, 0x65, 0x61, 0x90, 0x92, 0x0a, 0xe0, 0x22, 0x75, 0xf0, 0x0e, + 0xa4, 0x24, 0x0f, 0xf5, 0x82, 0xe4, 0x34, 0x92, 0x22, 0x90, 0x05, + 0x84, 0xef, 0xf0, 0x7d, 0x20, 0xe4, 0xff, 0x02, 0x7b, 0xfd, 0x90, + 0x01, 0x34, 0x74, 0x40, 0xf0, 0xfd, 0xe4, 0xff, 0x12, 0x7c, 0xa9, + 0x43, 0x5e, 0x08, 0x22, 0xe0, 0x54, 0x03, 0x90, 0x91, 0x0b, 0xf0, + 0x7b, 0x01, 0xaf, 0x76, 0x02, 0x27, 0x3d, 0xe5, 0x65, 0x25, 0xe0, + 0x24, 0xf5, 0xf5, 0x82, 0xe4, 0x34, 0x82, 0xf5, 0x83, 0x22, 0xe4, + 0x90, 0x91, 0x6e, 0xf0, 0xa3, 0x74, 0x03, 0x22, 0xef, 0xc4, 0x54, + 0xf0, 0x24, 0x03, 0xf5, 0x82, 0xe4, 0x34, 0x81, 0xf5, 0x83, 0x22, + 0xe0, 0x90, 0x01, 0xba, 0xf0, 0x90, 0x85, 0xc7, 0xe0, 0x90, 0x01, + 0xbb, 0x22, 0x12, 0x05, 0x28, 0xe0, 0xfc, 0xa3, 0xe0, 0xf5, 0x82, + 0x8c, 0x83, 0x22, 0x74, 0xbc, 0x25, 0x63, 0xf5, 0x82, 0xe4, 0x34, + 0x8f, 0xf5, 0x83, 0x22, 0xe4, 0x90, 0x94, 0x53, 0xf0, 0x90, 0x94, + 0x51, 0xf0, 0x22, 0x90, 0x94, 0xfc, 0xe0, 0xff, 0x90, 0x94, 0xfa, + 0xe0, 0x22, 0x90, 0x94, 0x51, 0xe0, 0xff, 0xc3, 0x94, 0x2d, 0x22, + 0x90, 0x05, 0x22, 0xe0, 0x90, 0x94, 0x7d, 0xf0, 0x22, 0x90, 0x00, + 0x06, 0x12, 0x04, 0x18, 0x2f, 0xff, 0x22, 0xf0, 0x90, 0x85, 0xe0, + 0xe0, 0xff, 0xc3, 0x22, 0x25, 0xe0, 0x25, 0xe0, 0xfe, 0xef, 0x4e, + 0x22, 0x7d, 0x01, 0xaf, 0x63, 0x02, 0x65, 0xc2, 0xe5, 0x65, 0x90, + 0x83, 0x1d, 0x93, 0xff, 0x22, 0x90, 0x00, 0x04, 0x12, 0x04, 0x18, + 0x2f, 0x22, 0x90, 0x95, 0x07, 0xe0, 0xff, 0x7d, 0x48, 0x22, 0xff, + 0x12, 0x02, 0xf6, 0xfe, 0x54, 0x0f, 0x22, 0x00, 0x69, 0x2a +}; + static const uint8_t rtl8192cT[] = { 0xc1, 0x88, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x12, 0x14, 0x15, 0x52, 0xd4, 0x3e, 0x00, 0x00, 0x25, 0x86, 0x01, 0x00, 0x00, 0x00, diff --git a/sys/dev/usb/if_urtwn.c b/sys/dev/usb/if_urtwn.c index 391c8234fb0..f1ab054e27a 100644 --- a/sys/dev/usb/if_urtwn.c +++ b/sys/dev/usb/if_urtwn.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_urtwn.c,v 1.106 2023/04/27 03:19:45 kevlo Exp $ */ +/* $OpenBSD: if_urtwn.c,v 1.107 2023/04/28 01:24:14 kevlo Exp $ */ /*- * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> @@ -19,8 +19,8 @@ */ /* - * Driver for Realtek RTL8188CE-VAU/RTL8188CUS/RTL8188EU/RTL8188RU/RTL8192CU/ - * RTL8192EU. + * Driver for Realtek RTL8188CE-VAU/RTL8188CUS/RTL8188EU/RTL8188FTV/RTL8188RU/ + * RTL8192CU/RTL8192EU. */ #include "bpfilter.h" @@ -70,7 +70,6 @@ #define R92C_NQ_NPAGES 2 #define R92C_TXPKTBUF_COUNT 256 #define R92C_TX_PAGE_COUNT 248 -#define R92C_TX_PAGE_BOUNDARY (R92C_TX_PAGE_COUNT + 1) #define R92C_MAX_RX_DMA_SIZE 0x2800 #define R88E_HQ_NPAGES 0 @@ -78,14 +77,19 @@ #define R88E_NQ_NPAGES 0 #define R88E_TXPKTBUF_COUNT 177 #define R88E_TX_PAGE_COUNT 168 -#define R88E_TX_PAGE_BOUNDARY (R88E_TX_PAGE_COUNT + 1) #define R88E_MAX_RX_DMA_SIZE 0x2400 +#define R88F_HQ_NPAGES 12 +#define R88F_LQ_NPAGES 2 +#define R88F_NQ_NPAGES 2 +#define R88F_TXPKTBUF_COUNT 177 +#define R88F_TX_PAGE_COUNT 247 +#define R88F_MAX_RX_DMA_SIZE 0x3f80 + #define R92E_HQ_NPAGES 16 #define R92E_LQ_NPAGES 16 #define R92E_NQ_NPAGES 16 #define R92E_TX_PAGE_COUNT 248 -#define R92E_TX_PAGE_BOUNDARY (R92E_TX_PAGE_COUNT + 1) #define R92E_MAX_RX_DMA_SIZE 0x3fc0 #define R92C_TXDESC_SUMSIZE 32 @@ -234,8 +238,9 @@ int urtwn_debug = 4; #define URTWN_DEV(v, p, f) \ { { USB_VENDOR_##v, USB_PRODUCT_##v##_##p }, (f) | RTWN_CHIP_USB } #define URTWN_DEV_8192CU(v, p) URTWN_DEV(v, p, RTWN_CHIP_92C | RTWN_CHIP_88C) -#define URTWN_DEV_8188EU(v, p) URTWN_DEV(v, p, RTWN_CHIP_88E) #define URTWN_DEV_8192EU(v, p) URTWN_DEV(v, p, RTWN_CHIP_92E) +#define URTWN_DEV_8188EU(v, p) URTWN_DEV(v, p, RTWN_CHIP_88E) +#define URTWN_DEV_8188F(v, p) URTWN_DEV(v, p, RTWN_CHIP_88F) static const struct urtwn_type { struct usb_devno dev; uint32_t chip; @@ -332,6 +337,8 @@ static const struct urtwn_type { URTWN_DEV_8188EU(REALTEK, RTL8188EU), URTWN_DEV_8188EU(TPLINK, RTL8188EUS), URTWN_DEV_8188EU(ASUS, RTL8188EUS), + /* URTWN_RTL8188FTV */ + URTWN_DEV_8188F(REALTEK, RTL8188FTV), /* URTWN_RTL8192EU */ URTWN_DEV_8192EU(DLINK, DWA131E1), @@ -399,6 +406,7 @@ int urtwn_alloc_buffers(void *); int urtwn_r92c_power_on(struct urtwn_softc *); int urtwn_r92e_power_on(struct urtwn_softc *); int urtwn_r88e_power_on(struct urtwn_softc *); +int urtwn_r88f_power_on(struct urtwn_softc *); int urtwn_llt_init(struct urtwn_softc *, int); int urtwn_fw_loadpage(void *, int, uint8_t *, int); int urtwn_load_firmware(void *, u_char **, size_t *); @@ -1188,7 +1196,7 @@ urtwn_rx_frame(struct urtwn_softc *sc, uint8_t *buf, int pktlen, return; } - rate = (sc->sc_sc.chip & RTWN_CHIP_92E) ? + rate = (sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) ? MS(rxdw3, R92E_RXDW3_RATE) : MS(rxdw3, R92C_RXDW3_RATE); infosz = MS(rxdw0, R92C_RXDW0_INFOSZ) * 8; @@ -1346,7 +1354,7 @@ urtwn_rxeof(struct usbd_xfer *xfer, void *priv, goto resubmit; } - } else if (sc->sc_sc.chip & RTWN_CHIP_92E) { + } else if (sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) { int type; struct r92e_c2h_tx_rpt *txrpt; @@ -1372,7 +1380,7 @@ urtwn_rxeof(struct usbd_xfer *xfer, void *priv, } } - align = (sc->sc_sc.chip & RTWN_CHIP_92E ? 7 : 127); + align = ((sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) ? 7 : 127); /* Process all of them. */ while (npkts-- > 0) { @@ -1672,7 +1680,7 @@ urtwn_tx(void *cookie, struct mbuf *m, struct ieee80211_node *ni) /* Fill Tx descriptor. */ txdp = data->buf; - if (sc->sc_sc.chip & RTWN_CHIP_92E) + if (sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) urtwn_tx_fill_desc_gen2(sc, &txdp, m, wh, k, ni); else urtwn_tx_fill_desc(sc, &txdp, m, wh, k, ni); @@ -1969,6 +1977,66 @@ urtwn_r88e_power_on(struct urtwn_softc *sc) } int +urtwn_r88f_power_on(struct urtwn_softc *sc) +{ + uint32_t reg; + int ntries; + + /* Enable WL suspend. */ + urtwn_write_2(sc, R92C_APS_FSMCO, + urtwn_read_2(sc, R92C_APS_FSMCO) & + ~(R92C_APS_FSMCO_AFSM_HSUS | R92C_APS_FSMCO_AFSM_PCIE)); + /* Turn off USB APHY LDO under suspend mode. */ + urtwn_write_1(sc, 0xc4, urtwn_read_1(sc, 0xc4) & ~0x10); + + /* Disable SW LPS. */ + urtwn_write_2(sc, R92C_APS_FSMCO, + urtwn_read_2(sc, R92C_APS_FSMCO) & ~R92C_APS_FSMCO_APFM_RSM); + /* Wait for power ready bit. */ + for (ntries = 0; ntries < 5000; ntries++) { + if (urtwn_read_4(sc, R92C_APS_FSMCO) & R92C_APS_FSMCO_SUS_HOST) + break; + DELAY(10); + } + if (ntries == 5000) { + printf("%s: timeout waiting for chip power up\n", + sc->sc_dev.dv_xname); + return (ETIMEDOUT); + } + /* Disable HWPDN. */ + urtwn_write_2(sc, R92C_APS_FSMCO, + urtwn_read_2(sc, R92C_APS_FSMCO) & ~R92C_APS_FSMCO_APDM_HPDN); + /* Disable WL suspend. */ + urtwn_write_2(sc, R92C_APS_FSMCO, + urtwn_read_2(sc, R92C_APS_FSMCO) & ~R92C_APS_FSMCO_AFSM_HSUS); + /* Auto enable WLAN. */ + urtwn_write_2(sc, R92C_APS_FSMCO, + urtwn_read_2(sc, R92C_APS_FSMCO) | R92C_APS_FSMCO_APFM_ONMAC); + for (ntries = 0; ntries < 5000; ntries++) { + if (!(urtwn_read_2(sc, R92C_APS_FSMCO) & + R92C_APS_FSMCO_APFM_ONMAC)) + break; + DELAY(10); + } + if (ntries == 5000) { + printf("%s: timeout waiting for MAC auto ON\n", + sc->sc_dev.dv_xname); + return (ETIMEDOUT); + } + /* Reduce RF noise. */ + urtwn_write_1(sc, R92C_AFE_LDO_CTRL, 0x35); + + /* Enable MAC DMA/WMAC/SCHEDULE/SEC blocks. */ + urtwn_write_2(sc, R92C_CR, 0); + reg = urtwn_read_2(sc, R92C_CR); + reg |= R92C_CR_HCI_TXDMA_EN | R92C_CR_HCI_RXDMA_EN | + R92C_CR_TXDMA_EN | R92C_CR_RXDMA_EN | R92C_CR_PROTOCOL_EN | + R92C_CR_SCHEDULE_EN | R92C_CR_ENSEC | R92C_CR_CALTMR_EN; + urtwn_write_2(sc, R92C_CR, reg); + return (0); +} + +int urtwn_llt_init(struct urtwn_softc *sc, int page_count) { int i, error, pktbuf_count; @@ -2002,8 +2070,8 @@ urtwn_auto_llt_init(struct urtwn_softc *sc) { int ntries; - urtwn_write_4(sc, R92E_AUTO_LLT, urtwn_read_4(sc, - R92E_AUTO_LLT) | R92E_AUTO_LLT_EN); + urtwn_write_4(sc, R92E_AUTO_LLT, + urtwn_read_4(sc, R92E_AUTO_LLT) | R92E_AUTO_LLT_EN); for (ntries = 0; ntries < 1000; ntries++) { if (!(urtwn_read_4(sc, R92E_AUTO_LLT) & R92E_AUTO_LLT_EN)) return (0); @@ -2055,6 +2123,8 @@ urtwn_load_firmware(void *cookie, u_char **fw, size_t *len) name = "urtwn-rtl8192eu"; else if (sc->sc_sc.chip & RTWN_CHIP_88E) name = "urtwn-rtl8188eu"; + else if (sc->sc_sc.chip & RTWN_CHIP_88F) + name = "urtwn-rtl8188ftv"; else if ((sc->sc_sc.chip & (RTWN_CHIP_UMC_A_CUT | RTWN_CHIP_92C)) == RTWN_CHIP_UMC_A_CUT) name = "urtwn-rtl8192cU"; @@ -2083,30 +2153,33 @@ urtwn_dma_init(void *cookie) lqpages = R88E_LQ_NPAGES; nqpages = R88E_NQ_NPAGES; pagecnt = R88E_TX_PAGE_COUNT; - boundary = R88E_TX_PAGE_BOUNDARY; dmasize = R88E_MAX_RX_DMA_SIZE; + } else if (sc->sc_sc.chip & RTWN_CHIP_88F) { + hqpages = R88F_HQ_NPAGES; + lqpages = R88F_LQ_NPAGES; + nqpages = R88F_NQ_NPAGES; + pagecnt = R88F_TX_PAGE_COUNT; + dmasize = R88F_MAX_RX_DMA_SIZE; } else if (sc->sc_sc.chip & RTWN_CHIP_92E) { hqpages = R92E_HQ_NPAGES; lqpages = R92E_LQ_NPAGES; nqpages = R92E_NQ_NPAGES; pagecnt = R92E_TX_PAGE_COUNT; - boundary = R92E_TX_PAGE_BOUNDARY; dmasize = R92E_MAX_RX_DMA_SIZE; } else { hqpages = R92C_HQ_NPAGES; lqpages = R92C_LQ_NPAGES; nqpages = R92C_NQ_NPAGES; pagecnt = R92C_TX_PAGE_COUNT; - boundary = R92C_TX_PAGE_BOUNDARY; dmasize = R92C_MAX_RX_DMA_SIZE; } + boundary = pagecnt + 1; /* Initialize LLT table. */ - if (sc->sc_sc.chip & RTWN_CHIP_92E) { + if (sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) error = urtwn_auto_llt_init(sc); - } else { + else error = urtwn_llt_init(sc, pagecnt); - } if (error != 0) return (error); @@ -2163,9 +2236,15 @@ urtwn_dma_init(void *cookie) if (!(sc->sc_sc.chip & RTWN_CHIP_92E)) { /* Set Tx/Rx transfer page size. */ - urtwn_write_1(sc, R92C_PBP, - SM(R92C_PBP_PSRX, R92C_PBP_128) | - SM(R92C_PBP_PSTX, R92C_PBP_128)); + if (sc->sc_sc.chip & RTWN_CHIP_88F) { + urtwn_write_1(sc, R92C_PBP, + SM(R92C_PBP_PSRX, R92C_PBP_256) | + SM(R92C_PBP_PSTX, R92C_PBP_256)); + } else { + urtwn_write_1(sc, R92C_PBP, + SM(R92C_PBP_PSRX, R92C_PBP_128) | + SM(R92C_PBP_PSTX, R92C_PBP_128)); + } } return (error); } @@ -2178,10 +2257,14 @@ urtwn_aggr_init(void *cookie) int dmasize, dmatiming, ndesc; /* Set burst packet length. */ - if (sc->sc_sc.chip & RTWN_CHIP_92E) + if (sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) urtwn_burstlen_init(sc); - if (sc->sc_sc.chip & RTWN_CHIP_92E) { + if (sc->sc_sc.chip & RTWN_CHIP_88F) { + dmasize = 5; + dmatiming = 32; + ndesc = 6; + } else if (sc->sc_sc.chip & RTWN_CHIP_92E) { dmasize = 6; dmatiming = 32; ndesc = 3; @@ -2195,7 +2278,7 @@ urtwn_aggr_init(void *cookie) reg = urtwn_read_4(sc, R92C_TDECTRL); reg = RW(reg, R92C_TDECTRL_BLK_DESC_NUM, ndesc); urtwn_write_4(sc, R92C_TDECTRL, reg); - if (sc->sc_sc.chip & RTWN_CHIP_92E) + if (sc->sc_sc.chip & (RTWN_CHIP_88F | RTWN_CHIP_92E)) urtwn_write_1(sc, R92E_DWBCN1_CTRL, ndesc << 1); /* Rx aggregation setting. */ @@ -2208,6 +2291,11 @@ urtwn_aggr_init(void *cookie) else urtwn_write_1(sc, R92C_RXDMA_AGG_PG_TH + 1, dmatiming); + if (sc->sc_sc.chip & RTWN_CHIP_88F) { + urtwn_write_1(sc, R92E_RXDMA_PRO, + urtwn_read_1(sc, R92E_RXDMA_PRO) | R92E_RXDMA_PRO_DMA_MODE); + } + /* Drop incorrect bulk out. */ urtwn_write_4(sc, R92C_TXDMA_OFFSET_CHK, urtwn_read_4(sc, R92C_TXDMA_OFFSET_CHK) | @@ -2227,6 +2315,11 @@ urtwn_mac_init(void *cookie) rtl8188eu_mac[i].val); } urtwn_write_1(sc, R92C_MAX_AGGR_NUM, 0x07); + } else if (sc->sc_sc.chip & RTWN_CHIP_88F) { + for (i = 0; i < nitems(rtl8188ftv_mac); i++) { + urtwn_write_1(sc, rtl8188ftv_mac[i].reg, + rtl8188ftv_mac[i].val); + } } else if (sc->sc_sc.chip & RTWN_CHIP_92E) { for (i = 0; i < nitems(rtl8192eu_mac); i++) { urtwn_write_1(sc, rtl8192eu_mac[i].reg, @@ -2254,7 +2347,7 @@ urtwn_bb_init(void *cookie) R92C_SYS_FUNC_EN_BBRSTB | R92C_SYS_FUNC_EN_BB_GLB_RST | R92C_SYS_FUNC_EN_DIO_RF); - if (!(sc->sc_sc.chip & (RTWN_CHIP_88E | RTWN_CHIP_92E))) + if (!(sc->sc_sc.chip & (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E))) urtwn_write_2(sc, R92C_AFE_PLL_CTRL, 0xdb83); urtwn_write_1(sc, R92C_RF_CTRL, @@ -2263,7 +2356,8 @@ urtwn_bb_init(void *cookie) R92C_SYS_FUNC_EN_USBA | R92C_SYS_FUNC_EN_USBD | R92C_SYS_FUNC_EN_BB_GLB_RST | R92C_SYS_FUNC_EN_BBRSTB); - if (!(sc->sc_sc.chip & (RTWN_CHIP_88E | RTWN_CHIP_92E))) { + if (!(sc->sc_sc.chip & + (RTWN_CHIP_88E | RTWN_CHIP_88F | RTWN_CHIP_92E))) { urtwn_write_1(sc, R92C_LDOHCI12_CTRL, 0x0f); urtwn_write_1(sc, 0x15, 0xe9); urtwn_write_1(sc, R92C_AFE_XTAL_CTRL + 1, 0x80); @@ -2272,6 +2366,8 @@ urtwn_bb_init(void *cookie) /* Select BB programming based on board type. */ if (sc->sc_sc.chip & RTWN_CHIP_88E) prog = &rtl8188eu_bb_prog; + else if (sc->sc_sc.chip & RTWN_CHIP_88F) + prog = &rtl8188ftv_bb_prog; else if (sc->sc_sc.chip & RTWN_CHIP_92E) prog = &rtl8192eu_bb_prog; else if (!(sc->sc_sc.chip & RTWN_CHIP_92C)) { @@ -2339,7 +2435,7 @@ urtwn_bb_init(void *cookie) DELAY(1); } - if (sc->sc_sc.chip & RTWN_CHIP_88E) { + if (sc->sc_sc.chip & (RTWN_CHIP_88E | RTWN_CHIP_88F)) { urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(0), 0x69553422); DELAY(1); urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(0), 0x69553420); @@ -2351,7 +2447,7 @@ urtwn_bb_init(void *cookie) DELAY(1); } - if (sc->sc_sc.chip & RTWN_CHIP_88E) { + if (sc->sc_sc.chip & (RTWN_CHIP_88E | RTWN_CHIP_88F)) { xtal = sc->sc_sc.crystal_cap & 0x3f; reg = urtwn_bb_read(sc, R92C_AFE_XTAL_CTRL); urtwn_bb_write(sc, R92C_AFE_XTAL_CTRL, @@ -2383,6 +2479,30 @@ urtwn_burstlen_init(struct urtwn_softc *sc) urtwn_write_1(sc, R92E_RXDMA_PRO, reg | 0x2e); break; } + + if (sc->sc_sc.chip & RTWN_CHIP_88F) { + /* Setup AMPDU aggregation. */ + urtwn_write_1(sc, R88F_HT_SINGLE_AMPDU, + urtwn_read_1(sc, R88F_HT_SINGLE_AMPDU) | + R88F_HT_SINGLE_AMPDU_EN); + urtwn_write_2(sc, R92C_MAX_AGGR_NUM, 0x0c14); + urtwn_write_1(sc, R88F_AMPDU_MAX_TIME, 0x70); + urtwn_write_4(sc, R92C_AGGLEN_LMT, 0xffffffff); + + /* For VHT packet length 11K */ + urtwn_write_1(sc, R88F_RX_PKT_LIMIT, 0x18); + + urtwn_write_1(sc, R92C_PIFS, 0); + urtwn_write_1(sc, R92C_FWHW_TXQ_CTRL, 0x80); + urtwn_write_4(sc, R92C_FAST_EDCA_CTRL, 0x03086666); + urtwn_write_1(sc, R92C_USTIME_TSF, 0x28); + urtwn_write_1(sc, R88F_USTIME_EDCA, 0x28); + + /* To prevent mac is reseted by bus. */ + urtwn_write_1(sc, R92C_RSV_CTRL, + urtwn_read_1(sc, R92C_RSV_CTRL) | + R92C_RSV_CTRL_R_DIS_PRST_0 | R92C_RSV_CTRL_R_DIS_PRST_1); + } } int @@ -2392,6 +2512,8 @@ urtwn_power_on(void *cookie) if (sc->sc_sc.chip & RTWN_CHIP_88E) return (urtwn_r88e_power_on(sc)); + else if (sc->sc_sc.chip & RTWN_CHIP_88F) + return (urtwn_r88f_power_on(sc)); else if (sc->sc_sc.chip & RTWN_CHIP_92E) return (urtwn_r92e_power_on(sc)); diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index 6393134add1..f2b82c103fd 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -1,4 +1,4 @@ -$OpenBSD: usbdevs,v 1.754 2023/04/02 23:55:12 dlg Exp $ +$OpenBSD: usbdevs,v 1.755 2023/04/28 01:24:14 kevlo Exp $ /* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */ /* @@ -3809,6 +3809,7 @@ product REALTEK RTL8713 0x8713 RTL8713 product REALTEK RTL8188CU_COMBO 0x8754 RTL8188CU product REALTEK RTL8723BU 0xb720 RTL8723BU product REALTEK RTL8192SU 0xc512 RTL8192SU +product REALTEK RTL8188FTV 0xf179 RTL8188FTV /* Renesas products */ product RENESAS RX610 0x0053 RX610 RX-Stick |