Add support for RTL8188FTV chip to urtwn(4).
authorkevlo <kevlo@openbsd.org>
Fri, 28 Apr 2023 01:24:14 +0000 (01:24 +0000)
committerkevlo <kevlo@openbsd.org>
Fri, 28 Apr 2023 01:24:14 +0000 (01:24 +0000)
Tested with Comfast CF-WU710N v4.

"go ahead" deraadt@
OK stsp@

17 files changed:
distrib/amd64/ramdisk_cd/list
distrib/arm64/ramdisk/list
distrib/armv7/ramdisk/list
distrib/i386/ramdisk_cd/list
distrib/macppc/ramdisk/list
distrib/octeon/ramdisk/list
distrib/riscv64/ramdisk/list
share/man/man4/urtwn.4
share/man/man4/usb.4
sys/dev/ic/r92creg.h
sys/dev/ic/rtwn.c
sys/dev/ic/rtwnvar.h
sys/dev/microcode/urtwn/Makefile
sys/dev/microcode/urtwn/build.c
sys/dev/microcode/urtwn/microcode.h
sys/dev/usb/if_urtwn.c
sys/dev/usb/usbdevs

index f1cd0cd..2daf2d0 100644 (file)
@@ -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
index d8971aa..38f938e 100644 (file)
@@ -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
index 3d3dfff..ad58619 100644 (file)
@@ -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
index 80b80d3..d582b5b 100644 (file)
@@ -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
index db7d84b..62d9d91 100644 (file)
@@ -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
index f50acd5..a54d69e 100644 (file)
@@ -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
index b765f96..d04c6ad 100644 (file)
@@ -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
index f76c2c3..6dc933d 100644 (file)
@@ -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>
 .\"
 .\" 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
index 75262e2..f65bc86 100644 (file)
@@ -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
index b8d1a2f..cd8b8da 100644 (file)
@@ -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
 #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
 #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
 #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
 #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
 #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
 #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
 #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
 #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)
@@ -1362,6 +1379,35 @@ struct r88e_rom {
        } u;
 } __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.
  */
@@ -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 },
@@ -2377,6 +2450,104 @@ static const struct r92c_bb_prog rtl8188eu_bb_prog = {
        rtl8188eu_agc_vals
 };
 
+/*
+ * 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.
  */
@@ -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,
@@ -2830,6 +3001,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.
  */
@@ -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,
index bf5d79a..b9b83bb 100644 (file)
@@ -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)
@@ -720,6 +733,21 @@ rtwn_r88e_read_rom(struct rtwn_softc *sc)
                IEEE80211_ADDR_COPY(ic->ic_myaddr, rom->r88eu_rom.macaddr);
 }
 
+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)
 {
@@ -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);;
+                       }
                }
        }
 
@@ -2420,6 +2544,25 @@ rtwn_set_chan(struct rtwn_softc *sc, struct ieee80211_channel *c,
                DELAY(25000);
 }
 
+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. */
index e7ee10c..2b3ca85 100644 (file)
@@ -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];
index 5e0e2f7..412fddf 100644 (file)
@@ -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
 
index 870ce85..ae66d2a 100644 (file)
@@ -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);
index 7a6546d..94dffb7 100644 (file)
@@ -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,
index 391c823..f1ab054 100644 (file)
@@ -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
 #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);
@@ -1968,6 +1976,66 @@ urtwn_r88e_power_on(struct urtwn_softc *sc)
        return (0);
 }
 
+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)
 {
@@ -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));
 
index 6393134..f2b82c1 100644 (file)
@@ -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