xref: /utopia/UTPA2-700.0.x/modules/mfc/hal/M7821/mfc/mdrv_mfc.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2006-2010 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // (��MStar Confidential Information��) by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// file    drvMfc.c
98 /// @brief  Mfc Driver Interface
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101 
102 //-------------------------------------------------------------------------------------------------
103 //  Include files
104 //-------------------------------------------------------------------------------------------------
105 #include <unistd.h>
106 #include <sys/time.h>
107 #include "mdrv_mfc.h"
108 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
109 #include "madp.h"
110 #endif
111 #include "mdrv_mfc_fb.h"
112 #include "mdrv_mfc_init.h"
113 #include "mdrv_mfc_scalerop.h"
114 #include "mdrv_mfc_scalerip.h"
115 #include "mdrv_mfc_film.h"
116 #include "mdrv_mfc_panel.h"
117 #include "mdrv_mfc_mcu.h"
118 #include "pnl_lceall.h"
119 
120 #define MFC_SPIF_SLAVE_ID 0x3
121 #define MFC_REG_DEBUG(x)    //x
122 //-------------------------------------------------------------------------------------------------
123 //  Global Variables
124 //-------------------------------------------------------------------------------------------------
125 MST_MFC_SYS_INFO_t gmfcSysInfo;
126 static U8 u8MFCInitStatus=0;
127 static U16 gPreInputVFreq=6000;
128 /*
129 DECLARE_MUTEX(MFC_MUTEX);
130 #define MUTEX_LOCK()  down(&MFC_MUTEX)
131 #define MUTEX_UNLOCK()   up(&MFC_MUTEX)
132 */
133 //------------------------------------------------------------------------------
134 // Local Variables
135 //------------------------------------------------------------------------------
136 static U8 MFC_BIN[] =
137 {
138 0x02,0x2d,0xd9,0x02,0x33,0x99,0xe4,0xff,0x02,0x3a,0xd3,0x02,0x34,0x41,0x12,0x37,0xcf,0x22,0x32,0x02,0x35,0x80,0x12,0x36,0xa1,0x90,0x40,0xf2,0xef,0xf0,0x60,0x02,0x7f,0x01,0x22,0x02,0x2c,0x7b,0x02,0x2d,0x32,0x22,0x22,0x02,0x00,0x12,0x12,0x0d,0xbf,0xc3,0x94,0x04,0x40,0x06,0xef,0xd3,0x94,0x7c,0x40,0x19,0xef,0xc3,0x94,0x04,0x50,0x04,0x7d,0x04,0x80,0x02,0x7d,0x7c,0x12,0x05,0x34,0x90,0x40,0x07,0xe0,0xfd,0x7f,0x3c,0x02,0x01,0x3e,0xc3,0x90,0x40,0x15,0xe0,0x94,0x32,0x12,0x0e,0x67,0x50,0x41,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0x12,0x10,0xf0,0x50,0x16,0x12,0x0e,0xfd,0x50,0x11,0x7d,0x80,0x12,0x05,0x24,0x7d,0xbe,0x12,0x05,0x34,0x7d,0x01,0x7f,0x4d,0x02,0x01,0x3e,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xc3,0xef,0x94,0x10,0xee,0x64,0x80,0x94,0x80,0x50,0x58,0x90,0x40,0x3c,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0x2e,0xe0,0xfc,0xa3,0xe0,0xfd,0x9f,0xec,0x9e,0x40,0x08,0xed,0x9f,0xff,0xec,0x9e,0xfe,0x80,0x15,0x90,0x40,0x2e,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x90,0x40,0x3d,0xe0,0x9f,0xff,0x90,0x40,0x3c,0xe0,0x9e,0xfe,0xc3,0xef,0x94,0x2c,0xee,0x94,0x01,0x50,0x1d,0x90,0x40,0x3d,0xe0,0x94,0xd0,0x90,0x40,0x3c,0xe0,0x94,0x07,0x40,0x0f,0x7d,0x80,0x7f,0x3c,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x40,0x7f,0x3d,0x80,0x12,0xe4,0xfd,0x12,0x05,0x24,0xe4,0xfd,0x7f,0x3d,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x51,0x7f,0x4d,0x7e,0x26,0x12,0x3b,0xaa,0x12,0x0e,0xc4,0x60,0x1e,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xd3,0x94,0x6c,0x40,0x04,0x7d,0x7c,0x80,0x08,0xef,0x24,0x10,0xfd,0x80,0x02,0x7d,0x10,0x7f,0x54,0x7e,0x29,0x12,0x3b,0xaa,0xc3,0x90,0x40,0x34,0xe0,0x94,0x01,0x50,0x04,0xe4,0xfd,0x80,0x02,0x7d,0x80,0x7f,0x53,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0d,0xe1,0xd3,0x9e,0x40,0x02,0x80,0x02,0xaf,0x06,0xef,0xc3,0x94,0x06,0x50,0x03,0x02,0x02,0x76,0x90,0x40,0x07,0xe0,0xff,0x12,0x0d,0xec,0xc3,0x9e,0x50,0x02,0x80,0x02,0xaf,0x06,0xef,0xd3,0x94,0x02,0x40,0x03,0x02,0x02,0x76,0x12,0x0d,0xe1,0xc3,0x9e,0x50,0x02,0x80,0x02,0xaf,0x06,0x90,0x40,0x07,0xe0,0xfe,0xc3,0x99,0xf9,0x12,0x10,0x6c,0x90,0x40,0x11,0xe0,0xc3,0x9e,0x13,0x13,0x13,0x54,0x1f,0xfe,0xd3,0x9d,0x40,0x02,0x80,0x02,0xae,0x05,0xc3,0xee,0x9f,0xc3,0x94,0x04,0x50,0x03,0x02,0x02,0x76,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xd3,0x94,0x10,0x40,0x7b,0xd3,0x90,0x40,0x15,0xe0,0x94,0x1e,0x12,0x0e,0x67,0x40,0x6f,0xd3,0x90,0x40,0x31,0xe0,0x94,0x0a,0x12,0x0f,0x03,0x40,0x63,0x90,0x40,0x34,0xe0,0xfe,0xa3,0xe0,0xff,0xd3,0x94,0xf4,0xee,0x94,0x01,0x40,0x53,0xef,0x94,0x10,0xee,0x94,0x27,0x50,0x4b,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0x75,0xf0,0x04,0xa4,0xff,0xd3,0x74,0xff,0x9f,0xe5,0xf0,0x12,0x0d,0xda,0x40,0x19,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xc3,0x74,0xff,0x9f,0x25,0xe0,0x25,0xe0,0xff,0x80,0x02,0x7f,0x00,0xef,0x44,0x02,0xfd,0x7f,0x35,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0xf0,0x7f,0x3f,0x80,0x04,0x7d,0xf0,0x7f,0x35,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x41,0x9b,0xe0,0x70,0x77,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x18,0x40,0x1d,0x12,0x0e,0xc4,0x60,0x18,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xfd,0x80,0x43,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xfd,0x80,0x39,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xc3,0x94,0x14,0x50,0x1b,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0x24,0x28,0xfd,0x80,0x02,0x7d,0x3c,0x7f,0x57,0x02,0x03,0x86,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x18,0x40,0x1f,0x12,0x0e,0xc4,0x60,0x1a,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,
139 0xff,0x8f,0x11,0x80,0x3b,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xc3,0x94,0x14,0x50,0x1c,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0x24,0x28,0xf5,0x11,0x80,0x03,0x75,0x11,0x3c,0xc3,0x74,0x40,0x95,0x11,0xfd,0x7f,0x39,0x7e,0x29,0x12,0x3b,0xaa,0xe5,0x11,0x24,0x40,0xfd,0x7f,0x3b,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x4e,0xe0,0x70,0x43,0x90,0x40,0x92,0xe0,0x60,0x2b,0x90,0x40,0x91,0xe0,0x60,0x25,0x12,0x10,0x35,0x70,0x17,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x0f,0xc3,0x12,0x0e,0x61,0x50,0x09,0x7d,0x60,0x12,0x05,0x2c,0x7d,0xc3,0x80,0x14,0xe4,0xfd,0x12,0x05,0x2c,0xe4,0xfd,0x80,0x0b,0x7d,0x04,0x7f,0x9a,0x7e,0x29,0x12,0x3b,0xaa,0xe4,0xfd,0x7f,0x9b,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0e,0x0c,0x30,0xe0,0x64,0xc3,0x90,0x40,0x15,0xe0,0x94,0x28,0x12,0x0e,0x67,0x50,0x58,0xc3,0x90,0x40,0x40,0xe0,0x94,0x01,0x50,0x4f,0x90,0x40,0x46,0xe0,0x70,0x02,0xa3,0xe0,0x70,0x45,0x90,0x41,0x08,0xe0,0x70,0x3f,0x90,0x40,0x2e,0xe0,0x70,0x02,0xa3,0xe0,0x70,0x35,0x12,0x10,0x35,0x70,0x30,0x12,0x10,0x63,0x70,0x2b,0x7f,0xfd,0x12,0x05,0x48,0x50,0x07,0x7f,0xfc,0x12,0x05,0x48,0x40,0x1d,0xc3,0x90,0x40,0x3d,0xe0,0x94,0x40,0x90,0x40,0x3c,0xe0,0x94,0x00,0x50,0x0e,0x90,0x41,0x0b,0xe0,0xc3,0x94,0x05,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x41,0x0b,0xf0,0x90,0x41,0x0b,0xe0,0xd3,0x94,0x04,0x40,0x3f,0x7b,0x01,0xe4,0xfd,0x7f,0x80,0x7e,0x20,0x12,0x39,0xe5,0x7d,0x10,0x12,0x05,0x3c,0x7d,0x08,0x7f,0xa2,0x7e,0x20,0x12,0x3b,0x0b,0x7d,0x08,0x7f,0x84,0x7e,0x20,0x12,0x3b,0xaa,0x7b,0x01,0x7d,0x01,0x7f,0x80,0x7e,0x20,0x12,0x39,0xe5,0x90,0x41,0x08,0x74,0x01,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x40,0x48,0xe0,0x44,0x40,0xf0,0x90,0x41,0x09,0xe0,0xc3,0x94,0x80,0x50,0x07,0xa3,0xe0,0xc3,0x94,0xfa,0x40,0x27,0x7d,0x20,0x12,0x05,0x3c,0x7d,0x0c,0x7f,0xa2,0x7e,0x20,0x12,0x3b,0x0b,0x7d,0x10,0x7f,0x84,0x7e,0x20,0x12,0x3b,0xaa,0xe4,0x90,0x41,0x08,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x40,0x48,0xe0,0x44,0x80,0xf0,0x90,0x41,0x08,0xe0,0xb4,0x01,0x11,0x7f,0x96,0x7e,0x20,0x12,0x00,0x0e,0xef,0x30,0xe0,0x06,0x90,0x41,0x09,0xe0,0x04,0xf0,0x90,0x41,0x08,0xe0,0xb4,0x01,0x06,0x90,0x41,0x0a,0xe0,0x04,0xf0,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x04,0x50,0x1f,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x08,0x40,0x04,0x7d,0x02,0x80,0x02,0x7d,0x12,0x7f,0x16,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x3c,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x9a,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7f,0x3d,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7b,0x7f,0x7f,0x82,0x7e,0x20,0x12,0x3b,0x0b,0x7b,0x0f,0x22,0x7e,0x29,0x12,0x00,0x0e,0xef,0xd3,0x94,0x40,0x22,0x90,0x40,0x9b,0xe0,0x60,0x6e,0x12,0x0e,0x0c,0xff,0x30,0xe0,0x07,0x90,0x40,0x55,0xe0,0xfe,0x80,0x05,0x90,0x40,0x56,0xe0,0xfe,0x90,0x40,0xa2,0xe0,0xd3,0x9e,0x40,0x17,0xe0,0xfe,0xef,0x30,0xe0,0x07,0x90,0x40,0x55,0xe0,0xff,0x80,0x05,0x90,0x40,0x56,0xe0,0xff,0xc3,0xee,0x9f,0x80,0x01,0xe4,0x90,0x40,0xa2,0xf0,0x12,0x0e,0x0c,0xff,0x30,0xe0,0x07,0x90,0x40,0x53,0xe0,0xfe,0x80,0x05,0x90,0x40,0x54,0xe0,0xfe,0x90,0x40,0xa3,0xe0,0xd3,0x9e,0x40,0x17,0xe0,0xfe,0xef,0x30,0xe0,0x07,0x90,0x40,0x53,0xe0,0xff,0x80,0x05,0x90,0x40,0x54,0xe0,0xff,0xc3,0xee,0x9f,0x80,0x01,0xe4,0x90,0x40,0xa3,0xf0,0x90,0x40,0x07,0xe0,0xff,0xd3,0x94,0x04,0x40,0x13,0xef,0x94,0xfa,0x50,0x0e,0xa3,0xe0,0x54,0x7f,0xff,0x94,0x04,0x40,0x05,0xef,0x94,0x7a,0x40,0x08,0x90,0x40,0xa4,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x40,0xa4,0xf0,0x12,0x0f,0x6d,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x03,0x12,0x10,0x3c,0x8f,0x12,0x90,0x40,0xa6,0x12,0x0f,0x4e,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0a,0x12,0x0d,0xbf,0x90,0x40,0xa6,0xe0,0xc3,0x9f,0xff,0x8f,0x13,0x90,0x40,0x9b,0xe0,0x60,0x50,0x90,0x40,0xa3,0xe0,0xc3,0x94,0xe6,0x50,0x47,0x90,0x40,0x30,0xe0,0xfe,0xa3,0xe0,0x78,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xff,0xc3,0x94,0x05,0xee,0x94,0x00,0x50,0x02,0x80,0x02,0x7f,0x05,0xc3,0x74,0x05,0x9f,0xfd,0x12,0x11,0x01,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xff,0xc3,0x94,0x05,0xee,0x94,0x00,0x50,0x02,0x80,0x04,0x7e,0x00,
140 0x7f,0x05,0xc3,0x74,0x05,0x9f,0x2d,0xff,0x90,0x40,0xa3,0xe0,0x2f,0xf0,0x90,0x40,0xa2,0xe0,0xc3,0x94,0xdc,0x40,0x03,0x02,0x07,0xec,0x90,0x40,0xa4,0xe0,0x60,0x1c,0x12,0x11,0x01,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x10,0x26,0x94,0x0a,0x40,0x03,0x75,0x11,0x0a,0x90,0x40,0xfa,0x74,0x01,0x02,0x07,0xd1,0x12,0x0d,0xe1,0xd3,0x9e,0x40,0x02,0x80,0x02,0xaf,0x06,0xef,0xc3,0x94,0x06,0x50,0x03,0x02,0x07,0x50,0x90,0x40,0x07,0xe0,0xff,0x12,0x0d,0xec,0xc3,0x9e,0x50,0x02,0x80,0x02,0xaf,0x06,0xef,0xd3,0x94,0x03,0x40,0x03,0x02,0x07,0x50,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xef,0x78,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xfd,0x12,0x0e,0x0c,0xfc,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x04,0x12,0x0f,0xb3,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x2d,0xfd,0xec,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x04,0x90,0x40,0x30,0x12,0x0f,0xb6,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0e,0xc2,0x60,0x04,0x7e,0x00,0x80,0x02,0x7e,0x01,0x12,0x10,0x24,0x94,0x08,0x40,0x03,0x75,0x11,0x08,0x90,0x40,0xfa,0x74,0x04,0x02,0x07,0xd1,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xef,0x78,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xfd,0x12,0x0e,0x0c,0xfc,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x06,0x12,0x0f,0xb3,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x2d,0xfd,0xec,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x03,0x90,0x40,0x30,0x12,0x0f,0xb6,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0e,0xc2,0x60,0x04,0x7e,0x00,0x80,0x02,0x7e,0x01,0x12,0x10,0x24,0x94,0x0a,0x40,0x03,0x75,0x11,0x0a,0x90,0x40,0xfa,0x74,0x05,0xf0,0x90,0x40,0x49,0xe0,0x54,0xef,0xf0,0x90,0x40,0x9b,0xe0,0x60,0x0d,0x90,0x40,0xa2,0xe0,0x25,0x11,0xf0,0x90,0x40,0xf9,0xe5,0x11,0xf0,0x12,0x19,0x13,0x90,0x40,0xb7,0xef,0xf0,0x12,0x16,0xf6,0x90,0x40,0xee,0xef,0xf0,0x12,0x00,0x16,0x90,0x40,0xb6,0xef,0xf0,0xa3,0xe0,0x60,0x0a,0x12,0x10,0xfa,0x7f,0xfe,0x12,0x38,0xd0,0x80,0x22,0x12,0x2f,0x09,0x8f,0x11,0xe5,0x11,0x60,0x10,0x12,0x38,0xd0,0x90,0x40,0xb7,0x74,0xfe,0xf0,0x12,0x10,0xfa,0x7d,0x08,0x80,0x02,0xe4,0xfd,0x7f,0x22,0x7e,0x26,0x12,0x3b,0xaa,0x12,0x14,0x39,0xac,0x07,0x90,0x40,0x07,0xe0,0xfe,0xb4,0x80,0x16,0xa3,0xe0,0x54,0x7f,0xfd,0xbd,0x40,0x0e,0x90,0x40,0xce,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x40,0xce,0xf0,0x90,0x40,0xa5,0xe0,0xb5,0x06,0x17,0xa3,0xe0,0xfe,0x12,0x0f,0x50,0xb5,0x06,0x0e,0x90,0x40,0xcf,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x40,0xcf,0xf0,0x90,0x40,0x9b,0xe0,0x60,0x0f,0x90,0x40,0x07,0xe0,0x90,0x40,0xa5,0xf0,0x12,0x0f,0x50,0x90,0x40,0xa6,0xf0,0x12,0x0e,0xc4,0x60,0x0e,0x90,0x40,0xed,0xe0,0xc3,0x94,0xff,0x50,0x20,0xe0,0x04,0xf0,0x80,0x1b,0x90,0x40,0xed,0xe0,0xff,0xd3,0x94,0x0a,0x40,0x05,0x74,0x09,0xf0,0x80,0x0c,0xef,0xd3,0x94,0x00,0x40,0x06,0x90,0x40,0xed,0xe0,0x14,0xf0,0x90,0x40,0x11,0xe0,0xff,0x90,0x40,0xbd,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xbd,0xe0,0xff,0x90,0x40,0x11,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc4,0xef,0xf0,0x90,0x40,0x10,0xe0,0xff,0x90,0x40,0xbf,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xbf,0xe0,0xff,0x90,0x40,0x10,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc5,0xef,0xf0,0x90,0x40,0x13,0xe0,0xff,0x90,0x40,0xc1,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xc1,0xe0,0xff,0x90,0x40,0x13,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc6,0xef,0xf0,0x90,0x40,0x12,0xe0,0xff,0x90,0x40,0xc2,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xc2,0xe0,0xff,0x90,0x40,0x12,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc7,0xef,0xf0,0x90,0x40,0xbf,0xe0,0xa3,0xf0,0x90,0x40,0xbd,0xe0,0xa3,0xf0,0x90,0x40,0x10,0xe0,0x90,0x40,0xbf,0xf0,0x90,0x40,0x11,0xe0,0x90,0x40,0xbd,0xf0,0x90,0x40,0x12,0xe0,0x90,0x40,0xc2,0xf0,0x90,0x40,0x13,0xe0,0x90,0x40,0xc1,0xf0,0x90,0x40,0xae,0xe0,0xff,0xa3,0xe0,0xa3,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x14,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xae,0xcf,
141 0xf0,0xa3,0xef,0xf0,0x90,0x40,0x40,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xb2,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x46,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xb4,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x30,0xa3,0xe0,0x90,0x40,0xb9,0xf0,0x90,0x40,0x3a,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xbb,0xcf,0xf0,0xa3,0xef,0xf0,0x12,0x0e,0xc4,0x90,0x40,0xc3,0xf0,0xaf,0x04,0x22,0x75,0x15,0x01,0x75,0x16,0x01,0xe4,0xf5,0x17,0x90,0x40,0x7c,0xe0,0x04,0xff,0x90,0x40,0x93,0xe0,0xfe,0xef,0x8e,0xf0,0x84,0x90,0x40,0x7c,0xe5,0xf0,0xf0,0x7f,0xfd,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x11,0x7f,0xfc,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x12,0x7f,0xff,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x13,0x7f,0xfe,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x14,0xe5,0x12,0xc3,0x94,0x01,0x40,0x02,0x15,0x12,0xe5,0x14,0xc3,0x94,0x01,0x40,0x02,0x15,0x14,0xe5,0x17,0x70,0x07,0xe5,0x11,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x11,0x8f,0x11,0xe5,0x17,0x70,0x07,0xe5,0x12,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x12,0x8f,0x12,0xe5,0x17,0x70,0x07,0xe5,0x13,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x13,0x8f,0x13,0xe5,0x17,0x70,0x07,0xe5,0x14,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x14,0x8f,0x14,0xe4,0xfd,0x12,0x10,0x7b,0xe0,0x52,0x16,0x12,0x10,0x86,0xe0,0x52,0x15,0x0d,0xbd,0x04,0xf0,0x12,0x0f,0x72,0x94,0x80,0x40,0x06,0xee,0x24,0x80,0xfe,0x80,0x0a,0x90,0x40,0x07,0xe0,0xfe,0xc3,0x74,0x80,0x9e,0xfe,0xee,0xd3,0x94,0x04,0x50,0x04,0x7e,0x01,0x80,0x02,0x7e,0x00,0xe5,0x16,0x5e,0x90,0x40,0x91,0x12,0x0d,0xbe,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x04,0x50,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0xe5,0x15,0x5f,0x90,0x40,0x92,0xf0,0xe4,0xfd,0x12,0x0f,0xc6,0xe0,0xff,0x24,0x02,0xfb,0xe4,0x33,0xfa,0x12,0x0f,0xd1,0xe0,0xd3,0x9b,0xea,0x12,0x0d,0xda,0x40,0x2c,0x12,0x0e,0x4a,0xe0,0xf9,0x24,0x02,0xfb,0xe4,0x33,0xfa,0xd3,0xef,0x9b,0xea,0x12,0x0d,0xda,0x40,0x18,0xe9,0x24,0x04,0xff,0xe4,0x33,0xfe,0x12,0x0f,0xd1,0xe0,0x12,0x0d,0xd7,0x40,0x08,0x12,0x0f,0x2d,0x74,0x01,0xf0,0x80,0x05,0x12,0x0f,0x2d,0xe4,0xf0,0x0d,0xed,0x64,0x04,0x70,0xb2,0xe4,0xfd,0xed,0x60,0x04,0x64,0x01,0x70,0x3f,0x12,0x0f,0xaa,0x12,0x0d,0xc7,0x40,0x03,0x02,0x0b,0xc0,0x12,0x10,0x91,0xe9,0x12,0x0d,0xd7,0x50,0x75,0x12,0x10,0x03,0x12,0x0d,0xc7,0x50,0x6d,0x12,0x10,0x91,0xe9,0x12,0x0d,0xd7,0x50,0x17,0x12,0x0e,0x99,0xe0,0xff,0xc3,0x94,0xff,0x50,0x06,0x12,0x0f,0x57,0x02,0x0b,0xb9,0x7e,0x00,0x7f,0xff,0x02,0x0b,0xb9,0x02,0x0b,0xc0,0x12,0x0f,0xaa,0xf5,0x83,0xe0,0xf9,0x24,0x01,0x12,0x0d,0xcd,0x50,0x3c,0xec,0x12,0x0f,0x58,0xe9,0x12,0x0d,0xd7,0x50,0x32,0x12,0x10,0x03,0xf5,0x83,0xe0,0xf9,0x24,0x01,0x12,0x0d,0xcd,0x50,0x24,0xec,0x12,0x0f,0x58,0xe9,0x12,0x0d,0xd7,0x50,0x1a,0x12,0x0e,0x99,0xe0,0xff,0xc3,0x94,0xff,0x50,0x05,0x12,0x0f,0x57,0x80,0x04,0x7e,0x00,0x7f,0xff,0x12,0x0e,0x99,0xef,0xf0,0x80,0x05,0x12,0x0e,0x99,0xe4,0xf0,0x74,0x11,0x2d,0xf8,0xe6,0x70,0x1a,0x12,0x0f,0xdc,0xe0,0xff,0xc3,0x94,0xff,0x50,0x05,0x12,0x0f,0x57,0x80,0x04,0x7e,0x00,0x7f,0xff,0x12,0x0f,0xdc,0xef,0xf0,0x80,0x05,0x12,0x0f,0xdc,0xe4,0xf0,0x0d,0xed,0x64,0x04,0x60,0x03,0x02,0x0b,0x30,0x90,0x40,0x68,0xe0,0xff,0x24,0x80,0xfb,0xe4,0x33,0xfa,0xe5,0x11,0x12,0x0f,0x38,0x50,0x05,0x12,0x0e,0xdd,0x40,0x17,0x90,0x40,0x69,0xe0,0xff,0x24,0x80,0xfb,0xe4,0x33,0xfa,0xe5,0x12,0x12,0x0f,0x38,0x50,0x3b,0x12,0x0e,0xdd,0x50,0x36,0x90,0x40,0x6a,0xe0,0xff,0x24,0x40,0xfb,0xe4,0x33,0xfa,0xe5,0x13,0x12,0x0f,0x38,0x50,0x09,0xe5,0x82,0x24,0x40,0x12,0x0e,0xe1,0x40,0x29,0x90,0x40,0x6b,0xe0,0xff,0x24,0x40,0xfb,0xe4,0x33,0xfa,0xe5,0x14,0x12,0x0f,0x38,0x50,0x09,0xe5,0x82,0x24,0x40,0x12,0x0e,0xe1,0x40,0x0e,0xe4,0xfd,0x12,0x0e,0x44,0xef,0xf0,0x0d,0xbd,0x04,0xf7,0x02,0x0c,0xc3,0xe4,0xfd,0xed,0x60,0x04,0x64,0x01,0x70,0x23,0x12,0x0f,0x2d,0xe0,0x60,0x02,0x80,0x21,0x12,0x0e,0x99,0xe0,0xd3,0x94,0x20,0x50,0x38,0x74,0x11,0x2d,0xf8,0xe6,0x12,0x10,0x92,0x12,0x0e,0x4a,0x12,0x10,0x99,0x50,0x2d,0x80,0x26,0x12,0x0f,0x2d,0xe0,0x60,0x07,0x12,0x0e,0x4a,0xe4,0xf0,0x80,0x1e,0x12,0x0e,0x99,0xe0,0xd3,0x94,0x20,0x50,0x10,0x74,0x11,0x2d,0xf8,0xe6,0x12,0x0f,0x58,0x12,0x0e,0x4a,0x12,0x10,0x99,0x50,0x05,0x12,0x0e,0x44,0xef,0xf0,0x0d,0xed,0x64,0x04,0x70,0xa5,0x90,0x40,0x93,0xe0,0x14,
142 0xff,0x90,0x40,0x7c,0xe0,0x6f,0x60,0x03,0x02,0x0d,0x78,0xfd,0x12,0x0f,0xaa,0xf5,0x83,0xe0,0xff,0x12,0x10,0x03,0xf5,0x83,0xef,0xf0,0x74,0x11,0x2d,0xf8,0xe6,0xff,0x12,0x0f,0xaa,0xf5,0x83,0xef,0xf0,0x0d,0xbd,0x04,0xe1,0xe4,0xfd,0x12,0x0f,0xc6,0xe0,0xff,0x12,0x0f,0xd1,0xef,0xf0,0x12,0x0e,0x4a,0xe0,0xff,0x12,0x0f,0xc6,0xef,0xf0,0x0d,0xbd,0x04,0xe8,0x7d,0x03,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0xe0,0xff,0x12,0x10,0x7b,0xef,0xf0,0x74,0x88,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0xe0,0xff,0x12,0x10,0x86,0xef,0xf0,0xdd,0xdc,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x04,0x50,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x85,0xef,0x12,0x0d,0xbe,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xc3,0x94,0x04,0x50,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x89,0xef,0xf0,0xc3,0x90,0x40,0x15,0xe0,0x94,0x32,0x12,0x0e,0x67,0x50,0x39,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0x12,0x10,0xf0,0x50,0x0e,0x12,0x0e,0xfd,0x50,0x09,0xe4,0x90,0x40,0x68,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xf0,0x90,0x40,0x08,0xe0,0x54,0x7f,0xff,0x22,0xf5,0x83,0xe0,0xf9,0x24,0x02,0xff,0xe4,0x33,0xfe,0x74,0x11,0x2d,0xf8,0xe6,0xfc,0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x22,0x90,0x40,0x10,0xe0,0xf9,0x90,0x40,0x07,0xe0,0xff,0xc3,0x99,0x13,0x13,0x13,0x54,0x1f,0xfe,0x90,0x40,0x11,0xe0,0xc3,0x9f,0x13,0x13,0x13,0x54,0x1f,0xff,0x22,0x90,0x40,0x07,0xe0,0xff,0xc3,0x74,0x80,0x9f,0xff,0x22,0xf0,0x90,0x40,0x0c,0xe0,0xc4,0x54,0x0f,0x22,0x90,0x40,0x0c,0xe0,0x13,0x13,0x13,0x54,0x1f,0x22,0x90,0x40,0x0c,0xe0,0xff,0x13,0x13,0x13,0x54,0x1f,0x22,0x90,0x40,0x38,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0x37,0xe0,0x2f,0xff,0x90,0x40,0x36,0xe0,0x3e,0xfe,0x7c,0x00,0x7d,0x05,0x02,0x1c,0xd2,0x74,0x11,0x2d,0xf8,0xe6,0xff,0x74,0x68,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x90,0x40,0x55,0xec,0xf0,0x90,0x40,0x50,0xe0,0xfc,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0x64,0x90,0x40,0x14,0xe0,0x94,0x00,0x22,0xaa,0x06,0xab,0x07,0xe0,0xff,0x90,0x40,0xa8,0x7e,0x00,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1c,0xd2,0xd3,0x22,0x7e,0x00,0x90,0x40,0x07,0xe0,0xfd,0xd3,0x94,0x80,0x22,0x90,0x40,0x07,0xe0,0xfd,0xc3,0x74,0x80,0x9d,0xfd,0x22,0x74,0x7d,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x90,0x40,0xac,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0xab,0xe0,0x2f,0xff,0x90,0x40,0xaa,0xe0,0x3e,0x90,0x40,0x59,0xfe,0xe0,0xfd,0x7c,0x00,0x02,0x1c,0xd2,0x2d,0xff,0x90,0x40,0x09,0xe0,0x54,0x03,0x22,0x90,0x40,0x07,0xe0,0xff,0xd3,0x94,0x80,0x22,0x90,0x40,0x0c,0xe0,0xff,0xc4,0x54,0x0f,0x22,0xe5,0x82,0x24,0x80,0xfb,0xe5,0x83,0x33,0xfa,0xc3,0xef,0x9b,0xe4,0x9a,0x22,0xfc,0xa3,0xf0,0xa3,0xeb,0xf0,0xec,0xa3,0xf0,0x90,0x40,0x57,0x74,0x02,0xf0,0xa3,0x22,0x90,0x40,0x31,0xe0,0x94,0x05,0x90,0x40,0x30,0xe0,0x94,0x00,0x22,0x90,0x40,0x0d,0xe0,0xff,0x54,0x07,0x25,0xe0,0xfe,0xef,0x13,0x13,0x13,0x54,0x01,0x2e,0x24,0x03,0x75,0xf0,0x05,0x84,0xaf,0xf0,0xef,0x14,0x22,0xef,0x13,0x13,0x13,0x54,0x1f,0x22,0x74,0x8d,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0xf5,0x82,0x75,0x83,0x00,0xc3,0x9b,0xe5,0x83,0x9a,0x22,0xe0,0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0x7e,0x2c,0x22,0xe0,0xff,0x90,0x40,0x08,0xe0,0x54,0x7f,0x22,0xef,0x24,0x01,0xff,0xe4,0x33,0xfe,0x22,0xd3,0x90,0x40,0x17,0xe0,0x94,0x0a,0x90,0x40,0x16,0xe0,0x94,0x00,0x22,0x90,0x40,0xa5,0xe0,0xff,0x90,0x40,0x07,0xe0,0xfe,0xd3,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0x2c,0x90,0x40,0x14,0xe0,0x94,0x01,0x22,0x90,0x40,0x07,0xe0,0xff,0x94,0x80,0x22,0xff,0x7c,0x00,0x7d,0x7f,0x12,0x1c,0xd2,0xc3,0x90,0x40,0x35,0xe0,0x9f,0x90,0x40,0x34,0xe0,0x9e,0x22,0xed,0x2f,0xff,0xe4,0x3e,0xfe,0x22,0x74,0x74,0x2d,0xf5,0x82,0xe4,0x34,0x40,0x22,0x90,0x40,0x14,0xe0,0xfe,0xa3,0xe0,0xa8,0x07,0x08,0x22,0xef,0xf0,0x90,0x40,0x50,0xe0,0xff,0x22,0x74,0x6c,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x74,0x70,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x74,0x81,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0xef,0x24,0x48,0xff,0xe4,0x33,0xfe,0xc3,0xef,0x94,0x7c,0xee,0x64,0x80,0x94,0x80,0x22,0x90,0x40,
143 0x50,0xf0,0x7d,0xff,0x7f,0xa9,0x7e,0x29,0x22,0x74,0x78,0x2d,0xf5,0x82,0xe4,0x34,0x40,0x22,0xd3,0x90,0x40,0x43,0xe0,0x94,0x00,0x90,0x40,0x42,0xe0,0x94,0x00,0x22,0xe0,0xfc,0xa3,0xe0,0x2f,0xff,0xec,0x3e,0xfe,0x22,0xef,0x2e,0xf5,0x11,0x90,0x40,0xf8,0xf0,0xd3,0x22,0x90,0x40,0x48,0xe0,0x54,0xf0,0x22,0x90,0x40,0x07,0xe0,0x64,0x80,0x22,0x90,0x40,0x07,0xe0,0xff,0x90,0x40,0xa5,0xe0,0xc3,0x9f,0xff,0x22,0x90,0x40,0xa5,0xe0,0xfe,0x90,0x40,0x07,0xe0,0xfd,0xd3,0x9e,0x22,0x90,0x40,0x07,0xe0,0xfe,0x90,0x40,0xa5,0xe0,0xc3,0x9e,0xfe,0x22,0xa3,0xe0,0x54,0x7f,0x64,0x40,0x22,0xe0,0xfe,0x13,0x13,0x13,0x54,0x1f,0xfd,0x22,0xa3,0xf0,0xa3,0x74,0x02,0xf0,0xa3,0x22,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x74,0x89,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0xec,0x24,0x02,0xff,0xe4,0x33,0xfe,0x22,0xe0,0xfb,0xc3,0xef,0x9b,0x74,0x80,0xf8,0x6e,0x98,0x22,0x90,0x40,0x6b,0xe0,0xc3,0x94,0x08,0x22,0xfe,0xe0,0x2f,0xff,0xe4,0x3e,0xfe,0xef,0x25,0xe0,0x22,0xe0,0xc4,0x13,0x13,0x13,0x54,0x01,0x22,0x24,0x90,0xfd,0xe4,0x33,0xfc,0xe0,0xd3,0x9d,0xec,0x22,0x90,0x40,0x15,0xe0,0x9f,0x90,0x40,0x14,0xe0,0x9e,0x22,0x90,0x40,0x04,0xe0,0x64,0x78,0x22,0xe4,0x33,0x54,0x01,0x33,0x33,0x33,0x54,0xf8,0x22,0xac,0x06,0xef,0x54,0xfe,0xf0,0xec,0x54,0x7f,0x22,0xd3,0xef,0x94,0x04,0xee,0x64,0x80,0x94,0x80,0x22,0x90,0x40,0xa2,0x74,0xf0,0xf0,0x22,0x90,0x40,0x14,0xe0,0xfe,0xa3,0xe0,0x78,0x06,0x22,0x90,0x40,0x3a,0xe0,0xfe,0xa3,0xe0,0x78,0x07,0x22,0xc3,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x11,0xdd,0xd3,0xef,0x94,0x02,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x11,0xdd,0xad,0x07,0xed,0x25,0xe0,0xfc,0x24,0x08,0xfb,0x90,0x40,0x5c,0xf0,0xec,0x24,0x04,0x12,0x0e,0xec,0x74,0x0d,0xf0,0x74,0x0b,0x12,0x10,0x73,0x74,0x0a,0x12,0x0e,0x59,0xb4,0x04,0x06,0xed,0x24,0x03,0xfc,0x80,0x19,0xec,0xb4,0x03,0x06,0xed,0x24,0x04,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x02,0x06,0xed,0x24,0x05,0xfc,0x80,0x02,0x7c,0x09,0x12,0x0e,0x55,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x03,0x04,0x7c,0x0a,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7c,0x09,0x80,0x02,0x7c,0x08,0x90,0x40,0x53,0x12,0x0e,0x58,0xb4,0x04,0x06,0xed,0x24,0x03,0xfc,0x80,0x19,0xec,0xb4,0x02,0x06,0xed,0x24,0x04,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x01,0x06,0xed,0x24,0x07,0xfc,0x80,0x02,0x7c,0x0a,0x90,0x40,0x56,0x12,0x0e,0x58,0xb4,0x04,0x05,0x7c,0x0a,0x02,0x13,0x74,0xec,0xb4,0x02,0x04,0x7c,0x09,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7c,0x08,0x80,0x02,0x7c,0x06,0x02,0x13,0x74,0xc3,0xef,0x94,0x03,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x12,0xa8,0xd3,0xef,0x94,0x05,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x12,0xa8,0xef,0x24,0xfd,0xfd,0x25,0xe0,0xfc,0x24,0x1b,0xfb,0x90,0x40,0x5c,0xf0,0xec,0x24,0x08,0x12,0x0e,0xec,0x74,0x0b,0xf0,0x74,0x09,0x12,0x10,0x73,0x74,0x0a,0x12,0x0e,0x59,0xb4,0x04,0x06,0xed,0x24,0x05,0xfc,0x80,0x19,0xec,0xb4,0x03,0x06,0xed,0x24,0x06,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x02,0x06,0xed,0x24,0x06,0xfc,0x80,0x02,0x7c,0x09,0x12,0x0e,0x55,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x03,0x04,0x7c,0x09,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7c,0x08,0x80,0x02,0x7c,0x07,0x90,0x40,0x53,0x12,0x0e,0x58,0xb4,0x04,0x06,0xed,0x24,0x05,0xfc,0x80,0x19,0xec,0xb4,0x02,0x06,0xed,0x24,0x06,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x01,0x06,0xed,0x24,0x08,0xfc,0x80,0x02,0x7c,0x0a,0x90,0x40,0x56,0x12,0x0e,0x58,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x02,0x04,0x7c,0x07,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7c,0x07,0x80,0x02,0x7c,0x05,0x02,0x13,0x74,0xc3,0xef,0x94,0x06,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x13,0x7a,0xd3,0xef,0x94,0x08,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x13,0x7a,0xef,0x24,0xfa,0xfd,0x75,0xf0,0x08,0xa4,0x24,0x32,0x90,0x40,0x5c,0xf0,0xed,0x25,0xe0,0x25,0xe0,0xfc,0x24,0x12,0xa3,0xf0,0xec,0x24,0x26,0xa3,0xf0,0xed,0x25,0xe0,0x25,0xe0,0x24,0x10,0x12,0x0e,0xf3,0x74,0x09,0xf0,0x12,0x10,0x73,0x74,0x05,0x12,0x0e,0x59,0xb4,0x04,0x06,0xed,0x24,0x07,0xfc,0x80,0x19,0xec,0xb4,0x03,0x06,0xed,0x24,0x08,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x02,0x06,0xed,0x24,0x08,0xfc,0x80,0x02,0x7c,0x09,0x12,0x0e,0x55,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x03,0x04,0x7c,0x09,0x80,0x0d,0x90,0x40,
144 0x50,0xe0,0xb4,0x02,0x04,0x7c,0x05,0x80,0x02,0x7c,0x03,0x90,0x40,0x53,0x12,0x0e,0x58,0xb4,0x04,0x04,0x7c,0x07,0x80,0x0e,0xec,0xb4,0x02,0x04,0x7c,0x09,0x80,0x06,0x90,0x40,0x50,0xe0,0x7c,0x0a,0x90,0x40,0x56,0x12,0x0e,0x58,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x02,0x04,0x7c,0x06,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7c,0x05,0x80,0x02,0x7c,0x03,0x90,0x40,0x54,0xec,0xf0,0x22,0xc3,0xef,0x94,0x09,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x14,0x38,0xd3,0xef,0x94,0x0a,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x14,0x38,0xef,0x24,0xf7,0xfd,0x90,0x40,0x5c,0x74,0x40,0xf0,0xa3,0x74,0x28,0xf0,0xa3,0x74,0x40,0xf0,0x74,0x28,0x12,0x0e,0xf3,0x74,0x08,0xf0,0xa3,0xf0,0xa3,0x74,0x04,0xf0,0xa3,0x04,0x12,0x0f,0xbf,0xb4,0x04,0x06,0xed,0x24,0x09,0xff,0x80,0x10,0xef,0xb4,0x03,0x06,0xed,0x24,0x09,0xff,0x80,0x06,0x90,0x40,0x50,0xe0,0x7f,0x0a,0x90,0x40,0x55,0x12,0x0f,0xbe,0xb4,0x04,0x04,0x7f,0x0a,0x80,0x15,0xef,0xb4,0x03,0x04,0x7f,0x08,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7f,0x03,0x80,0x02,0x7f,0x01,0x90,0x40,0x53,0x12,0x0f,0xbe,0xb4,0x04,0x04,0x7f,0x07,0x80,0x0e,0xef,0xb4,0x02,0x04,0x7f,0x09,0x80,0x06,0x90,0x40,0x50,0xe0,0x7f,0x0a,0x90,0x40,0x56,0x12,0x0f,0xbe,0xb4,0x04,0x04,0x7f,0x0a,0x80,0x15,0xef,0xb4,0x02,0x04,0x7f,0x03,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7f,0x02,0x80,0x02,0x7f,0x01,0x90,0x40,0x54,0xef,0xf0,0x22,0x90,0x40,0xa2,0xe0,0xff,0xd3,0x94,0xe6,0x40,0x05,0xe4,0xfb,0x02,0x16,0xe4,0x90,0x40,0xa7,0xe0,0x70,0x03,0x02,0x14,0xfd,0xe4,0x90,0x40,0xf7,0xf0,0x90,0x40,0xf6,0xf0,0x90,0x40,0xf5,0xf0,0x90,0x40,0x49,0xe0,0x54,0xf0,0x12,0x0e,0x0b,0xfe,0x30,0xe0,0x07,0x90,0x40,0x5c,0xe0,0xfd,0x80,0x05,0x90,0x40,0x5e,0xe0,0xfd,0xef,0xd3,0x9d,0x50,0x15,0x90,0x40,0x52,0xe0,0xff,0x94,0x03,0x50,0x07,0x90,0x40,0xee,0xe0,0xfd,0x80,0x02,0x7d,0x00,0xed,0x60,0x05,0x90,0x40,0xac,0x80,0x31,0xee,0x30,0xe0,0x07,0x90,0x40,0x5d,0xe0,0xfe,0x80,0x05,0x90,0x40,0x5f,0xe0,0xfe,0x90,0x40,0xa2,0xe0,0xc3,0x9e,0x50,0x11,0xef,0x94,0x03,0x50,0x04,0x7f,0x00,0x80,0x05,0x90,0x40,0xee,0xe0,0xff,0xef,0x60,0x05,0x90,0x40,0xaa,0x80,0x03,0x90,0x40,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x1d,0x39,0x12,0x2e,0x72,0xab,0x07,0x90,0x40,0xaa,0xe0,0xfe,0xa3,0xe0,0xff,0xa3,0x12,0x10,0x1a,0x90,0x40,0xa8,0x12,0x10,0x1a,0xd3,0xef,0x94,0xc8,0xee,0x94,0x00,0x50,0x03,0x02,0x16,0xf3,0xe4,0x90,0x40,0xa7,0xf0,0x90,0x40,0xa2,0xf0,0x02,0x16,0xf3,0x12,0x0e,0xd4,0xf9,0x30,0xe0,0x23,0x90,0x40,0x50,0xe0,0xfe,0xb4,0x04,0x04,0x7e,0x1e,0x80,0x2d,0xee,0xb4,0x03,0x04,0x7e,0x1f,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7e,0x22,0x80,0x02,0x7e,0x24,0x80,0x16,0x90,0x40,0x50,0xe0,0xfe,0xb4,0x04,0x04,0x7e,0x1e,0x80,0x0a,0xee,0xb4,0x02,0x04,0x7e,0x38,0x80,0x02,0x7e,0x58,0xee,0xfd,0x33,0x95,0xe0,0xfc,0x90,0x40,0xa3,0xe0,0xd3,0x9d,0xec,0x12,0x0d,0xda,0x50,0x03,0x02,0x15,0xec,0x90,0x40,0xf5,0xe0,0x70,0x03,0x02,0x15,0xec,0x90,0x40,0x50,0xe0,0xfe,0x64,0x04,0x70,0x03,0x02,0x15,0xec,0xe4,0x90,0x40,0xa3,0xf0,0x90,0x40,0xf7,0x04,0xf0,0xee,0x70,0x09,0x7b,0x01,0x90,0x40,0x4f,0xf0,0x02,0x16,0xf3,0xee,0xb4,0x01,0x0d,0x90,0x40,0x4f,0xe0,0x70,0x07,0x7b,0x01,0x04,0xf0,0x02,0x16,0xf3,0x90,0x40,0x50,0xe0,0xb4,0x01,0x0c,0x90,0x40,0x4f,0xe0,0xb4,0x01,0x05,0x7b,0x01,0x02,0x16,0x8e,0x90,0x40,0x50,0xe0,0xfe,0xb4,0x01,0x0c,0x90,0x40,0x4f,0xe0,0xb4,0x02,0x05,0x7b,0x02,0x02,0x16,0xf3,0xee,0xb4,0x02,0x19,0x12,0x0f,0x26,0x30,0xe0,0x05,0x7b,0x04,0x02,0x16,0xf3,0xe9,0x30,0xe0,0x05,0x7b,0x03,0x02,0x16,0xf3,0x7b,0x04,0x02,0x16,0xf3,0x90,0x40,0x50,0xe0,0xff,0xb4,0x03,0x05,0x7b,0x04,0x02,0x16,0xf3,0xef,0x64,0x04,0x60,0x03,0x02,0x16,0xf3,0x7b,0x04,0x02,0x16,0xf3,0xe9,0x30,0xe0,0x28,0x90,0x40,0x50,0xe0,0xff,0xb4,0x04,0x04,0x7f,0x2e,0x80,0x15,0xef,0xb4,0x03,0x04,0x7f,0x42,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7f,0x70,0x80,0x02,0x7f,0x50,0xef,0x33,0x95,0xe0,0xfe,0x80,0x1e,0x90,0x40,0x50,0xe0,0xff,0xb4,0x04,0x0a,0x7c,0x00,0x7d,0x2e,0x7e,0x00,0x7f,0x2e,0x80,0x0c,0xef,0x7e,0x00,0xb4,0x02,0x04,0x7f,0x58,0x80,0x02,0x7f,0x88,0x90,0x40,0xa2,0xe0,0x12,0x0d,0xd7,0x50,0x03,0x02,0x16,0xd0,0x90,0x40,0xf5,0xe0,0x70,0x03,0x02,0x16,0xd0,0x90,0x40,0x49,0xe0,0x44,0x0f,0xf0,0xe4,0x90,0x40,0xa2,0xf0,0x90,0x40,0xf6,0x04,0x12,0x0f,0xbf,
145 0x64,0x04,0x70,0x17,0xe9,0x30,0xe0,0x05,0x7b,0x03,0x02,0x16,0xf3,0x12,0x0e,0x14,0x30,0xe0,0x04,0x7b,0x02,0x80,0x7e,0xe4,0xfb,0x80,0x7a,0xef,0xb4,0x03,0x04,0x7b,0x02,0x80,0x72,0x90,0x40,0x50,0xe0,0xff,0xb4,0x02,0x0a,0x7b,0x01,0x90,0x40,0x4f,0x74,0x02,0xf0,0x80,0x60,0xef,0xb4,0x01,0x0e,0x90,0x40,0x4f,0xe0,0xb4,0x02,0x07,0x7b,0x01,0x74,0x01,0xf0,0x80,0x4e,0x90,0x40,0x50,0xe0,0xb4,0x01,0x0d,0x90,0x40,0x4f,0xe0,0xb4,0x01,0x06,0x7b,0x01,0xe4,0xf0,0x80,0x3a,0x90,0x40,0x50,0xe0,0xff,0xb4,0x01,0x09,0x90,0x40,0x4f,0xe0,0x70,0x03,0xfb,0x80,0x29,0xef,0x70,0x26,0xfb,0x80,0x23,0x90,0x40,0xf6,0xe0,0x70,0x18,0xa3,0xe0,0x70,0x14,0x12,0x2e,0x72,0xab,0x07,0x90,0x40,0xf5,0x74,0x01,0xf0,0x90,0x40,0x49,0xe0,0x54,0xf0,0xf0,0x80,0x05,0x90,0x40,0x50,0xe0,0xfb,0xaf,0x03,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0xe8,0x90,0x40,0x14,0xe0,0x94,0x03,0x40,0x0d,0x90,0x40,0xef,0xe0,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x40,0xef,0xf0,0x90,0x40,0xed,0xe0,0xc3,0x94,0x0a,0x50,0x0b,0x90,0x40,0xef,0xe0,0x94,0x02,0x40,0x0f,0x7f,0x05,0x22,0x90,0x40,0xef,0xe0,0xd3,0x94,0x05,0x40,0x03,0x7f,0x05,0x22,0x12,0x0e,0xc4,0xfe,0xc3,0x94,0x03,0x50,0x34,0x12,0x0e,0xd4,0x30,0xe0,0x0e,0x90,0x40,0x31,0xe0,0x94,0x2c,0x90,0x40,0x30,0xe0,0x94,0x01,0x50,0x12,0x12,0x0f,0x26,0x30,0xe0,0x1a,0xd3,0x90,0x40,0x31,0xe0,0x94,0x96,0x12,0x0f,0x03,0x40,0x0e,0x90,0x40,0xf1,0xe0,0xc3,0x94,0x08,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xf1,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0xf1,0xe0,0xd3,0x94,0x03,0x40,0x03,0x7f,0x08,0x22,0x90,0x40,0x06,0xe0,0xff,0x64,0x01,0x60,0x08,0xef,0x64,0x02,0x60,0x03,0x02,0x19,0x10,0xee,0xc3,0x94,0x03,0x40,0x26,0x90,0x40,0xc3,0xe0,0x94,0x03,0x40,0x1e,0x90,0x40,0x14,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x51,0x90,0x40,0x16,0xe0,0x70,0x02,0xa3,0xe0,0x70,0x0a,0x90,0x40,0x18,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x3d,0x90,0x40,0xed,0xe0,0xff,0xc3,0x94,0x0a,0x50,0x0e,0x90,0x40,0x10,0xe0,0xfe,0xa3,0xe0,0xc3,0x9e,0xd3,0x94,0x24,0x50,0x13,0xef,0xc3,0x94,0x0a,0x40,0x1f,0x90,0x40,0x10,0xe0,0xff,0xa3,0xe0,0x9f,0xd3,0x94,0x38,0x40,0x12,0x12,0x0f,0x79,0x40,0x0d,0x90,0x40,0xf0,0xe0,0x94,0x0a,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xf0,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0xf0,0xe0,0xd3,0x94,0x05,0x40,0x03,0x7f,0x01,0x22,0x90,0x40,0xed,0xe0,0xfe,0xc3,0x94,0x0a,0x40,0x10,0x90,0x40,0x12,0xe0,0xff,0xa3,0xe0,0x9f,0xd3,0x94,0x40,0x40,0x03,0x7f,0x02,0x22,0x90,0x40,0x09,0xe0,0xfd,0x54,0x03,0xc3,0x94,0x03,0x40,0x08,0x90,0x40,0xc3,0xe0,0x94,0x03,0x50,0x29,0xee,0xc3,0x94,0x0a,0x50,0x14,0x12,0x0e,0x0c,0x20,0xe0,0x0e,0x90,0x40,0x15,0xe0,0x94,0xc8,0x12,0x0e,0x67,0x40,0x12,0x7f,0x03,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0xf4,0x12,0x0f,0x80,0x40,0x03,0x7f,0x03,0x22,0x90,0x40,0x16,0xe0,0xfe,0xa3,0xe0,0xff,0xd3,0x94,0x64,0xee,0x94,0x00,0x40,0x09,0xd3,0x12,0x10,0xca,0x40,0x03,0x7f,0x04,0x22,0x90,0x40,0x11,0xe0,0xff,0xb4,0xff,0x13,0x90,0x40,0x10,0xe0,0x70,0x0d,0x90,0x40,0x13,0xe0,0xb4,0x7f,0x06,0x90,0x40,0x12,0xe0,0x60,0x3c,0x12,0x0e,0x60,0x40,0x37,0x12,0x0f,0x5f,0x40,0x32,0xed,0x54,0x03,0x94,0x03,0x50,0x2b,0x90,0x40,0x13,0xe0,0xc3,0x94,0x78,0x50,0x15,0x90,0x40,0x12,0xe0,0x94,0x08,0x40,0x0d,0xef,0x94,0xf8,0x50,0x08,0x90,0x40,0x10,0xe0,0x94,0x08,0x50,0x0d,0x12,0x10,0x35,0x60,0x08,0x12,0x10,0x0c,0x40,0x03,0x7f,0x09,0x22,0x12,0x0e,0x14,0xfe,0x30,0xe0,0x14,0xd3,0x90,0x40,0x31,0xe0,0x94,0x32,0x12,0x0f,0x03,0x40,0x08,0x12,0x0e,0x60,0x40,0x03,0x7f,0x0a,0x22,0xee,0x30,0xe0,0x14,0xd3,0x90,0x40,0x31,0xe0,0x94,0x14,0x12,0x0f,0x03,0x40,0x08,0x12,0x0f,0x79,0x40,0x03,0x7f,0x0b,0x22,0x7f,0x00,0x22,0x12,0x37,0xd6,0x8f,0x14,0x12,0x38,0xfa,0xef,0x70,0x06,0x90,0x40,0xd1,0xf0,0x80,0x0a,0x90,0x40,0xd1,0xe0,0xf4,0x60,0x03,0xe0,0x2f,0xf0,0x90,0x40,0xd1,0xe0,0xd3,0x94,0x16,0x40,0x0d,0xa3,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0x74,0x01,0xf0,0xff,0x22,0x90,0x40,0xd4,0xe0,0xb4,0x01,0x1c,0x90,0x40,0xd2,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x0d,0x90,0x40,0xd2,0x74,0xff,0xf5,0xf0,0x12,0x1d,0x39,0x7f,0x01,0x22,0xe4,0x90,0x40,0xd4,0xf0,0x90,0x40,0x10,0xe0,0xff,0xa3,0xe0,0xfe,0xc3,0x9f,0x40,0x5f,0xa3,0xe0,0xfd,0xa3,0xe0,0xfc,0x9d,0x40,0x56,0xee,0xb4,0xff,0x0a,0xef,0x70,0x07,0xec,0xb4,0x7f,0x03,0xed,0x60,0x5a,0xd3,0x90,0x40,0x15,0xe0,0x94,
146 0x20,0x90,0x40,0x14,0xe0,0x94,0x03,0x40,0x4b,0xd3,0x90,0x40,0x17,0xe0,0x94,0x64,0x12,0x0f,0x66,0x40,0x3f,0x12,0x0e,0xc4,0x94,0x03,0x50,0x38,0x90,0x40,0x13,0xe0,0xc3,0x94,0x78,0x50,0x18,0x90,0x40,0x12,0xe0,0x94,0x08,0x40,0x10,0x90,0x40,0x11,0xe0,0x94,0xf8,0x50,0x08,0x90,0x40,0x10,0xe0,0x94,0x08,0x50,0x17,0x12,0x10,0x35,0x60,0x12,0x12,0x10,0x0c,0x40,0x0d,0x90,0x40,0xcd,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xcd,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0xc5,0xe0,0xff,0x90,0x40,0xc4,0xe0,0x2f,0xff,0xe4,0x33,0xfe,0x90,0x40,0xc6,0xe0,0x7c,0x00,0x2f,0xff,0xec,0x3e,0xfe,0x12,0x10,0x1c,0x12,0x0e,0xc4,0x60,0x03,0x02,0x1a,0xaf,0x90,0x40,0x11,0xe0,0xb4,0xff,0x16,0x90,0x40,0x10,0xe0,0x70,0x10,0x90,0x40,0x13,0xe0,0xb4,0x7f,0x09,0x90,0x40,0x12,0xe0,0x70,0x03,0x02,0x1a,0xaf,0x90,0x40,0xbd,0xe0,0xb4,0xff,0x13,0x90,0x40,0xbf,0xe0,0x70,0x0d,0x90,0x40,0x13,0xe0,0xb4,0x7f,0x06,0x90,0x40,0x12,0xe0,0x60,0x68,0x90,0x40,0xbf,0xe0,0xfd,0x90,0x40,0x10,0xe0,0xf9,0x2d,0xfd,0xe4,0x33,0xfc,0x90,0x40,0xc0,0xe0,0x7a,0x00,0x2d,0xfd,0xea,0x3c,0xfc,0xc3,0xed,0x94,0x80,0xec,0x64,0x80,0x94,0x80,0x50,0x43,0xe9,0x90,0x40,0x11,0x12,0x10,0xbf,0x12,0x0d,0xda,0x40,0x37,0x90,0x40,0xbf,0xe0,0x90,0x40,0xbd,0x12,0x10,0xbf,0x12,0x0d,0xda,0x40,0x28,0x12,0x0e,0x60,0x40,0x23,0x12,0x0f,0x5f,0x40,0x1e,0xd3,0xef,0x94,0x10,0xee,0x94,0x00,0x40,0x15,0x90,0x40,0x07,0xe0,0x64,0x7c,0x60,0x0d,0x90,0x40,0xe1,0xe0,0x94,0x08,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xe1,0xe0,0x60,0x02,0x14,0xf0,0x12,0x0e,0xc4,0x70,0x17,0x12,0x0f,0x6d,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x03,0x12,0x10,0x3c,0xef,0xd3,0x94,0x80,0x40,0x03,0x7f,0x07,0x22,0x90,0x40,0x07,0xe0,0xff,0xd3,0x94,0x02,0x40,0x13,0xef,0x94,0xfe,0x50,0x0e,0xa3,0xe0,0x54,0x7f,0xff,0x94,0x02,0x40,0x05,0xef,0x94,0x7e,0x40,0x25,0xd3,0x90,0x40,0x15,0xe0,0x94,0x00,0x12,0x0f,0x80,0x40,0x19,0xd3,0x90,0x40,0x17,0xe0,0x94,0x20,0x12,0x0f,0x66,0x40,0x0d,0x90,0x40,0x30,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x03,0x7f,0x09,0x22,0x7f,0x00,0x22,0x90,0x41,0x00,0xe0,0x60,0x03,0x02,0x1b,0xe2,0x90,0x41,0x04,0xe0,0x70,0x09,0x90,0x40,0xb7,0xe0,0x60,0x03,0x02,0x1b,0xe2,0x90,0x40,0xa7,0xe0,0xff,0x64,0xfe,0x70,0x03,0x02,0x1b,0xe2,0x90,0x41,0x03,0xe0,0x6f,0x60,0x06,0xef,0x60,0x03,0x02,0x1b,0xe2,0x90,0x40,0x0a,0x12,0x0f,0x70,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0x07,0xe0,0xff,0x90,0x40,0x0a,0xe0,0xc3,0x9f,0xff,0xef,0xc3,0x94,0x10,0x50,0x1f,0x90,0x40,0x0b,0x12,0x0f,0x4e,0xfe,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0a,0x12,0x0d,0xbf,0x90,0x40,0x0b,0xe0,0xc3,0x9f,0xff,0xef,0xc3,0x94,0x08,0x40,0x62,0x90,0x40,0x2a,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0x3c,0xe0,0xfc,0xa3,0xe0,0xfd,0xd3,0x9f,0xec,0x9e,0x40,0x08,0xed,0x9f,0xff,0xec,0x9e,0xfe,0x80,0x15,0x90,0x40,0x3c,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x90,0x40,0x2b,0xe0,0x9f,0xff,0x90,0x40,0x2a,0xe0,0x9e,0xfe,0xc3,0xef,0x94,0xf4,0xee,0x94,0x01,0x50,0x26,0x90,0x40,0x3e,0xe0,0xfe,0xa3,0xe0,0x78,0x02,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xff,0xc3,0x90,0x40,0x3d,0xe0,0x9f,0x90,0x40,0x3c,0xe0,0x9e,0x50,0x08,0x90,0x41,0x01,0x74,0x01,0xf0,0x80,0x13,0x90,0x41,0x01,0xe0,0x60,0x08,0x90,0x40,0x9b,0xe0,0x60,0x07,0x80,0x00,0xe4,0x90,0x41,0x01,0xf0,0x90,0x41,0x01,0xe0,0x60,0x35,0x7b,0x04,0xe4,0xfd,0x7f,0x74,0x7e,0x26,0x12,0x39,0xe5,0x90,0x26,0x75,0x74,0x0f,0xf0,0x90,0x26,0x7b,0x74,0x05,0xf0,0x90,0x26,0x73,0x74,0x40,0xf0,0x90,0x26,0x72,0x74,0x80,0xf0,0x90,0x40,0xfd,0x74,0x40,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x41,0x01,0x74,0x01,0xf0,0x80,0x56,0x12,0x0d,0xbf,0x90,0x40,0xfd,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x09,0x90,0x40,0xfd,0x12,0x0f,0x4e,0xc3,0x9f,0xff,0xef,0xc3,0x94,0x06,0x7b,0x04,0x40,0x04,0x7d,0x01,0x80,0x02,0xe4,0xfd,0x7f,0x74,0x7e,0x26,0x12,0x39,0xe5,0x12,0x0f,0x50,0x90,0x40,0xfd,0xf0,0x90,0x40,0x07,0xe0,0x90,0x40,0xfe,0xf0,0x90,0x26,0x75,0x74,0x0a,0xf0,0x90,0x26,0x7b,0x14,0xf0,0x90,0x26,0x73,0xe4,0xf0,0x90,0x26,0x72,0xf0,0x90,0x41,0x01,0xf0,0x90,0x41,0x01,0xe0,0xa3,0xf0,0x90,0x40,0xa7,0xe0,0x90,0x41,0x03,0xf0,0x90,0x40,0xb7,0xe0,0x90,0x41,0x04,0xf0,0x12,0x0e,0xd4,0x30,0xe0,0x04,0x7f,0x03,0x80,0x0c,0x12,0x0f,0x26,0x30,0xe0,0x04,0x7f,0x02,0x80,0x02,0x7f,0x01,0x90,0x40,0xff,0xe0,0x6f,0x60,0x04,0x7e,
147 0x01,0x80,0x02,0x7e,0x00,0x90,0x41,0x00,0xee,0xf0,0x90,0x40,0xff,0xef,0xf0,0x22,0xef,0x8d,0xf0,0xa4,0xa8,0xf0,0xcf,0x8c,0xf0,0xa4,0x28,0xce,0x8d,0xf0,0xa4,0x2e,0xfe,0x22,0xbc,0x00,0x0b,0xbe,0x00,0x29,0xef,0x8d,0xf0,0x84,0xff,0xad,0xf0,0x22,0xe4,0xcc,0xf8,0x75,0xf0,0x08,0xef,0x2f,0xff,0xee,0x33,0xfe,0xec,0x33,0xfc,0xee,0x9d,0xec,0x98,0x40,0x05,0xfc,0xee,0x9d,0xfe,0x0f,0xd5,0xf0,0xe9,0xe4,0xce,0xfd,0x22,0xed,0xf8,0xf5,0xf0,0xee,0x84,0x20,0xd2,0x1c,0xfe,0xad,0xf0,0x75,0xf0,0x08,0xef,0x2f,0xff,0xed,0x33,0xfd,0x40,0x07,0x98,0x50,0x06,0xd5,0xf0,0xf2,0x22,0xc3,0x98,0xfd,0x0f,0xd5,0xf0,0xea,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xef,0x2b,0xff,0xee,0x3a,0xfe,0xed,0x39,0xfd,0xec,0x38,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,0x75,0xf0,0x08,0x75,0x82,0x00,0xef,0x2f,0xff,0xee,0x33,0xfe,0xcd,0x33,0xcd,0xcc,0x33,0xcc,0xc5,0x82,0x33,0xc5,0x82,0x9b,0xed,0x9a,0xec,0x99,0xe5,0x82,0x98,0x40,0x0c,0xf5,0x82,0xee,0x9b,0xfe,0xed,0x9a,0xfd,0xec,0x99,0xfc,0x0f,0xd5,0xf0,0xd6,0xe4,0xce,0xfb,0xe4,0xcd,0xfa,0xe4,0xcc,0xf9,0xa8,0x82,0x22,0xb8,0x00,0xc1,0xb9,0x00,0x59,0xba,0x00,0x2d,0xec,0x8b,0xf0,0x84,0xcf,0xce,0xcd,0xfc,0xe5,0xf0,0xcb,0xf9,0x78,0x18,0xef,0x2f,0xff,0xee,0x33,0xfe,0xed,0x33,0xfd,0xec,0x33,0xfc,0xeb,0x33,0xfb,0x10,0xd7,0x03,0x99,0x40,0x04,0xeb,0x99,0xfb,0x0f,0xd8,0xe5,0xe4,0xf9,0xfa,0x22,0x78,0x18,0xef,0x2f,0xff,0xee,0x33,0xfe,0xed,0x33,0xfd,0xec,0x33,0xfc,0xc9,0x33,0xc9,0x10,0xd7,0x05,0x9b,0xe9,0x9a,0x40,0x07,0xec,0x9b,0xfc,0xe9,0x9a,0xf9,0x0f,0xd8,0xe0,0xe4,0xc9,0xfa,0xe4,0xcc,0xfb,0x22,0x75,0xf0,0x10,0xef,0x2f,0xff,0xee,0x33,0xfe,0xed,0x33,0xfd,0xcc,0x33,0xcc,0xc8,0x33,0xc8,0x10,0xd7,0x07,0x9b,0xec,0x9a,0xe8,0x99,0x40,0x0a,0xed,0x9b,0xfd,0xec,0x9a,0xfc,0xe8,0x99,0xf8,0x0f,0xd5,0xf0,0xda,0xe4,0xcd,0xfb,0xe4,0xcc,0xfa,0xe4,0xc8,0xf9,0x22,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0x74,0x02,0x93,0xfe,0x74,0x03,0x93,0xff,0x22,0x90,0x40,0x04,0xe0,0x64,0x3c,0x70,0x6b,0x12,0x0e,0x1e,0xfe,0x30,0xe0,0x10,0xef,0xc4,0x13,0x54,0x07,0x20,0xe0,0x04,0x7f,0x01,0x80,0x1a,0x7f,0x00,0x80,0x16,0x12,0x0e,0x0c,0x30,0xe0,0x17,0xa3,0xe0,0x54,0x07,0xff,0x60,0x03,0xbf,0x02,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9b,0xef,0xf0,0x80,0x06,0x90,0x40,0x9b,0x74,0x01,0xf0,0xe4,0x90,0x40,0x9c,0xf0,0xee,0x30,0xe0,0x08,0x90,0x40,0x0c,0xe0,0xc4,0x02,0x1f,0xf6,0x12,0x0e,0x0c,0x30,0xe0,0x16,0xa3,0xe0,0x54,0x07,0xff,0x64,0x04,0x60,0x03,0xbf,0x01,0x05,0x7f,0x01,0x02,0x1f,0xea,0x7f,0x00,0x02,0x1f,0xea,0xe4,0x02,0x1f,0xf9,0x12,0x0e,0x1e,0xfe,0x30,0xe0,0x17,0xef,0xc4,0x13,0x54,0x07,0x20,0xe0,0x0b,0xa3,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x3b,0x7f,0x00,0x80,0x37,0x12,0x0e,0x0c,0x30,0xe0,0x22,0xa3,0xe0,0xff,0x54,0x07,0xfd,0x70,0x06,0x12,0x0f,0x26,0x30,0xe0,0x0c,0xbd,0x02,0x0d,0x90,0x40,0x0d,0x12,0x0e,0x17,0x30,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x80,0x0f,0x90,0x40,0x0d,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9b,0xef,0xf0,0xee,0x30,0xe0,0x1a,0x90,0x40,0x0c,0xe0,0xc4,0x13,0x54,0x07,0x20,0xe0,0x0b,0xa3,0x12,0x0e,0x17,0x30,0xe0,0x04,0x7f,0x01,0x80,0x2a,0x7f,0x00,0x80,0x26,0x12,0x0e,0x0c,0x30,0xe0,0x27,0xa3,0xe0,0xff,0x54,0x07,0xfe,0x70,0x06,0x12,0x0f,0x26,0x20,0xe0,0x0c,0xbe,0x03,0x0d,0x90,0x40,0x0d,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9c,0xef,0xf0,0x80,0x05,0xe4,0x90,0x40,0x9c,0xf0,0x12,0x0e,0x1e,0x30,0xe0,0x17,0xef,0xc4,0x13,0x54,0x07,0x30,0xe0,0x0b,0xa3,0x12,0x0e,0x17,0x30,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x80,0x27,0x12,0x0e,0x0c,0x30,0xe0,0x27,0xa3,0xe0,0xff,0x54,0x07,0xfe,0xbe,0x04,0x06,0x12,0x0f,0x26,0x20,0xe0,0x0c,0xbe,0x02,0x0d,0x90,0x40,0x0d,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9d,0xef,0xf0,0x22,0x90,0x40,0x0d,0xe0,
148 0x13,0x13,0x13,0x54,0x01,0x90,0x40,0x9d,0xf0,0x22,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xd3,0xef,0x94,0x08,0xee,0x64,0x80,0x94,0x80,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x61,0xef,0xf0,0x60,0x25,0x12,0x0e,0x29,0xac,0x06,0xad,0x07,0x90,0x40,0x3a,0xe0,0x25,0xe0,0xff,0xe4,0x33,0xfe,0xd3,0xed,0x9f,0xec,0x9e,0x40,0x0d,0x90,0x40,0x63,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0x63,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0x61,0xe0,0xf9,0x60,0x27,0x12,0x0e,0x29,0xaa,0x06,0xab,0x07,0x90,0x40,0x3a,0xe0,0xff,0x7e,0x00,0x7d,0x03,0x12,0x1c,0xd2,0xd3,0xeb,0x9f,0xea,0x9e,0x40,0x0d,0x90,0x40,0x64,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0x64,0xe0,0x60,0x02,0x14,0xf0,0xe9,0x60,0x2b,0x12,0x0e,0x29,0xac,0x06,0xad,0x07,0x90,0x40,0x3a,0xe0,0x7e,0x00,0x78,0x02,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xd3,0xed,0x9f,0xec,0x9e,0x40,0x0d,0x90,0x40,0x65,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0x65,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0x65,0xe0,0xd3,0x94,0x04,0x40,0x04,0x7f,0x03,0x80,0x1c,0x90,0x40,0x64,0xe0,0xd3,0x94,0x04,0x40,0x04,0x7f,0x02,0x80,0x0f,0x90,0x40,0x63,0xe0,0xd3,0x94,0x04,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x62,0xef,0xf0,0xbf,0x03,0x0b,0x12,0x21,0x55,0xf0,0x44,0x40,0xf0,0x44,0x80,0xf0,0x22,0x90,0x40,0x62,0xe0,0xb4,0x02,0x08,0x12,0x21,0x55,0xf0,0x44,0x40,0x80,0x2f,0x90,0x40,0x62,0xe0,0xb4,0x01,0x16,0x7d,0x08,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x7f,0x03,0x12,0x31,0x8f,0x90,0x40,0x4a,0xe0,0x44,0x20,0x80,0x0f,0x7d,0x18,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x90,0x40,0x4a,0xe0,0x54,0xdf,0xf0,0x54,0xbf,0xf0,0x54,0x7f,0xf0,0x22,0x7d,0x08,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x7f,0x02,0x12,0x31,0x8f,0x90,0x40,0x4a,0xe0,0x44,0x20,0x22,0x7d,0x03,0x75,0x11,0x03,0x7f,0x03,0x7c,0x03,0xe4,0xf5,0x12,0xf5,0x13,0xf5,0x14,0xf5,0x15,0x90,0x40,0x92,0xe0,0xfe,0x60,0x06,0x90,0x40,0x91,0xe0,0x70,0x4b,0xee,0x60,0x24,0x90,0x40,0x68,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x05,0xad,0x06,0x90,0x40,0x69,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x11,0x8e,0x11,0x80,0x24,0x90,0x40,0x91,0xe0,0x60,0x1e,0x90,0x40,0x6a,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x07,0xaf,0x06,0x12,0x10,0xa4,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x04,0xac,0x06,0x90,0x40,0x7d,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x81,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x92,0xe0,0x60,0x02,0xe4,0xfd,0x90,0x40,0x7e,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x82,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x92,0xe0,0x60,0x03,0xe4,0xf5,0x11,0x90,0x40,0x7f,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x83,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x91,0xe0,0x60,0x02,0xe4,0xff,0x90,0x40,0x80,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x84,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x91,0xe0,0x60,0x02,0xe4,0xfc,0xef,0x33,0x95,0xe0,0x90,0x40,0x6a,0x12,0x10,0xac,0xf5,0x13,0xee,0x33,0xf5,0x12,0xaf,0x04,0xef,0x33,0x95,0xe0,0xa3,0x12,0x10,0xac,0xf5,0x15,0xee,0x33,0xf5,0x14,0x90,0x40,0x68,0xe0,0x2d,0xfd,0x7f,0x7c,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x69,0xe0,0x25,0x11,0xfd,0x7f,0x7d,0x7e,0x29,0x12,0x3b,0xaa,0xad,0x15,0xac,0x14,0x7f,0x7a,0x7e,0x29,0x12,0x3b,0x74,0xe5,0x12,0x44,0x80,0xfc,0xad,0x13,0x7f,0x78,0x7e,0x29,0x12,0x3b,0x74,0x90,0x40,0x68,0x7f,0x27,0x12,0x0f,0x43,0x12,0x3b,0xaa,0x90,0x40,0x69,0x7f,0x26,0x12,0x0f,0x43,0x12,0x3b,0xaa,0x90,0x40,0x6a,0x12,0x10,0xb7,0xfd,0x7f,0x25,0x7e,0x2c,0x12,0x3b,0xaa,0x90,0x40,0x6b,0x12,0x10,0xb7,0xfd,0x7f,0x24,0x7e,0x2c,0x02,0x3b,0xaa,0x90,0x41,0x9b,0xe0,0x70,0x6f,0x12,0x32,0x6e,0xef,0x70,0x06,0x12,0x2a,0x16,0xef,0x60,0x0e,0xc3,0x90,0x40,0x3a,0xe0,0x94,0x0c,0x50,0x05,0x7d,0x20,0x02,0x23,0x33,0x12,0x11,0x0b,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0f,0x8f,0x40,0x3f,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x50,0x50,0x2b,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0x12,0x0f,0xe7,0x50,0x14,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,
149 0x00,0xef,0x24,0x48,0xfd,0x80,0x02,0x7d,0x7c,0x80,0x02,0x7d,0x7c,0x7f,0x56,0x02,0x23,0xcc,0xd3,0x90,0x40,0x15,0xe0,0x94,0xc8,0x12,0x0e,0x67,0x40,0x21,0xd3,0x90,0x40,0x31,0xe0,0x94,0x20,0x12,0x0f,0x03,0x40,0x15,0x90,0x40,0x07,0xe0,0xb4,0x80,0x0e,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x06,0x75,0x11,0x30,0x02,0x23,0xb8,0x12,0x11,0x0b,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0f,0x8f,0x40,0x41,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x50,0x50,0x2d,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0x12,0x0f,0xe7,0x50,0x14,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0x24,0x48,0xff,0x80,0x02,0x7f,0x7c,0x8f,0x11,0x80,0x03,0x75,0x11,0x7c,0xc3,0x74,0x80,0x95,0x11,0xfd,0x7f,0x38,0x7e,0x29,0x12,0x3b,0xaa,0xe5,0x11,0x24,0x80,0xfd,0x7f,0x3a,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x41,0x0c,0xe0,0x60,0x0f,0x7f,0x96,0x7e,0x20,0x12,0x00,0x0e,0xef,0x30,0xe1,0x04,0x7d,0x0e,0x80,0x02,0x7d,0x0c,0x7f,0x13,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0e,0xd4,0x30,0xe0,0x07,0x90,0x41,0x0c,0x74,0x01,0xf0,0x22,0x12,0x0f,0x26,0x30,0xe0,0x05,0xe4,0x90,0x41,0x0c,0xf0,0x22,0x12,0x10,0xd5,0x70,0x32,0x90,0x40,0x0c,0x12,0x10,0x6a,0x30,0xe0,0x09,0xef,0x64,0x03,0x70,0x3f,0x7f,0x04,0x80,0x3b,0xee,0xc4,0x54,0x0f,0x20,0xe0,0x34,0xed,0x20,0xe0,0x30,0xef,0x64,0x03,0x60,0x03,0xbf,0x02,0x04,0x7f,0x04,0x80,0x24,0xef,0x64,0x01,0x70,0x1f,0x7f,0x04,0x80,0x1b,0xbf,0x01,0x04,0x7f,0x02,0x80,0x14,0xbf,0x03,0x11,0x90,0x40,0x0c,0xe0,0xfe,0xc4,0x54,0x0f,0x30,0xe0,0x04,0x7f,0x02,0x80,0x02,0x7f,0x04,0xef,0x70,0x03,0x02,0x24,0xf5,0x14,0x60,0x53,0x14,0x60,0x27,0x14,0x60,0x13,0x80,0x00,0x90,0x40,0x48,0xe0,0x44,0x0f,0x12,0x25,0x09,0xe4,0xff,0x12,0x3b,0xb1,0x02,0x24,0xf2,0x12,0x10,0x2e,0x44,0x07,0x12,0x25,0x09,0x7f,0x01,0x12,0x3b,0xb1,0x1f,0x02,0x24,0xf2,0x12,0x10,0x2e,0x44,0x03,0x12,0x0e,0x0b,0x30,0xe0,0x0e,0x90,0x40,0x04,0xe0,0xb4,0x78,0x07,0x12,0x25,0x14,0x7f,0x02,0x80,0x09,0x12,0x0e,0x14,0x30,0xe0,0x06,0x12,0x25,0x1e,0x12,0x3b,0xb1,0xe4,0xff,0x80,0x3c,0x12,0x10,0x2e,0x44,0x01,0xf0,0x12,0x10,0xd5,0x70,0x47,0x12,0x0e,0x0c,0x30,0xe0,0x07,0x12,0x25,0x14,0x7f,0x02,0x80,0x09,0x12,0x0e,0x14,0x30,0xe0,0x06,0x12,0x25,0x1e,0x12,0x3b,0xb1,0x90,0x40,0x4f,0xe0,0xb4,0x02,0x04,0x7f,0x01,0x80,0x0d,0x90,0x40,0x4f,0xe0,0xb4,0x01,0x04,0x7f,0x04,0x80,0x02,0x7f,0x07,0x02,0x36,0x5c,0x12,0x10,0x2e,0x12,0x0f,0xfb,0x12,0x3b,0xaa,0xe4,0xff,0x12,0x36,0x5c,0xe4,0xff,0x12,0x3b,0xb1,0x22,0xf0,0x7d,0x0f,0x7f,0xa9,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7d,0x0f,0x7f,0xa9,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7d,0x5f,0x7f,0xa9,0x7e,0x29,0x12,0x3b,0xaa,0xe4,0xff,0x22,0x01,0x1f,0x1c,0x41,0x40,0x05,0x00,0x41,0x40,0x4c,0xe8,0x41,0x40,0x4f,0x02,0x41,0x40,0x51,0x00,0x41,0x40,0x52,0x00,0x41,0x40,0x53,0x0a,0x41,0x40,0x54,0x0a,0x41,0x40,0x55,0x0a,0x41,0x40,0x56,0x0a,0x41,0x40,0x57,0x02,0x41,0x40,0x58,0x0a,0x41,0x40,0x59,0x09,0x41,0x40,0x5a,0x02,0x41,0x40,0x5b,0x05,0x41,0x40,0x5c,0x32,0x41,0x40,0x5d,0x1a,0x41,0x40,0x5e,0x32,0x41,0x40,0x5f,0x1a,0x41,0x40,0x60,0x00,0x41,0x40,0x61,0x00,0x41,0x40,0x62,0x00,0x41,0x40,0x63,0x00,0x41,0x40,0x64,0x00,0x41,0x40,0x65,0x00,0x41,0x40,0x93,0x04,0x41,0x40,0x94,0x00,0x42,0x40,0x95,0x00,0x00,0x42,0x40,0x97,0x00,0x00,0x42,0x40,0x99,0x00,0x00,0x41,0x40,0xa2,0x00,0x41,0x40,0xa3,0x00,0x41,0x40,0xa7,0x01,0x42,0x40,0xa8,0x00,0x00,0x42,0x40,0xaa,0x00,0x00,0x42,0x40,0xac,0x00,0x00,0x41,0x40,0xd4,0x00,0x41,0x40,0xde,0x00,0x41,0x40,0xdf,0x00,0x41,0x40,0xe0,0x00,0x41,0x40,0xe9,0x00,0x41,0x40,0xea,0x00,0x41,0x40,0xeb,0x00,0x41,0x40,0xec,0x00,0x41,0x40,0xed,0x00,0x41,0x40,0xf3,0x00,0x41,0x40,0xf4,0x00,0x41,0x40,0xf5,0x00,0x41,0x40,0xf6,0x00,0x41,0x40,0xf7,0x00,0x41,0x40,0xf8,0x00,0x41,0x40,0xf9,0x00,0x41,0x40,0xfa,0x00,0x41,0x40,0xfb,0x00,0x41,0x40,0xfd,0x40,0x41,0x40,0xfe,0x80,0x41,0x40,0xff,0x00,0x41,0x41,0x01,0x00,0x41,0x41,0x02,0x00,0x41,0x41,0x03,0x00,0x41,0x41,0x04,0x00,0x42,0x41,0x05,0x00,0x00,0x41,0x41,0x08,0x00,0x41,0x41,0x09,0x00,0x41,0x41,0x0a,0x00,0x41,0x41,0x0b,0x00,0x01,0x38,0x00,0x41,0x41,0x0d,0x00,0x01,0x39,0x00,0x00,0x90,0x40,0x94,0xe0,0x70,0x2c,0x7f,0x32,0x12,0x27,0x1c,0x7f,0x33,0x12,0x27,0x14,0x7d,0x4b,0x12,0x27,0x44,
150 0x7d,0x20,0x7f,0x35,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x7d,0x7f,0x36,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x20,0x12,0x27,0x05,0x90,0x40,0x99,0x02,0x26,0xd3,0x90,0x40,0x94,0xe0,0x64,0x01,0x70,0x13,0x12,0x26,0xe9,0x7d,0x10,0x12,0x27,0x24,0x7d,0x10,0x12,0x27,0x05,0x90,0x40,0x95,0x02,0x26,0xd3,0x90,0x40,0x94,0xe0,0x64,0x02,0x70,0x2b,0x7d,0x64,0x7f,0x32,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x40,0x7f,0x33,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x64,0x12,0x27,0x44,0x7f,0x35,0x12,0x27,0x14,0x7f,0x36,0x12,0x27,0x1c,0x7d,0x40,0x12,0x27,0x35,0x90,0x40,0x97,0x80,0x10,0x12,0x26,0xe9,0x7d,0x7f,0x12,0x27,0x24,0x7d,0x7f,0x12,0x27,0x35,0x90,0x40,0x95,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x94,0xe0,0xb4,0x03,0x03,0xe4,0xf0,0x22,0x90,0x40,0x94,0xe0,0x04,0xf0,0x22,0x7d,0x80,0x7f,0x32,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x7f,0x7f,0x33,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x80,0x7f,0x34,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x37,0x7e,0x26,0x12,0x3b,0xaa,0x90,0x40,0x2c,0xe0,0xff,0xa3,0xe0,0x22,0x7d,0x40,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7d,0x64,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x35,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x80,0x7f,0x36,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x37,0x7e,0x26,0x12,0x3b,0xaa,0x90,0x40,0x2c,0xe0,0xff,0xa3,0xe0,0x22,0x7f,0x34,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x02,0x75,0x11,0x02,0x75,0x12,0x02,0x75,0x13,0x02,0x90,0x40,0x92,0xe0,0xfe,0x60,0x06,0x90,0x40,0x91,0xe0,0x70,0x4b,0xee,0x60,0x24,0x90,0x40,0x68,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x07,0xaf,0x06,0x90,0x40,0x69,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x11,0x8e,0x11,0x80,0x24,0x90,0x40,0x91,0xe0,0x60,0x1e,0x90,0x40,0x6a,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x12,0x8e,0x12,0x12,0x10,0xa4,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x13,0x8e,0x13,0x90,0x40,0x7d,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x81,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x92,0xe0,0x60,0x02,0xe4,0xff,0x90,0x40,0x7e,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x82,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x92,0xe0,0x60,0x03,0xe4,0xf5,0x11,0x90,0x40,0x7f,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x83,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x91,0xe0,0x60,0x03,0xe4,0xf5,0x12,0x90,0x40,0x80,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x84,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x91,0xe0,0x60,0x03,0xe4,0xf5,0x13,0x90,0x40,0x68,0xe0,0x2f,0x7f,0x97,0x12,0x28,0x4b,0x90,0x40,0x69,0xe0,0x25,0x11,0x7f,0x96,0x12,0x28,0x4b,0x90,0x40,0x6a,0xe0,0x25,0x12,0xfd,0x7f,0x95,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x6b,0xe0,0x25,0x13,0xfd,0x7f,0x94,0x7e,0x29,0x02,0x3b,0xaa,0xfd,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7f,0xcc,0x7e,0x29,0x12,0x3a,0x35,0xad,0x07,0x90,0x40,0x07,0x12,0x10,0xe6,0xff,0xa3,0xe0,0x54,0x80,0x4f,0xf0,0xec,0x12,0x10,0xb8,0xff,0xed,0x54,0x01,0x25,0xe0,0x4f,0x54,0x03,0xff,0xa3,0xe0,0x54,0xfc,0x4f,0xf0,0x7f,0xda,0x7e,0x29,0x12,0x3a,0x35,0x90,0x40,0x0a,0x12,0x10,0xe6,0xa3,0xf0,0x7f,0xc8,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x3c,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xca,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x3e,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xcb,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x0e,0xef,0xf0,0x7f,0xc9,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x0f,0xef,0xf0,0x7f,0xc0,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x10,0xef,0xf0,0x7f,0xc2,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x11,0xef,0xf0,0x7f,0xc1,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x12,0xef,0xf0,0x7f,0xc3,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x13,0x12,0x29,0x31,0x90,0x40,0x2e,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0x9a,0x7e,0x20,0x12,0x39,0x1e,0x90,0x40,0x46,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0x60,0x7e,0x2c,0x12,0x39,0x1e,0x90,0x40,0x24,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd0,0x7e,0x26,0x12,0x39,0x1e,0x90,0x40,0x2c,0xee,0xf0,0xa3,0x12,0x29,0x31,0x90,0x40,0x2a,0xee,0xf0,0xa3,0xef,0xf0,0x22,0xef,0xf0,0x7f,0xdc,0x7e,0x29,0x12,0x39,0x1e,0x22,0x8e,0x22,0x8f,0x23,0x8c,0x24,0x8d,0x25,0xe4,0xf5,0x27,0xf5,0x28,0x75,0x29,0x27,0x75,0x2a,0x10,0x30,0x00,0x03,0x02,0x2a,0x15,0x05,0x23,0xe5,0x23,0xae,0x22,0x70,0x02,0x05,0x22,0x14,0xf5,0x82,0x8e,0x83,0xe4,0x93,0xf5,0x26,0x70,0x03,0x02,0x2a,0x15,0x64,0x25,0x60,0x03,0x02,0x2a,0x0d,0x05,0x23,0xe5,0x23,0xae,0x22,0x70,0x02,0x05,0x22,0x14,0xf5,0x82,0x8e,0x83,0xe4,0x93,0x24,0x9c,0x60,0x15,0x24,0xfb,
151 0x60,0x11,0x24,0xf1,0x60,0x04,0x24,0x20,0x70,0xc0,0x75,0x29,0x10,0x75,0x2a,0x00,0x75,0x28,0x01,0xe5,0x25,0x45,0x24,0x60,0x66,0xe5,0x2a,0x45,0x29,0x60,0xab,0xac,0x29,0xad,0x2a,0xae,0x24,0xaf,0x25,0x12,0x1c,0xe4,0xab,0x07,0xae,0x24,0xaf,0x25,0xac,0x29,0xad,0x2a,0x12,0x1c,0xe4,0x8c,0x24,0x8d,0x25,0xeb,0x60,0x03,0x75,0x27,0x01,0xe5,0x27,0x60,0x11,0xeb,0xd3,0x94,0x09,0xeb,0x40,0x04,0x24,0x37,0x80,0x02,0x24,0x30,0xff,0x12,0x3a,0x7e,0xe5,0x28,0x60,0x14,0xe5,0x29,0xc4,0xf8,0x54,0xf0,0xc8,0x68,0xf5,0x29,0xe5,0x2a,0xc4,0x54,0x0f,0x48,0xf5,0x2a,0x80,0xab,0xae,0x29,0xaf,0x2a,0x7c,0x00,0x7d,0x0a,0x12,0x1c,0xe4,0x8e,0x29,0x8f,0x2a,0x80,0x9a,0x7f,0x30,0x80,0x02,0xaf,0x26,0x12,0x3a,0x7e,0x02,0x29,0x54,0x22,0x12,0x0e,0x1e,0x30,0xe0,0x03,0x02,0x2a,0xd2,0xef,0xc4,0x54,0x0f,0x30,0xe0,0x03,0x02,0x2a,0xd2,0xa3,0x12,0x0e,0x17,0x20,0xe0,0x03,0x02,0x2a,0xd2,0x90,0x40,0xca,0xe0,0xff,0x70,0x1a,0x90,0x40,0x07,0xe0,0xb4,0x80,0x11,0xa3,0xe0,0x54,0x7f,0xfe,0xbe,0x40,0x09,0x90,0x40,0xca,0x74,0x01,0xf0,0x02,0x2a,0xd7,0x80,0x77,0xef,0xb4,0x01,0x16,0x90,0x40,0x07,0xe0,0xb4,0x80,0x05,0x12,0x10,0x63,0x60,0x08,0x90,0x40,0xca,0x74,0x02,0xf0,0x80,0x6b,0x80,0x5d,0x90,0x40,0xca,0xe0,0xff,0xb4,0x02,0x19,0x90,0x40,0x07,0xe0,0xb4,0x80,0x10,0xa3,0xe0,0x54,0x7f,0xfe,0xbe,0x40,0x08,0x90,0x40,0xca,0x74,0x03,0xf0,0x80,0x4a,0x80,0x3c,0xef,0xb4,0x03,0x19,0x90,0x40,0x07,0xe0,0xb4,0x80,0x10,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x08,0x90,0x40,0xca,0x74,0x04,0xf0,0x80,0x2d,0x80,0x1f,0x90,0x40,0xca,0xe0,0x64,0x04,0x70,0x23,0x90,0x40,0x07,0xe0,0xb4,0x80,0x05,0x12,0x10,0x63,0x60,0x0b,0x90,0x40,0xc9,0xe0,0x04,0xf0,0xe4,0xa3,0xf0,0x80,0x0c,0xe4,0x90,0x40,0xca,0xf0,0x80,0x01,0xe4,0x90,0x40,0xc9,0xf0,0x90,0x40,0xc9,0xe0,0xb4,0x21,0x02,0x14,0xf0,0x90,0x40,0xc9,0xe0,0xd3,0x94,0x10,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x22,0x7f,0xec,0x12,0x2b,0xa4,0x90,0x40,0x40,0xf0,0xa3,0xef,0xf0,0x7f,0xe0,0x12,0x2b,0xa4,0x90,0x40,0x14,0xf0,0xa3,0xef,0xf0,0x7f,0xe2,0x12,0x2b,0xad,0x90,0x40,0x16,0xf0,0xa3,0xef,0xf0,0x7f,0xe4,0x12,0x2b,0xad,0x90,0x40,0x18,0xf0,0xa3,0xef,0xf0,0x7f,0xe6,0x12,0x2b,0xb6,0x90,0x40,0x1a,0xf0,0xa3,0xef,0xf0,0x7f,0xe8,0x12,0x2b,0xb6,0x90,0x40,0x1c,0xf0,0xa3,0xef,0xf0,0x7f,0xea,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x90,0x40,0x1e,0xf0,0xa3,0xef,0xf0,0x7f,0xde,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x30,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xee,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd6,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x3a,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xf8,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x44,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd8,0x7e,0x26,0x12,0x39,0x1e,0x90,0x40,0x20,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xda,0x7e,0x26,0x12,0x39,0x1e,0x90,0x40,0x22,0xee,0xf0,0xa3,0xef,0xf0,0x22,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x22,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x22,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x22,0x90,0x40,0x05,0xe5,0x0e,0xf0,0x90,0x40,0x00,0xee,0xf0,0xa3,0xef,0xf0,0xa3,0xec,0xf0,0xa3,0xed,0xf0,0xa3,0xeb,0xf0,0xe4,0xff,0xfe,0x74,0x78,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x74,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x70,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x6c,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x68,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x81,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x7d,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x8d,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x89,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x0f,0xbf,0x00,0x01,0x0e,0xef,0x64,0x04,0x4e,0x60,0x03,0x02,0x2b,0xd9,0xe4,0x90,0x40,0x7c,0xf0,0x90,0x40,0x92,0xf0,0x90,0x40,0x91,0xf0,0x90,0x40,0x48,0xf0,0xa3,0xf0,0x7d,0x42,0x7f,0x44,0x7e,0x2c,0x02,0x3b,0xaa,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,0x30,0x98,0x74,0x85,0x99,0x18,0xc2,0x98,0x75,0x1a,0x02,0x90,0x41,0xad,0xe0,0xff,0xc3,0x94,0x11,0x50,0x0d,0x74,0x9c,0x2f,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe5,0x18,0xf0,0x90,0x41,
152 0x9c,0xe0,0xc4,0x13,0x54,0x07,0x64,0x07,0x70,0x2e,0x90,0x41,0xad,0xe0,0xff,0x70,0x05,0xe0,0x04,0xf0,0x80,0x3d,0x90,0x41,0x9d,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x06,0x90,0x41,0xad,0xe0,0x04,0xf0,0x90,0x41,0x9d,0xe0,0x12,0x3b,0x6c,0x40,0x24,0x12,0x38,0x3d,0x50,0x18,0xd2,0x01,0x80,0x14,0x12,0x3b,0x64,0x50,0x03,0xe0,0x04,0xf0,0x12,0x3b,0x64,0x40,0x0e,0x12,0x38,0x3d,0x50,0x02,0xd2,0x01,0x90,0x41,0xad,0xe4,0xf0,0xf5,0x1a,0x30,0x99,0x05,0xc2,0x99,0x75,0x19,0x01,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,0x7d,0xff,0x7f,0x4f,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x30,0xa2,0x7d,0xc1,0x7f,0x02,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x41,0x7f,0x02,0x7e,0x29,0x12,0x3b,0xaa,0x7f,0x44,0x7e,0x2c,0x12,0x00,0x0e,0x90,0x40,0x4d,0xef,0xf0,0x12,0x37,0x24,0xef,0x60,0x50,0x12,0x28,0x52,0x90,0x40,0x9b,0xe0,0x60,0x03,0x12,0x2a,0xf0,0x90,0x40,0x52,0xe0,0xff,0x7e,0x00,0x12,0x11,0x15,0x12,0x1e,0x89,0x12,0x2f,0x96,0x12,0x1b,0x18,0x12,0x0e,0x1e,0x20,0xe0,0x07,0xef,0xc4,0x54,0x0f,0x30,0xe0,0x05,0x12,0x1f,0xfe,0x80,0x09,0x7d,0x18,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x12,0x05,0x52,0x90,0x40,0x50,0xef,0xf0,0x12,0x09,0xda,0x12,0x31,0x1b,0x12,0x22,0xc3,0x12,0x00,0x2e,0x80,0x0a,0x90,0x40,0x06,0xe0,0xb4,0x04,0x03,0x12,0x33,0x42,0x12,0x3b,0xa1,0x90,0x40,0x9b,0xe0,0x60,0x08,0x90,0x40,0x50,0xe0,0xff,0x12,0x24,0x08,0x12,0x30,0x22,0x7d,0xfe,0x7f,0x4f,0x7e,0x29,0x02,0x3b,0xaa,0x90,0x10,0x18,0xe0,0x44,0x80,0xf0,0x78,0x7f,0xe4,0xf6,0xd8,0xfd,0x75,0x36,0x4e,0x75,0x37,0x00,0x75,0x81,0x3c,0x02,0x2e,0x2d,0x02,0x35,0x32,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,0x25,0x2a,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,0x90,0x40,0xa8,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0xab,0xe0,0x2f,0xfd,0x90,0x40,0xaa,0xe0,0x3e,0xfc,0x90,0x40,0xac,0xe0,0xfa,0xa3,0xe0,0xfb,0x25,0xe0,0xff,0xea,0x33,0xfe,0xd3,0xef,0x9d,0xee,0x9c,0x40,0x0b,0x79,0x01,0x90,0x40,0x4f,0x74,0x01,0xf0,0x02,0x2f,0x06,0x12,0x0e,0x14,0x30,0xe0,0x22,0x90,0x40,0xab,0xe0,0x2b,0xff,0x90,0x40,0xaa,0xe0,0x3a,0x90,0x40,0x5b,0x12,0x0e,0xba,0x90,0x40,0x5a,0x12,0x0e,0x6e,0xef,0x9b,0xee,0x9a,0x40,0x05,0x79,0x04,0x02,0x2f,0x06,0x12,0x0e,0x0c,0x30,0xe0,0x13,0x12,0x0e,0xa4,0x90,0x40,0x57,0x12,0x0e,0x6e,0xef,0x9b,0xee,0x9a,0x40,0x04,0x79,0x04,0x80,0x1f,0x12,0x0e,0x0c,0x30,0xe0,0x17,0x12,0x0e,0xa4,0xaa,0x06,0xab,0x07,0x90,0x40,0x58,0x12,0x0e,0x72,0xef,0x9b,0xee,0x9a,0x40,0x04,0x79,0x03,0x80,0x02,0x79,0x02,0xaf,0x01,0x22,0x7f,0x02,0x75,0x14,0x04,0x75,0x15,0x0a,0x12,0x10,0x49,0x40,0x05,0xed,0x9e,0xfe,0x80,0x03,0x12,0x10,0x56,0xee,0xc3,0x94,0x10,0x40,0x14,0x90,0x40,0xeb,0xe0,0x94,0xff,0x50,0x03,0xe0,0x04,0xf0,0x90,0x40,0xeb,0xe0,0xc3,0x94,0x03,0x80,0x0c,0x90,0x40,0xeb,0xe0,0xd3,0x94,0x00,0x40,0x03,0xe0,0x14,0xf0,0x12,0x10,0x49,0x40,0x05,0xed,0x9e,0xfe,0x80,0x03,0x12,0x10,0x56,0xee,0xc3,0x94,0x05,0x50,0x0e,0x90,0x40,0xec,0xe0,0xc3,0x94,0xff,0x50,0x11,0xe0,0x04,0xf0,0x80,0x0c,0x90,0x40,0xec,0xe0,0xd3,0x94,0x00,0x40,0x03,0xe0,0x14,0xf0,0x90,0x40,0x14,0xe0,0xfc,0xa3,0xe0,0xfd,0x4c,0x60,0x17,0xd3,0xed,0x94,0xb8,0xec,0x94,0x0b,0x40,0x0e,0x90,0x40,0xae,0x12,0x0e,0x77,0x12,0x10,0xca,0x40,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x40,0x9c,0xe0,0x60,0x0d,0x7d,0x08,0x7f,0x16,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x08,0x80,0x2f,0x90,0x40,0x9d,0xe0,0x60,0x30,0x7f,0xd3,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x36,0xe4,0xf0,0xa3,0xef,0xf0,0x7f,0xd5,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x38,0xe4,0xf0,0xa3,0xef,0xf0,0x7d,0x60,0x7f,0x16,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x60,0x7f,0x17,0x7e,0x29,0x02,0x3b,0xaa,0x90,0x40,0x9b,0xe0,0x60,0x3c,0x90,0x40,0x32,0xe0,0xff,0xa3,0xe0,0x90,0x40,
153 0x9e,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x34,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xa0,0xcf,0xf0,0xa3,0xef,0xf0,0x7f,0xd2,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x32,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd4,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x34,0xee,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x40,0x66,0xe0,0xff,0x60,0x26,0x12,0x10,0xd5,0x70,0x21,0x90,0x40,0x9b,0xe0,0x70,0x06,0x90,0x41,0x0e,0xe0,0x60,0x67,0xef,0xb4,0x01,0x05,0x12,0x32,0xd9,0x80,0x58,0x90,0x40,0x66,0xe0,0xb4,0x02,0x03,0x12,0x32,0x00,0x80,0x4c,0x90,0x40,0x9b,0xe0,0x70,0x06,0x90,0x41,0x0e,0xe0,0x70,0x2a,0xe4,0xfd,0x7f,0x21,0x7e,0x26,0x12,0x3b,0xaa,0xe4,0xfd,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x1d,0x7f,0x0f,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0xf7,0x7f,0x10,0x7e,0x29,0x12,0x3b,0xaa,0xe4,0x90,0x41,0x0e,0xf0,0x22,0x90,0x40,0x66,0xe0,0xb4,0x01,0x05,0x12,0x32,0xd9,0x80,0x0a,0x90,0x40,0x66,0xe0,0xb4,0x02,0x03,0x12,0x32,0x00,0x90,0x41,0x0e,0x74,0x01,0xf0,0x22,0x7f,0xcf,0x7e,0x29,0x12,0x00,0x0e,0xad,0x07,0xed,0xa2,0xe6,0x12,0x10,0xdc,0xff,0x90,0x40,0x0c,0xe0,0x54,0xf7,0x4f,0xff,0xf0,0xed,0xa2,0xe5,0xe4,0x33,0x54,0x01,0xc4,0x54,0xf0,0xfe,0xef,0x54,0xef,0x4e,0xff,0xf0,0xed,0xa2,0xe4,0xe4,0x33,0x54,0x01,0xc4,0x33,0x54,0xe0,0xfe,0xef,0x54,0xdf,0x4e,0xf0,0xed,0xc3,0x13,0x54,0x07,0xff,0xa3,0xe0,0x54,0xf8,0x4f,0xff,0xf0,0xed,0x13,0x12,0x10,0xdc,0xfe,0xef,0x54,0xf7,0x4e,0xf0,0x7f,0xce,0x7e,0x29,0x12,0x00,0x0e,0xad,0x07,0xed,0x33,0xe4,0x33,0x54,0x01,0xff,0x90,0x40,0x0c,0xe0,0x54,0xfe,0x4f,0xff,0xf0,0xed,0xc4,0x54,0x03,0x25,0xe0,0xfe,0xef,0x54,0xf9,0x4e,0xf0,0x22,0x90,0x40,0x04,0xe0,0x64,0x3c,0x60,0x10,0x12,0x0e,0x1e,0x20,0xe0,0x0a,0xef,0xc4,0x54,0x0f,0x20,0xe0,0x03,0x12,0x26,0x43,0x12,0x37,0xd6,0xef,0x70,0x0d,0x12,0x0e,0x1e,0x20,0xe0,0x32,0xef,0xc4,0x54,0x0f,0x20,0xe0,0x2b,0xd3,0x90,0x40,0x96,0xe0,0x94,0x20,0x90,0x40,0x95,0xe0,0x94,0x4e,0x40,0x12,0x7d,0x0a,0x7f,0x98,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x48,0xe0,0x44,0x10,0xf0,0x80,0x06,0x12,0x31,0x81,0x54,0xef,0xf0,0x7d,0xc6,0x80,0x08,0x12,0x31,0x81,0x54,0xef,0xf0,0x7d,0x06,0x7f,0x3f,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7d,0x4a,0x7f,0x98,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x48,0xe0,0x22,0x8f,0x11,0x90,0x40,0x60,0xe0,0x65,0x11,0x60,0x49,0xe5,0x11,0x24,0xfe,0x60,0x1e,0x14,0x60,0x25,0x80,0x00,0x7d,0x20,0x7f,0x91,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf3,0x7f,0x93,0x7e,0x26,0x12,0x3b,0xaa,0x12,0x31,0xf6,0x7d,0x98,0x80,0x18,0x12,0x31,0xe3,0x12,0x31,0xf6,0x7d,0x18,0x80,0x0e,0x12,0x31,0xe3,0x7d,0x60,0x7f,0x98,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x18,0x7f,0x9b,0x7e,0x26,0x12,0x3b,0xaa,0x90,0x40,0x60,0xe5,0x11,0xf0,0x22,0x7d,0x18,0x7f,0x91,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf2,0x7f,0x93,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7d,0x40,0x7f,0x98,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7d,0x84,0x7f,0x25,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x7f,0x21,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x1c,0x7f,0x0f,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0f,0x0a,0x60,0x14,0x14,0x60,0x11,0x14,0x60,0x1b,0x14,0x60,0x28,0x24,0x04,0x70,0x36,0x12,0x32,0x64,0x7d,0x0c,0x80,0x1f,0x7d,0x03,0x7f,0x11,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x04,0x80,0x12,0x12,0x32,0x64,0x7d,0x0c,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x80,0x0b,0x7d,0x04,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf7,0x7f,0x10,0x7e,0x29,0x12,0x3b,0xaa,0x22,0xe4,0xfd,0x7f,0x11,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x12,0x0e,0x1e,0x20,0xe0,0x50,0xef,0xc4,0x54,0x0f,0x20,0xe0,0x49,0xa3,0x12,0x0e,0x17,0x30,0xe0,0x42,0x90,0x40,0xc8,0xe0,0xff,0x30,0xe0,0x15,0x90,0x40,0x07,0xe0,0xb4,0x80,0x05,0x12,0x10,0x63,0x60,0x2e,0xef,0xf4,0x90,0x40,0xc8,0x60,0x20,0x80,0x16,0x90,0x40,0x07,0xe0,0xb4,0x80,0x1c,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x14,0x90,0x40,0xc8,0xe0,0xf4,0x60,0x05,0xe0,0x04,0xf0,0x80,0x0f,0x90,0x40,0xc8,0xe0,0x14,0xf0,0x80,0x07,0x80,0x00,0xe4,0x90,0x40,0xc8,0xf0,0x90,0x40,0xc8,0xe0,0xd3,0x94,0x10,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x22,0x7d,0x84,0x7f,0x25,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x7f,0x21,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x1c,0x7f,0x0f,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0f,0x0a,0x60,0x11,0x14,0x60,0x12,0x14,0x60,0x1a,0x14,0x60,0x2d,0x24,0x04,0x70,0x3b,0x7d,0x02,0x80,0x06,0x7d,0x03,0x80,0x02,0x7d,0x04,0x7f,0x11,0x7e,0x29,0x12,0x3b,0xaa,0x80,0x16,0xe4,0xfd,0x7f,0x11,0x7e,0x29,0x12,
154 0x3b,0xaa,0x7d,0x0c,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x80,0x0b,0x7d,0x04,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf7,0x7f,0x10,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7f,0xc6,0x7e,0x29,0x12,0x00,0x0e,0x12,0x0e,0x0c,0x30,0xe0,0x40,0xa3,0x12,0x10,0x6a,0x20,0xe0,0x07,0xee,0x54,0x07,0x64,0x01,0x60,0x0e,0xed,0x30,0xe0,0x1a,0x90,0x40,0x0d,0xe0,0x54,0x07,0xfe,0xbe,0x03,0x10,0xef,0x54,0x07,0x24,0x02,0x90,0x40,0xfc,0xf0,0x75,0xf0,0x05,0x84,0xe5,0xf0,0xf0,0x90,0x40,0xfc,0xe0,0xc4,0x33,0x54,0xe0,0xfd,0x7f,0x25,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x80,0x80,0x02,0xe4,0xfd,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,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,0x2b,0x10,0xe0,0xf5,0x0f,0x90,0x2b,0x08,0xf0,0xe4,0xf0,0xe5,0x0f,0x13,0x50,0x03,0x12,0x3b,0x53,0xe5,0x0f,0xa2,0xe1,0x50,0x03,0x12,0x39,0x62,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,0xc2,0x88,0xd2,0xa8,0xc2,0x8a,0xd2,0xaa,0xe4,0x7b,0xe8,0x7a,0x03,0xf9,0xf8,0xaf,0x1e,0xae,0x1d,0xad,0x1c,0xac,0x1b,0x12,0x1d,0xe7,0xef,0x24,0x06,0xff,0xe4,0x3e,0xfe,0xe4,0x3d,0xfd,0xe4,0x3c,0xfc,0xe4,0x7b,0x0c,0xfa,0xf9,0xf8,0x12,0x1d,0xe7,0xc3,0xe4,0x9f,0xf5,0x2c,0xe4,0x9e,0xf5,0x2b,0xe5,0x89,0x54,0xf0,0x44,0x01,0xf5,0x89,0xe5,0x2b,0xf5,0x8c,0x85,0x2c,0x8a,0xd2,0x8c,0xd2,0xa9,0xd2,0xaf,0xc2,0x07,0xc2,0x08,0x22,0xc0,0xe0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0xe5,0x2e,0xb4,0xff,0x0d,0xe5,0x2d,0xb4,0xff,0x08,0x75,0x2d,0x00,0x75,0x2e,0x00,0x80,0x08,0x05,0x2e,0xe5,0x2e,0x70,0x02,0x05,0x2d,0xe5,0x30,0xb4,0xd0,0x13,0xe5,0x2f,0xb4,0x07,0x0e,0x75,0x2f,0x00,0x75,0x30,0x00,0x90,0x41,0xae,0x74,0x01,0xf0,0x80,0x08,0x05,0x30,0xe5,0x30,0x70,0x02,0x05,0x2f,0xe5,0x2b,0xf5,0x8c,0x85,0x2c,0x8a,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xe0,0x32,0xe4,0xf5,0x19,0x7f,0x02,0xfe,0xfd,0xfc,0xab,0x1e,0xaa,0x1d,0xa9,0x1c,0xa8,0x1b,0x12,0x1d,0x5c,0xe4,0x7b,0x80,0x7a,0x25,0xf9,0xf8,0x12,0x1d,0xe7,0xe4,0x7b,0x40,0xfa,0xf9,0xf8,0x12,0x1d,0xe7,0xc3,0xe4,0x9f,0xff,0x74,0x04,0x9e,0xad,0x07,0x75,0x98,0x50,0x43,0x87,0x80,0xf5,0xba,0x8d,0xaa,0x43,0xd8,0x80,0xc2,0x99,0xd2,0xac,0xd2,0xaf,0xc2,0x01,0xc2,0x02,0xc2,0x03,0xe4,0xf5,0x1a,0x90,0x41,0xad,0xf0,0x22,0xe4,0xc2,0x04,0x78,0x3c,0x76,0x14,0x60,0x03,0x12,0x38,0x6f,0x12,0x39,0xa6,0x7f,0x06,0x7e,0x21,0x12,0x39,0x1e,0xc0,0x06,0xc0,0x07,0x7f,0x08,0x7e,0x21,0x12,0x39,0x1e,0xc0,0x06,0xc0,0x07,0x7f,0x47,0x7e,0x2c,0x12,0x00,0x0e,0xab,0x07,0x75,0x0e,0x21,0xd0,0x05,0xd0,0x04,0xd0,0x07,0xd0,0x06,0x12,0x2b,0xbf,0x7f,0x02,0x12,0x3b,0x41,0x12,0x00,0x06,0x7b,0x01,0x7d,0x01,0x7f,0x49,0x7e,0x1e,0x02,0x39,0xc7,0x75,0x08,0x01,0xc2,0x00,0x7f,0x48,0x7e,0x2c,0x12,0x00,0x0e,0x12,0x37,0x64,0x7f,0x01,0x12,0x38,0xa0,0x12,0x34,0x93,0x12,0x33,0xee,0x12,0x34,0xe3,0x7e,0x3a,0x7f,0xf9,0x12,0x3a,0xaa,0xa2,0x03,0xe4,0x33,0xff,0x12,0x3a,0x1b,0x90,0x41,0xae,0xe0,0x60,0x02,0xe4,0xf0,0x12,0x00,0x29,0x12,0x3b,0x8d,0xe5,0x08,0x60,0xe6,0x7b,0x0f,0x7d,0x01,0x7f,0x45,0x7e,0x2c,0x12,0x3a,0x94,0xe4,0xf5,0x08,0x80,0xd6,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,0x2b,0x28,0xe0,0xff,0x90,0x2b,0x20,0xf0,0xe4,0xf0,0xef,0x13,0x50,0x03,0x12,0x38,0x0a,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,0x90,0x40,0x06,0xe0,0xfe,0xb4,0x01,0x03,0x7f,0x03,0x22,0xee,0xb4,0x03,0x03,0x7f,0x0a,0x22,0x90,0x40,0x06,0xe0,0xb4,0x02,0x03,0x7f,0x07,0x22,0x12,0x3a,0x67,0x8f,0x13,0x7f,0x43,0x7e,0x2c,0x12,0x00,0x0e,0xef,0x54,0x0f,0xf5,0x14,0x7f,0x43,0x7e,0x2c,0x12,0x00,0x0e,0xef,0x54,0xf0,0xc4,0x54,0x0f,0xff,0xe5,0x13,0xb4,0x01,0x05,0x85,0x14,0x12,0x80,0x02,0x8f,0x12,0xaf,0x12,0x22,0x8e,0x09,0x8f,0x0a,0xe5,0x0a,0x24,0x01,0x12,0x37,0xb3,0xfb,0x7a,0x01,0xf9,0xf8,0x12,0x1d,0x5c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xe5,0x0a,0x24,0x02,0x12,0x37,0xb3,0xfb,0xfa,0x79,0x01,0xf8,0x12,0x1d,0x5c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x1d,0x4f,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,
155 0x0a,0xae,0x09,0x12,0x37,0xb8,0x12,0x1d,0x4f,0x22,0x8f,0x11,0xe5,0x11,0x60,0x20,0x90,0x40,0x4e,0x74,0x01,0x12,0x36,0x95,0xe5,0x11,0x25,0xe0,0x25,0xe0,0x24,0x1c,0xfd,0x7b,0xfe,0x7f,0x87,0x7e,0x29,0x12,0x3a,0x94,0x7b,0x03,0x7d,0x03,0x80,0x0b,0xe4,0x90,0x40,0x4e,0x12,0x36,0x95,0x7b,0x03,0xe4,0xfd,0x7f,0x9b,0x7e,0x29,0x12,0x3a,0x94,0x22,0xf0,0x7b,0x02,0xfd,0x7f,0x81,0x7e,0x29,0x12,0x39,0xe5,0x22,0x12,0x0e,0xd4,0x30,0xe0,0x04,0x7d,0x09,0x80,0x02,0x7d,0x07,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xd3,0x90,0x40,0x31,0xe0,0x9f,0x90,0x40,0x30,0xe0,0x9e,0x40,0x13,0xe0,0xfe,0xa3,0xe0,0xa8,0x05,0x08,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xfc,0x80,0x02,0xe4,0xfc,0xaf,0x04,0x22,0x8e,0x09,0x8f,0x0a,0xad,0x0e,0x12,0x3b,0xaa,0xe5,0x0a,0x24,0x01,0xff,0xe4,0x35,0x09,0xfe,0xc0,0x06,0xc0,0x07,0xe4,0xfb,0x7a,0x01,0xf9,0x12,0x37,0xc0,0xd0,0x07,0xd0,0x06,0x12,0x3b,0xaa,0xe5,0x0a,0x24,0x02,0xff,0xe4,0x35,0x09,0xfe,0xc0,0x06,0xc0,0x07,0xe4,0xfb,0xfa,0x79,0x01,0x12,0x37,0xc0,0xd0,0x07,0xd0,0x06,0x02,0x3b,0xaa,0x90,0x40,0x4d,0xe0,0x54,0x0f,0xf5,0x11,0x90,0x40,0x06,0xe0,0x65,0x11,0x60,0x16,0xaf,0x11,0x12,0x3b,0x1d,0x90,0x40,0x06,0xe0,0x64,0x04,0x60,0x09,0xe4,0xfd,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0xe5,0x11,0x70,0x02,0x80,0x0a,0x12,0x35,0xca,0x90,0x40,0x52,0xef,0xf0,0x70,0x07,0xff,0x12,0x3b,0x1d,0x7f,0x00,0x22,0x7f,0x01,0x22,0x8f,0x09,0xe5,0x09,0xd3,0x94,0x04,0x40,0x05,0xe4,0xf5,0x0a,0x80,0x03,0x75,0x0a,0x01,0xe5,0x0a,0x60,0x17,0x12,0x3a,0x01,0x12,0x1d,0x5c,0x8f,0x1e,0x8e,0x1d,0x8d,0x1c,0x8c,0x1b,0x12,0x3a,0x01,0x12,0x1d,0xe7,0x8f,0x31,0x22,0x75,0x1e,0x00,0x75,0x1d,0x1b,0x75,0x1c,0xb7,0x75,0x1b,0x00,0x75,0x31,0x01,0x22,0xf8,0xaf,0x0e,0xae,0x0d,0xad,0x0c,0xac,0x0b,0x12,0x1d,0xe7,0x85,0x0a,0x82,0x85,0x09,0x83,0x22,0xff,0xe4,0x35,0x09,0xfe,0x12,0x00,0x0e,0xe4,0xfc,0xfd,0xfe,0x22,0xf8,0xaf,0x0e,0xae,0x0d,0xad,0x0c,0xac,0x0b,0x12,0x1d,0xe7,0xad,0x07,0x22,0x8f,0x82,0x8e,0x83,0xe0,0xff,0x22,0x7f,0x40,0x7e,0x24,0x12,0x00,0x0e,0xef,0x54,0x11,0x60,0x25,0x7f,0x6c,0x7e,0x24,0x12,0x00,0x0e,0xef,0x54,0x1f,0x60,0x19,0x7b,0x01,0x7d,0x01,0x74,0x26,0xff,0xfe,0x12,0x39,0xe5,0x7b,0x03,0x7d,0x03,0x7f,0x7d,0x7e,0x26,0x12,0x3b,0x0b,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x24,0x0d,0xe0,0xf5,0x10,0x90,0x24,0x05,0xf0,0xe4,0xf0,0xe5,0x10,0x13,0x50,0x02,0xd2,0x04,0x90,0x24,0x0e,0xe0,0xf5,0x10,0xa2,0xe3,0x50,0x02,0xd2,0x05,0xe5,0x10,0xa2,0xe1,0x50,0x05,0x12,0x00,0x26,0xc2,0x05,0x90,0x24,0x0a,0xe5,0x10,0xf0,0xe4,0xf0,0x22,0x90,0x41,0x9c,0xe0,0xc4,0x13,0x54,0x07,0xfd,0xbd,0x07,0x05,0xa3,0xe0,0xff,0x80,0x02,0xaf,0x05,0xe4,0xfe,0xfd,0xed,0xc3,0x9f,0x50,0x10,0x74,0x9c,0x2d,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe0,0x2e,0xfe,0x0d,0x80,0xeb,0xbe,0xff,0x02,0xd3,0x22,0xc3,0x22,0xe4,0xff,0xfe,0x12,0x36,0x14,0x12,0x3b,0x8d,0xe4,0xf5,0x0e,0xf5,0x0d,0xf5,0x0c,0xf5,0x0b,0x7f,0xe0,0x7e,0x20,0x12,0x36,0xe3,0xe4,0xf5,0x0e,0xf5,0x0d,0xf5,0x0c,0xf5,0x0b,0x7f,0xe0,0x7e,0x20,0x12,0x39,0x40,0xe4,0xff,0x12,0x3a,0xe6,0x02,0x3b,0x98,0x8f,0x09,0xe5,0x09,0xc3,0x94,0x08,0x40,0x05,0xe4,0xf5,0x0a,0x80,0x03,0x75,0x0a,0x01,0xe4,0xff,0x12,0x3b,0x82,0xe5,0x0a,0x60,0x15,0xe5,0x09,0x25,0xe0,0x25,0xe0,0xfd,0x7b,0x1c,0x7f,0x4c,0x7e,0x3c,0x12,0x3a,0x94,0x7f,0x01,0x12,0x3b,0x82,0x22,0x90,0x40,0xcb,0xe0,0xa3,0xf0,0x90,0x40,0xa7,0xe0,0x90,0x40,0xcb,0xf0,0x90,0x40,0xa7,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xbf,0xfe,0x06,0x12,0x10,0xfa,0xe4,0xa3,0xf0,0x22,0xc3,0x90,0x40,0x2f,0xe0,0x94,0x64,0x90,0x40,0x2e,0xe0,0x94,0x00,0x50,0x12,0x90,0x40,0x07,0xe0,0xb4,0x80,0x0b,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0xad,0x07,0xac,0x06,0xed,0x24,0x01,0xff,0xe4,0x3c,0xfe,0x12,0x00,0x0e,0xef,0x7b,0x00,0xfa,0xaf,0x05,0xae,0x04,0x12,0x00,0x0e,0x7e,0x00,0xeb,0x2f,0xff,0xee,0x3a,0xfe,0x22,0x8e,0x09,0x8f,0x0a,0x12,0x37,0xac,0xe5,0x0e,0xf0,0xe4,0xfb,0x7a,0x01,0xf9,0x12,0x37,0xa0,0xa3,0xef,0xf0,0xe4,0xfb,0xfa,0x79,0x01,0x12,0x37,0xa0,0xa3,0xa3,0xef,0xf0,0x22,0x78,0x3b,0xe6,0xb4,0xff,0x04,0xe4,0xf6,0x80,0x03,0x78,0x3b,0x06,0xe5,0x33,0x45,0x32,0x60,0x08,0xe5,0x33,0x15,0x33,0x70,0x02,0x15,0x32,0x78,0x3c,0xe6,0x60,0x01,0x16,0x22,
156 0x08,0x00,0x00,0x04,0x00,0x00,0x9c,0x05,0x00,0x04,0x62,0x11,0xdc,0x12,0x00,0x04,0x16,0x07,0x00,0x00,0x02,0x00,0x32,0x01,0x1f,0x06,0x75,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x7f,0x3d,0x7e,0x1e,0x12,0x00,0x0e,0x90,0x41,0x9b,0xef,0xf0,0x70,0x02,0xf0,0x22,0x90,0x41,0x9b,0xe0,0xb4,0x01,0x04,0x74,0x01,0xf0,0x22,0xe4,0x90,0x41,0x9b,0xf0,0x22,0x8e,0x0b,0x8f,0x0c,0xac,0x05,0x12,0x00,0x0e,0xad,0x07,0xec,0x60,0x05,0xeb,0x42,0x05,0x80,0x04,0xeb,0xf4,0x52,0x05,0xaf,0x0c,0xae,0x0b,0x02,0x3b,0xaa,0x8e,0x15,0x8f,0x16,0x12,0x37,0xcf,0xed,0x60,0x05,0xeb,0x42,0x07,0x80,0x04,0xeb,0xf4,0x52,0x07,0x85,0x16,0x82,0x85,0x15,0x83,0xef,0xf0,0x22,0xe5,0x09,0x25,0xe0,0x25,0xe0,0x24,0xbf,0xf5,0x82,0xe4,0x34,0x3a,0xf5,0x83,0x12,0x1e,0x79,0xe4,0x7b,0xe8,0x7a,0x03,0xf9,0xf8,0x22,0x30,0x07,0x11,0xc2,0x07,0xe5,0x1a,0x60,0x08,0xd5,0x1a,0x05,0xe4,0x90,0x41,0xad,0xf0,0xef,0x70,0x05,0x30,0x08,0x02,0xc2,0x08,0x22,0xad,0x07,0xac,0x06,0x8d,0x82,0x8c,0x83,0xa3,0xe0,0xfe,0x8d,0x82,0x8c,0x83,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0xfe,0x22,0x8e,0x34,0x8f,0x35,0xab,0x05,0xaa,0x04,0x12,0x3b,0xaa,0xe5,0x35,0x24,0x01,0xff,0xe4,0x35,0x34,0xfe,0xad,0x02,0x02,0x3b,0xaa,0x12,0x0e,0xd4,0x30,0xe0,0x04,0x7f,0x03,0x80,0x0c,0x12,0x0f,0x26,0x30,0xe0,0x04,0x7f,0x02,0x80,0x02,0x7f,0x01,0x22,0x8f,0x99,0x30,0xaf,0x0b,0x30,0xac,0x08,0xe5,0x19,0x60,0xf6,0xe4,0xf5,0x19,0x22,0x30,0x99,0xef,0xc2,0x99,0x22,0x8e,0x12,0x8f,0x13,0x12,0x00,0x0e,0xeb,0xf4,0x5f,0xff,0xed,0x5b,0x4f,0xfd,0xaf,0x13,0xae,0x12,0x02,0x3b,0xaa,0x8f,0x82,0x8e,0x83,0x20,0x00,0x0d,0xe4,0x93,0xfe,0x60,0x08,0xaf,0x06,0x12,0x3a,0x7e,0xa3,0x80,0xf3,0x22,0x00,0x02,0xa3,0x00,0x00,0x02,0x32,0x80,0x00,0x01,0xe2,0x24,0x00,0x01,0xa5,0xe0,0x00,0x00,0xd2,0xf0,0xef,0x7b,0x08,0x60,0x04,0x7d,0x01,0x80,0x02,0xe4,0xfd,0x7f,0x4c,0x7e,0x30,0x12,0x39,0xc7,0x22,0xef,0x7b,0x02,0x60,0x04,0xe4,0xfd,0x80,0x02,0x7d,0x01,0x7f,0x06,0x7e,0x24,0x12,0x39,0xc7,0x22,0x0d,0x0a,0x45,0x6e,0x74,0x65,0x72,0x20,0x6d,0x61,0x69,0x6e,0x20,0x6c,0x6f,0x6f,0x70,0x00,0x8e,0x15,0x8f,0x16,0x12,0x37,0xcf,0xeb,0xf4,0xfe,0xef,0x5e,0xff,0xed,0x5b,0x4f,0xf0,0x22,0x90,0x40,0x06,0xef,0xf0,0x70,0x06,0x12,0x0f,0xf8,0x12,0x3b,0xaa,0x7f,0xff,0x02,0x38,0xd0,0x90,0x40,0x06,0xef,0xf0,0x70,0x06,0x12,0x0f,0xf8,0x12,0x3b,0xaa,0x7f,0xff,0x02,0x38,0xd0,0x8f,0x09,0x7b,0x0f,0xad,0x09,0x7f,0x44,0x7e,0x2c,0x12,0x3a,0x94,0xaf,0x09,0x02,0x3b,0x2f,0xd2,0x07,0x78,0x3a,0xe6,0xb4,0x3b,0x05,0xe4,0xf6,0xd2,0x08,0x22,0x78,0x3a,0x06,0x22,0x90,0x41,0x9c,0xe0,0xc4,0x13,0x54,0x07,0xff,0x90,0x41,0xad,0xe0,0xc3,0x9f,0x22,0xab,0x07,0xaa,0x06,0x8b,0x82,0x8a,0x83,0xed,0xf0,0xa3,0xec,0xf0,0x22,0xad,0x07,0x7b,0x20,0x7f,0x4c,0x7e,0x3c,0x02,0x39,0xc7,0xa2,0x00,0xe4,0x33,0xc2,0x00,0x24,0xff,0x92,0x00,0x22,0xaf,0x31,0xef,0x60,0x03,0x1f,0x80,0xfa,0x22,0x12,0x00,0x2a,0x12,0x21,0x6a,0x02,0x27,0x4c,0x8f,0x82,0x8e,0x83,0xed,0xf0,0x22,0x90,0x40,0x66,0xef,0xf0,0x22,
157 };
158 
159 //------------------------------------------------------------------------------
160 /// Serial debug mode
161 /// @param  MFC_SERIAL_DEBUG_CMD_e \b IN: command
162 /// @return TRUE/FALSE
163 //------------------------------------------------------------------------------
MDrv_MFC_SetSerialDebugMode(MFC_SERIAL_DEBUG_CMD_e cmd)164 BOOL MDrv_MFC_SetSerialDebugMode(MFC_SERIAL_DEBUG_CMD_e cmd)
165 {
166     U32  u32Addr;
167     U8   u8Data[5];
168     BOOL ret;
169 
170     u32Addr = 0;
171 
172     if (cmd == MFC_SerialDebugEnter)
173     {
174         u8Data[0] = 0x53;
175         u8Data[1] = 0x45;
176         u8Data[2] = 0x52;
177         u8Data[3] = 0x44;
178         u8Data[4] = 0x42;
179 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
180         ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0,  u8Data, 5);
181 #else
182         ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0,  u8Data, 5);
183 #endif
184         if (!ret)
185             return FALSE;
186     }
187     else
188     {
189         u8Data[0] = cmd;
190 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
191         ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0, u8Data, 1);
192 #else
193         ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0, u8Data, 1);
194 #endif
195         if (!ret)
196             return FALSE;
197     }
198     return TRUE;
199 }
200 
201 static BOOL isI2cOpen=FALSE;
MDrv_MFC_SetSerialDebug(BOOL bOpen)202 void MDrv_MFC_SetSerialDebug(BOOL bOpen)
203 {
204     if(bOpen)
205     {
206         if(isI2cOpen==FALSE)
207         {
208             MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
209             MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
210             MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
211             isI2cOpen=TRUE;
212         }
213     }
214     else
215     {
216         if(isI2cOpen)
217         {
218             MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
219             MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
220             MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
221             isI2cOpen=FALSE;
222         }
223     }
224 
225 }
226 
227 
228 //------------------------------------------------------------------------------
229 /// Read register
230 /// @param  u16Addr \b IN: address
231 /// @return  u8Val \b OUT: value
232 //------------------------------------------------------------------------------
MDrv_MFC_ReadByte(U16 u16Addr)233 U8 MDrv_MFC_ReadByte(U16 u16Addr)
234 {
235     if (0)//gmfcSysInfo.u8UseMPIF == 2)
236     {
237 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
238         return MAdp_MPIF_ReadByte(MFC_SPIF_SLAVE_ID, u16Addr);
239 #endif
240     }
241     else
242     {
243         U8   u8Addr[3], u8buf=0;
244         BOOL ret;
245 
246         u8Addr[0] = 0x10;
247         u8Addr[1] = (U8)(u16Addr >> 8);
248         u8Addr[2] = (U8)(u16Addr & 0x00FF);
249 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
250         MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, u8Addr, 3);
251         ret = MAdp_IIC_Read(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, &u8buf, 1);
252 #else
253         MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, u8Addr, 3);
254         ret = MDrv_MFC_IIC_Read(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, &u8buf, 1);
255 #endif
256         //printf("[MFC R] addr=0x%x, data=0x%x, ret=%u\n", u16Addr, u8buf, ret);
257         if (!ret)
258             return 0;
259         return u8buf;
260     }
261 }
262 
MDrv_MFC_Read2Bytes(U16 u16Reg)263 U16 MDrv_MFC_Read2Bytes(U16 u16Reg)
264 {
265     if (0)//gmfcSysInfo.u8UseMPIF == 2)
266     {
267 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
268         return MAdp_MPIF_Read2Byte(MFC_SPIF_SLAVE_ID, u16Reg);
269 #endif
270     }
271     else
272     {
273         U8 u8ReadValue1=0, u8ReadValue2=0;
274         u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg + 1);
275         u8ReadValue2 = MDrv_MFC_ReadByte(u16Reg);
276 
277         return MAKEWORD(u8ReadValue1, u8ReadValue2);
278     }
279 }
280 
MDrv_MFC_Read3Bytes(U16 u16Reg)281 U32 MDrv_MFC_Read3Bytes(U16 u16Reg)
282 {
283     if (0)//gmfcSysInfo.u8UseMPIF == 2)
284     {
285 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
286         return MAdp_MPIF_Read3Byte(MFC_SPIF_SLAVE_ID, u16Reg);
287 #endif
288     }
289     else
290     {
291         U8     u8ReadValue1=0;
292         U32  u32ReadValue2=0;
293         u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg + 2);
294         u32ReadValue2 |= ((U32)u8ReadValue1)<<16;
295         u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg + 1);
296         u32ReadValue2 |= ((U32)u8ReadValue1)<<8;
297         u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg);
298         u32ReadValue2 |= ((U32)u8ReadValue1);
299         return u32ReadValue2;
300     }
301 }
302 //------------------------------------------------------------------------------
303 /// Write register
304 /// @param  u16Addr \b IN: address
305 /// @param  u8Val   \b IN: value
306 /// @return TRUE/FALSE
307 //------------------------------------------------------------------------------
MDrv_MFC_WriteByte(U16 u16Addr,U8 u8Val)308 BOOL MDrv_MFC_WriteByte(U16 u16Addr, U8 u8Val)
309 {
310     MFC_REG_DEBUG(printf("\n addr=0x%x, write=0x%x", u16Addr, u8Val));
311 
312     if (0)//gmfcSysInfo.u8UseMPIF == 2)
313     {
314     #if 1
315 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
316         return MAdp_MPIF_WriteByte(MFC_SPIF_SLAVE_ID, u16Addr, u8Val);
317 #endif
318     #else
319         // for debug
320         U8 ret;
321         U8 u8ReadVal;
322 
323         ret = MAdp_MPIF_WriteByte(MFC_SPIF_SLAVE_ID, u16Addr, u8Val);
324         u8ReadVal = MAdp_MPIF_ReadByte(MFC_SPIF_SLAVE_ID, u16Addr);
325         if (u8ReadVal == u8Val)
326             MFC_REG_DEBUG(printf(", [OK]\n"));
327         else
328             MFC_REG_DEBUG(printf(", [NG]read=0x%x\n", u8ReadVal));
329 
330         if (!ret)
331             return FALSE;
332         return TRUE;
333     #endif
334     }
335     else
336     {
337         U8   u8Addr[3];
338         BOOL ret;
339 
340         u8Addr[0] = 0x10;
341         u8Addr[1] = (U8)(u16Addr >> 8);
342         u8Addr[2] = (U8)(u16Addr & 0x00FF);
343 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
344         ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, &u8Val, 1);
345 #else
346         ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, &u8Val, 1);
347 #endif
348         if (!ret)
349             return FALSE;
350         return TRUE;
351     }
352 }
353 
MDrv_MFC_Write2Bytes(U16 u16Reg,U16 u16Value)354 void MDrv_MFC_Write2Bytes(U16 u16Reg, U16 u16Value)
355 {
356     if (0)//gmfcSysInfo.u8UseMPIF == 2)
357     {
358 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
359         MAdp_MPIF_Write2Byte(MFC_SPIF_SLAVE_ID, u16Reg, u16Value);
360 #endif
361     }
362     else
363     {
364         MDrv_MFC_WriteByte(u16Reg, (U8)u16Value);
365         MDrv_MFC_WriteByte(u16Reg + 1, (U8)(u16Value / 0x100));
366     }
367 }
368 
MDrv_MFC_Write3Bytes(U16 u16Reg,U32 u32Value)369 void MDrv_MFC_Write3Bytes(U16 u16Reg, U32 u32Value)
370 {
371     if (0)//gmfcSysInfo.u8UseMPIF == 2)
372     {
373 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
374         MAdp_MPIF_Write3Byte(MFC_SPIF_SLAVE_ID, u16Reg, u32Value);
375 #endif
376     }
377     else
378     {
379         MDrv_MFC_WriteByte(u16Reg, (U8)u32Value);
380         MDrv_MFC_WriteByte(u16Reg + 1, (U8)(u32Value / 0x100));
381         MDrv_MFC_WriteByte(u16Reg + 2, (U8)(u32Value / 0x10000));
382     }
383 }
384 
MDrv_MFC_WriteBit(U16 u16Addr,U8 u8Bit,U8 u8BitPos)385 void MDrv_MFC_WriteBit(U16 u16Addr, U8 u8Bit, U8  u8BitPos)
386 {
387     U8 u8Value;
388 
389     u8Value= MDrv_MFC_ReadByte(u16Addr);
390     if(u8Bit)
391         u8Value = u8Value | u8BitPos;
392     else
393         u8Value = u8Value & (~u8BitPos);
394     MDrv_MFC_WriteByte(u16Addr, u8Value);
395 }
396 
MDrv_MFC_WriteByteMask(U16 u16Addr,U8 u8Val,U8 u8Mask)397 void MDrv_MFC_WriteByteMask(U16 u16Addr, U8 u8Val, U8 u8Mask)
398 {
399     U8 uc;
400 
401     uc = MDrv_MFC_ReadByte(u16Addr);
402     uc &= (~u8Mask);
403     MDrv_MFC_WriteByte( u16Addr, ( uc | (u8Val & u8Mask)) );
404 }
405 
MDrv_MFC_WriteRegsTbl(U16 wIndex,MST_MFC_RegUnitType_t * pTable)406 void MDrv_MFC_WriteRegsTbl(U16 wIndex, MST_MFC_RegUnitType_t *pTable)
407 {
408     while (1)
409     {
410          if (pTable->ucIndex == _END_OF_TBL_
411           && pTable->ucValue == _END_OF_TBL_) // check end of table
412              break;
413 
414          MDrv_MFC_WriteByte(wIndex | pTable->ucIndex, pTable->ucValue); // write register
415          pTable++;// next
416     }
417 }
418 
MDrv_MFC_GetInitStatus()419 U8 MDrv_MFC_GetInitStatus()
420 {
421     return u8MFCInitStatus;
422 }
423 
MDrv_MFC_SetInitStatus(U8 status)424 void MDrv_MFC_SetInitStatus(U8 status)
425 {
426     u8MFCInitStatus = status;
427 }
428 
429 
430 //------------------------------------------------------------------------------
431 /// MFC Load Bin to SRAM
432 //------------------------------------------------------------------------------
MDrv_MFC_LoadBinToSram(U8 * pBin,U32 len)433 BOOL MDrv_MFC_LoadBinToSram(U8* pBin, U32 len)
434 {
435     U8   i;
436     U8   u8Addr[3];
437     BOOL ret;
438 
439     len=len;
440     MDrv_MFC_WriteByte(0x10E6, 0x01); // enable xdata mapping to psam
441     for (i=0; i<16; i++)
442     {
443         // Switch page, every page is 1k bytes
444         ret = MDrv_MFC_WriteByte(0x10E4, i); // Switch page, every page is 1k bytes
445         if (!ret)
446             return FALSE;
447 
448         // downloading
449         u8Addr[0] = 0x10;
450         u8Addr[1] = 0x50;
451         u8Addr[2] = 0x00;
452 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
453         ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, pBin, 1024);
454 #else
455         ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, pBin, 1024);
456 #endif
457         if (!ret)
458             return FALSE;
459 
460         pBin += 1024;
461     }
462     MDrv_MFC_WriteByte(0x10E4, 0x00); // Switch page, every page is 1k bytes
463     MDrv_MFC_WriteByte(0x10E6, 0x00); // disable xdata mapping to psam
464 
465     return TRUE;
466 }
467 
MDrv_MFC_WaitReady(U8 u8WaitValue)468 BOOL MDrv_MFC_WaitReady(U8 u8WaitValue)
469 {
470     U8 u8ReadValue, u8count = 0;
471     while(u8count++ < 10)
472     {
473 #if(CODEBASE_SEL == CODEBASE_LINUX)
474         usleep(100 * 1000);
475 #elif(CODEBASE_SEL == CODEBASE_UTOPIA)
476         OS_DELAY_TASK(100);
477 #endif
478         u8ReadValue=0x00;
479         MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
480         MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
481         MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
482 
483         u8ReadValue = MDrv_MFC_ReadByte(0x2C45);
484         //thchen printf("\n\n\n\n\n\n\n[0x2C45]=[%x]\n\n\n\n\n", u8ReadValue);
485 
486         MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
487         MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
488         MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
489         if(u8ReadValue == u8WaitValue)
490             break;
491     }
492     return (u8count < 10) ? 1 : 0;
493 }
494 
MDrv_MFC_SramLoadCode(void)495 void MDrv_MFC_SramLoadCode(void)
496 {
497     U8 *pAddr;
498     U32 Len;
499     pAddr = MFC_BIN;
500     Len = sizeof(MFC_BIN);
501     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
502     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
503     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
504 
505     MDrv_MFC_Write2Bytes(0x3C60, 0xAA55);//Disable watch dog
506     MDrv_MFC_LoadBinToSram(pAddr, Len);
507     MDrv_MFC_WriteByte(0x1084, 0x01); // Sram boot code reset
508     MDrv_MFC_WriteByte(0x2C45, 0x01);
509 
510     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
511     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
512     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
513     MDrv_MFC_WaitReady(2);
514 }
515 
516 //------------------------------------------------------------------------------
517 /// MFC system init
518 //------------------------------------------------------------------------------
519 
520 //for frame lock use that set from T3
MDrv_MFC_SetVFreq(U16 u16InputfreqX100,BOOL enableFPLL)521 void MDrv_MFC_SetVFreq(U16 u16InputfreqX100, BOOL enableFPLL)
522 {
523     gPreInputVFreq = u16InputfreqX100;
524     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
525     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
526     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
527 
528     MDrv_MFC_SetOutDClk(gPreInputVFreq, enableFPLL);
529     MDrv_MFC_WriteByte(0x290E, 0x2F);
530     MDrv_MFC_SoftwareResetScalerInt();
531 
532     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
533     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
534     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
535 }
536 
MDrv_MFC_BringUp(void)537 void MDrv_MFC_BringUp(void)
538 {
539     // I2C or MPIF
540     gmfcSysInfo.u8UseMPIF = 0;
541     //thchen printf("gmfcSysInfo.u8UseMPIF=%u\n", gmfcSysInfo.u8UseMPIF);
542 
543     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
544     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
545     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
546 
547     MDrv_MFC_SetInterrupt(_DISABLE);
548     MDrv_MFC_McuInitialize();
549     MDrv_MFC_WriteBit(0x2F00, 0, _BIT3);    //Dubber buffer dis
550     MDrv_MFC_WriteBit(0x1E03, 1, _BIT0);    //SCaler reset Hold
551     MDrv_MFC_WriteBit(0x1E49, 0, _BIT0);    //clear this status
552     MDrv_MFC_InitializeChip();
553 
554     // SPIF settings
555     MDrv_MFC_WriteByteMask(0x1E38, _BIT3, _BIT3);    // swap M/SPIF
556     MDrv_MFC_WriteByte(0x1E8D, 0x18);   // set SPIF clock, 0x18: 12MHz
557   //MDrv_MFC_WriteByte(0x1E8D, 0x10);   // set SPIF clock, 0x10: 108MHz
558 
559     if (gmfcSysInfo.u8UseMPIF)
560     {
561 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
562         //MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
563         //MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
564         //MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
565         MAdp_MPIF_Open();
566         MAdp_MPIF_Init(0x3C, 0x1, 0x1); //0x3C: 12MHz
567       //MAdp_MPIF_Init(0x04, 0x1, 0x1); //0x04:123MHz
568         MAdp_MPIF_InitSPIF(MFC_SPIF_SLAVE_ID);
569         MAdp_MPIF_SetCmdDataWidth(MFC_SPIF_SLAVE_ID, MPIF_DATAWIDTH_1, MPIF_DATAWIDTH_1);
570         gmfcSysInfo.u8UseMPIF = 2;
571 #endif
572     }
573 
574     MDrv_MFC_InitializeScalerOP();
575     MDrv_MFC_InitializeMiu();
576 
577 
578     MDrv_MFC_InitializeScalerIP();
579     MDrv_MFC_InitializeFilmMode();
580     MDrv_MFC_InitializePanel();
581 
582 
583 	MDrv_MFC_PowerDownChipU3();
584     MDrv_MFC_WriteBit(0x2F00, 1, _BIT3);	//Dubber buffer En
585 	MDrv_MFC_SetInterrupt(_ENABLE);
586     if(gmfcSysInfo.u8PanelType == _LVDS)
587     {
588         MDrv_MFC_Write2Bytes(0x3220, 0x5555); // set output configure to lvds output = "01" for 26 channel
589     	MDrv_MFC_Write2Bytes(0x3222, 0x5555);
590     	MDrv_MFC_Write2Bytes(0x3224, 0x5555);
591     	MDrv_MFC_WriteByte(0x3226, 0x05);
592     }
593     //thchen printf("**********Read status 2c45 = %x", MDrv_MFC_ReadByte(0x2C45));
594 
595     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
596     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
597     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
598 }
599 
600 
MDrv_MFC_Init(PMST_MFC_SYS_INFO_t mfcSysInfo)601 void MDrv_MFC_Init(PMST_MFC_SYS_INFO_t mfcSysInfo)
602 {
603 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
604     U32 u32Time, u32PANEL_VTOTAL;
605 #else
606     U32 u32PANEL_VTOTAL;
607 #endif
608     gmfcSysInfo = *mfcSysInfo;
609     u32PANEL_VTOTAL = gmfcSysInfo.u16VTotal;
610     gmfcSysInfo.u16VTotal = gmfcSysInfo.u16Height+ 64;//PANEL_HEIGHT + 64
611     gmfcSysInfo.u16HTotal = (U32)gmfcSysInfo.u16HTotal * u32PANEL_VTOTAL/gmfcSysInfo.u16VTotal;
612 /*
613     printf("MFC Panel H Start= [%d][160]\n", gmfcSysInfo.u16HStart);
614     printf("MFC Panel V Start= [%d][20]\n", gmfcSysInfo.u16VStart);
615     printf("MFC Panel H Total= [%d][2200]\n", gmfcSysInfo.u16HTotal);
616     printf("MFC Panel V Total= [%d][1189]\n", gmfcSysInfo.u16VTotal);
617     printf("MFC Panel H Width= [%d][1920]\n", gmfcSysInfo.u16Width);
618     printf("MFC Panel V Width= [%d][1080]\n\n", gmfcSysInfo.u16Height);
619 
620     printf("MFC Rx LVDS Chanel  = [%d][1]\n", gmfcSysInfo.u8LVDSChannel);
621     printf("MFC Rx LVDS BitNum  = [%d][1]\n", gmfcSysInfo.u8LVDSBitNum);
622     printf("MFC Rx LVDS TI/Thin = [%d][1]\n", gmfcSysInfo.u8LVDSTiMode);
623     printf("MFC Rx LVDS M/L Swap= [%d][0]\n", gmfcSysInfo.u8LVDSSwapMsbLsb);
624     printf("MFC Rx LVDS P/N Swap= [%d][0]\n", gmfcSysInfo.u8LVDSSwap_P_N);
625     printf("MFC Rx LVDS O/E Swap= [%d][1]\n\n", gmfcSysInfo.u8LVDSSwapOddEven);
626 
627     printf("MFC Tx LVDS Chanel    = [%d][2]\n", gmfcSysInfo.u8PanelChannel);
628     printf("MFC Tx LVDS [ABCD]    = [%x][D8]\n", gmfcSysInfo.u8PanelLVDSSwapCH);
629     printf("MFC Tx LVDS BitNum    = [%d][1]\n", gmfcSysInfo.u8PanelBitNum);
630     printf("MFC Tx LVDS pair shift= [%d][0]\n", gmfcSysInfo.u8PanelLVDSShiftPair);
631     printf("MFC Tx LVDS TI/Thin   = [%d][1]\n", gmfcSysInfo.u8PanelLVDSTiMode);
632     printf("MFC Tx LVDS PolSwap   = [%d][1]\n", gmfcSysInfo.u8PanelLVDSSwapPol);
633     printf("MFC Tx LVDS pairSwap  = [%d][0]\n", gmfcSysInfo.u8PanelLVDSSwapPair);
634     printf("MFC Panel V Freq      = [%d][120]Hz\n", gmfcSysInfo.u8PanelVfreq);
635 
636     printf("MFC memory clock = [%d][1400]\n", gmfcSysInfo.u16MFCMemoryClk);
637     printf("MFC memory type  = [%x][0x0705]\n", gmfcSysInfo.u16MFCMemoryType);
638     printf("MFC memory IncVtotalFor50Hz  = [%d][1]\n", gmfcSysInfo.u8PanelIncVtotalFor50Hz);
639     printf("MFC panel type   = [%d][2]\n", gmfcSysInfo.u8PanelType);
640     printf("MFC panel Dither = [%d][0]\n", gmfcSysInfo.u8PanelDither);
641     printf("MFC panel CPVC   = [%d][0]\n", gmfcSysInfo.u8PanelBlankCPVC);
642     printf("MFC panel OEC    = [%d][0]\n", gmfcSysInfo.u8PanelBlankOEC);
643     printf("MFC panel TPC    = [%d][0]\n", gmfcSysInfo.u8PanelBlankTPC);
644     printf("MFC panel STHC   = [%d][0]\n", gmfcSysInfo.u8PanelBlankSTHC);
645     printf("MFC panel CSC    = [%d][1]\n", gmfcSysInfo.u8PanelCSC);
646     printf("MFC panel GAMMA  = [%d][1]\n", gmfcSysInfo.u8PanelGAMMA);
647     printf("MFC_IP_MODE      = [%d][6]\n", IP_RGB_10BIT_COMP);
648     printf("Panel Type       = [%x][0x70]\n", PNL_INN22_WSXGA_120HZ);
649 */
650 
651 //=======MM Allocation===============
652 //MFC --------0
653 //IP YCOut 0~4           0~7
654 //IP MR 0~4                0
655 //Gamma 0~1
656 //OD BaseEven
657 //OD LimitEven
658 //OD BaseODD
659 //OD LimitODD
660 //OD LsbBsae
661 //OD LsbLimit
662 //Miu Auto BIST
663 //===============================
664     //[1]MFC----------------------------------------------------------
665     gmfcMiuBaseAddr.u8MfcMode= 1;
666     gmfcMiuBaseAddr.u32MfcBase = 0;
667     if (gmfcMiuBaseAddr.u8MfcMode)
668     {
669         gmfcMiuBaseAddr.u32MfcSize = 16ul
670                                     *((LimitCheck(gmfcSysInfo.u16Width, 64)/16)/2)
671                                     *(LimitCheck(gmfcSysInfo.u16Height, 16)/8)*128;
672     }
673     else
674         gmfcMiuBaseAddr.u32MfcSize = 0;
675 
676     //[2]Ycount----------------------------------------------------------
677     gmfcMiuBaseAddr.u8IpMode = IP_MODE;
678     gmfcMiuBaseAddr.u32IpYcoutBase = gmfcMiuBaseAddr.u32MfcBase+gmfcMiuBaseAddr.u32MfcSize;
679     gmfcMiuBaseAddr.u32IpYcoutSize = 16ul*gmfcSysInfo.u16Height*Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width);
680 
681     //[3]Gamma----------------------------------------------------------
682     gmfcMiuBaseAddr.u8GammaMode = GAMMA_FUNCTION;
683     gmfcMiuBaseAddr.u32GammaBase0 = (gmfcMiuBaseAddr.u32IpYcoutBase+8ul*gmfcMiuBaseAddr.u32IpYcoutSize+0xFFFL)&0xFFFF000L;
684     if (gmfcMiuBaseAddr.u8GammaMode==GAMMA_MLOAD)
685         gmfcMiuBaseAddr.u32GammaMLSize = 16ul*256;
686     else
687         gmfcMiuBaseAddr.u32GammaMLSize = 0;
688     gmfcMiuBaseAddr.u32GammaBase1 = gmfcMiuBaseAddr.u32GammaBase0 + gmfcMiuBaseAddr.u32GammaMLSize;
689 
690     //[4]Over Drive----------------------------------------------------------
691     gmfcMiuBaseAddr.u8OdMode = OD_MODE_SEL;
692     gmfcMiuBaseAddr.u32OdBaseEven = gmfcMiuBaseAddr.u32GammaBase1+gmfcMiuBaseAddr.u32GammaMLSize+0x1000000;
693     switch (gmfcMiuBaseAddr.u8OdMode)
694     {
695         case OD_MODE_OFF:
696             gmfcMiuBaseAddr.u32OdSize = 0;
697             break;
698         case OD_MODE_444:
699             gmfcMiuBaseAddr.u32OdSize = 12ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
700             break;
701         case OD_MODE_555:
702             gmfcMiuBaseAddr.u32OdSize = 15ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
703             break;
704         case OD_MODE_565:
705             gmfcMiuBaseAddr.u32OdSize = 16ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
706             break;
707         case OD_MODE_666:
708             gmfcMiuBaseAddr.u32OdSize = 18ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
709             break;
710         case OD_MODE_888:
711             gmfcMiuBaseAddr.u32OdSize = 24ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
712             break;
713         default:
714             gmfcMiuBaseAddr.u32OdSize = 9ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
715             break;
716     }
717     gmfcMiuBaseAddr.u32OdSizehalf= gmfcMiuBaseAddr.u32OdSize/2+0x800;
718     gmfcMiuBaseAddr.u32OdLimitEven = gmfcMiuBaseAddr.u32OdBaseEven+gmfcMiuBaseAddr.u32OdSizehalf;
719     gmfcMiuBaseAddr.u32OdBaseOdd= gmfcMiuBaseAddr.u32OdLimitEven+0x800;
720     gmfcMiuBaseAddr.u32OdLimitOdd= gmfcMiuBaseAddr.u32OdBaseOdd+gmfcMiuBaseAddr.u32OdSizehalf;
721 
722     gmfcMiuBaseAddr.u32OdLsbBase=gmfcMiuBaseAddr.u32OdLimitOdd+0x800;
723     switch(gmfcMiuBaseAddr.u8OdMode)
724     {
725         case OD_MODE_555_COMPRESS:
726             gmfcMiuBaseAddr.u32OdLsbSize = 3ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
727             break;
728         case OD_MODE_666_COMPRESS:
729             gmfcMiuBaseAddr.u32OdLsbSize = 6ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
730             break;
731         default:
732             gmfcMiuBaseAddr.u32OdLsbSize = 0;
733             break;
734     }
735     gmfcMiuBaseAddr.u32OdLsbLimit=gmfcMiuBaseAddr.u32OdLsbBase+gmfcMiuBaseAddr.u32OdLsbSize;
736 
737     //[5]AutoBist----------------------------------------------------------
738     gmfcMiuBaseAddr.u32AutoBist=(gmfcMiuBaseAddr.u32OdLsbLimit+0xFFFL)&0xFFFF000L;
739     gmfcMiuBaseAddr.u8XDataOnDramMode=HK_XDATA_ON_DRAM;
740     if(gmfcMiuBaseAddr.u8XDataOnDramMode)
741     {
742         gmfcMiuBaseAddr.u8XDataOnDramBase=(gmfcMiuBaseAddr.u32AutoBist+0x2000+0xFFFFL)&0xFFF0000L;
743         gmfcMiuBaseAddr.u8XDataOnDramSize=1024ul*64;
744     }
745     else
746     {
747         gmfcMiuBaseAddr.u8XDataOnDramBase=gmfcMiuBaseAddr.u32AutoBist+0x2000;
748         gmfcMiuBaseAddr.u8XDataOnDramSize=0;
749     }
750 
751     //[6]MPIF----------------------------------------------------------
752     gmfcMiuBaseAddr.u8MPifMode=ENABLE_MPIF_DEVICE;
753     if(gmfcMiuBaseAddr.u8MPifMode)
754     {
755         gmfcMiuBaseAddr.u32PifBase=0;
756         gmfcMiuBaseAddr.u32PifSize=1024ul;
757         gmfcMiuBaseAddr.u32PifBase2=gmfcMiuBaseAddr.u32PifBase+gmfcMiuBaseAddr.u32PifSize;
758     }
759     else
760     {
761         gmfcMiuBaseAddr.u32PifBase=gmfcMiuBaseAddr.u8XDataOnDramBase+gmfcMiuBaseAddr.u8XDataOnDramSize;
762         gmfcMiuBaseAddr.u32PifSize=0;
763         gmfcMiuBaseAddr.u32PifBase2=gmfcMiuBaseAddr.u32PifBase+gmfcMiuBaseAddr.u32PifSize;
764     }
765 
766 
767 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
768     u32Time = MsOS_GetSystemTime();
769     MAdp_IIC_Clock_Select(MFC_IIC_CHANNEL_ID, 0x4); // if use HW I2C, set it to speed up
770 #endif
771     MDrv_MFC_SramLoadCode();
772 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
773     printf("\n[URSA3]SramLoadCode: %u\n", MsOS_GetSystemTime() - u32Time);
774     u32Time = MsOS_GetSystemTime();
775 #endif
776     MDrv_MFC_BringUp();
777 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
778     printf("\n[URSA3]Load Registers: %u\n", MsOS_GetSystemTime() - u32Time);
779 #endif
780     u8MFCInitStatus=1;
781 }
782 
783 //------------------------------------------------------------------------------
784 /// MFC Application function
785 //------------------------------------------------------------------------------
MDrv_MFC_OnOff(BOOL bOnOff)786 void MDrv_MFC_OnOff(BOOL bOnOff)
787 {
788     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
789     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
790     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
791 
792     if (bOnOff)
793     {
794         //MDrv_MFC_WriteRegister(0x290E, 0x2F); // Memc on
795         //MDrv_MFC_WriteRegisterMask(0x2910, 0x0C, 0x1C);
796         MDrv_MFC_WriteByteMask(0x2C44, 0x80, 0x80); // Memc on
797     }
798     else
799     {
800         //passFail = MDrv_MFC_WriteRegister(0x290E, 0x00); // Memc off
801         //MDrv_MFC_WriteRegisterMask(0x2910, 0x10, 0x1C);
802         //MDrv_MFC_WriteRegister(0x29A9, 0xFF);
803         MDrv_MFC_WriteByteMask(0x2C44, 0, 0x80); // Memc off
804     }
805     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
806     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
807     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
808 }
809 
MDrv_MFC_COMPENSATION(U8 u8Blur,U8 u8Judder,U8 u8MFC)810 void MDrv_MFC_COMPENSATION(U8 u8Blur, U8 u8Judder, U8 u8MFC)
811 {
812     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
813     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
814     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
815 
816     //need to be implement for
817     //Blur
818     //Judder
819     //MFC hi/mid/lo/off/5:5 pull down
820 
821     MDrv_MFC_WriteByteMask(0x2C43, u8Blur, 0x0F);
822     MDrv_MFC_WriteByteMask(0x2C43, u8Judder, 0xF0);
823     MDrv_MFC_WriteByteMask(0x2C44, u8MFC, 0x0F);
824 
825     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
826     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
827     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
828 }
829 
MDrv_MFC_TrueMotionDemo(U8 u8TrueMotionDemo)830 void MDrv_MFC_TrueMotionDemo(U8 u8TrueMotionDemo)
831 {
832     U8 u8buf;
833 
834     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
835     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
836     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
837     u8buf = MDrv_MFC_ReadByte(0x290E);
838     if(u8buf != 0x2F)
839         MDrv_MFC_WriteByte(0x290E, 0x2F); // Memc on
840     MDrv_MFC_WriteByteMask(0x2C44, 0x02, 0x07);    //MEMC high
841 
842     switch (u8TrueMotionDemo)
843     {
844         case 0: // Demo off, Memc on
845             u8buf = 0x00;
846             break;
847 
848         case 1: // Demo left side
849             u8buf = 0x10;
850             break;
851 
852         case 2: // Demo right side
853             u8buf = 0x90;
854             break;
855 
856         case 3: // Demo top side
857             u8buf = 0x20;
858             break;
859 
860         case 4: // Demo bottom side
861             u8buf = 0xA0;
862             break;
863 
864         default: // Demo off, Memc off
865             u8buf = 0x00;
866             break;
867     }
868 
869     if (u8buf)//Film 22 32 mode detect
870         MDrv_MFC_WriteByteMask(0x2080, 0x00, 0x03);
871     else
872         MDrv_MFC_WriteByteMask(0x2080, 0x03, 0x03);
873     MDrv_MFC_WriteByteMask(0x2981, u8buf, 0xF0);
874     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
875     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
876     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
877 }
878 
MDrv_MFC_VideoBlock(U8 u8Type,BOOL bOnOff)879 void MDrv_MFC_VideoBlock(U8 u8Type , BOOL bOnOff)
880 {
881     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
882     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
883     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
884 
885     switch (u8Type)
886     {
887         case 0: // URSA Rx (receiver signal off)
888             if(bOnOff)
889             {//Enable Rx
890                 MDrv_MFC_WriteByteMask(0x2F4C, 0x01, 0x03);
891                 MDrv_MFC_WriteByte(0x2F4E, 0x0F);
892                 MDrv_MFC_WriteByte(0x2EE0, 0x01);
893                 MDrv_MFC_WriteByte(0x3002, 0x00);
894                 MDrv_MFC_WriteByte(0x3016, 0x00);
895             }
896             else
897             {//disable Rx
898                 MDrv_MFC_WriteByteMask(0x2F4C, 0x00, 0x03);
899                 MDrv_MFC_WriteByte(0x2F4E, 0x00);
900                 MDrv_MFC_WriteByte(0x2EE0, 0x00);
901                 MDrv_MFC_WriteByte(0x3002, 0x08);
902                 MDrv_MFC_WriteByte(0x3016, 0x02);
903             }
904             break;
905         case 1: // URSA Tx (output black mute)
906             if(bOnOff)
907             {
908                 //R,G,B 10bit data setting
909                 MDrv_MFC_WriteByte(0x302a, 0x00);
910                 MDrv_MFC_WriteByte(0x302b, 0x00);
911                 MDrv_MFC_WriteByte(0x302c, 0x00);
912                 MDrv_MFC_WriteByte(0x302d, 0x00);
913                 MDrv_MFC_WriteByte(0x302e, 0x00);
914                 MDrv_MFC_WriteByte(0x302f, 0x00);
915                 //disable Rxd
916                 MDrv_MFC_WriteByte(0x3017, 0x04);
917                 MDrv_MFC_WriteByte(0x3002, 0x00);
918                 MDrv_MFC_WriteByte(0x3016, 0x00);
919             }
920             else
921             {//enable Rx
922                 MDrv_MFC_WriteByte(0x3017, 0x00);
923                 MDrv_MFC_WriteByte(0x3002, 0x08);
924                 MDrv_MFC_WriteByte(0x3016, 0x02);
925             }
926             break;
927         case 2: // LVDS (LVDS signal off)
928             if(bOnOff)
929             {//disable LVDS
930                 MDrv_MFC_WriteByte(0x3220, 0x00);
931                 MDrv_MFC_WriteByte(0x3221, 0x00);
932                 MDrv_MFC_WriteByte(0x3222, 0x00);
933                 MDrv_MFC_WriteByte(0x3223, 0x00);
934                 MDrv_MFC_WriteByte(0x3224, 0x00);
935                 MDrv_MFC_WriteByte(0x3225, 0x00);
936                 MDrv_MFC_WriteByte(0x3226, 0x00);
937             }
938             else
939             {//enable LVDS
940                 MDrv_MFC_WriteByte(0x3220, 0x55);
941                 MDrv_MFC_WriteByte(0x3221, 0x55);
942                 MDrv_MFC_WriteByte(0x3222, 0x55);
943                 MDrv_MFC_WriteByte(0x3223, 0x55);
944                 MDrv_MFC_WriteByte(0x3224, 0x55);
945                 MDrv_MFC_WriteByte(0x3225, 0x55);
946                 MDrv_MFC_WriteByte(0x3226, 0x05);
947             }
948             break;
949         default:
950             break;
951     }
952 
953     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
954     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
955     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
956 
957 }
958 
MDrv_MFC_LVDSPowerOnOFF(BOOL bOnOff)959 void MDrv_MFC_LVDSPowerOnOFF(BOOL bOnOff)
960 {
961     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
962     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
963     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
964 
965     if(bOnOff)
966     {//enable LVDS power
967         MDrv_MFC_WriteByteMask(0x3250, 0, 0x01);
968     }
969     else
970     {//disable LVDS power
971         MDrv_MFC_WriteByteMask(0x3250, 1, 0x01);
972     }
973 
974     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
975     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
976     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
977 }
978 
MDrv_MFC_Set_Bypass_Window(BOOL bOnOff,U8 u8WindowID,U16 u16HStart,U16 u16VStart,U16 u16HSize,U16 u16VSize)979 void MDrv_MFC_Set_Bypass_Window(BOOL bOnOff, U8 u8WindowID, U16 u16HStart, U16 u16VStart, U16 u16HSize, U16 u16VSize)
980 {
981     static U8 u8winStatus = 0;
982     static U8 gBackupReg2052 = 0x01;
983     U16 u16Hend, u16Vend;
984 
985     u16Hend = u16HStart+u16HSize;
986     u16Vend = u16VStart+u16VSize;
987     if(u16HStart < 0x60)
988         u16HStart = 0;
989 
990     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
991     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
992     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
993 
994     MDrv_MFC_WriteByteMask(0x2440, 0x11, 0x11);//OSD control window enable
995     MDrv_MFC_WriteByte(0x2444+u8WindowID*8, u16HStart); // H start
996     MDrv_MFC_WriteByte(0x2445+u8WindowID*8, (u16HStart&0X0F00)>>8);
997     MDrv_MFC_WriteByte(0x2446+u8WindowID*8, u16Hend); // H end
998     MDrv_MFC_WriteByte(0x2447+u8WindowID*8, (u16Hend&0X0F00)>>8);
999     MDrv_MFC_WriteByte(0x2448+u8WindowID*8, u16VStart); // V start
1000     MDrv_MFC_WriteByte(0x2449+u8WindowID*8, (u16VStart&0X0F00)>>8);
1001     MDrv_MFC_WriteByte(0x244A+u8WindowID*8, u16Vend); // V end
1002     MDrv_MFC_WriteByte(0x244B+u8WindowID*8, (u16Vend&0X0F00)>>8);
1003 
1004     MDrv_MFC_WriteByteMask(0x2C42, (bOnOff<<u8WindowID), (1<<u8WindowID));
1005     if(bOnOff)
1006     {
1007         if(u8WindowID <= 4)
1008             u8winStatus |= 0x01<<u8WindowID;    //enable selected window
1009         else
1010             u8winStatus = 0x1f;    //enable all windows
1011     }
1012     else
1013     {
1014         if(u8WindowID <= 4)
1015             u8winStatus &= ~(0x01<<u8WindowID);    //disable selected window
1016         else
1017             u8winStatus = 0;    //enable all windows
1018     }
1019 
1020     if(u8winStatus)
1021     {
1022         gBackupReg2052 = MDrv_MFC_ReadByte(0x2052);
1023         MDrv_MFC_WriteByteMask(0x2052, 0, 0x01);
1024     }
1025     else
1026     {
1027         MDrv_MFC_WriteByteMask(0x2052, gBackupReg2052, 0x01);
1028     }
1029     MDrv_MFC_WriteByte(0x246C, u8winStatus);
1030     MDrv_MFC_WriteByte(0x2626, u8winStatus);
1031 
1032     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1033     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1034     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1035 
1036 }
1037 
MDrv_MFC_GetSWVersion(void)1038 U16 MDrv_MFC_GetSWVersion(void)
1039 {
1040     U16 u16Data;
1041 
1042     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1043     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1044     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1045 
1046     u16Data = MDrv_MFC_Read2Bytes(0x2c40);
1047 
1048     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1049     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1050     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1051 
1052     return u16Data;
1053 }
1054 
MDrv_MFC_GetBinVersion(void)1055 U16 MDrv_MFC_GetBinVersion(void)
1056 {
1057     U32 u32Len;
1058     U16 u16Version;
1059 
1060     u32Len = sizeof(MFC_BIN);
1061     u16Version = MFC_BIN[u32Len-2];
1062     u16Version = (u16Version << 8)|MFC_BIN[u32Len-1];
1063     return u16Version;
1064 }
1065 
MDrv_MFC_SetSSC(U16 u16KHz,U16 u16Percent,BOOL bEnable,BOOL bMiuLVDS)1066 void MDrv_MFC_SetSSC(U16 u16KHz, U16 u16Percent, BOOL bEnable, BOOL bMiuLVDS)
1067 {
1068 #if 0 //daniel TEMP
1069     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1070     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1071     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1072 
1073     if(bMiuLVDS)
1074         MDrv_MFC_SetMiuSSC(u16KHz, u16Percent, bEnable);
1075     else
1076         MDrv_MFC_SetLvdsSSC(u16KHz, u16Percent, bEnable);
1077 
1078     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1079     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1080     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1081 #endif
1082 }
1083 
MDrv_MFC_DebugBlock(BOOL bOnOff)1084 void MDrv_MFC_DebugBlock(BOOL bOnOff)
1085 {
1086     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1087     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1088     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1089     if(bOnOff)
1090     {
1091         MDrv_MFC_WriteByte(0x290A, 0x02);
1092     }
1093     else
1094     {
1095         MDrv_MFC_WriteByte(0x290A, 0x00);
1096     }
1097     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1098     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1099     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1100 }
1101 
MDrv_MFC_DemoBarControl(BOOL bEnable,BOOL bDirection,U8 u8width,U8 u8color)1102 void MDrv_MFC_DemoBarControl(BOOL bEnable, BOOL bDirection, U8 u8width, U8 u8color)
1103 {
1104     U8 u8buf, u8Buf2;
1105     U16 u16frameActiveXStart, u16imageActiveXStart;
1106 
1107     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1108     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1109     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1110 
1111     u8buf = MDrv_MFC_ReadByte(0x2F19);
1112     u16frameActiveXStart=u8buf<<8;
1113     u8buf = MDrv_MFC_ReadByte(0x2F18);
1114     u16frameActiveXStart |=u8buf;
1115     u8buf = MDrv_MFC_ReadByte(0x2F21);
1116     u16imageActiveXStart=u8buf<<8;
1117     u8buf = MDrv_MFC_ReadByte(0x2F20);
1118     u16imageActiveXStart |=u8buf;
1119 
1120     u8buf = MDrv_MFC_ReadByte(0x2F57);
1121     if(bEnable)
1122     {
1123         u8buf = (u8buf & 0x7F) | 0x80;     //Line enable 0x2F57[7]
1124         if(bDirection)
1125             u8buf = (u8buf & 0xBF) | 0x40;    //Vertical line direction 0x2F57[6]
1126         else
1127             u8buf =  (u8buf & 0xBF) | 0x00;    //Horizontal line direction 0x2F57[6]
1128         u8buf = (u8buf & 0xF0) | (u8width & 0x0F);    //Line width 0x2F57[0:3]
1129         // vertical bar shift is related by HStart.
1130         if (u16frameActiveXStart>u16imageActiveXStart)
1131         {
1132             u8Buf2=(u16imageActiveXStart>(u16frameActiveXStart>>1))? (u16imageActiveXStart-(u16frameActiveXStart>>1)) : ((u16frameActiveXStart>>1)-u16imageActiveXStart);
1133         }
1134         else
1135         {
1136             u8Buf2= u16imageActiveXStart-(u16frameActiveXStart>>1);
1137             u8buf = u8buf | 0x20;    // direction for shift Line 0x2F57[5], 0:R, 1:L
1138         }
1139         MDrv_MFC_WriteByte(0x2F56, u8Buf2);    // shift Line
1140         MDrv_MFC_WriteByte(0x2F57, u8buf);    // creat Line
1141         MDrv_MFC_WriteByte(0x30A1, u8color);//color 0~255
1142     }
1143     else
1144     {
1145         MDrv_MFC_WriteByte(0x2F57, (u8buf&0x7F)|0x00);    //Line disable
1146     }
1147     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1148     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1149     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1150 }
1151 
MDrv_MFC_GetHVTotal(U16 * u16HTotal,U16 * u16VTotal)1152 void MDrv_MFC_GetHVTotal(U16* u16HTotal, U16* u16VTotal)
1153 {
1154     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1155     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1156     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1157 
1158     *u16HTotal = 0x0F & MDrv_MFC_ReadByte(0x2f05);
1159     *u16HTotal = (*u16HTotal << 8) | MDrv_MFC_ReadByte(0x2f04);
1160 
1161     *u16VTotal = 0x0F & MDrv_MFC_ReadByte(0x2f03);
1162     *u16VTotal = (*u16VTotal << 8) | MDrv_MFC_ReadByte(0x2f02);
1163 
1164     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1165     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1166     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1167 }
1168 
MDrv_MFC_IsStable(void)1169 U8 MDrv_MFC_IsStable(void)
1170 {
1171     U8 u8temp;
1172     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1173     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1174     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1175 
1176     u8temp = MDrv_MFC_ReadByte(0x1E49);
1177     u8temp &= 0x01;
1178 
1179     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1180     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1181     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1182     return u8temp;
1183 }
1184 
MDrv_MFC_SetLVDSVesaJeida(BOOL bVesaJeida)1185 void MDrv_MFC_SetLVDSVesaJeida(BOOL bVesaJeida)
1186 {
1187     bVesaJeida = (bVesaJeida>0)? 1 : 0;
1188     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1189     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1190     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1191 
1192     MDrv_MFC_WriteBit(0x320B, bVesaJeida, _BIT6);
1193 
1194     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1195     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1196     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1197 }
1198 
MDrv_MFC_SetFrameRate(U8 u8PanelVfreq)1199 void MDrv_MFC_SetFrameRate(U8 u8PanelVfreq)
1200 {
1201     gmfcSysInfo.u8PanelVfreq = u8PanelVfreq;
1202     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1203     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1204     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1205 
1206     MDrv_MFC_SetGainPhase();
1207     MDrv_MFC_SetOutDClk(u8PanelVfreq*100, TRUE);// default input frequence is 60hz free run
1208 
1209     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1210     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1211     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1212 }
1213 
MDrv_MFC_SlowFrameLock(BOOL OnOff)1214 void MDrv_MFC_SlowFrameLock(BOOL OnOff)
1215 {
1216     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1217     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1218     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1219 
1220     if(OnOff)
1221     {
1222         MDrv_MFC_WriteByte(0x2A0C, 0x00);
1223         MDrv_MFC_WriteByte(0x2A0D, 0x50);
1224         MDrv_MFC_WriteByte(0x2A0E, 0x00);
1225         MDrv_MFC_WriteByte(0x2A0F, 0x00);
1226     }
1227     else
1228     {
1229         MDrv_MFC_WriteByte(0x2A0C, 0x00);
1230         MDrv_MFC_WriteByte(0x2A0D, 0x00);
1231         MDrv_MFC_WriteByte(0x2A0E, 0x10);
1232         MDrv_MFC_WriteByte(0x2A0F, 0x00);
1233     }
1234 
1235     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1236     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1237     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1238 }
1239 
MDrv_MFC_FrameLockMode(U8 u8Mode)1240 void MDrv_MFC_FrameLockMode(U8 u8Mode)
1241 {
1242     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1243     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1244     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1245     switch (u8Mode)
1246     {
1247         case 0: //disable controling    (no setting for Dclk, HV total)
1248             MDrv_MFC_WriteByteMask(0x1E4C, 0x80, 0xC0);        // bit [7:6]
1249             break;
1250         case 1: //frame lock
1251             MDrv_MFC_WriteByteMask(0x1E4C, 0x00, 0xC0);        // bit [7:6]
1252             break;
1253         case 2: //freerun
1254             MDrv_MFC_WriteByteMask(0x1E4C, 0x40, 0xC0);        // bit [7:6]
1255             break;
1256         default:
1257             MDrv_MFC_WriteByteMask(0x1E4C, 0x00, 0xC0);        // bit [7:6]
1258             break;
1259     }
1260     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1261     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1262     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1263 }
1264 
MDrv_MFC_Reset(void)1265 void MDrv_MFC_Reset(void)
1266 {
1267     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1268     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1269     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1270 
1271     //MDrv_MFC_WriteByte(0x1084, 0x01); // Sram boot code reset
1272     MDrv_MFC_WriteByte(0x1E03, 0x01);
1273     //udelay(1000 * 100);
1274     MDrv_MFC_WriteByte(0x1E03, 0x00);
1275 
1276     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1277     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1278     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1279 }
1280 
MDrv_MFC_UpdateSW(void)1281 void MDrv_MFC_UpdateSW(void)
1282 {
1283     MDrv_MFC_SramLoadCode();
1284 }
1285 
MDrv_MFC_SetReverseMode(U8 u8MirrorMode)1286 void MDrv_MFC_SetReverseMode(U8 u8MirrorMode)
1287 {
1288     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1289     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1290     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1291 
1292     MDrv_MFC_SetMirrorMode((MirrorModeType)u8MirrorMode);
1293 
1294     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1295     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1296     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1297 }
1298 
MDrv_MFC_SetLVDSBit(U8 u8BitNum)1299 void MDrv_MFC_SetLVDSBit(U8 u8BitNum)
1300 {
1301     if(u8BitNum==6)
1302         u8BitNum = 0x0C;
1303     else if(u8BitNum==8)
1304         u8BitNum = 0x08;
1305     else
1306         u8BitNum = 0x00;
1307     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1308     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1309     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1310 
1311     //0x320A=0x08:8bits TI mode, 0x0C:6bits TI mode, 0x00:others
1312     MDrv_MFC_WriteByte(0x320A, u8BitNum);
1313 
1314     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1315     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1316     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1317 }
1318 
1319 
MDrv_MFC_SetODCTable(void)1320 void MDrv_MFC_SetODCTable(void)
1321 {
1322     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1323     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1324     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1325 
1326     /*
1327     MDrv_MFC_InitializeOD(tOverDrive);
1328     if( MDrv_MFC_ReadByte(0x1E48)>0 && MDrv_MFC_ReadByte(0x1E48)<=3 )
1329     {
1330         if(MDrv_MFC_ReadByte(0x1E48) == 1)//42"
1331             MDrv_MFC_InitializeOD(tOD42);
1332         else if(MDrv_MFC_ReadByte(0x1E48) == 2)//47"
1333             MDrv_MFC_InitializeOD(tOD47);
1334         else if(MDrv_MFC_ReadByte(0x1E48) == 3)//GIP 37"
1335             MDrv_MFC_InitializeOD(tOD37);
1336     }
1337     */
1338 
1339     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1340     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1341     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1342 }
1343 
1344 
1345 
1346 
1347 
1348 
1349 
1350 
1351 
1352 
1353 
1354 
1355 
1356 
1357 
1358 
1359 
1360 
1361 
1362 
1363 
1364 
1365 
1366 
1367 
1368 
1369 
1370 
1371 
1372 
1373 
1374 
1375 
1376 
1377 
1378 
1379 
1380 
1381 
1382 
1383 
1384 
1385 
1386 
1387 
1388 
1389 
1390 
1391 
1392 
1393 
1394 
1395 
1396 
1397 
1398 
1399 
1400 
1401 
1402 
1403 
1404 
1405 
1406 
1407 
1408 
1409 
1410 
1411 /*
1412 MST_MFC_STATUS_t gMfcType;
1413 void MDrv_MFC_GetMfcInfo(void)
1414 {
1415     U8 u8Temp;
1416     U16 u16Temp;
1417 
1418     u8Temp = MDrv_MFC_ReadByte(0x29CF);
1419     gMfcType.Film22Mode = _bit6_(u8Temp);
1420     gMfcType.Film32Mode = _bit5_(u8Temp);
1421     gMfcType.Film22Idx  = _bit4_(u8Temp);
1422     gMfcType.Film32Idx  = ( u8Temp >> 1 ) & 0x07;
1423     gMfcType.FDUP       = _bit0_(u8Temp);
1424 
1425     u8Temp = MDrv_MFC_ReadByte(0x29CE);
1426     gMfcType.FrameEnd = _bit7_(u8Temp);
1427     gMfcType.Skip_Thd = ( u8Temp >> 4 ) & 0x03;
1428 
1429     u16Temp = MDrv_MFC_Read2Bytes(0x29CC);
1430     gMfcType.GMVX = u16Temp & 0x00FE;
1431     gMfcType.GMVY = (u16Temp & 0x7F00) >> 8;
1432     gMfcType.GMVConfirm = ( ( (u16Temp & 0x0001) << 1) | (u16Temp >> 15));
1433 
1434     gMfcType.MinSAD = MDrv_MFC_Read2Bytes(0x29C8);
1435     gMfcType.MaxSAD_MSB = MDrv_MFC_ReadByte(0x29CB);
1436     gMfcType.MinSAD_MSB= MDrv_MFC_ReadByte(0x29C9);
1437     gMfcType.MovingBlkCnt = MDrv_MFC_Read2Bytes(0x29EC) & 0x3fff;
1438     gMfcType.maxXNegSpeed = MDrv_MFC_ReadByte(0x29C0);
1439     gMfcType.maxXPosSpeed = MDrv_MFC_ReadByte(0x29C2);
1440     gMfcType.maxYNegSpeed = MDrv_MFC_ReadByte(0x29C1);
1441     gMfcType.maxYPosSpeed = MDrv_MFC_ReadByte(0x29C3);
1442     gMfcType.ErrorBlk1 = MDrv_MFC_Read2Bytes(0x29E0) & 0x3fff;
1443     gMfcType.ErrorBlk2 = MDrv_MFC_Read2Bytes(0x29E2) & 0x3fff;
1444     gMfcType.ErrorBlk3 = MDrv_MFC_Read2Bytes(0x29E4) & 0x3fff;
1445     gMfcType.ErrorBlk4 = MDrv_MFC_Read2Bytes(0x29E6) & 0x3fff;
1446     gMfcType.ErrorBlk5 = MDrv_MFC_Read2Bytes(0x29E8) & 0x3fff;
1447     gMfcType.ErrorBlk6 = MDrv_MFC_Read2Bytes(0x29EA) & 0x3fff;
1448     gMfcType.gmvBlkCnt = MDrv_MFC_Read2Bytes(0x29D2);
1449     gMfcType.mv0BlkCnt = MDrv_MFC_Read2Bytes(0x29D4);
1450     gMfcType.cplxBlkCnt2 = MDrv_MFC_Read2Bytes(0x29D6);
1451     gMfcType.GMV0Err = MDrv_MFC_Read2Bytes(0x29DC);
1452     gMfcType.MINonContinuousBoundary = MDrv_MFC_Read2Bytes(0x29DE);
1453     gMfcType.cplxBlkCnt = MDrv_MFC_Read2Bytes(0x29EE);
1454     gMfcType.veryCplxBlkCnt = MDrv_MFC_Read2Bytes(0x29F8);
1455     gMfcType.unMatchPointCnt = MDrv_MFC_Read2Bytes(0x209A);
1456 }
1457 
1458 
1459 U8 firstMC_end;
1460 U8 beforeFirstME;
1461 void getFirstMC(void)
1462 {
1463     if (gmfcSysInfo.u8PanelVfreq==60)
1464     {
1465         if ( gMfcType.Film22Mode )
1466             firstMC_end = !gMfcType.Film22Idx;
1467         else if ( gMfcType.Film32Mode )
1468             firstMC_end = ( 0 == gMfcType.Film32Idx ) || ( 2 == gMfcType.Film32Idx );
1469         else
1470           firstMC_end = 1;
1471     }
1472     else
1473     {
1474         if ( gMfcType.Film22Mode )
1475             firstMC_end = !gMfcType.Film22Idx && !gMfcType.FDUP;
1476         else if ( gMfcType.Film32Mode )
1477             firstMC_end = ( 0 == gMfcType.Film32Idx && !gMfcType.FDUP ) || ( 2 == gMfcType.Film32Idx && gMfcType.FDUP );
1478         else
1479             firstMC_end = !gMfcType.FDUP;
1480 
1481         if ( gMfcType.Film22Mode )
1482             beforeFirstME = gMfcType.Film22Idx && gMfcType.FDUP;
1483         else if ( gMfcType.Film32Mode )
1484             beforeFirstME = ( 4 == gMfcType.Film32Idx && gMfcType.FDUP ) || ( 2 == gMfcType.Film32Idx && !gMfcType.FDUP );
1485         else
1486             beforeFirstME = gMfcType.FDUP;
1487     }
1488 }
1489 
1490 
1491 void MDrv_MFC_OtherPatches(void)
1492 {
1493     U8 temp, DebugLight1=0, DebugLight2=0;
1494     // patch No.1 : Force GMVY
1495     if( gMfcType.GMVY < 0x04 || gMfcType.GMVY > 0x7C)
1496     {
1497         if( gMfcType.GMVY < 0x04)
1498             MDrv_MFC_WriteByte(0x263D, 0x04);
1499         else
1500             MDrv_MFC_WriteByte(0x263D, 0x7C); // Force GMVY
1501         MDrv_MFC_WriteByte(0x263C, gMfcType.GMVX); // Force GMVX
1502         DebugLight1 |= _BIT0;
1503     }
1504     else
1505     {
1506         DebugLight1 &= ~_BIT0;
1507         MDrv_MFC_WriteByte(0x263C, 0);// disable Force GMVX
1508         MDrv_MFC_WriteByte(0x263D, 0);// disable Force GMVY
1509     }
1510     // patch No.2 : Program Boundry GMVX
1511     if( gMfcType.GMVConfirm !=  0)
1512     {
1513         temp = absGmvX(gMfcType.GMVX);
1514         MDrv_MFC_WriteByte(0x2954, (temp > 0x6C)? 0x7C: temp+0x10);
1515     }
1516     else
1517         MDrv_MFC_WriteByte(0x2954, 0x10);
1518 
1519     // patch No.3 : Keep zero On/Off
1520     if(gMfcType.mv0BlkCnt < 0x100)
1521     {
1522         MDrv_MFC_WriteByte(0x2953, 0x00);
1523         DebugLight1 |= _BIT1;
1524     }
1525     else
1526     {
1527         MDrv_MFC_WriteByte(0x2953, 0x80);
1528         DebugLight1 &= ~_BIT1;
1529     }
1530 
1531 #if 1   // patch No.4 : tango broken head and hand
1532     if (MaxSpeedDifToGMV>=0x06
1533         &&  MinSpeedDifToGMV <=0x02
1534         &&  MaxSpeedDifToGMV- MinSpeedDifToGMV >= 0x4
1535         && absGmvX(gMfcType.GMVX)> 0x10
1536         && gMfcType.ErrorBlk1> 30
1537         //&& gMfcType.unMatchPointCnt >2000
1538         && gMfcType.MINonContinuousBoundary > 10
1539         &&  gMfcType.mv0BlkCnt > 500  && gMfcType.mv0BlkCnt < 10000
1540        )
1541      {
1542         DebugLight2 |= 0xc0;
1543         MDrv_MFC_WriteByte(0x2935,(Posdiff(255, (absGmvX(gMfcType.GMVX)<<2))|0x2)); // errblk TH min(gMfcType.MINonContinuousBoundary,128)
1544         //MDrv_MFC_WriteByte(0x2647,(Posdiff(63, 0|0x80)));// cplx BLK OutRange TH absGmvX(gMfcType.GMVX)<<8)
1545         MDrv_MFC_WriteByte(0x293F, 0xc6);
1546     }
1547     else
1548     {
1549         MDrv_MFC_WriteByte(0x2935,0xfe);
1550         //MDrv_MFC_WriteByte(0x2647,0x50);
1551         if(gMfcType.Film22Mode||gMfcType.Film32Mode) MDrv_MFC_WriteByte(0x293F, 0x06);
1552         DebugLight2 &= ~0xc0;
1553     }
1554 #endif
1555 
1556 #if 1   // patch No.5 : dynamic search range
1557     if(beforeFirstME)
1558     {
1559         MDrv_MFC_WriteByte(0x2916, 0x60);
1560         MDrv_MFC_WriteByte(0x2917, 0x60);
1561     }
1562 
1563     if( gMfcType.mv0BlkCnt>=((gMfcType.cplxBlkCnt2>>7)*127) && absGmvX(gMfcType.GMVX)<0x50)
1564     {
1565         MDrv_MFC_WriteByte(0x2956, min(absGmvX(gMfcType.GMVX)+0x48,0x7c));
1566         //MDrv_MFC_WriteByte(0x2956, absGmvY(gMfcType.GMVY)+0x20);
1567         //gDebugLight2 |= 0x0f;
1568     }
1569     else
1570     {
1571         MDrv_MFC_WriteByte(0x2956, 0x7c);
1572         //gDebugLight2 &= ~0x0f;
1573     }
1574 #endif
1575 
1576 #if 1
1577     // patch No.7 : patch for strong Halo setting
1578     if( (absGmvX(gMfcType.GMVX) < 0x04))
1579     {
1580         MDrv_MFC_WriteByte(0x268C, 0X18); //--weak setting
1581     }
1582     else
1583     {
1584         MDrv_MFC_WriteByte(0x268C, 0X98);
1585     }
1586 #endif
1587 
1588     MDrv_MFC_WriteByte(0x2620, DebugLight1 );
1589     MDrv_MFC_WriteByte(0x2621, DebugLight2 );
1590 
1591 }
1592 
1593 void MDrv_MFC_SWPatch(void)
1594 {
1595     unsigned long u32Prejiiffes=0, u32Nowjiiffes=0;
1596     u32Prejiiffes = u32Nowjiiffes;
1597     u32Nowjiiffes = jiffies;
1598     printf("\n\n\n\n\n The interval = [%d]", (U16)(u32Nowjiiffes - u32Prejiiffes));
1599 
1600     // enter serial debug mode
1601     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1602     MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1603     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1604 
1605 
1606     Drv_MFC_GetMfcInfo();
1607     Drv_MFC_OtherPatches();
1608 
1609 
1610     // exit serial debug mode
1611     MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1612     MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1613     MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1614 }
1615 */
1616 
1617 
1618 
1619 
1620 
1621 
1622 
1623 
1624 
1625 
1626 
1627 
1628 
1629 
1630 
1631 
1632 
1633 
1634 
1635 
1636 
1637 
1638 
1639 
1640 
1641 
1642 
1643 
1644 
1645 
1646 
1647 
1648 
1649 
1650 
1651 
1652 
1653 
1654 //------------------------------------------------------------------------------
1655 /// MFC get set data from user test use
1656 //------------------------------------------------------------------------------
1657 
MDrv_MFC_DbgReadByte(U16 u16Addr)1658 U8 MDrv_MFC_DbgReadByte(U16 u16Addr)
1659 {
1660     return MDrv_MFC_ReadByte(u16Addr);
1661 }
1662 
MDrv_MFC_DbgWriteByte(U16 u16Addr,U8 u8Val)1663 void MDrv_MFC_DbgWriteByte(U16 u16Addr, U8 u8Val)
1664 {
1665     MDrv_MFC_WriteByte(u16Addr, u8Val);
1666 }
1667 
MDrv_MFC_IIC_Read(U8 u8ChIIC,U8 u8SlaveIdIIC,U8 * pu8AddrIIC,U8 u8AddrSizeIIC,U8 * pu8BufIIC,U32 u32BufSizeIIC)1668 BOOL MDrv_MFC_IIC_Read(U8 u8ChIIC, U8 u8SlaveIdIIC, U8 *pu8AddrIIC, U8 u8AddrSizeIIC, U8 *pu8BufIIC, U32 u32BufSizeIIC )
1669 {
1670     U16 u16Temp=0x0100;
1671     BOOL ret;
1672     extern BOOL MDrv_IIC_ReadBytes(U16 u16BusNumSlaveID, U8 ucSubAdr, U8* paddr, U16 ucBufLen, U8* pBuf);
1673 
1674     u8ChIIC = u8ChIIC;
1675     u16Temp = u16Temp | ((U16)u8SlaveIdIIC);
1676 
1677     ret = MDrv_IIC_ReadBytes(u16Temp, u8AddrSizeIIC, pu8AddrIIC, (U16)u32BufSizeIIC, pu8BufIIC);
1678     return ret;
1679 }
1680 
MDrv_MFC_IIC_Write(U8 u8ChIIC,U8 u8SlaveIdIIC,U8 * pu8AddrIIC,U8 u8AddrSizeIIC,U8 * pu8BufIIC,U32 u32BufSizeIIC)1681 BOOL MDrv_MFC_IIC_Write(U8 u8ChIIC, U8 u8SlaveIdIIC, U8 *pu8AddrIIC, U8 u8AddrSizeIIC, U8 *pu8BufIIC, U32 u32BufSizeIIC)
1682 {
1683     U16 u16Temp=0x0100;
1684     BOOL ret;
1685     extern BOOL MDrv_IIC_WriteBytes(U16 u16BusNumSlaveID, U8 AddrCnt, U8* pu8addr, U16 u16size, U8* pBuf);
1686 
1687     u8ChIIC = u8ChIIC;
1688     u16Temp = u16Temp | ((U16)u8SlaveIdIIC);
1689     //thchen printf("MDrv_MFC_IIC_Write\n");
1690     ret = MDrv_IIC_WriteBytes(u16Temp, u8AddrSizeIIC, pu8AddrIIC, (U16)u32BufSizeIIC , pu8BufIIC);
1691     return ret;
1692 }
1693 //------------------------------------------------------------------------------
1694 // variable
1695 //------------------------------------------------------------------------------
1696 #if 0
1697 static BOOL bExitMFCThread;
1698 static BOOL bReleaseMFCThread;
1699 static struct timer_list g_timer;
1700 
1701 void _MDrv_MFC_Thread(unsigned long arg)
1702 {
1703     unsigned long u32jiiffes;
1704     struct timer_list *t_timer;
1705 
1706     // timer returns immediately if timer exit flag is true
1707     if(bExitMFCThread == TRUE) {
1708         bReleaseMFCThread = TRUE;
1709         return;
1710     }
1711 
1712     //MDrv_MFC_SWPatch();
1713     t_timer = (struct timer_list *)arg;
1714     u32jiiffes = jiffies;
1715     // timer is triggered at next 15 Ms
1716     t_timer->expires =  u32jiiffes + _15MS;
1717     add_timer(t_timer);
1718 }
1719 
1720 void _MDrv_MFC_StartTimer(void)
1721 {
1722     unsigned long u32jiiffes = jiffies;
1723     bExitMFCThread = FALSE;
1724     bReleaseMFCThread = FALSE;
1725 
1726     init_timer(&g_timer);
1727     g_timer.data = (unsigned long)&g_timer;
1728     g_timer.function = _MDrv_MFC_Thread;
1729     g_timer.expires = u32jiiffes + _15MS;
1730     add_timer(&g_timer);
1731 }
1732 
1733 void _MDrv_MFC_DeleteTimer(void)
1734 {
1735     U32 u32TimeOut = 5;
1736     bExitMFCThread = TRUE;
1737 
1738     /* system waits thread exit success or time out after 15*5 ms. */
1739     while(u32TimeOut--)
1740     {
1741         msleep(15);
1742         if(bReleaseMFCThread == TRUE)
1743             break;
1744     }
1745     /* delete timer */
1746     del_timer_sync(&g_timer);
1747 }
1748 #endif
1749