Index: output/eeprom.dat
===================================================================
--- /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/eeprom.dat	(revision 1597)
+++ /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/eeprom.dat	(working copy)
@@ -2,44 +2,48 @@
 02
 aa
 55
-b6
-03
+0e
+08
 c2
 84
 00
-0a
+0b
+c0
+00
+00
+13
 c0
 41
 80
-17
+29
 c0
 42
 80
-1e
+30
 c0
 45
 00
-2c
+3e
 c0
 45
 80
-32
+44
 c0
 46
 00
-70
+ac
 c0
 56
 80
-11
+17
 c0
 5d
-00
-3e
+01
+69
 c0
 5d
 80
-40
+7c
 20
 20
 13
@@ -47,35 +51,63 @@
 c0
 46
 00
-8b
+c7
 c0
 47
 00
-8f
+cb
 c0
 49
 80
-9f
+e8
 c0
 53
 80
-85
+c1
 c0
 70
 00
-a5
+ee
 c0
 72
 00
-b6
+ff
+c0
+73
+00
+4f
 20
 20
 13
 7e
+20
+80
+00
+00
+20
+40
+31
+66
+70
+48
+80
+9e
+20
+20
+08
+04
+70
+41
+82
+3a
+20
+40
+15
+54
 58
 00
 00
-14
+1c
 67
 e1
 48
@@ -89,13 +121,53 @@
 c8
 bd
 c0
+00
+00
+21
+c0
+00
+b6
+fd
+c0
 07
 80
-61
+9d
+20
+60
+00
+00
 20
+40
+24
+3a
 20
-36
-cd
+40
+24
+3e
+20
+40
+00
+62
+20
+40
+37
+6b
+20
+40
+24
+9c
+20
+40
+24
+b9
+20
+40
+37
+2f
+20
+20
+00
+22
 70
 89
 00
@@ -131,7 +203,7 @@
 24
 3a
 00
-27
+39
 20
 40
 4d
@@ -187,7 +259,7 @@
 24
 3a
 00
-2f
+41
 20
 20
 12
@@ -237,13 +309,9 @@
 12
 52
 20
-40
-00
-65
 20
-40
-62
-a4
+00
+a1
 58
 00
 00
@@ -252,126 +320,298 @@
 20
 62
 95
-20
-40
-00
-3c
-20
-20
-37
-30
 6f
 e0
 c8
 c3
 c1
 80
-00
+80
 00
 20
 40
-24
-97
+23
+4b
 20
 40
 00
-45
+54
 20
 20
-37
-70
+24
+a1
 20
 40
+23
+fa
+20
+40
+21
+87
+24
 37
-05
+a3
+fa
+20
+40
+23
+67
 20
 40
 00
-48
+5a
 20
 20
-00
-54
+23
+5e
 6f
 e0
-c9
-12
-20
-7a
-00
-00
-d8
+c7
+a7
+67
 e0
-00
-0e
+c8
+39
 20
 40
-7d
-e9
+22
+74
+20
+40
+23
+e3
 24
-7a
-00
-00
-70
-49
-12
-00
-d8
-a0
-0c
-0f
-df
+37
+a1
+f1
 20
-00
-02
+40
+22
+47
 20
 40
-7d
-8c
-6f
-e4
-0c
-0f
-67
-e4
-48
-fe
+21
+f8
 20
 20
-37
-1d
+21
+f1
 6f
 e0
-c9
-13
-20
-7a
+c8
+c3
+c1
 00
 00
-d8
+00
+6f
 e0
+c8
+d7
+24
+7a
 00
-0c
-20
-40
-7d
-e9
+00
+6f
+e0
+c8
+d5
 24
 7a
 00
 00
-70
-49
-13
+6f
+e0
+c8
+d1
+20
+7a
+00
 00
+6f
+e0
+c8
 d8
-a0
-0c
-1f
-df
+2f
+e0
+06
+03
 20
-00
-02
+20
+a4
+7f
+20
+40
+22
+a0
+24
+74
+00
+00
+6f
+e1
+48
+d3
+1f
+e0
+fe
+01
+67
+e1
+48
+d3
+d8
+40
+07
+d0
+98
+46
+7c
+00
+20
+21
+24
+7f
+6f
+e0
+c8
+d6
+1f
+e0
+fe
+01
+1f
+e1
+7e
+01
+67
+e0
+c8
+d6
+c0
+00
+25
+44
+c0
+00
+a3
+48
+20
+60
+00
+00
+6f
+e0
+c8
+c3
+c1
+80
+00
+00
+20
+40
+01
+41
+20
+40
+00
+81
+20
+20
+37
+70
+20
+40
+37
+05
+20
+40
+00
+84
+20
+20
+00
+90
+6f
+e0
+c9
+12
+20
+7a
+00
+00
+d8
+e0
+00
+0e
+20
+40
+7d
+e9
+24
+7a
+00
+00
+70
+49
+12
+00
+d8
+a0
+0c
+0f
+df
+20
+00
+02
+20
+40
+7d
+8c
+6f
+e4
+0c
+0f
+67
+e4
+48
+fe
+20
+20
+37
+1d
+6f
+e0
+c9
+13
+20
+7a
+00
+00
+d8
+e0
+00
+0c
+20
+40
+7d
+e9
+24
+7a
+00
+00
+70
+49
+13
+00
+d8
+a0
+0c
+1f
+df
+20
+00
+02
 20
 40
 7d
@@ -407,7 +647,7 @@
 20
 20
 00
-62
+9e
 6f
 e0
 c8
@@ -415,7 +655,7 @@
 c0
 07
 80
-69
+a5
 70
 49
 40
@@ -499,7 +739,7 @@
 20
 40
 00
-6b
+a7
 1f
 e6
 7e
@@ -523,7 +763,7 @@
 24
 20
 80
-83
+bf
 58
 00
 00
@@ -589,13 +829,65 @@
 7e
 80
 c0
+40
+00
+d1
+c0
 00
 00
-94
+dd
+20
+20
+13
+7c
+6f
+e0
+8b
+59
+1f
+f1
+fe
+00
+1f
+e3
+7e
+00
+1f
+e1
+7e
+03
+c0
+00
+7a
+b8
+c0
+00
+80
+d8
 20
 20
 7a
-a1
+ae
+6f
+e0
+8b
+5a
+c0
+01
+7b
+7a
+c0
+00
+80
+dc
+20
+20
+7a
+c1
+20
+20
+7b
+82
 6f
 e0
 8b
@@ -615,7 +907,7 @@
 c0
 00
 80
-9a
+e3
 20
 20
 7a
@@ -627,7 +919,7 @@
 c0
 04
 80
-9d
+e6
 20
 20
 7a
@@ -710,14 +1002,6 @@
 c6
 20
 40
-12
-07
-20
-00
-00
-64
-20
-40
 23
 e3
 20
@@ -725,6 +1009,14 @@
 22
 47
 20
+00
+01
+2c
+20
+40
+12
+07
+20
 40
 21
 ff
@@ -738,32 +1030,36 @@
 97
 c0
 55
-00
-bb
+01
+05
 c0
 2a
-80
-c5
+81
+0f
 c0
 11
-00
-d5
-20
-20
-23
-70
+01
+1f
+c0
+7f
+81
+37
+20
+60
+00
+00
 6f
 e0
 c8
 98
 c0
 00
-80
-bf
+81
+09
 c0
 01
-00
-c2
+01
+0c
 20
 60
 00
@@ -798,8 +1094,8 @@
 5e
 20
 3a
-00
-cb
+01
+15
 6f
 e2
 48
@@ -822,12 +1118,12 @@
 98
 c0
 00
-80
-cf
+81
+19
 c0
 01
-00
-d2
+01
+1c
 20
 60
 00
@@ -862,8 +1158,8 @@
 5e
 20
 3a
-00
-db
+01
+25
 6f
 e2
 48
@@ -886,12 +1182,12 @@
 98
 c0
 00
-80
-df
+81
+29
 c0
 01
-00
-e6
+01
+30
 20
 60
 00
@@ -910,8 +1206,8 @@
 82
 c0
 01
-00
-e4
+01
+2e
 20
 60
 00
@@ -923,7 +1219,7 @@
 20
 20
 23
-a9
+aa
 6f
 e0
 c9
@@ -938,8 +1234,8 @@
 83
 c0
 80
-00
-eb
+01
+35
 20
 60
 00
@@ -951,140 +1247,6946 @@
 20
 20
 23
-b4
-5d
-13
-aa
-55
-40
-00
-00
-40
-00
-00
-00
+b5
+6f
+e0
+c8
+98
+c0
 00
+81
+3b
+c0
+01
+01
+3e
+20
+60
 00
 00
+6f
+e0
+c9
+41
+24
+7a
 00
 00
+20
+20
+25
+c2
+6f
+e0
+c9
+42
+24
+7a
 00
 00
+20
+20
+25
+c6
+6f
+e0
+c8
+c3
+c1
+80
 00
 00
+20
+40
+24
+85
+20
+40
+25
+47
+20
+20
+01
+46
+20
+40
+24
+29
+24
+37
+a3
+fa
+20
+40
+24
+1b
+24
+34
+23
+fa
+6f
+e0
+c8
+2d
+20
+3a
+23
+fa
+1f
+e0
+fe
+02
+98
 00
+72
 00
+d8
+c0
+47
+a7
+d8
+a0
+48
+95
+20
+40
+7d
+d4
+70
+48
+c0
 00
+6f
+e0
+c8
+bd
+20
+5a
+24
+36
+6f
+e0
+c8
+97
+c0
 00
+81
+59
+c0
+01
+24
+0e
+c0
+7f
+81
+67
+20
+20
+23
+fa
+20
+40
+23
+ca
+20
+40
+25
+5c
+6f
+e0
+c8
+b7
+68
+48
+c8
+95
 28
-1c
-00
-00
-00
+4f
+fe
+03
+79
 20
+fe
 00
-0c
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
+67
+e0
+c8
+b7
+c0
 00
+81
+62
+20
+20
+24
+07
+6f
+e0
+c9
+41
+24
+7a
 00
 00
+70
+49
+41
+01
+6f
+e2
+48
+9f
+20
+20
+25
+c4
+20
+40
+23
+d8
+20
+20
+01
+37
+20
+40
+79
+fc
+6f
+e0
+8b
+e3
+20
+7a
 00
 00
+70
+0b
+e3
 00
+6f
+e0
+8b
+61
+c1
+dd
 00
 00
+6f
+e0
+8b
+62
+c0
+50
+37
+44
+c0
+50
+b7
+4a
+c0
+53
+37
+56
+c0
+53
+b7
+58
+c0
+54
+b7
+5e
+c0
+58
+01
+77
+20
+20
+37
+42
+6f
+e0
+8b
+63
+c0
+58
+81
+7a
+20
+60
+00
+00
+20
+40
+01
+84
+6f
+e0
+8b
+66
+c0
+79
+01
+8e
+c0
+79
+81
+9d
+c0
+40
+01
+8a
+c0
+40
+81
+8d
+20
+20
+01
+87
+68
+4c
+10
+5a
+60
+4c
+0b
+61
+20
+60
 00
 00
+58
+4b
+4f
+01
+67
+e1
+8b
+a1
+20
+20
+37
+48
+58
+4f
+4e
+01
+67
+e1
+8b
+a1
+20
+20
+37
+48
+70
+48
+c3
+02
+20
+40
+01
+81
+20
+20
+01
+b2
+20
+20
+5e
+29
+20
+40
+01
+a3
+20
+61
 00
-50
-08
 00
-80
+6f
+e0
+90
+4b
+67
+e0
+90
+59
+68
+48
+8b
+64
+60
+48
+90
+4b
+6f
+e0
+8b
+65
+20
+40
+01
+81
+c0
+01
+01
+a7
+c0
+01
+81
+aa
+c0
+02
+01
+ac
+c0
+02
+81
+af
+6f
+e0
+90
+59
+67
+e0
+90
+4b
+20
+60
 00
 00
+6f
+e0
+8b
+65
+c1
+f8
 00
 00
+20
+40
+01
+a3
+20
+61
 00
 00
+67
+e0
+90
+4b
+20
+20
+01
+81
+6f
+e0
+8b
+64
+d8
+40
 00
-11
+50
+98
+46
+7c
 00
+20
+60
 00
 00
-aa
-55
-0a
+70
+10
+4f
 00
-15
-49
-06
+70
+10
+4d
 01
-51
-31
 20
+60
+00
+00
+70
 10
-51
-31
+4d
+02
 20
-30
-aa
-55
-0e
+60
 00
-20
-49
-0d
-32
-2e
-34
-47
-20
-52
-65
-63
-65
-69
-76
-65
-72
-aa
-55
-06
 00
-a8
-40
-39
-26
-18
-31
-44
-55
-aa
-55
+70
+10
+4f
+22
+70
+10
+4d
 01
+20
+60
 00
-9a
+00
+70
+10
+4f
+22
+70
+10
+4d
+02
+20
+60
+00
+00
+20
+40
+12
+d3
+58
+00
+10
+dd
+d8
+a0
+10
+4b
+98
+a6
+72
+00
+20
+40
+7d
+9b
+20
 40
+01
+ba
+70
+10
+50
+19
+20
+20
+01
+cd
+df
+20
+03
+fe
+d8
+a0
+10
+63
+58
+00
+01
+ff
+18
+00
+24
+00
+1f
+e9
+22
+00
+1a
+23
+22
+00
+9a
+22
+a2
+00
+2a
+2f
+fe
+00
+79
+20
+fe
+09
+18
+43
 04
-aa
-55
+00
+2f
+ef
+fe
+00
+79
+20
+84
+07
+1f
+e3
+7e
+00
+1a
+40
+a4
 01
+2a
+40
+0e
 00
-7b
-41
-14
+24
+20
+81
+be
+e0
 40
-9b
+80
+05
+c2
+00
+01
+be
+20
+60
+00
+00
+6f
+e3
+90
+4b
+67
+e3
+90
+52
+6f
+e0
+90
+54
+c0
+00
+81
+d4
+c0
+01
+01
+f9
+20
+40
+01
+69
+20
+20
+01
+cd
+20
+40
+11
+5d
+68
+48
+90
+52
+20
+40
+12
+01
+20
+40
+16
+51
+79
+20
+2a
+00
+78
+2e
+fc
+00
+78
+30
+7c
+00
+78
+50
+fc
+00
+20
+40
+16
+f0
+6f
+e0
+90
+56
+67
+f0
+89
+0d
+c0
+00
+01
+e2
+c0
+11
+01
+ed
+20
+60
+00
+00
+6f
+20
+90
+57
+d8
+c0
+10
+63
+ef
+e0
+80
+06
+08
+00
+86
+08
+c2
+00
+01
+e4
+20
+40
+01
+69
+6f
+e3
+90
+52
+68
+4b
+90
+4b
+98
+46
+7c
+00
+20
+22
+81
+e2
+20
+20
+01
+cd
+df
+20
+00
+35
+d8
+c0
+10
+63
+ef
+e0
+80
+06
+08
+00
+86
+08
+c2
+00
+01
+ef
+20
+40
+01
+69
+6f
+e3
+90
+52
+68
+4b
+90
+4b
+98
+46
+7c
+00
+20
+22
+81
+ed
+20
+40
+11
+4b
+20
+20
+01
+cd
+20
+40
+02
+00
+20
+40
+01
+69
+6f
+e3
+90
+52
+68
+4b
+90
+4b
+98
+46
+7c
+00
+20
+22
+81
+fa
+20
+20
+01
+cd
+20
+40
+11
+4b
+68
+48
+90
+52
+20
+20
+16
+74
+72
+22
+aa
+55
+40
+00
+00
+40
+01
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+28
+1c
+00
+00
+00
+20
+00
+0c
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+50
+08
+00
+80
+00
+00
+00
+00
+00
+00
+00
+51
+00
+00
+00
+aa
+55
+0a
+00
+15
+49
+06
+01
+51
+31
+20
+10
+51
+31
+20
+30
+aa
+55
+0e
+00
+20
+49
+0d
+32
+2e
+34
+47
+20
+52
+65
+63
+65
+69
+76
+65
+72
+aa
+55
+06
+00
+a8
+40
+39
+26
+77
+31
+44
+55
+aa
+55
+08
+00
+5a
+10
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+01
+00
+9a
+40
+04
+aa
+55
+01
+00
+7b
+41
+14
+55
+aa
+aa
+55
+6a
+14
+8d
+64
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+60
+ca
Index: output/program.lis
===================================================================
--- /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/program.lis	(revision 1822)
+++ /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/program.lis	(working copy)
@@ -1,568 +1,714 @@
               include "bt_format "
               org 0x0000
-0000 c284000a bbit1 8 ,pf_patch_ext 
-0001 c0418017 beq patch10_3 ,p_set_sync_on 
-0002 c042801e beq patch10_5 ,p_rf_rx_enable 
-0003 c045002c beq patch11_2 ,p_txon_next 
-0004 c0458032 beq patch11_3 ,p_initialize_radio_cont 
-0005 c046006d beq patch11_4 ,p_save_rssi 
-0006 c0568011 beq patch15_5 ,p_app_init 
-0007 c05d00f7 beq patch17_2 ,p_dongle_usb_dispatch 
-0008 c05d803d beq patch17_3 ,p_dongle_work_mode_auto 
-0009 2020137e branch loop 
+0000 c284000b bbit1 8 ,pf_patch_ext 
+0001 c0000013 beq patch00_0 ,p_soft_reset 
+0002 c0418029 beq patch10_3 ,p_set_sync_on 
+0003 c0428030 beq patch10_5 ,p_rf_rx_enable 
+0004 c045003e beq patch11_2 ,p_txon_next 
+0005 c0458044 beq patch11_3 ,p_initialize_radio_cont 
+0006 c04600ac beq patch11_4 ,p_save_rssi 
+0007 c0568017 beq patch15_5 ,p_app_init 
+0008 c05d0169 beq patch17_2 ,p_dongle_usb_dispatch 
+0009 c05d807c beq patch17_3 ,p_dongle_work_mode_auto 
+000a 2020137e branch loop 
 
 pf_patch_ext:
-000a c0460088 beq patch31_4 ,p_usb_init 
-000b c047008c beq patch31_6 ,p_usb_class_type 
-000c c04980a9 beq patch32_3 ,p_usb_tx 
-000d c0538082 beq patch34_7 ,p_le_enable 
-000e c07000af beq patch3c_0 ,p_g24_receive_skip_end 
-000f c07200c0 beq patch3c_4 ,p_g24_bind_data_parse_next 
-0010 2020137e branch loop 
+000b c04600c7 beq patch31_4 ,p_usb_init 
+000c c04700cb beq patch31_6 ,p_usb_class_type 
+000d c04980e8 beq patch32_3 ,p_usb_tx 
+000e c05380c1 beq patch34_7 ,p_le_enable 
+000f c07000ee beq patch3c_0 ,p_g24_receive_skip_end 
+0010 c07200ff beq patch3c_4 ,p_g24_bind_data_parse_next 
+0011 c073004f beq patch3c_6 ,p_g24_bind_mode_auto 
+0012 2020137e branch loop 
+
+p_soft_reset:
+0013 20800000 clear_stack 
+0014 20403166 call app_param_init 
+0015 7048809e jam tx_power_f30db ,mem_24g_pair_tx_power 
+0016 20200804 branch soft_reset + 3 
 
 p_app_init:
 
 p_dongle_init:
-0011 58000014 setarg p_dongle_dispatch 
-0012 67e1488d store 2 ,mem_cb_24g_receive_process 
-0013 2020369c branch dongle_init + 2 
+0017 7041823a jam 0x3a ,mem_lpm_ctrl3 
+0018 20401554 call lpm_write_sel_vdd 
+0019 5800001c setarg p_dongle_dispatch 
+001a 67e1488d store 2 ,mem_cb_24g_receive_process 
+001b 2020369c branch dongle_init + 2 
 
 p_dongle_dispatch:
-0014 6fe0c8bd fetch 1 ,mem_24g_pair_mode 
-0015 c007805e beq 0x0f ,p_dongle_all_powerful 
-0016 202036cd branch dongle_dispatch + 1 
+001c 6fe0c8bd fetch 1 ,mem_24g_pair_mode 
+001d c0000021 beq 0x00 ,p_dongle_auto_bind 
+001e c000b6fd beq 0x01 ,dongle_pc_bind 
+001f c007809d beq 0x0f ,p_dongle_all_powerful 
+0020 20600000 rtn 
+
+p_dongle_auto_bind:
+0021 2040243a call g24_mode_switch_init 
+
+p_dongle_auto_bind_loop:
+0022 2040243e call g24_mode_switch_bind_work 
+0023 20400062 call p_g24_mode_switch_bind_search 
+0024 2040376b call dongle_work_mode_auto 
+0025 2040249c call g24_bind_mode_auto 
+0026 204024b9 call g24_search_mode_auto 
+0027 2040372f call dongle_usb_dispatch 
+0028 20200022 branch p_dongle_auto_bind_loop 
 
 p_set_sync_on:
-0017 70890005 jam 0x5 ,modem_en 
-0018 20000002 nop 2 
-0019 70890000 jam 0x0 ,modem_en 
-001a 6fe0c0c5 fetch 1 ,mem_fcomp_div 
-001b c0841164 bne xtal_16m ,set_sync_on_24m 
+0029 70890005 jam 0x5 ,modem_en 
+002a 20000002 nop 2 
+002b 70890000 jam 0x0 ,modem_en 
+002c 6fe0c0c5 fetch 1 ,mem_fcomp_div 
+002d c0841164 bne xtal_16m ,set_sync_on_24m 
 
 p_set_sync_on_16m:
-001c 708a8729 jam 0x29 ,core_syn_afc_cfg1 
-001d 20201179 branch set_sync_on_16m 
+002e 708a8729 jam 0x29 ,core_syn_afc_cfg1 
+002f 20201179 branch set_sync_on_16m 
 
 p_rf_rx_enable:
-001e 6fe0c940 fetch 1 ,mem_soft_agc_en 
-001f 243a0027 nbranch p_rf_rx_enable_soft_agc ,blank 
-0020 20404d05 call rf_debug_rx_gpio_high 
-0021 d8c041eb arg mem_gain_table ,contr 
-0022 98c08c00 iadd contr ,contr 
-0023 efe08006 ifetch 1 ,contr 
-0024 67f08961 store 1 ,core_rf_rx_gain_fix 
-0025 7089602e jam 0x2e ,core_rf_rx_agc_ctrl 
-0026 202011af branch rf_rx_enable_no_soft_agc_next 
+0030 6fe0c940 fetch 1 ,mem_soft_agc_en 
+0031 243a0039 nbranch p_rf_rx_enable_soft_agc ,blank 
+0032 20404d05 call rf_debug_rx_gpio_high 
+0033 d8c041eb arg mem_gain_table ,contr 
+0034 98c08c00 iadd contr ,contr 
+0035 efe08006 ifetch 1 ,contr 
+0036 67f08961 store 1 ,core_rf_rx_gain_fix 
+0037 7089602e jam 0x2e ,core_rf_rx_agc_ctrl 
+0038 202011af branch rf_rx_enable_no_soft_agc_next 
 
 p_rf_rx_enable_soft_agc:
-0027 6ff08960 fetch 1 ,core_rf_rx_agc_ctrl 
-0028 1fe1fe01 or pdata ,0x01 ,pdata 
-0029 67f08960 store 1 ,core_rf_rx_agc_ctrl 
-002a 70896108 jam 0x08 ,core_rf_rx_gain_fix 
-002b 202011af branch rf_rx_enable_no_soft_agc_next 
+0039 6ff08960 fetch 1 ,core_rf_rx_agc_ctrl 
+003a 1fe1fe01 or pdata ,0x01 ,pdata 
+003b 67f08960 store 1 ,core_rf_rx_agc_ctrl 
+003c 70896108 jam 0x08 ,core_rf_rx_gain_fix 
+003d 202011af branch rf_rx_enable_no_soft_agc_next 
 
 p_txon_next:
-002c 6fe0c940 fetch 1 ,mem_soft_agc_en 
-002d 243a002f nbranch p_set_tx_power_f20db ,blank 
-002e 20201237 branch set_tx_power_10db 
+003e 6fe0c940 fetch 1 ,mem_soft_agc_en 
+003f 243a0041 nbranch p_set_tx_power_f20db ,blank 
+0040 20201237 branch set_tx_power_10db 
 
 p_set_tx_power_f20db:
-002f 708a3953 jam 0x53 ,core_tx_pwr_ctrl0 
-0030 708a3a01 jam 0x01 ,core_tx_pwr_ctrl1 
-0031 20201226 branch set_rf_ldo_cfg89 
+0041 708a3953 jam 0x53 ,core_tx_pwr_ctrl0 
+0042 708a3a01 jam 0x01 ,core_tx_pwr_ctrl1 
+0043 20201226 branch set_rf_ldo_cfg89 
 
 p_initialize_radio_cont:
-0032 7041eaff jam 0xff ,mem_gain_fix 
-0033 708a8500 jam 0x00 ,core_syn_loopdiv_dsm_cfg 
-0034 70892140 jam 0x40 ,0x8921 
-0035 70486702 jam 0x02 ,mem_24g_rx_phy 
-0036 70486802 jam 0x02 ,mem_24g_tx_phy 
-0037 70487a01 jam 0x01 ,mem_24g_disable_fec1 
-0038 7048bc1e jam 0x1e ,mem_24g_hop_interval 
-0039 20401252 call initialize_radio_cont + 1 
-003a 20200062 branch p_g24_fast_conn_mode_check 
+0044 7041eaff jam 0xff ,mem_gain_fix 
+0045 708a8500 jam 0x00 ,core_syn_loopdiv_dsm_cfg 
+0046 70892140 jam 0x40 ,0x8921 
+0047 70486702 jam 0x02 ,mem_24g_rx_phy 
+0048 70486802 jam 0x02 ,mem_24g_tx_phy 
+0049 70487a01 jam 0x01 ,mem_24g_disable_fec1 
+004a 7048bc1e jam 0x1e ,mem_24g_hop_interval 
+004b 20401252 call initialize_radio_cont + 1 
+004c 202000a1 branch p_g24_fast_conn_mode_check 
 
 p_wdt_kick:
-003b 5800007d setarg 125 
-003c 20206295 branch wdt_init_config 
+004d 5800007d setarg 125 
+004e 20206295 branch wdt_init_config 
+
+p_g24_bind_mode_auto:
+004f 6fe0c8c3 fetch 1 ,mem_24g_work_mode 
+0050 c1808000 rtnne dongle_bind 
+0051 2040234b call g24_bind_init 
+0052 20400054 call p_g24_bind_data_process 
+0053 202024a1 branch g24_bind_mode_auto + 5 
+
+p_g24_bind_data_process:
+0054 204023fa call g24_rx_interrupt_clear 
+0055 20402187 call g24_receive_packet 
+0056 2437a3fa nbranch g24_rx_interrupt_clear ,user3 
+0057 20402367 call g24_bind_data_parse 
+0058 2040005a call p_g24_bind_transmit_ack 
+0059 2020235e branch g24_bind_data_process + 5 
+
+p_g24_bind_transmit_ack:
+005a 6fe0c7a7 fetch 1 ,mem_24g_rxbuf 
+005b 67e0c839 store 1 ,mem_24g_data_type 
+005c 20402274 call g24_read_len_pid_crc 
+005d 204023e3 call g24_ackpayload_prep 
+005e 2437a1f1 nbranch g24_end_of_packet ,user3 
+005f 20402247 call g24_transmit_prep 
+0060 204021f8 call g24_transmit 
+0061 202021f1 branch g24_end_of_packet 
+
+p_g24_mode_switch_bind_search:
+0062 6fe0c8c3 fetch 1 ,mem_24g_work_mode 
+0063 c1000000 rtneq dongle_work 
+0064 6fe0c8d7 fetch 1 ,mem_24g_b_s_mode_switch_disable 
+0065 247a0000 nrtn blank 
+0066 6fe0c8d5 fetch 1 ,mem_24g_mode_b_s_switch_exit 
+0067 247a0000 nrtn blank 
+0068 6fe0c8d1 fetch 1 ,mem_24g_mode_b_s_switch 
+0069 207a0000 rtn blank 
+006a 6fe0c8d8 fetch 1 ,mem_24g_bind_device_living 
+006b 2fe00603 compare 3 ,pdata ,3 
+006c 2020a47f branch g24_mode_b_s_switch_exit ,true 
+006d 204022a0 call g24_timer_check 
+006e 24740000 nrtn user 
+006f 6fe148d3 fetch 2 ,mem_24g_mode_b_s_switch_cnt 
+0070 1fe0fe01 increase 1 ,pdata 
+0071 67e148d3 store 2 ,mem_24g_mode_b_s_switch_cnt 
+0072 d84007d0 arg 0x7d0 ,temp 
+0073 98467c00 isub temp ,null 
+0074 2021247f branch g24_mode_b_s_switch_exit ,positive 
+0075 6fe0c8d6 fetch 1 ,mem_24g_b_s_time_slice 
+0076 1fe0fe01 increase 1 ,pdata 
+0077 1fe17e01 and_into 1 ,pdata 
+0078 67e0c8d6 store 1 ,mem_24g_b_s_time_slice 
+0079 c0002544 beq 0 ,g24_search_mode_enable 
+007a c000a348 beq 1 ,g24_bind_mode_enable 
+007b 20600000 rtn 
 
 p_dongle_work_mode_auto:
-003d 6fe0c8c3 fetch 1 ,mem_24g_work_mode 
-003e c1800000 rtnne dongle_work 
-003f 20402497 call g24_work_mode_start 
-0040 20400042 call p_dongle_g24_blank_data_process 
-0041 20203770 branch dongle_work_mode_auto + 5 
+007c 6fe0c8c3 fetch 1 ,mem_24g_work_mode 
+007d c1800000 rtnne dongle_work 
+007e 20400141 call p_g24_work_mode_start 
+007f 20400081 call p_dongle_g24_blank_data_process 
+0080 20203770 branch dongle_work_mode_auto + 5 
 
 p_dongle_g24_blank_data_process:
-0042 20403705 call dongle_g24_ms_blank_data 
-0043 20400045 call p_dongle_g24_kb_blank_data 
-0044 20200051 branch p_dongle_g24_kb_mul_blank_data 
+0081 20403705 call dongle_g24_ms_blank_data 
+0082 20400084 call p_dongle_g24_kb_blank_data 
+0083 20200090 branch p_dongle_g24_kb_mul_blank_data 
 
 p_dongle_g24_kb_blank_data:
-0045 6fe0c912 fetch 1 ,mem_dg_kb_blank_data_enable 
-0046 207a0000 rtn blank 
-0047 d8e0000e arg timer_kb_blank ,queue 
-0048 20407de9 call timer_check 
-0049 247a0000 nrtn blank 
-004a 70491200 jam 0 ,mem_dg_kb_blank_data_enable 
-004b d8a00c0f arg mem_usb_kb_data ,contw 
-004c df200002 arg 2 ,loopcnt 
-004d 20407d8c call memset0 
-004e 6fe40c0f fetch 8 ,mem_usb_kb_data 
-004f 67e448fe store 8 ,mem_dg_kb_data_last_data 
-0050 2020371d branch dongle_usb_tx_kb_data 
+0084 6fe0c912 fetch 1 ,mem_dg_kb_blank_data_enable 
+0085 207a0000 rtn blank 
+0086 d8e0000e arg timer_kb_blank ,queue 
+0087 20407de9 call timer_check 
+0088 247a0000 nrtn blank 
+0089 70491200 jam 0 ,mem_dg_kb_blank_data_enable 
+008a d8a00c0f arg mem_usb_kb_data ,contw 
+008b df200002 arg 2 ,loopcnt 
+008c 20407d8c call memset0 
+008d 6fe40c0f fetch 8 ,mem_usb_kb_data 
+008e 67e448fe store 8 ,mem_dg_kb_data_last_data 
+008f 2020371d branch dongle_usb_tx_kb_data 
 
 p_dongle_g24_kb_mul_blank_data:
-0051 6fe0c913 fetch 1 ,mem_dg_kb_mul_blank_data_enable 
-0052 207a0000 rtn blank 
-0053 d8e0000c arg timer_kb_mul_blank ,queue 
-0054 20407de9 call timer_check 
-0055 247a0000 nrtn blank 
-0056 70491300 jam 0 ,mem_dg_kb_mul_blank_data_enable 
-0057 d8a00c1f arg mem_usb_kb_multikey ,contw 
-0058 df200002 arg 2 ,loopcnt 
-0059 20407d8c call memset0 
-005a 700c1f03 jam kb_multikey_report_id ,mem_usb_kb_multikey 
-005b 6fe18c1f fetch 3 ,mem_usb_kb_multikey 
-005c 67e1c909 store 3 ,mem_dg_kb_multikey_last_data 
-005d 2020372d branch dongle_usb_tx_multikey_data 
+0090 6fe0c913 fetch 1 ,mem_dg_kb_mul_blank_data_enable 
+0091 207a0000 rtn blank 
+0092 d8e0000c arg timer_kb_mul_blank ,queue 
+0093 20407de9 call timer_check 
+0094 247a0000 nrtn blank 
+0095 70491300 jam 0 ,mem_dg_kb_mul_blank_data_enable 
+0096 d8a00c1f arg mem_usb_kb_multikey ,contw 
+0097 df200002 arg 2 ,loopcnt 
+0098 20407d8c call memset0 
+0099 700c1f03 jam kb_multikey_report_id ,mem_usb_kb_multikey 
+009a 6fe18c1f fetch 3 ,mem_usb_kb_multikey 
+009b 67e1c909 store 3 ,mem_dg_kb_multikey_last_data 
+009c 2020372d branch dongle_usb_tx_multikey_data 
 
 p_dongle_all_powerful:
-005e 20402493 call g24_switch_work_mode 
+009d 20402493 call g24_switch_work_mode 
 
 p_dongle_all_powerful_loop:
-005f 2040376b call dongle_work_mode_auto 
-0060 2040372f call dongle_usb_dispatch 
-0061 2020005f branch p_dongle_all_powerful_loop 
+009e 2040376b call dongle_work_mode_auto 
+009f 2040372f call dongle_usb_dispatch 
+00a0 2020009e branch p_dongle_all_powerful_loop 
 
 p_g24_fast_conn_mode_check:
-0062 6fe0c8bd fetch 1 ,mem_24g_pair_mode 
-0063 c0078066 beq 0x0f ,p_soft_agc_en_true 
+00a1 6fe0c8bd fetch 1 ,mem_24g_pair_mode 
+00a2 c00780a5 beq 0x0f ,p_soft_agc_en_true 
 
 p_soft_agc_en_false:
-0064 70494000 jam 0 ,mem_soft_agc_en 
-0065 20600000 rtn 
+00a3 70494000 jam 0 ,mem_soft_agc_en 
+00a4 20600000 rtn 
 
 p_soft_agc_en_true:
-0066 70494001 jam 1 ,mem_soft_agc_en 
-0067 20600000 rtn 
+00a5 70494001 jam 1 ,mem_soft_agc_en 
+00a6 20600000 rtn 
 
 p_byte_sign_extern:
-0068 2feffe07 isolate1 7 ,pdata 
-0069 24608000 nrtn true 
-006a d840ff00 arg 0xff00 ,temp 
-006b 9841fe00 ior temp ,pdata 
-006c 20600000 rtn 
+00a7 2feffe07 isolate1 7 ,pdata 
+00a8 24608000 nrtn true 
+00a9 d840ff00 arg 0xff00 ,temp 
+00aa 9841fe00 ior temp ,pdata 
+00ab 20600000 rtn 
 
 p_save_rssi:
-006d 6ff089a2 fetch 1 ,modem_nb_pow 
-006e 2feffe06 isolate1 6 ,pdata 
-006f 7920fe07 setflag true ,7 ,pdata 
-0070 67e0c1e9 store 1 ,mem_modem_rssi 
-0071 6ff089a3 fetch 1 ,modem_gain 
-0072 1fe1040f and pdata ,0x0f ,temp 
-0073 18438400 lshift temp ,temp 
-0074 1ff1fe00 rshift4 pdata ,pdata 
-0075 98408400 iadd temp ,temp 
-0076 184fa203 mul32 temp ,3 ,rega 
-0077 6fe0c1e9 fetch 1 ,mem_modem_rssi 
-0078 20400068 call p_byte_sign_extern 
-0079 1fe67e00 sub pdata ,0 ,pdata 
-007a 9a20fe00 iadd rega ,pdata 
-007b 1fe0fff7 increase -9 ,pdata 
-007c 1fe17fff and pdata ,0x1ff ,pdata 
-007d 2feffe08 isolate1 8 ,pdata 
-007e 24208080 nbranch p_save_rssi_store ,true 
-007f 58000000 setarg 0 
+00ac 6ff089a2 fetch 1 ,modem_nb_pow 
+00ad 2feffe06 isolate1 6 ,pdata 
+00ae 7920fe07 setflag true ,7 ,pdata 
+00af 67e0c1e9 store 1 ,mem_modem_rssi 
+00b0 6ff089a3 fetch 1 ,modem_gain 
+00b1 1fe1040f and pdata ,0x0f ,temp 
+00b2 18438400 lshift temp ,temp 
+00b3 1ff1fe00 rshift4 pdata ,pdata 
+00b4 98408400 iadd temp ,temp 
+00b5 184fa203 mul32 temp ,3 ,rega 
+00b6 6fe0c1e9 fetch 1 ,mem_modem_rssi 
+00b7 204000a7 call p_byte_sign_extern 
+00b8 1fe67e00 sub pdata ,0 ,pdata 
+00b9 9a20fe00 iadd rega ,pdata 
+00ba 1fe0fff7 increase -9 ,pdata 
+00bb 1fe17fff and pdata ,0x1ff ,pdata 
+00bc 2feffe08 isolate1 8 ,pdata 
+00bd 242080bf nbranch p_save_rssi_store ,true 
+00be 58000000 setarg 0 
 
 p_save_rssi_store:
-0080 67e08154 store 1 ,mem_rssi_hex 
-0081 20201293 branch rssi_hex2dec 
+00bf 67e08154 store 1 ,mem_rssi_hex 
+00c0 20201293 branch rssi_hex2dec 
 
 p_le_enable:
-0082 20401652 call le_enable + 1 
-0083 708a6d89 jam 0x89 ,core_rx_bq_cfg0 
-0084 6ff08a43 fetch 1 ,core_syn_cal_ctrl 
-0085 1fe1fe0f or pdata ,0x0f ,pdata 
-0086 67f08a43 store 1 ,core_syn_cal_ctrl 
-0087 20600000 rtn 
+00c1 20401652 call le_enable + 1 
+00c2 708a6d89 jam 0x89 ,core_rx_bq_cfg0 
+00c3 6ff08a43 fetch 1 ,core_syn_cal_ctrl 
+00c4 1fe1fe0f or pdata ,0x0f ,pdata 
+00c5 67f08a43 store 1 ,core_syn_cal_ctrl 
+00c6 20600000 rtn 
 
 p_usb_init:
-0088 20406e5e call enable_authrom 
-0089 20407a27 call usb_init_param 
-008a 700aa803 jam 0x03 ,mem_devicedesc + 17 
-008b 20207a0b branch usb_init_next 
+00c7 20406e5e call enable_authrom 
+00c8 20407a27 call usb_init_param 
+00c9 700aa803 jam 0x03 ,mem_devicedesc + 17 
+00ca 20207a0b branch usb_init_next 
 
 p_usb_class_type:
-008c 793f8023 set0 mark_isstr ,mark 
-008d 6fe08b59 fetch 1 ,mem_usb_setup_bmrequesttype 
-008e 1fe17e80 and_into 0x80 ,pdata 
-008f c0400092 beq in_device ,p_usb_in_device 
-0090 c000009e beq out_device ,p_usb_out_device 
-0091 2020137c branch assert 
+00cb 793f8023 set0 mark_isstr ,mark 
+00cc 6fe08b59 fetch 1 ,mem_usb_setup_bmrequesttype 
+00cd 1fe17e80 and_into 0x80 ,pdata 
+00ce c04000d1 beq in_device ,p_usb_in_device 
+00cf c00000dd beq out_device ,p_usb_out_device 
+00d0 2020137c branch assert 
 
 p_usb_in_device:
-0092 6fe08b59 fetch 1 ,mem_usb_setup_bmrequesttype 
-0093 1ff1fe00 rshift4 pdata ,pdata 
-0094 1fe37e00 rshift pdata ,pdata 
-0095 1fe17e03 and_into 0x03 ,pdata 
-0096 c0007ab8 beq standard_req ,usb_in_standard_req 
-0097 c0008099 beq class_req ,p_usb_in_class_req 
-0098 20207aae branch usb_in_device + 6 
+00d1 6fe08b59 fetch 1 ,mem_usb_setup_bmrequesttype 
+00d2 1ff1fe00 rshift4 pdata ,pdata 
+00d3 1fe37e00 rshift pdata ,pdata 
+00d4 1fe17e03 and_into 0x03 ,pdata 
+00d5 c0007ab8 beq standard_req ,usb_in_standard_req 
+00d6 c00080d8 beq class_req ,p_usb_in_class_req 
+00d7 20207aae branch usb_in_device + 6 
 
 p_usb_in_class_req:
-0099 6fe08b5a fetch 1 ,mem_usb_setup_brequest 
-009a c0017b7a beq get_idle ,usb_get_idle 
-009b c000809d beq get_report ,p_usb_get_report 
-009c 20207ac1 branch usb_in_class_req + 3 
+00d8 6fe08b5a fetch 1 ,mem_usb_setup_brequest 
+00d9 c0017b7a beq get_idle ,usb_get_idle 
+00da c00080dc beq get_report ,p_usb_get_report 
+00db 20207ac1 branch usb_in_class_req + 3 
 
 p_usb_get_report:
-009d 20207b82 branch usb_get_report_dispose 
+00dc 20207b82 branch usb_get_report_dispose 
 
 p_usb_out_device:
-009e 6fe08b59 fetch 1 ,mem_usb_setup_bmrequesttype 
-009f 1ff1fe00 rshift4 pdata ,pdata 
-00a0 1fe37e00 rshift pdata ,pdata 
-00a1 1fe17e03 and_into 0x03 ,pdata 
-00a2 c00080a4 beq class_req ,p_usb_out_class_req 
-00a3 20207ab4 branch usb_out_device + 4 
+00dd 6fe08b59 fetch 1 ,mem_usb_setup_bmrequesttype 
+00de 1ff1fe00 rshift4 pdata ,pdata 
+00df 1fe37e00 rshift pdata ,pdata 
+00e0 1fe17e03 and_into 0x03 ,pdata 
+00e1 c00080e3 beq class_req ,p_usb_out_class_req 
+00e2 20207ab4 branch usb_out_device + 4 
 
 p_usb_out_class_req:
-00a4 6fe08b5a fetch 1 ,mem_usb_setup_brequest 
-00a5 c00480a7 beq set_report ,p_usb_set_report 
-00a6 20207acd branch usb_out_class_req + 1 
+00e3 6fe08b5a fetch 1 ,mem_usb_setup_brequest 
+00e4 c00480e6 beq set_report ,p_usb_set_report 
+00e5 20207acd branch usb_out_class_req + 1 
 
 p_usb_set_report:
-00a7 20003a98 nop 15000 
-00a8 20207c4a branch usb_set_report 
+00e6 20003a98 nop 15000 
+00e7 20207c4a branch usb_set_report 
 
 p_usb_tx:
-00a9 6fe08bf9 fetch 1 ,mem_usb_tx_enable 
-00aa 207a0000 rtn blank 
-00ab 6ff08c24 fetch 1 ,core_usb_txbusy 
-00ac 1fe17e0f and_into 0x0f ,pdata 
-00ad 243a7d17 nbranch usb_inwake_state_tx_dispose ,blank 
-00ae 20207ccc branch usb_tx + 3 
+00e8 6fe08bf9 fetch 1 ,mem_usb_tx_enable 
+00e9 207a0000 rtn blank 
+00ea 6ff08c24 fetch 1 ,core_usb_txbusy 
+00eb 1fe17e0f and_into 0x0f ,pdata 
+00ec 243a7d17 nbranch usb_inwake_state_tx_dispose ,blank 
+00ed 20207ccc branch usb_tx + 3 
 
 p_g24_receive_skip_end:
-00af 6fe0c868 fetch 1 ,mem_24g_tx_phy 
-00b0 20401637 call le_enable_phy_by_pdata 
-00b1 6fe2483f fetch 4 ,mem_24g_addr 
-00b2 98001200 iforce access 
-00b3 20402181 call g24_prep 
-00b4 2040115d call set_sync_on 
-00b5 6848c83d fetcht 1 ,mem_24g_ch 
-00b6 708a3d12 jam 0x12 ,core_syn_top_ctrl 
-00b7 60488017 storet 1 ,mem_last_freq 
-00b8 1840a202 add temp ,2 ,rega 
-00b9 204011c6 call rf_tx_write_freq 
-00ba 20401207 call txon 
-00bb 20000064 nop 100 
-00bc 204023e3 call g24_ackpayload_prep 
-00bd 20402247 call g24_transmit_prep 
-00be 204021ff call g24_transmit + 7 
-00bf 202021d6 branch g24_receive_skip_end 
+00ee 6fe0c868 fetch 1 ,mem_24g_tx_phy 
+00ef 20401637 call le_enable_phy_by_pdata 
+00f0 6fe2483f fetch 4 ,mem_24g_addr 
+00f1 98001200 iforce access 
+00f2 20402181 call g24_prep 
+00f3 2040115d call set_sync_on 
+00f4 6848c83d fetcht 1 ,mem_24g_ch 
+00f5 708a3d12 jam 0x12 ,core_syn_top_ctrl 
+00f6 60488017 storet 1 ,mem_last_freq 
+00f7 1840a202 add temp ,2 ,rega 
+00f8 204011c6 call rf_tx_write_freq 
+00f9 204023e3 call g24_ackpayload_prep 
+00fa 20402247 call g24_transmit_prep 
+00fb 2000012c nop 300 
+00fc 20401207 call txon 
+00fd 204021ff call g24_transmit + 7 
+00fe 202021d6 branch g24_receive_skip_end 
 
 p_g24_bind_data_parse_next:
-00c0 6fe0c897 fetch 1 ,mem_24g_rxdata_temp + 2 
-00c1 c05500c5 beq datatype_bind ,p_g24_bind_first_step 
-00c2 c02a80cf beq datatype_config ,p_g24_bind_second_step 
-00c3 c01100df beq datatype_ok ,p_g24_bind_third_step 
-00c4 20202370 branch g24_bind_data_parse_next + 4 
+00ff 6fe0c897 fetch 1 ,mem_24g_rxdata_temp + 2 
+0100 c0550105 beq datatype_bind ,p_g24_bind_first_step 
+0101 c02a810f beq datatype_config ,p_g24_bind_second_step 
+0102 c011011f beq datatype_ok ,p_g24_bind_third_step 
+0103 c07f8137 beq datatype_attemp ,p_g24_data_attemp 
+0104 20600000 rtn 
 
 p_g24_bind_first_step:
-00c5 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
-00c6 c00080c9 beq datatype_device1 ,p_g24_bind_first_step_device1 
-00c7 c00100cc beq datatype_device2 ,p_g24_bind_first_step_device2 
-00c8 20600000 rtn 
+0105 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
+0106 c0008109 beq datatype_device1 ,p_g24_bind_first_step_device1 
+0107 c001010c beq datatype_device2 ,p_g24_bind_first_step_device2 
+0108 20600000 rtn 
 
 p_g24_bind_first_step_device1:
-00c9 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
-00ca 247a0000 nrtn blank 
-00cb 20202376 branch g24_bind_first_step_device1 
+0109 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
+010a 247a0000 nrtn blank 
+010b 20202376 branch g24_bind_first_step_device1 
 
 p_g24_bind_first_step_device2:
-00cc 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
-00cd 247a0000 nrtn blank 
-00ce 2020237c branch g24_bind_first_step_device2 
+010c 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
+010d 247a0000 nrtn blank 
+010e 2020237c branch g24_bind_first_step_device2 
 
 p_g24_bind_second_step:
-00cf 6fe0c85e fetch 1 ,mem_24g_pair_switch 
-00d0 203a00d5 branch p_g24_bind_second_step_skip ,blank 
-00d1 6fe24899 fetch 4 ,mem_24g_rxdata_temp + 4 
-00d2 684a40a8 fetcht 4 ,mem_lap 
-00d3 98467c00 isub temp ,null 
-00d4 24628000 nrtn zero 
+010f 6fe0c85e fetch 1 ,mem_24g_pair_switch 
+0110 203a0115 branch p_g24_bind_second_step_skip ,blank 
+0111 6fe24899 fetch 4 ,mem_24g_rxdata_temp + 4 
+0112 684a40a8 fetcht 4 ,mem_lap 
+0113 98467c00 isub temp ,null 
+0114 24628000 nrtn zero 
 
 p_g24_bind_second_step_skip:
-00d5 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
-00d6 c00080d9 beq datatype_device1 ,p_g24_bind_second_step_device1 
-00d7 c00100dc beq datatype_device2 ,p_g24_bind_second_step_device2 
-00d8 20600000 rtn 
+0115 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
+0116 c0008119 beq datatype_device1 ,p_g24_bind_second_step_device1 
+0117 c001011c beq datatype_device2 ,p_g24_bind_second_step_device2 
+0118 20600000 rtn 
 
 p_g24_bind_second_step_device1:
-00d9 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
-00da 247a0000 nrtn blank 
-00db 20202389 branch g24_bind_second_step_device1 
+0119 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
+011a 247a0000 nrtn blank 
+011b 20202389 branch g24_bind_second_step_device1 
 
 p_g24_bind_second_step_device2:
-00dc 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
-00dd 247a0000 nrtn blank 
-00de 20202394 branch g24_bind_second_step_device2 
+011c 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
+011d 247a0000 nrtn blank 
+011e 20202394 branch g24_bind_second_step_device2 
 
 p_g24_bind_third_step:
-00df 6fe0c85e fetch 1 ,mem_24g_pair_switch 
-00e0 203a00e5 branch p_g24_bind_third_step_skip ,blank 
-00e1 6fe24899 fetch 4 ,mem_24g_rxdata_temp + 4 
-00e2 684a48d9 fetcht 4 ,mem_24g_transmitter_addr 
-00e3 98467c00 isub temp ,null 
-00e4 24628000 nrtn zero 
+011f 6fe0c85e fetch 1 ,mem_24g_pair_switch 
+0120 203a0125 branch p_g24_bind_third_step_skip ,blank 
+0121 6fe24899 fetch 4 ,mem_24g_rxdata_temp + 4 
+0122 684a48d9 fetcht 4 ,mem_24g_transmitter_addr 
+0123 98467c00 isub temp ,null 
+0124 24628000 nrtn zero 
 
 p_g24_bind_third_step_skip:
-00e5 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
-00e6 c00080e9 beq datatype_device1 ,p_g24_bind_third_step_device1 
-00e7 c00100f0 beq datatype_device2 ,p_g24_bind_third_step_device2 
-00e8 20600000 rtn 
+0125 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
+0126 c0008129 beq datatype_device1 ,p_g24_bind_third_step_device1 
+0127 c0010130 beq datatype_device2 ,p_g24_bind_third_step_device2 
+0128 20600000 rtn 
 
 p_g24_bind_third_step_device1:
-00e9 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
-00ea 247a0000 nrtn blank 
-00eb 6fe0c882 fetch 1 ,mem_24g_device1_bind_step 
-00ec c00100ee beq 2 ,p_g24_bind_dvc1_step_success 
-00ed 20600000 rtn 
+0129 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
+012a 247a0000 nrtn blank 
+012b 6fe0c882 fetch 1 ,mem_24g_device1_bind_step 
+012c c001012e beq 2 ,p_g24_bind_dvc1_step_success 
+012d 20600000 rtn 
 
 p_g24_bind_dvc1_step_success:
-00ee 70494101 jam 1 ,mem_24g_mouse_bind_enable 
-00ef 202023a9 branch g24_bind_dvc1_step_success 
+012e 70494101 jam 1 ,mem_24g_mouse_bind_enable 
+012f 202023aa branch g24_bind_dvc1_step_success + 1 
 
 p_g24_bind_third_step_device2:
-00f0 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
-00f1 247a0000 nrtn blank 
-00f2 6fe0c883 fetch 1 ,mem_24g_device2_bind_step 
-00f3 c08000f5 bne 0 ,p_g24_bind_dvc2_step_success 
-00f4 20600000 rtn 
+0130 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
+0131 247a0000 nrtn blank 
+0132 6fe0c883 fetch 1 ,mem_24g_device2_bind_step 
+0133 c0800135 bne 0 ,p_g24_bind_dvc2_step_success 
+0134 20600000 rtn 
 
 p_g24_bind_dvc2_step_success:
-00f5 70494201 jam 1 ,mem_24g_keyboard_bind_enable 
-00f6 202023b4 branch g24_bind_dvc2_step_success 
+0135 70494201 jam 1 ,mem_24g_keyboard_bind_enable 
+0136 202023b5 branch g24_bind_dvc2_step_success + 1 
+
+p_g24_data_attemp:
+0137 6fe0c898 fetch 1 ,mem_24g_rxdata_temp + 3 
+0138 c000813b beq datatype_device1 ,p_g24_data_attemp_device1 
+0139 c001013e beq datatype_device2 ,p_g24_data_attemp_device2 
+013a 20600000 rtn 
+
+p_g24_data_attemp_device1:
+013b 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
+013c 247a0000 nrtn blank 
+013d 202025c2 branch g24_data_attemp_device1 
+
+p_g24_data_attemp_device2:
+013e 6fe0c942 fetch 1 ,mem_24g_keyboard_bind_enable 
+013f 247a0000 nrtn blank 
+0140 202025c6 branch g24_data_attemp_device2 
+
+p_g24_work_mode_start:
+0141 6fe0c8c3 fetch 1 ,mem_24g_work_mode 
+0142 c1800000 rtnne dongle_work 
+0143 20402485 call g24_work_init 
+0144 20402547 call g24_ch_process 
+0145 20200146 branch p_g24_receive_packet_start 
+
+p_g24_receive_packet_start:
+0146 20402429 call g24_receive_transmit_ack 
+0147 2437a3fa nbranch g24_rx_interrupt_clear ,user3 
+
+p_g24_receive_packet_parse:
+0148 2040241b call g24_receive_packet_parse_pid_crc 
+0149 243423fa nbranch g24_rx_interrupt_clear ,user 
+014a 6fe0c82d fetch 1 ,mem_24g_rxdata_length 
+014b 203a23fa branch g24_rx_interrupt_clear ,blank 
+014c 1fe0fe02 increase 2 ,pdata 
+014d 98007200 iforce loopcnt 
+014e d8c047a7 arg mem_24g_rxbuf ,contr 
+014f d8a04895 arg mem_24g_rxdata_temp ,contw 
+0150 20407dd4 call memcpy 
+0151 7048c000 jam 0 ,mem_24g_mode_switch 
+0152 6fe0c8bd fetch 1 ,mem_24g_pair_mode 
+0153 205a2436 call g24_enable_nodata_timer ,blank 
+0154 6fe0c897 fetch 1 ,mem_24g_rxdata_temp + 2 
+0155 c0008159 beq datatype_device1 ,p_g24_data_device1 
+0156 c001240e beq datatype_device2 ,g24_data_device2 
+0157 c07f8167 beq datatype_attemp ,p_g24_data_receive_attemp 
+0158 202023fa branch g24_rx_interrupt_clear 
+
+p_g24_data_device1:
+0159 204023ca call g24_binding_dvc1_living 
+015a 2040255c call g24_ch_timer_reinit 
+015b 6fe0c8b7 fetch 1 ,mem_24g_abort_packet 
+015c 6848c895 fetcht 1 ,mem_24g_rxdata_temp 
+015d 284ffe03 isolate1 bit_abort ,temp 
+015e 7920fe00 setflag true ,0 ,pdata 
+015f 67e0c8b7 store 1 ,mem_24g_abort_packet 
+0160 c0008162 beq 1 ,p_g24_data_attemp_device1_abort 
+0161 20202407 branch g24_data_device1 + 8 
+
+p_g24_data_attemp_device1_abort:
+0162 6fe0c941 fetch 1 ,mem_24g_mouse_bind_enable 
+0163 247a0000 nrtn blank 
+0164 70494101 jam 1 ,mem_24g_mouse_bind_enable 
+0165 6fe2489f fetch 4 ,mem_24g_rxdata_temp + 10 
+0166 202025c4 branch g24_store_device1_addr 
+
+p_g24_data_receive_attemp:
+0167 204023d8 call g24_bind_device_status 
+0168 20200137 branch p_g24_data_attemp 
 
 p_dongle_usb_dispatch:
-00f7 204079fc call usb_isr 
-00f8 6fe08be3 fetch 1 ,mem_usb0_get_set_report 
-00f9 207a0000 rtn blank 
-00fa 700be300 jam 0 ,mem_usb0_get_set_report 
-00fb 6fe08b61 fetch 1 ,mem_usb0_set_report_data 
-00fc c1dd0000 rtnne pc_report_id 
-00fd 6fe08b62 fetch 1 ,mem_usb0_set_report_data + 1 
-00fe c0503744 beq command_mode ,dongle_dispose_cmd_mode 
-00ff c050b74a beq command_bind ,dongle_dispose_cmd_bind 
-0100 c0533756 beq command_current_project ,dongle_dispose_cmd_current_project 
-0101 c053b758 beq command_current_mode ,dongle_dispose_cmd_current_mode 
-0102 c054b75e beq command_current_fw_version ,dongle_dispose_cmd_current_fw_version 
-0103 c0580105 beq command_user_defined ,p_dongle_dispose_cmd_user_defined 
-0104 20203742 branch dongle_usb0_data_ready_report_set0 
+0169 204079fc call usb_isr 
+016a 6fe08be3 fetch 1 ,mem_usb0_get_set_report 
+016b 207a0000 rtn blank 
+016c 700be300 jam 0 ,mem_usb0_get_set_report 
+016d 6fe08b61 fetch 1 ,mem_usb0_set_report_data 
+016e c1dd0000 rtnne pc_report_id 
+016f 6fe08b62 fetch 1 ,mem_usb0_set_report_data + 1 
+0170 c0503744 beq command_mode ,dongle_dispose_cmd_mode 
+0171 c050b74a beq command_bind ,dongle_dispose_cmd_bind 
+0172 c0533756 beq command_current_project ,dongle_dispose_cmd_current_project 
+0173 c053b758 beq command_current_mode ,dongle_dispose_cmd_current_mode 
+0174 c054b75e beq command_current_fw_version ,dongle_dispose_cmd_current_fw_version 
+0175 c0580177 beq command_user_defined ,p_dongle_dispose_cmd_user_defined 
+0176 20203742 branch dongle_usb0_data_ready_report_set0 
 
 p_dongle_dispose_cmd_user_defined:
-0105 6fe08b63 fetch 1 ,mem_usb0_set_report_data + 2 
-0106 c0588108 beq command_user_defined_check_start ,p_dongle_dispose_cmd_check_start 
-0107 20600000 rtn 
+0177 6fe08b63 fetch 1 ,mem_usb0_set_report_data + 2 
+0178 c058817a beq command_user_defined_check_start ,p_dongle_dispose_cmd_check_start 
+0179 20600000 rtn 
 
 p_dongle_dispose_cmd_check_start:
-0108 20400112 call p_dongle_dispose_cmd_user_defined_respose_ready 
-0109 6fe08b66 fetch 1 ,mem_usb0_set_report_data + 5 
-010a c079011c beq command_user_defined_fixed_freq_check_complete ,p_dongle_dispose_cmd_fixed_freq 
-010b c079812b beq command_user_defined_assign_freq_check_complete ,p_dongle_dispose_cmd_assign_freq 
-010c c0400118 beq command_user_defined_test_fcc_freq_start ,p_dongle_dispose_cmd_test_freq_start 
-010d c040811b beq command_user_defined_test_fcc_freq_end ,p_dongle_dispose_cmd_test_freq_end 
-010e 20200115 branch p_dongle_dispose_cmd_user_defined_respose_params_fail 
+017a 20400184 call p_dongle_dispose_cmd_user_defined_respose_ready 
+017b 6fe08b66 fetch 1 ,mem_usb0_set_report_data + 5 
+017c c079018e beq command_user_defined_fixed_freq_check_complete ,p_dongle_dispose_cmd_fixed_freq 
+017d c079819d beq command_user_defined_assign_freq_check_complete ,p_dongle_dispose_cmd_assign_freq 
+017e c040018a beq command_user_defined_test_fcc_freq_start ,p_dongle_dispose_cmd_test_freq_start 
+017f c040818d beq command_user_defined_test_fcc_freq_end ,p_dongle_dispose_cmd_test_freq_end 
+0180 20200187 branch p_dongle_dispose_cmd_user_defined_respose_params_fail 
 
 p_dongle_set_report_data_clear:
-010f 684c105a fetcht 8 ,mem_fcc_clear_value 
-0110 604c0b61 storet 8 ,mem_usb0_set_report_data 
-0111 20600000 rtn 
+0181 684c105a fetcht 8 ,mem_fcc_clear_value 
+0182 604c0b61 storet 8 ,mem_usb0_set_report_data 
+0183 20600000 rtn 
 
 p_dongle_dispose_cmd_user_defined_respose_ready:
-0112 584b4f01 setarg 0x4b4f01 
-0113 67e18ba1 store 3 ,mem_usb0_get_report_data 
-0114 20203748 branch dongle_usb0_data_ready_report_set1 
+0184 584b4f01 setarg 0x4b4f01 
+0185 67e18ba1 store 3 ,mem_usb0_get_report_data 
+0186 20203748 branch dongle_usb0_data_ready_report_set1 
 
 p_dongle_dispose_cmd_user_defined_respose_params_fail:
-0115 584f4e01 setarg 0x4f4e01 
-0116 67e18ba1 store 3 ,mem_usb0_get_report_data 
-0117 20203748 branch dongle_usb0_data_ready_report_set1 
+0187 584f4e01 setarg 0x4f4e01 
+0188 67e18ba1 store 3 ,mem_usb0_get_report_data 
+0189 20203748 branch dongle_usb0_data_ready_report_set1 
 
 p_dongle_dispose_cmd_test_freq_start:
-0118 7048c302 jam dongle_test ,mem_24g_work_mode 
-0119 2040010f call p_dongle_set_report_data_clear 
-011a 20200140 branch p_fcc_mode_start 
+018a 7048c302 jam dongle_test ,mem_24g_work_mode 
+018b 20400181 call p_dongle_set_report_data_clear 
+018c 202001b2 branch p_fcc_mode_start 
 
 p_dongle_dispose_cmd_test_freq_end:
-011b 20205e29 branch soft_reset_chip 
+018d 20205e29 branch soft_reset_chip 
 
 p_dongle_dispose_cmd_fixed_freq:
-011c 20400131 call p_dongle_dispose_cmd_value_judge 
-011d 24610000 nrtn positive 
-011e 6fe0904b fetch 1 ,mem_fcc_ch_new 
-011f 67e09059 store 1 ,mem_fcc_ch_last_value 
-0120 68488b64 fetcht 1 ,mem_usb0_set_report_data + 3 
-0121 6048904b storet 1 ,mem_fcc_ch_new 
-0122 6fe08b65 fetch 1 ,mem_usb0_set_report_data + 4 
-0123 2040010f call p_dongle_set_report_data_clear 
-0124 c0010135 beq command_type_modulation_send_mode ,p_dongle_dispose_cmd_modulation_send 
-0125 c0018138 beq command_type_modulation_recv_mode ,p_dongle_dispose_cmd_modulation_recv 
-0126 c002013a beq command_type_non_modulation_send_mode ,p_dongle_dispose_cmd_non_modulation_send 
-0127 c002813d beq command_type_non_modulation_recv_mode ,p_dongle_dispose_cmd_non_modulation_recv 
-0128 6fe09059 fetch 1 ,mem_fcc_ch_last_value 
-0129 67e0904b store 1 ,mem_fcc_ch_new 
-012a 20600000 rtn 
+018e 204001a3 call p_dongle_dispose_cmd_value_judge 
+018f 20610000 rtn positive 
+0190 6fe0904b fetch 1 ,mem_fcc_ch_new 
+0191 67e09059 store 1 ,mem_fcc_ch_last_value 
+0192 68488b64 fetcht 1 ,mem_usb0_set_report_data + 3 
+0193 6048904b storet 1 ,mem_fcc_ch_new 
+0194 6fe08b65 fetch 1 ,mem_usb0_set_report_data + 4 
+0195 20400181 call p_dongle_set_report_data_clear 
+0196 c00101a7 beq command_type_modulation_send_mode ,p_dongle_dispose_cmd_modulation_send 
+0197 c00181aa beq command_type_modulation_recv_mode ,p_dongle_dispose_cmd_modulation_recv 
+0198 c00201ac beq command_type_non_modulation_send_mode ,p_dongle_dispose_cmd_non_modulation_send 
+0199 c00281af beq command_type_non_modulation_recv_mode ,p_dongle_dispose_cmd_non_modulation_recv 
+019a 6fe09059 fetch 1 ,mem_fcc_ch_last_value 
+019b 67e0904b store 1 ,mem_fcc_ch_new 
+019c 20600000 rtn 
 
 p_dongle_dispose_cmd_assign_freq:
-012b 6fe08b65 fetch 1 ,mem_usb0_set_report_data + 4 
-012c c1f80000 rtnne command_type_assign_freq_mode 
-012d 20400131 call p_dongle_dispose_cmd_value_judge 
-012e 24610000 nrtn positive 
-012f 67e0904b store 1 ,mem_fcc_ch_new 
-0130 2020010f branch p_dongle_set_report_data_clear 
+019d 6fe08b65 fetch 1 ,mem_usb0_set_report_data + 4 
+019e c1f80000 rtnne command_type_assign_freq_mode 
+019f 204001a3 call p_dongle_dispose_cmd_value_judge 
+01a0 20610000 rtn positive 
+01a1 67e0904b store 1 ,mem_fcc_ch_new 
+01a2 20200181 branch p_dongle_set_report_data_clear 
 
 p_dongle_dispose_cmd_value_judge:
-0131 6fe08b64 fetch 1 ,mem_usb0_set_report_data + 3 
-0132 d8400050 arg 0x50 ,temp 
-0133 9fe67c00 isub pdata ,null 
-0134 20600000 rtn 
+01a3 6fe08b64 fetch 1 ,mem_usb0_set_report_data + 3 
+01a4 d8400050 arg 0x50 ,temp 
+01a5 98467c00 isub temp ,null 
+01a6 20600000 rtn 
 
 p_dongle_dispose_cmd_modulation_send:
-0135 70104f00 jam 0x00 ,mem_fcc_data_new 
-0136 70104d01 jam 0x01 ,mem_fcc_txrx_new 
-0137 20600000 rtn 
+01a7 70104f00 jam 0x00 ,mem_fcc_data_new 
+01a8 70104d01 jam 0x01 ,mem_fcc_txrx_new 
+01a9 20600000 rtn 
 
 p_dongle_dispose_cmd_modulation_recv:
-0138 70104d02 jam 0x02 ,mem_fcc_txrx_new 
-0139 20600000 rtn 
+01aa 70104d02 jam 0x02 ,mem_fcc_txrx_new 
+01ab 20600000 rtn 
 
 p_dongle_dispose_cmd_non_modulation_send:
-013a 70104f22 jam 0x22 ,mem_fcc_data_new 
-013b 70104d01 jam 0x01 ,mem_fcc_txrx_new 
-013c 20600000 rtn 
+01ac 70104f22 jam 0x22 ,mem_fcc_data_new 
+01ad 70104d01 jam 0x01 ,mem_fcc_txrx_new 
+01ae 20600000 rtn 
 
 p_dongle_dispose_cmd_non_modulation_recv:
-013d 70104f22 jam 0x22 ,mem_fcc_data_new 
-013e 70104d02 jam 0x02 ,mem_fcc_txrx_new 
-013f 20600000 rtn 
+01af 70104f22 jam 0x22 ,mem_fcc_data_new 
+01b0 70104d02 jam 0x02 ,mem_fcc_txrx_new 
+01b1 20600000 rtn 
 
 p_fcc_mode_start:
-0140 204012d3 call init_lpm_ctrl 
-0141 580010dd setarg mem_fcc_mode_end 
-0142 d8a0104b arg mem_fcc_mode_start ,contw 
-0143 98a67200 isub contw ,loopcnt 
-0144 20407d9b call clear_mem 
-0145 20400148 call p_pn9 
-0146 70105019 jam 0x19 ,mem_fcc_data_length_new 
-0147 2020015b branch p_test_tx_new_param 
+01b2 204012d3 call init_lpm_ctrl 
+01b3 580010dd setarg mem_fcc_mode_end 
+01b4 d8a0104b arg mem_fcc_mode_start ,contw 
+01b5 98a67200 isub contw ,loopcnt 
+01b6 20407d9b call clear_mem 
+01b7 204001ba call p_pn9 
+01b8 70105019 jam 0x19 ,mem_fcc_data_length_new 
+01b9 202001cd branch p_test_tx_new_param 
 
 p_pn9:
-0148 df2003fe arg 1022 ,loopcnt 
-0149 d8a01063 arg mem_pn9 ,contw 
-014a 580001ff setarg 0x1ff 
-014b 18002400 force 0 ,regb 
+01ba df2003fe arg 1022 ,loopcnt 
+01bb d8a01063 arg mem_pn9 ,contw 
+01bc 580001ff setarg 0x1ff 
+01bd 18002400 force 0 ,regb 
 
 p_pn9_loop:
-014c 1fe92200 rshift3 pdata ,rega 
-014d 1a232200 rshift rega ,rega 
-014e 9a22a200 ixor rega ,rega 
-014f 2a2ffe00 isolate1 0 ,rega 
-0150 7920fe09 setflag true ,9 ,pdata 
-0151 18430400 rshift temp ,temp 
-0152 2feffe00 isolate1 0 ,pdata 
-0153 79208407 setflag true ,7 ,temp 
-0154 1fe37e00 rshift pdata ,pdata 
-0155 1a40a401 increase 1 ,regb 
-0156 2a400e00 compare 0 ,regb ,0x7 
-0157 2420814c nbranch p_pn9_loop ,true 
-0158 e0408005 istoret 1 ,contw 
-0159 c200014c loop p_pn9_loop 
-015a 20600000 rtn 
+01be 1fe92200 rshift3 pdata ,rega 
+01bf 1a232200 rshift rega ,rega 
+01c0 9a22a200 ixor rega ,rega 
+01c1 2a2ffe00 isolate1 0 ,rega 
+01c2 7920fe09 setflag true ,9 ,pdata 
+01c3 18430400 rshift temp ,temp 
+01c4 2feffe00 isolate1 0 ,pdata 
+01c5 79208407 setflag true ,7 ,temp 
+01c6 1fe37e00 rshift pdata ,pdata 
+01c7 1a40a401 increase 1 ,regb 
+01c8 2a400e00 compare 0 ,regb ,0x7 
+01c9 242081be nbranch p_pn9_loop ,true 
+01ca e0408005 istoret 1 ,contw 
+01cb c20001be loop p_pn9_loop 
+01cc 20600000 rtn 
 
 p_test_tx_new_param:
-015b 6fe3904b fetch 7 ,mem_fcc_param_new 
-015c 67e39052 store 7 ,mem_fcc_param 
+01cd 6fe3904b fetch 7 ,mem_fcc_param_new 
+01ce 67e39052 store 7 ,mem_fcc_param 
 
 p_test_tx_or_rx:
-015d 6fe09054 fetch 1 ,mem_fcc_txrx 
-015e c0008162 beq 0x01 ,p_test_tx_start 
-015f c0010187 beq 0x02 ,p_test_rx_start 
-0160 204000f7 call p_dongle_usb_dispatch 
-0161 2020015b branch p_test_tx_new_param 
+01cf 6fe09054 fetch 1 ,mem_fcc_txrx 
+01d0 c00081d4 beq 0x01 ,p_test_tx_start 
+01d1 c00101f9 beq 0x02 ,p_test_rx_start 
+01d2 20400169 call p_dongle_usb_dispatch 
+01d3 202001cd branch p_test_tx_new_param 
 
 p_test_tx_start:
 
 p_test_ble_tx_on:
-0162 2040115d call set_sync_on 
-0163 68489052 fetcht 1 ,mem_fcc_ch 
-0164 20401201 call set_freq_tx 
-0165 20401651 call le_enable 
-0166 79202a00 set1 txgfsk ,radio_ctrl 
-0167 782efc00 enable encode_fec0 
-0168 78307c00 enable is_tx 
-0169 7850fc00 disable is_rx 
-016a 204016f0 call le_wait_tx 
-016b 6fe09056 fetch 1 ,mem_fcc_data 
-016c 67f0890d store 1 ,core_tx_test_mode 
-016d c0000170 beq 0x00 ,p_test_carrier_tx 
-016e c011017b beq 0x22 ,p_test_non_carrier_tx 
-016f 20600000 rtn 
+01d4 2040115d call set_sync_on 
+01d5 68489052 fetcht 1 ,mem_fcc_ch 
+01d6 20401201 call set_freq_tx 
+01d7 20401651 call le_enable 
+01d8 79202a00 set1 txgfsk ,radio_ctrl 
+01d9 782efc00 enable encode_fec0 
+01da 78307c00 enable is_tx 
+01db 7850fc00 disable is_rx 
+01dc 204016f0 call le_wait_tx 
+01dd 6fe09056 fetch 1 ,mem_fcc_data 
+01de 67f0890d store 1 ,core_tx_test_mode 
+01df c00001e2 beq 0x00 ,p_test_carrier_tx 
+01e0 c01101ed beq 0x22 ,p_test_non_carrier_tx 
+01e1 20600000 rtn 
 
 p_test_carrier_tx:
 
 p_test_tx_carrier_loop:
-0170 6f209057 fetchr loopcnt ,1 ,mem_fcc_data_length 
-0171 d8c01063 arg mem_pn9 ,contr 
+01e2 6f209057 fetchr loopcnt ,1 ,mem_fcc_data_length 
+01e3 d8c01063 arg mem_pn9 ,contr 
 
 p_pnloop_carrier:
-0172 efe08006 ifetch 1 ,contr 
-0173 08008608 inject mod ,8 
-0174 c2000172 loop p_pnloop_carrier 
-0175 204000f7 call p_dongle_usb_dispatch 
-0176 6fe39052 fetch 7 ,mem_fcc_param 
-0177 684b904b fetcht 7 ,mem_fcc_param_new 
-0178 98467c00 isub temp ,null 
-0179 20228170 branch p_test_tx_carrier_loop ,zero 
-017a 2020015b branch p_test_tx_new_param 
+01e4 efe08006 ifetch 1 ,contr 
+01e5 08008608 inject mod ,8 
+01e6 c20001e4 loop p_pnloop_carrier 
+01e7 20400169 call p_dongle_usb_dispatch 
+01e8 6fe39052 fetch 7 ,mem_fcc_param 
+01e9 684b904b fetcht 7 ,mem_fcc_param_new 
+01ea 98467c00 isub temp ,null 
+01eb 202281e2 branch p_test_tx_carrier_loop ,zero 
+01ec 202001cd branch p_test_tx_new_param 
 
 p_test_non_carrier_tx:
 
 p_tx_data:
-017b df200035 arg 53 ,loopcnt 
-017c d8c01063 arg mem_pn9 ,contr 
+01ed df200035 arg 53 ,loopcnt 
+01ee d8c01063 arg mem_pn9 ,contr 
 
 p_pnloop_stable:
-017d efe08006 ifetch 1 ,contr 
-017e 08008608 inject mod ,8 
-017f c200017d loop p_pnloop_stable 
+01ef efe08006 ifetch 1 ,contr 
+01f0 08008608 inject mod ,8 
+01f1 c20001ef loop p_pnloop_stable 
 
 p_stable_stop:
-0180 204000f7 call p_dongle_usb_dispatch 
-0181 6fe39052 fetch 7 ,mem_fcc_param 
-0182 684b904b fetcht 7 ,mem_fcc_param_new 
-0183 98467c00 isub temp ,null 
-0184 2022817b branch p_tx_data ,zero 
-0185 2040114b call shutdown_radio 
-0186 2020015b branch p_test_tx_new_param 
+01f2 20400169 call p_dongle_usb_dispatch 
+01f3 6fe39052 fetch 7 ,mem_fcc_param 
+01f4 684b904b fetcht 7 ,mem_fcc_param_new 
+01f5 98467c00 isub temp ,null 
+01f6 202281ed branch p_tx_data ,zero 
+01f7 2040114b call shutdown_radio 
+01f8 202001cd branch p_test_tx_new_param 
 
 p_test_rx_start:
-0187 2040018e call p_test_ble_rx_on 
+01f9 20400200 call p_test_ble_rx_on 
 
 p_test_rx_loop:
-0188 204000f7 call p_dongle_usb_dispatch 
-0189 6fe39052 fetch 7 ,mem_fcc_param 
-018a 684b904b fetcht 7 ,mem_fcc_param_new 
-018b 98467c00 isub temp ,null 
-018c 20228188 branch p_test_rx_loop ,zero 
-018d 2020015b branch p_test_tx_new_param 
+01fa 20400169 call p_dongle_usb_dispatch 
+01fb 6fe39052 fetch 7 ,mem_fcc_param 
+01fc 684b904b fetcht 7 ,mem_fcc_param_new 
+01fd 98467c00 isub temp ,null 
+01fe 202281fa branch p_test_rx_loop ,zero 
+01ff 202001cd branch p_test_tx_new_param 
 
 p_test_ble_rx_on:
-018e 2040114b call shutdown_radio 
-018f 68489052 fetcht 1 ,mem_fcc_ch 
-0190 20201674 branch le_rf_rx_enable 
+0200 2040114b call shutdown_radio 
+0201 68489052 fetcht 1 ,mem_fcc_ch 
+0202 20201674 branch le_rf_rx_enable 
               org 0x800
 
 start:
Index: output/ramcode.rom
===================================================================
--- /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/ramcode.rom	(revision 1822)
+++ /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/ramcode.rom	(working copy)
@@ -1,26 +1,44 @@
-c284000a
-c0418017
-c042801e
-c045002c
-c0458032
-c046006d
-c0568011
-c05d00f7
-c05d803d
+c284000b
+c0000013
+c0418029
+c0428030
+c045003e
+c0458044
+c04600ac
+c0568017
+c05d0169
+c05d807c
 2020137e
-c0460088
-c047008c
-c04980a9
-c0538082
-c07000af
-c07200c0
+c04600c7
+c04700cb
+c04980e8
+c05380c1
+c07000ee
+c07200ff
+c073004f
 2020137e
-58000014
+20800000
+20403166
+7048809e
+20200804
+7041823a
+20401554
+5800001c
 67e1488d
 2020369c
 6fe0c8bd
-c007805e
-202036cd
+c0000021
+c000b6fd
+c007809d
+20600000
+2040243a
+2040243e
+20400062
+2040376b
+2040249c
+204024b9
+2040372f
+20200022
 70890005
 20000002
 70890000
@@ -29,7 +47,7 @@
 708a8729
 20201179
 6fe0c940
-243a0027
+243a0039
 20404d05
 d8c041eb
 98c08c00
@@ -43,7 +61,7 @@
 70896108
 202011af
 6fe0c940
-243a002f
+243a0041
 20201237
 708a3953
 708a3a01
@@ -56,17 +74,62 @@
 70487a01
 7048bc1e
 20401252
-20200062
+202000a1
 5800007d
 20206295
 6fe0c8c3
+c1808000
+2040234b
+20400054
+202024a1
+204023fa
+20402187
+2437a3fa
+20402367
+2040005a
+2020235e
+6fe0c7a7
+67e0c839
+20402274
+204023e3
+2437a1f1
+20402247
+204021f8
+202021f1
+6fe0c8c3
+c1000000
+6fe0c8d7
+247a0000
+6fe0c8d5
+247a0000
+6fe0c8d1
+207a0000
+6fe0c8d8
+2fe00603
+2020a47f
+204022a0
+24740000
+6fe148d3
+1fe0fe01
+67e148d3
+d84007d0
+98467c00
+2021247f
+6fe0c8d6
+1fe0fe01
+1fe17e01
+67e0c8d6
+c0002544
+c000a348
+20600000
+6fe0c8c3
 c1800000
-20402497
-20400042
+20400141
+20400081
 20203770
 20403705
-20400045
-20200051
+20400084
+20200090
 6fe0c912
 207a0000
 d8e0000e
@@ -95,9 +158,9 @@
 20402493
 2040376b
 2040372f
-2020005f
+2020009e
 6fe0c8bd
-c0078066
+c00780a5
 70494000
 20600000
 70494001
@@ -118,13 +181,13 @@
 98408400
 184fa203
 6fe0c1e9
-20400068
+204000a7
 1fe67e00
 9a20fe00
 1fe0fff7
 1fe17fff
 2feffe08
-24208080
+242080bf
 58000000
 67e08154
 20201293
@@ -141,29 +204,29 @@
 793f8023
 6fe08b59
 1fe17e80
-c0400092
-c000009e
+c04000d1
+c00000dd
 2020137c
 6fe08b59
 1ff1fe00
 1fe37e00
 1fe17e03
 c0007ab8
-c0008099
+c00080d8
 20207aae
 6fe08b5a
 c0017b7a
-c000809d
+c00080dc
 20207ac1
 20207b82
 6fe08b59
 1ff1fe00
 1fe37e00
 1fe17e03
-c00080a4
+c00080e3
 20207ab4
 6fe08b5a
-c00480a7
+c00480e6
 20207acd
 20003a98
 20207c4a
@@ -184,20 +247,21 @@
 60488017
 1840a202
 204011c6
-20401207
-20000064
 204023e3
 20402247
+2000012c
+20401207
 204021ff
 202021d6
 6fe0c897
-c05500c5
-c02a80cf
-c01100df
-20202370
+c0550105
+c02a810f
+c011011f
+c07f8137
+20600000
 6fe0c898
-c00080c9
-c00100cc
+c0008109
+c001010c
 20600000
 6fe0c941
 247a0000
@@ -206,14 +270,14 @@
 247a0000
 2020237c
 6fe0c85e
-203a00d5
+203a0115
 6fe24899
 684a40a8
 98467c00
 24628000
 6fe0c898
-c00080d9
-c00100dc
+c0008119
+c001011c
 20600000
 6fe0c941
 247a0000
@@ -222,29 +286,79 @@
 247a0000
 20202394
 6fe0c85e
-203a00e5
+203a0125
 6fe24899
 684a48d9
 98467c00
 24628000
 6fe0c898
-c00080e9
-c00100f0
+c0008129
+c0010130
 20600000
 6fe0c941
 247a0000
 6fe0c882
-c00100ee
+c001012e
 20600000
 70494101
-202023a9
+202023aa
 6fe0c942
 247a0000
 6fe0c883
-c08000f5
+c0800135
 20600000
 70494201
-202023b4
+202023b5
+6fe0c898
+c000813b
+c001013e
+20600000
+6fe0c941
+247a0000
+202025c2
+6fe0c942
+247a0000
+202025c6
+6fe0c8c3
+c1800000
+20402485
+20402547
+20200146
+20402429
+2437a3fa
+2040241b
+243423fa
+6fe0c82d
+203a23fa
+1fe0fe02
+98007200
+d8c047a7
+d8a04895
+20407dd4
+7048c000
+6fe0c8bd
+205a2436
+6fe0c897
+c0008159
+c001240e
+c07f8167
+202023fa
+204023ca
+2040255c
+6fe0c8b7
+6848c895
+284ffe03
+7920fe00
+67e0c8b7
+c0008162
+20202407
+6fe0c941
+247a0000
+70494101
+6fe2489f
+202025c4
+204023d8
+20200137
 204079fc
 6fe08be3
 207a0000
@@ -257,18 +371,18 @@
 c0533756
 c053b758
 c054b75e
-c0580105
+c0580177
 20203742
 6fe08b63
-c0588108
+c058817a
 20600000
-20400112
+20400184
 6fe08b66
-c079011c
-c079812b
-c0400118
-c040811b
-20200115
+c079018e
+c079819d
+c040018a
+c040818d
+20200187
 684c105a
 604c0b61
 20600000
@@ -279,33 +393,33 @@
 67e18ba1
 20203748
 7048c302
-2040010f
-20200140
+20400181
+202001b2
 20205e29
-20400131
-24610000
+204001a3
+20610000
 6fe0904b
 67e09059
 68488b64
 6048904b
 6fe08b65
-2040010f
-c0010135
-c0018138
-c002013a
-c002813d
+20400181
+c00101a7
+c00181aa
+c00201ac
+c00281af
 6fe09059
 67e0904b
 20600000
 6fe08b65
 c1f80000
-20400131
-24610000
+204001a3
+20610000
 67e0904b
-2020010f
+20200181
 6fe08b64
 d8400050
-9fe67c00
+98467c00
 20600000
 70104f00
 70104d01
@@ -323,9 +437,9 @@
 d8a0104b
 98a67200
 20407d9b
-20400148
+204001ba
 70105019
-2020015b
+202001cd
 df2003fe
 d8a01063
 580001ff
@@ -341,17 +455,17 @@
 1fe37e00
 1a40a401
 2a400e00
-2420814c
+242081be
 e0408005
-c200014c
+c20001be
 20600000
 6fe3904b
 67e39052
 6fe09054
-c0008162
-c0010187
-204000f7
-2020015b
+c00081d4
+c00101f9
+20400169
+202001cd
 2040115d
 68489052
 20401201
@@ -363,39 +477,39 @@
 204016f0
 6fe09056
 67f0890d
-c0000170
-c011017b
+c00001e2
+c01101ed
 20600000
 6f209057
 d8c01063
 efe08006
 08008608
-c2000172
-204000f7
+c20001e4
+20400169
 6fe39052
 684b904b
 98467c00
-20228170
-2020015b
+202281e2
+202001cd
 df200035
 d8c01063
 efe08006
 08008608
-c200017d
-204000f7
+c20001ef
+20400169
 6fe39052
 684b904b
 98467c00
-2022817b
+202281ed
 2040114b
-2020015b
-2040018e
-204000f7
+202001cd
+20400200
+20400169
 6fe39052
 684b904b
 98467c00
-20228188
-2020015b
+202281fa
+202001cd
 2040114b
 68489052
 20201674
Index: output/sched.rom
===================================================================
--- /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/sched.rom	(revision 1822)
+++ /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/output/sched.rom	(working copy)
@@ -1,5 +1,5 @@
 mem_patch00:
-00   #mem_patch00
+01   #mem_patch00
 00   #mem_patch01
 00   #mem_patch02
 00   #mem_patch03
@@ -59,7 +59,7 @@
 00   #mem_patch39
 00   #mem_patch3a
 00   #mem_patch3b
-11   #mem_patch3c
+51   #mem_patch3c
 00   #mem_patch3d
 00   #mem_patch3e
 00   #mem_patch3f
@@ -93,7 +93,7 @@
 '2.4G Receiver
 
 #rf config
-mem_lap:39 26 18 31 44 55#low 4B used for 24g rxaddr
+mem_lap:39 26 77 31 44 55#low 4B used for 24g rxaddr
 #mem_24g_tx_phy:01#0x01:1M/0x02:2M/0x04:S2/0x84:S8
 #mem_24g_rx_phy:01#0x01:1M/0x02:2M/0x04:S2/0x84:S8
 #mem_24g_no_ack:00#no ack
Index: program/patch.prog
===================================================================
--- /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/program/patch.prog	(revision 1822)
+++ /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/program/patch.prog	(working copy)
@@ -2,6 +2,7 @@
 define FCC
 
 	bbit1 8,pf_patch_ext
+	beq patch00_0,p_soft_reset
 	beq patch10_3,p_set_sync_on
 	beq patch10_5,p_rf_rx_enable
 	beq patch11_2,p_txon_next
@@ -21,19 +22,41 @@
 	beq patch3c_0,p_g24_receive_skip_end
 endif
 	beq patch3c_4,p_g24_bind_data_parse_next
+	beq patch3c_6,p_g24_bind_mode_auto
 	branch loop
 
+p_soft_reset:
+	clear_stack
+	call app_param_init
+	jam TX_POWER_F30DB,mem_24g_pair_tx_power
+	branch soft_reset+3
+
 p_app_init:
 p_dongle_init:
+	jam 0x3a,mem_lpm_ctrl3
+	call lpm_write_sel_vdd
 	setarg p_dongle_dispatch
 	store 2,mem_cb_24g_receive_process
 	branch dongle_init+2
 
 p_dongle_dispatch:
 	fetch 1,mem_24g_pair_mode
+	beq 0x00,p_dongle_auto_bind
+	beq 0x01,dongle_pc_bind
 	beq 0x0f,p_dongle_all_powerful
-	branch dongle_dispatch+1
+	rtn
 
+p_dongle_auto_bind:
+	call g24_mode_switch_init
+p_dongle_auto_bind_loop:
+	call g24_mode_switch_bind_work
+	call p_g24_mode_switch_bind_search
+	call dongle_work_mode_auto
+	call g24_bind_mode_auto
+	call g24_search_mode_auto
+	call dongle_usb_dispatch
+	branch p_dongle_auto_bind_loop
+	
 /************************rf patch start**********/
 p_set_sync_on:
 	jam 0x5,modem_en
@@ -108,11 +131,64 @@
 /************************rf patch end**********/
 
 /************************keyboard blank patch start**********/
+p_g24_bind_mode_auto:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_BIND
+	call g24_bind_init
+	call p_g24_bind_data_process
+	branch g24_bind_mode_auto+5
+
+p_g24_bind_data_process:
+	call g24_rx_interrupt_clear
+	call g24_receive_packet
+	nbranch g24_rx_interrupt_clear,user3
+	call g24_bind_data_parse
+	call p_g24_bind_transmit_ack
+	branch g24_bind_data_process+5
+
+p_g24_bind_transmit_ack:
+	fetch 1,mem_24g_rxbuf
+	store 1,mem_24g_data_type
+	call g24_read_len_pid_crc
+	call g24_ackpayload_prep
+	nbranch g24_end_of_packet,user3
+	call g24_transmit_prep
+	call g24_transmit
+	branch g24_end_of_packet
+
+p_g24_mode_switch_bind_search:
+	fetch 1,mem_24g_work_mode
+	rtneq DONGLE_WORK
+	fetch 1,mem_24g_B_S_mode_switch_disable
+	nrtn blank
+	fetch 1,mem_24g_mode_B_S_switch_exit
+	nrtn blank
+	fetch 1,mem_24g_mode_B_S_switch
+	rtn blank
+	fetch 1,mem_24g_bind_device_living
+	compare 3,pdata,3
+	branch g24_mode_B_S_switch_exit,true
+	call g24_timer_check
+	nrtn user
+	fetch 2,mem_24g_mode_B_S_switch_cnt
+	increase 1,pdata
+	store 2,mem_24g_mode_B_S_switch_cnt
+	arg 0x7d0,temp	//1min
+	isub temp,null
+	branch g24_mode_B_S_switch_exit,positive
+	fetch 1,mem_24g_B_S_time_slice
+	increase 1,pdata
+	and_into 1,pdata
+	store 1,mem_24g_B_S_time_slice
+	beq 0,g24_search_mode_enable
+	beq 1,g24_bind_mode_enable
+	rtn
+
 
 p_dongle_work_mode_auto:
 	fetch 1,mem_24g_work_mode
 	rtnne DONGLE_WORK
-	call g24_work_mode_start
+	call p_g24_work_mode_start
 	call p_dongle_g24_blank_data_process
 	branch dongle_work_mode_auto+5
 
@@ -292,10 +368,10 @@
 	storet 1,mem_last_freq
 	add temp,2,rega
 	call rf_tx_write_freq
-	call txon
-	nop 100
 	call g24_ackpayload_prep
 	call g24_transmit_prep
+	nop 300
+	call txon
 	call g24_transmit+7
 	branch g24_receive_skip_end
 
@@ -304,7 +380,8 @@
 	beq DATATYPE_BIND,p_g24_bind_first_step	//bind step 1
 	beq DATATYPE_CONFIG,p_g24_bind_second_step
 	beq DATATYPE_OK,p_g24_bind_third_step
-	branch g24_bind_data_parse_next+4
+	beq DATATYPE_ATTEMP,p_g24_data_attemp
+	rtn
 	
 p_g24_bind_first_step:
 	fetch 1,mem_24g_rxdata_temp+3
@@ -361,7 +438,7 @@
 	rtn
 p_g24_bind_dvc1_step_success:
 	jam 1,mem_24g_mouse_bind_enable	
-	branch g24_bind_dvc1_step_success
+	branch g24_bind_dvc1_step_success+1
 
 p_g24_bind_third_step_device2:
 	fetch 1,mem_24g_keyboard_bind_enable
@@ -371,11 +448,80 @@
 	rtn
 p_g24_bind_dvc2_step_success:
 	jam 1,mem_24g_keyboard_bind_enable
-	branch g24_bind_dvc2_step_success
+	branch g24_bind_dvc2_step_success+1
 
+p_g24_data_attemp:
+	fetch 1,mem_24g_rxdata_temp+3
+	beq DATATYPE_DEVICE1,p_g24_data_attemp_device1
+	beq DATATYPE_DEVICE2,p_g24_data_attemp_device2
+	rtn
+p_g24_data_attemp_device1:
+	fetch 1,mem_24g_mouse_bind_enable
+	nrtn blank
+	branch g24_data_attemp_device1
 
+p_g24_data_attemp_device2:
+	fetch 1,mem_24g_keyboard_bind_enable
+	nrtn blank
+	branch g24_data_attemp_device2
 
 
+p_g24_work_mode_start:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call g24_work_init
+	call g24_ch_process
+	branch p_g24_receive_packet_start
+
+	
+p_g24_receive_packet_start:
+	call g24_receive_transmit_ack
+	nbranch g24_rx_interrupt_clear,user3
+p_g24_receive_packet_parse:
+	call g24_receive_packet_parse_pid_crc
+	nbranch g24_rx_interrupt_clear,user
+	fetch 1,mem_24g_rxdata_length
+	branch g24_rx_interrupt_clear,blank
+	increase 2,pdata
+	iforce loopcnt
+	arg mem_24g_rxbuf,contr
+	arg mem_24g_rxdata_temp,contw
+	call memcpy
+	
+	jam 0,mem_24g_mode_switch
+	fetch 1,mem_24g_pair_mode
+	call g24_enable_nodata_timer,blank
+	fetch 1,mem_24g_rxdata_temp+2
+	beq DATATYPE_DEVICE1,p_g24_data_device1	//mouse
+	beq DATATYPE_DEVICE2,g24_data_device2	//keyboard
+	beq DATATYPE_ATTEMP,p_g24_data_receive_attemp	//reconn packet
+	branch g24_rx_interrupt_clear
+
+p_g24_data_device1:
+	call g24_binding_dvc1_living	//works on auto pair only
+	call g24_ch_timer_reinit
+	fetch 1,mem_24g_abort_packet
+	fetcht 1,mem_24g_rxdata_temp
+	isolate1 bit_abort,temp
+	setflag true,0,pdata
+	store 1,mem_24g_abort_packet
+	beq 1,p_g24_data_attemp_device1_abort
+	branch g24_data_device1+8
+	
+p_g24_data_attemp_device1_abort:
+//	fetch 1,mem_device_option
+//	sub pdata,dvc_op_car,null
+//	call car_stop_blink,zero
+	fetch 1,mem_24g_mouse_bind_enable
+	nrtn blank
+	jam 1,mem_24g_mouse_bind_enable
+	fetch 4,mem_24g_rxdata_temp+10
+	branch g24_store_device1_addr
+	
+p_g24_data_receive_attemp:
+	call g24_bind_device_status		//works on auto pair only
+	branch p_g24_data_attemp
+
 /************************fcc test**********/
 ifdef FCC
 //mem_usb0_set_report_data
@@ -440,7 +586,7 @@
 	
 p_dongle_dispose_cmd_fixed_freq:
 	call p_dongle_dispose_cmd_value_judge
-	nrtn positive
+	rtn positive
 	fetch 1,mem_fcc_ch_new
 	store 1,mem_fcc_ch_last_value
 	
@@ -465,7 +611,7 @@
 	rtnne COMMAND_TYPE_ASSIGN_FREQ_MODE
 	
 	call p_dongle_dispose_cmd_value_judge
-	nrtn positive
+	rtn positive
 	store 1,mem_fcc_ch_new
 	branch p_dongle_set_report_data_clear
 
@@ -473,7 +619,7 @@
 p_dongle_dispose_cmd_value_judge:
 	fetch 1,mem_usb0_set_report_data+3
 	arg 0x50,temp
-	isub pdata,null
+	isub temp,null
 	rtn
 	
 p_dongle_dispose_cmd_modulation_send:
Index: sched/dongle.dat
===================================================================
--- /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/sched/dongle.dat	(revision 1822)
+++ /YC1308AC/branch/mouse_project/MingZhe_Project/1303-f-dogle/USB-64K/sched/dongle.dat	(working copy)
@@ -26,7 +26,7 @@
 '2.4G Receiver
 
 #rf config
-mem_lap:39 26 18 31 44 55#low 4B used for 24g rxaddr
+mem_lap:39 26 77 31 44 55#low 4B used for 24g rxaddr
 #mem_24g_tx_phy:01#0x01:1M/0x02:2M/0x04:S2/0x84:S8
 #mem_24g_rx_phy:01#0x01:1M/0x02:2M/0x04:S2/0x84:S8
 #mem_24g_no_ack:00#no ack
