/
BOOK.as
175 lines (154 loc) · 19.4 KB
/
BOOK.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package
{
public class BOOK
{
// File book.bin - openings
private var A:int = 203; private var B:int = 243; private var C:int = 126; private var D:int = 129; private var E:int = 138; private var F:int = 132; private var G:int = 185; private var H:int = 178; private var I:int = 188; private var J:int = 133; private var K:int = 189; private var L:int = 182; private var M:int = 228; private var N:int = 226; private var O:int = 213; private var P:int = 237; private var Q:int = 142; private var R:int = 220; private var S:int = 197; private var T:int = 125; private var U:int = 247; private var V:int = 130; private var W:int = 249; private var X:int = 218; private var Y:int = 195; private var Z:int = 186; private var a:int = 113; private var b:int = 193; private var c:int = 251; private var d:int = 219; private var e:int = 207; private var f:int = 187; private var g:int = 139; private var h:int = 210; private var i:int = 163; private var j:int = 122; private var k:int = 250; private var l:int = 236; private var m:int = 253; private var n:int = 194; private var o:int = 177; private var p:int = 145; private var q:int = 137; private var r:int = 131; private var s:int = 123; private var t:int = 117; private var u:int = 100;
public const BookBin:Array = [
7,12,9,52,5,70,10,B,6,A,6,M,6,O,11,C,4,D,13,61,7,66,15,I,2,Y,8,235,8,R,8,P,8,h,8,c,8,91,7,35,0,0,7,12,9,52,5,70,E,B,6,A,6,M,6,Y,11,C,4,D,13,61,9,V,10,G,8,69,15,I,0,0,7,12,9,52,5,70,E,B,6,A,12,W,6,J,10,H,9,149,11,254,1,F,10,115,0,0,7,12,9,52,6,A,6,M,4,E,4,155,6,J,2,82,2,66,8,B,8,X,11,C,13,99,13,124,14,Y,6,T,0,0,7,12,9,52,6,A,6,M,F,E,8,B,8,R,8,c,6,h,10,G,5,70,7,Z,3,5,6,T,4,D,5,94,5,76,6,i,0,0,7,12,9,52,6,A,6,M,F,E,8,B,8,R,8,c,5,70,10,G,6,h,0,0,7,12,9,52,134,A,6,M,F,E,8,B,8,R,8,c,5,70,10,G,3,5,11,C,0,0,7,12,9,52,134,A,6,M,F,E,8,B,8,R,8,c,5,70,10,G,3,5,7,Z,1,F,14,I,6,h,0,0,7,12,9,52,134,A,6,M,6,Y,10,G,5,27,11,C,4,D,6,T,2,n,15,I,0,F,15,61,6,J,10,B,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,O,11,C,4,D,6,T,10,155,10,o,4,S,8,B,8,R,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,O,8,K,5,2,11,s,4,E,13,62,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,O,8,K,4,91,10,98,6,8,8,48,4,D,11,s,3,3,13,62,0,0,7,12,9,52,6,A,6,M,5,70,10,G,6,O,11,C,10,155,10,o,9,28,13,59,3,3,8,P,6,E,10,58,4,73,11,L,7,77,11,t,4,2,13,116,2,204,10,99,0,0,7,12,9,52,5,70,10,G,6,J,8,K,4,A,10,B,4,D,11,C,9,V,11,U,0,0,7,12,9,52,5,70,10,G,6,J,8,K,4,E,11,C,6,A,6,M,6,h,6,98,2,n,2,217,2,b,8,B,8,R,8,P,4,67,13,42,0,0,7,12,9,52,5,70,10,G,6,J,8,K,4,E,13,59,6,A,10,98,1,F,10,B,5,e,11,C,1,5,15,I,4,1,0,0,7,12,9,52,5,70,10,G,6,J,8,K,4,E,11,C,4,A,10,B,1,F,13,59,6,73,10,98,6,8,10,48,0,0,7,12,9,52,5,70,10,G,6,J,11,C,4,D,7,45,7,18,8,B,4,X,0,0,7,12,9,52,5,70,10,G,6,J,11,C,9,149,8,B,8,R,8,42,8,90,10,H,10,i,10,o,3,33,11,U,5,102,7,36,9,21,6,c,0,0,7,12,9,52,5,70,10,G,6,J,11,C,9,149,8,B,8,R,8,42,8,90,10,H,10,i,10,o,3,33,11,U,5,102,7,36,9,21,12,f,0,0,7,12,9,52,5,70,10,G,6,J,11,C,4,A,8,K,4,D,10,B,9,V,11,U,0,0,7,12,9,52,5,70,10,G,6,J,11,C,6,A,6,M,1,F,8,K,9,28,7,173,7,66,10,B,10,M,10,N,1,5,15,124,10,221,10,c,4,E,8,171,0,0,7,12,9,52,5,70,10,G,6,J,8,K,1,F,11,C,6,A,6,M,9,28,8,B,11,u,6,i,1,5,11,58,9,149,8,c,4,D,9,99,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,J,11,C,1,F,8,K,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,J,8,K,1,F,11,C,0,0,7,12,9,52,5,70,10,G,6,J,11,C,6,A,6,M,1,F,7,45,1,5,8,B,8,X,8,c,4,D,8,35,7,18,11,58,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,J,11,C,9,28,8,B,8,90,7,45,6,O,12,k,10,161,10,o,1,F,13,61,5,77,8,156,7,85,7,34,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,J,11,C,9,28,8,B,8,90,7,45,6,O,12,k,10,161,10,o,1,F,8,K,5,2,15,I,5,77,9,156,2,Y,11,t,1,198,11,38,0,0,7,12,9,52,5,70,10,G,6,A,6,M,6,J,8,K,1,F,10,B,4,E,7,Z,4,67,5,94,13,90,15,124,5,78,9,42,6,h,6,N,0,0,7,12,9,52,5,70,10,G,6,A,6,M,4,E,8,B,8,R,8,c,6,h,7,Z,3,5,6,T,4,D,5,94,5,76,6,i,4,67,0,0,7,12,9,52,5,70,10,G,6,J,13,61,6,A,10,B,9,27,9,43,14,Y,14,244,0,0,7,12,9,52,5,70,10,G,4,D,11,C,8,69,6,234,9,21,13,59,5,u,8,91,8,82,7,52,3,3,3,28,3,4,8,P,0,0,7,12,9,52,5,70,11,C,F,D,10,G,6,A,6,M,6,O,0,0,7,12,9,52,5,70,11,C,9,21,10,B,5,u,7,45,3,3,13,59,4,A,11,92,9,V,12,W,4,D,3,52,3,5,11,U,7,230,11,L,0,0,7,12,9,52,5,70,11,C,9,21,10,B,5,u,7,45,6,A,8,235,4,S,13,61,1,F,10,G,1,5,7,Z,6,E,11,92,8,X,8,P,4,D,15,I,7,19,11,30,0,0,7,12,9,52,5,70,g,C,6,A,7,45,9,27,8,B,2,b,10,G,0,0,7,12,9,52,7,77,7,u,5,70,8,B,8,R,11,C,4,D,8,P,8,h,8,c,6,A,13,61,6,E,7,35,3,5,10,G,0,0,7,12,9,52,7,77,7,u,5,70,13,61,6,J,11,C,9,28,7,173,1,F,10,G,6,A,8,B,10,M,10,c,0,0,7,12,9,52,5,70,10,G,8,69,10,B,6,A,12,k,4,D,11,C,1,F,13,61,1,5,6,M,6,O,15,I,0,0,7,12,9,52,5,70,10,G,8,69,11,C,1,F,7,45,1,5,10,R,9,21,13,61,4,225,15,I,0,0,7,12,9,52,5,70,10,G,8,69,11,C,1,F,7,45,6,A,10,R,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,11,C,1,F,13,61,1,5,8,a,4,88,15,I,4,E,10,B,5,e,11,U,6,A,15,61,2,b,15,116,1,75,12,j,5,J,8,42,2,p,6,160,6,8,8,235,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,11,C,1,F,13,61,1,5,8,a,4,88,10,B,4,E,15,I,6,A,7,Z,8,d,8,42,2,p,10,H,5,e,14,158,10,i,12,f,2,b,10,H,1,75,6,160,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,11,C,1,F,13,61,1,5,8,a,4,88,10,B,4,E,8,42,2,p,8,H,6,A,10,160,8,d,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,11,C,1,F,13,61,1,5,8,a,4,88,10,B,4,E,8,42,2,p,8,H,6,A,10,160,5,e,12,f,8,d,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,11,C,1,F,13,61,1,5,8,a,4,88,10,B,4,E,8,42,2,p,8,H,6,A,6,N,6,h,12,f,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,11,C,1,F,13,61,1,5,8,a,4,88,10,B,4,E,8,42,2,p,8,H,4,A,10,160,2,b,15,I,1,75,15,61,5,e,11,U,5,5,15,116,0,0,J,70,10,G,7,12,9,52,8,69,10,48,6,33,11,C,1,F,7,45,6,A,8,a,4,88,8,B,9,27,11,58,4,E,8,K,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,10,B,1,F,12,k,4,E,11,L,6,A,13,K,1,5,13,62,5,2,15,I,2,b,11,U,9,27,9,43,4,88,10,a,6,8,0,0,7,12,9,52,5,70,10,G,8,69,10,48,6,33,10,B,4,E,12,k,6,A,13,62,4,88,11,U,2,b,11,180,6,g,13,61,5,26,15,I,0,0,7,12,9,52,5,70,10,G,8,69,11,C,1,F,8,K,4,E,15,I,6,A,10,98,9,V,11,U,7,230,10,B,6,8,8,48,1,5,6,M,10,161,10,o,6,O,0,0,7,12,9,52,5,70,10,G,8,69,g,C,1,F,8,K,9,21,9,42,6,A,10,48,6,33,7,45,3,3,13,34,7,12,11,164,0,0,7,12,9,52,5,70,10,G,8,69,g,C,1,F,136,K,F,D,15,I,4,A,10,B,0,0,7,12,8,B,8,R,8,c,4,D,8,35,6,A,11,C,5,70,9,j,6,J,11,52,2,n,10,H,3,3,6,T,9,21,12,W,12,M,12,P,4,8,0,0,7,12,8,B,8,R,8,c,4,D,8,35,6,A,10,H,5,70,11,C,6,J,7,Z,5,e,9,222,7,Q,11,167,2,n,10,96,3,3,0,0,7,12,8,B,8,R,11,C,6,A,8,P,6,E,10,99,5,70,11,L,4,D,13,K,5,2,15,I,5,e,10,G,2,Y,9,52,8,d,0,0,7,12,136,B,8,R,11,C,6,A,8,P,5,70,11,L,6,E,10,99,0,0,7,12,136,B,8,R,11,C,6,A,8,P,5,70,11,L,3,5,13,K,1,F,15,I,6,E,10,99,4,D,10,G,8,d,9,42,0,0,6,A,8,B,6,E,6,i,5,70,11,C,5,12,7,Z,6,J,11,52,5,e,9,222,4,D,0,0,6,A,8,B,6,E,134,i,5,12,11,C,5,70,7,Z,0,0,6,A,8,B,6,E,134,i,J,12,11,C,5,70,11,52,6,J,8,H,1,F,10,48,0,0,6,A,8,B,6,E,11,52,4,D,11,C,9,V,12,W,5,12,13,61,5,70,15,I,0,128,10,H,0,0,6,E,11,52,6,A,8,B,5,70,13,61,4,D,11,C,9,V,15,I,5,12,11,U,0,0,6,E,11,C,4,D,11,52,5,70,8,B,6,A,13,61,9,V,15,I,5,12,12,W,2,r,8,H,0,0,134,E,11,C,4,D,11,52,5,70,8,B,6,A,13,61,5,12,15,I,4,S,8,H,0,0,J,70,8,B,6,A,11,C,6,E,11,52,4,D,13,61,7,66,15,I,5,12,8,H,8,155,8,180,2,r,10,G,0,0,6,A,8,B,6,E,10,H,5,70,11,C,4,D,11,52,5,12,12,W,4,S,6,i,6,147,8,a,4,X,10,48,1,F,0,0,6,A,8,B,6,E,E,H,8,X,8,234,4,D,11,C,7,66,10,G,5,12,10,48,0,0,6,A,8,B,6,E,E,H,4,D,11,C,5,12,11,52,5,70,0,0,6,A,8,B,6,E,11,52,4,D,8,H,8,X,8,l,5,70,10,G,5,Q,11,C,3,J,13,61,1,F,15,I,9,V,6,N,6,O,11,U,0,0,6,A,11,C,6,E,9,52,9,27,7,173,5,70,8,K,5,12,10,G,3,5,9,30,1,F,10,B,0,0,7,12,8,H,5,70,10,G,6,A,6,N,6,O,11,52,4,D,12,f,0,0,7,12,8,H,5,70,10,G,6,A,6,N,6,O,11,C,4,D,9,52,8,91,10,B,9,V,10,48,4,33,8,a,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,10,48,7,77,9,52,5,91,12,f,4,S,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,10,48,7,77,11,52,5,67,10,s,4,91,12,169,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,10,48,7,77,140,W,3,5,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,10,48,3,5,9,52,4,91,13,61,1,F,15,I,5,2,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,10,48,5,2,9,52,4,91,11,58,2,Y,12,W,5,77,8,a,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,10,48,9,V,11,52,7,77,13,61,5,67,12,f,0,F,12,W,7,Q,8,a,0,0,7,12,8,H,5,70,11,52,6,A,6,N,6,O,10,48,4,S,11,C,1,F,12,f,3,3,10,B,6,E,11,L,4,D,13,K,0,S,15,I,0,0,7,12,8,H,5,70,11,52,6,A,6,N,6,O,11,C,4,D,10,B,3,5,10,48,1,F,13,61,7,77,15,I,0,0,7,12,8,H,5,70,11,52,6,A,6,N,6,O,10,G,4,D,12,f,5,2,10,48,4,S,11,C,1,F,9,42,5,e,8,K,3,3,10,B,0,0,7,12,8,H,5,70,g,52,4,D,10,G,6,A,6,N,6,O,12,f,5,2,10,48,2,Y,11,C,0,F,13,61,0,0,7,12,8,H,4,D,10,G,3,6,11,L,6,A,6,N,6,204,13,K,5,2,11,C,6,J,15,I,4,90,10,B,0,0,7,12,8,H,F,D,10,G,5,Q,11,L,3,J,13,K,4,A,10,B,7,77,11,52,5,70,13,62,1,F,15,I,0,0,7,12,8,H,F,D,11,52,5,70,10,G,6,A,6,N,6,O,12,f,3,5,10,48,1,F,11,C,5,2,6,T,0,0,7,12,8,H,F,D,10,48,5,70,10,B,6,A,6,N,6,O,11,C,0,0,F,D,8,H,5,70,10,G,6,A,6,N,6,O,11,C,7,12,10,B,9,V,11,52,2,Y,10,48,0,F,12,k,7,77,8,a,0,0,7,12,8,H,6,A,6,N,4,E,4,155,4,D,10,G,5,70,10,B,6,J,11,52,1,F,11,C,3,3,13,61,0,S,9,44,0,0,7,12,8,H,4,E,8,B,8,R,8,c,6,A,11,C,5,70,7,Z,3,5,11,52,1,F,10,G,5,2,6,N,6,h,13,61,0,0,7,12,8,H,5,70,10,B,6,A,6,N,6,O,11,C,4,D,11,L,5,2,13,K,5,77,15,I,2,Y,10,G,6,J,12,k,0,F,14,184,4,90,9,42,7,e,6,164,6,p,6,Z,7,Q,8,59,0,0,6,A,11,52,7,12,8,B,8,R,8,l,5,70,11,C,4,S,10,m,1,F,15,I,9,V,7,Z,2,b,12,W,4,E,10,H,2,r,12,f,0,0,7,12,11,52,6,A,8,B,8,R,8,l,4,S,10,m,5,70,11,C,0,0,7,12,11,52,6,A,8,B,8,R,8,l,4,S,10,m,5,70,13,62,1,F,15,I,9,V,11,t,2,230,9,j,0,0,7,12,11,52,6,A,8,B,9,28,8,H,4,E,10,G,5,70,10,s,3,5,6,N,6,h,13,62,4,D,9,116,6,18,8,41,2,n,6,T,4,g,0,0,7,12,11,52,6,A,8,B,9,28,8,H,4,E,10,G,5,70,10,s,4,S,6,N,6,h,12,k,0,0,7,12,11,52,6,A,8,B,9,28,8,H,4,E,10,G,5,70,10,s,4,8,6,162,2,b,8,42,3,5,12,k,0,0,7,12,11,52,6,A,8,B,4,D,11,C,9,V,13,61,9,28,12,P,13,38,0,0,7,12,11,52,6,A,8,B,2,b,11,C,9,28,12,P,4,S,8,H,4,E,10,G,3,6,6,N,6,h,11,t,11,u,11,115,0,0,7,12,g,52,6,A,8,B,4,D,11,C,9,28,12,P,7,77,8,H,5,70,10,G,5,2,6,N,6,O,8,K,2,Y,15,I,0,F,10,48,0,0,7,12,g,52,6,A,8,B,4,D,6,T,9,28,8,H,4,8,4,153,4,q,13,62,7,r,12,f,13,158,15,191,13,246,6,N,3,6,10,G,7,77,12,k,0,0,7,12,g,52,6,A,8,B,4,D,6,T,9,28,8,H,7,r,0,0,7,12,g,52,6,A,136,H,8,d,8,l,8,R,10,B,0,0,7,12,10,H,6,A,8,B,4,D,7,35,7,18,9,j,5,156,11,165,7,e,11,U,5,70,12,W,0,0,7,12,10,H,6,A,8,B,2,b,7,35,7,11,0,0,7,12,10,H,6,A,8,B,8,R,8,234,6,E,11,C,4,D,11,52,5,70,13,61,0,0,7,12,10,H,6,A,8,B,9,28,9,j,5,70,11,52,3,5,8,170,1,F,10,G,4,E,6,N,6,h,13,62,4,D,14,180,5,2,10,j,0,128,13,61,0,0,7,12,E,H,4,A,8,B,2,b,9,52,5,70,10,m,5,Q,11,C,3,J,15,I,1,F,0,0,7,12,E,H,6,A,8,B,4,D,7,35,7,18,9,j,5,156,11,165,5,70,12,W,7,e,11,U,9,223,13,238,4,S,4,U,4,Y,11,52,0,0,7,12,11,C,9,28,8,P,6,A,10,B,6,E,10,99,10,M,10,242,5,2,11,L,0,0,7,12,11,C,9,28,8,P,6,E,10,99,6,A,10,B,10,M,10,242,5,70,11,L,3,5,13,K,1,F,15,I,4,D,10,G,5,2,7,Z,4,73,8,235,0,0,7,12,11,C,9,28,8,P,6,A,10,B,5,70,7,Z,3,5,11,52,6,E,10,99,10,M,10,242,0,0,7,12,g,C,4,D,8,B,9,28,12,P,6,A,11,52,7,77,8,H,5,70,10,G,5,2,10,48,2,Y,8,a,8,155,8,K,8,148,8,179,0,0,7,12,g,C,4,D,8,B,9,28,12,P,6,A,11,52,7,77,8,H,5,70,10,G,5,2,6,N,6,O,8,K,2,Y,15,I,0,F,10,48,0,0,7,12,g,C,9,28,8,P,6,E,10,99,6,A,10,B,5,70,7,Z,10,M,10,244,3,5,13,61,1,F,15,I,4,D,10,G,4,73,11,116,5,2,8,235,0,0,6,A,11,C,6,E,11,L,4,D,13,K,7,12,10,B,5,70,15,I,3,5,9,52,1,F,10,G,0,0,6,A,11,C,6,E,11,L,4,D,13,K,5,Q,15,I,3,J,10,B,5,70,12,W,1,F,9,52,0,0,6,E,11,C,5,70,11,L,6,A,13,K,4,D,15,I,7,12,10,B,3,5,0,0,6,E,11,C,4,D,11,L,6,A,8,B,8,X,8,P,7,12,4,i,4,q,13,K,6,J,8,H,0,0,6,A,11,C,6,E,11,L,4,D,8,B,8,X,8,P,7,12,4,i,4,q,13,K,5,70,8,H,0,0,J,70,11,C,6,E,11,L,4,D,13,K,6,A,15,I,0,0,6,A,11,C,6,E,11,52,5,70,10,a,5,Q,12,j,3,J,13,61,0,0,6,E,11,C,6,A,11,52,5,70,10,a,4,D,12,j,4,8,8,B,8,X,8,P,2,r,0,0,6,A,11,52,5,70,11,C,6,E,10,a,5,Q,12,j,3,J,6,T,2,n,2,217,2,Y,0,0,6,A,11,52,6,E,11,C,4,D,6,T,9,V,11,U,7,230,8,H,8,d,10,B,0,0,6,E,11,52,6,A,11,C,4,D,6,T,4,8,4,153,4,q,8,H,5,77,8,B,0,0,6,A,11,C,6,E,11,52,4,D,6,T,2,r,8,B,4,8,4,153,4,E,7,45,2,146,10,G,5,12,9,44,0,0,6,A,11,C,6,E,11,52,4,D,6,T,5,70,15,I,9,V,8,H,0,128,6,N,0,0,6,A,11,C,6,E,11,52,4,D,6,T,5,77,8,B,0,0,6,A,11,C,6,E,11,52,4,D,6,T,5,12,8,H,4,S,8,B,5,70,15,I,1,F,10,G,0,0,6,A,11,C,6,E,11,52,4,D,6,T,5,12,15,I,4,S,8,B,5,70,8,H,1,F,0,0,6,E,11,C,4,D,11,52,6,A,0,0,6,A,11,C,5,70,11,52,6,E,8,H,8,d,8,l,8,X,10,B,4,D,11,L,7,12,13,K,0,0,6,A,11,C,6,E,8,H,8,d,11,52,4,D,8,l,8,X,10,B,7,12,11,L,7,77,13,K,8,69,12,P,6,8,15,I,5,70,10,57,1,F,12,168,0,0,6,A,8,H,8,d,11,C,6,E,11,52,4,D,8,l,8,X,10,B,5,70,11,L,7,66,10,48,6,8,13,K,7,12,15,I,0,0,6,E,11,C,6,A,11,L,4,D,13,K,5,Q,15,I,3,J,8,H,8,d,11,52,5,70,8,l,8,X,10,B,1,F,0,0,5,70,8,B,5,Q,11,L,3,J,13,K,1,F,9,52,4,A,13,62,2,b,15,I,6,E,10,H,0,0,5,70,11,C,5,Q,11,L,6,E,13,K,3,J,15,I,1,F,8,H,6,A,10,B,8,d,10,57,4,D,12,168,0,0,J,70,11,C,5,Q,8,B,6,A,8,H,3,J,10,G,1,F,11,L,0,0,J,70,11,C,5,Q,8,B,3,J,10,H,6,A,9,j,1,F,11,L,0,0,J,70,8,B,6,A,11,C,6,E,11,52,5,Q,6,i,3,J,10,G,6,3,6,T,2,n,8,P,6,75,6,99,1,F,14,120,0,0,J,70,8,H,6,E,11,C,4,D,11,52,5,Q,13,61,3,J,15,I,1,F,10,48,6,A,6,N,6,O,12,f,0,0,5,Q,11,L,3,J,13,K,6,E,11,C,4,D,15,I,5,70,10,B,6,A,12,W,1,F,9,52,7,12,0,0,J,Q,8,B,3,J,11,C,5,70,10,H,1,F,9,j,4,A,11,52,2,b,11,U,4,73,13,61,2,66,15,I,0,0,J,Q,11,C,3,J,8,B,4,A,10,H,2,b,9,52,7,12,10,m,5,70,15,I,1,F,0,0,J,Q,8,B,5,70,11,C,3,J,11,52,1,F,13,61,4,A,15,I,2,b,8,H,7,12,10,G,0,0,J,Q,9,52,3,J,8,B,4,A,11,C,5,70,10,G,1,F,13,61,6,E,15,I,8,X,8,P,4,D,11,58,0,0,6,A,9,t,5,Q,11,C,3,J,11,L,5,70,13,K,1,F,15,I,6,E,10,B,4,D,15,59,8,d,10,57,0,0,6,A,q,t,6,E,11,C,4,D,11,L,5,70,13,K,5,12,15,I,3,5,10,B,1,F,10,G,0,0,6,A,q,t,5,70,11,C,5,Q,11,L,3,J,13,K,6,E,15,I,4,D,10,B,1,F,10,G,8,d,9,42,0,0,F,D,8,B,7,12,6,227,3,18,9,52,5,140,11,58,5,70,12,W,4,E,8,H,8,69,10,m,1,F,10,48,0,0,F,D,8,B,6,A,11,C,9,V,12,W,5,70,11,U,7,230,10,H,5,12,11,52,4,S,13,61,1,F,15,I,0,0,F,D,8,B,7,12,10,H,5,70,7,Z,5,e,9,222,6,A,0,0,F,D,9,52,7,12,11,C,6,J,10,G,4,A,6,T,9,V,11,U,11,102,4,153,4,q,11,s,3,6,10,B,0,0,6,E,9,52,4,D,11,C,5,70,10,G,5,Q,8,B,8,X,8,P,3,J,10,99,1,F,13,61,4,A,15,I,4,8,11,58,6,73,0,0,6,E,9,52,4,D,11,C,5,Q,8,B,8,X,8,P,3,J,10,99,5,70,10,G,1,F,13,61,4,8,15,I,6,73,11,58,4,A,0,0,7,77,8,B,5,70,11,C,5,12,11,L,3,5,13,K,1,F,15,I,4,A,8,H,1,3,10,G,4,D,15,61,0,0,7,77,8,B,5,70,11,L,5,Q,13,K,3,J,11,C,1,F,15,I,4,A,8,H,4,D,6,227,7,18,0,0,135,77,8,B,5,70,11,L,5,12,13,K,3,5,11,C,0,0,135,77,8,B,5,12,11,C,5,70,7,Z,3,5,12,W,9,21,0,0,F,73,9,52,2,66,10,G,5,12,8,B,8,69,10,m,5,70,13,59,6,E,11,C,0,0,7,12,g,L,6,A,13,K,4,D,10,B,7,77,11,C,5,70,15,I,4,S,10,G,1,F,9,52,0,0,7,12,10,B,6,A,11,C,4,D,11,L,5,70,13,K,0,0,7,12,E,B,6,A,11,L,4,D,13,K,5,70,11,C,0,0,6,A,E,B,7,12,11,C,4,D,11,L,5,2,13,K,2,Y,10,H,0,0,6,A,11,L,7,12,13,K,5,70,10,B,4,D,11,C,3,5,15,I,1,F,10,H,5,e,12,f,7,66,12,W,9,28,9,43,9,21,9,51,9,29,10,114,0,0,6,A,11,L,6,E,13,K,4,D,10,B,7,12,11,C,5,70,15,I,3,5,9,52,1,F,0,0,6,A,g,L,7,12,13,K,6,E,10,B,4,D,10,G,5,2,9,52,8,d,13,42,0,0,6,E,11,C,5,Q,11,L,3,J,13,K,4,D,15,I,7,12,10,B,3,6,8,H,1,F,10,G,4,A,10,48,5,e,14,120,6,8,0,0,F,73,11,52,2,66,11,C,5,12,8,H,5,70,13,61,6,A,15,I,4,S,8,B,1,F,10,G,0,0
];
public var numBookMoves:int = -1;
private var bookMap:Array = []; /*Map<Long, List<BookEntry>>*/
private var badmoves:int = 0;
private var same_entries:int = 0;
private var Position:POSITION = Main.Position;
private var TextIO:TEXTIO = Main.TextIO;
private var MoveGen:MOVEGEN = Main.MoveGen;
public function initBook( verbose:Boolean ):void {
var startPos:POSITION = TextIO.readFEN(TextIO.startPosFEN);
var pos:POSITION = startPos.clone();
var ui:UNDOINFO = new UNDOINFO();
var badwas:Boolean = false;
this.numBookMoves = 0;
{
for (var i2:int = 0; i2 < this.BookBin.length; i2 += 2) {
var b0:int = this.BookBin[i2];
var b1:int = this.BookBin[i2+1];
var move:uint = (b0 << 8) + b1;
if (move == 0) {
pos = startPos.clone();
badwas = false;
{
// skip some variants for better performance
for(var skp:int=Math.floor( Math.random()*8 ); skp>0; skp--)
for(;;)
{
i2 += 2;
if(i2 >= this.BookBin.length) break;
b0 = this.BookBin[i2];
b1 = this.BookBin[i2+1];
move = (b0 << 8) + b1;
if(move == 0) break;
}
}
} else {
var bad:Boolean = badwas;
if (!bad)
{
var prom:int = (move >>> 12) & 7;
var m2:MOVE = new MOVE(move & 63, (move >>> 6) & 63,
this.promToPiece(prom, pos.whiteMove), 0);
bad = (((move >>> 15) & 1) != 0) ||
m2.from<0 || m2.from>63 || m2.to<0 || m2.to>63 ||
pos.squares[m2.from]==0;
}
if (!bad)
{
this.addToBook(pos, m2);
pos.makeMove(m2, ui);
}
badwas = bad;
}
}
}
if (verbose) {
// Book contains only some variants for e4
trace("Book moves: " + this.numBookMoves.toString() );
}
}
/* Get list of book moves for given position */
private function GetMvList( pos:POSITION ):Array
{
var idx:uint = pos.zobristHash() & 0xFFFFFF;
if(typeof(this.bookMap[idx]) == "undefined") return null;
return this.bookMap[idx];
}
/** Add a move to a position in the opening book. */
private function addToBook( pos:POSITION, moveToAdd:MOVE ):void {
var idx:uint = pos.zobristHash() & 0xFFFFFF;
if(typeof(this.bookMap[idx]) == "undefined")
{
this.bookMap[idx] = new Array();
}
var bookMoves:Array = this.bookMap[idx];
for (var i2:int = 0; i2 < bookMoves.length; i2++) {
var ent:BookEntry = bookMoves[i2];
if (moveToAdd.equalsMove(ent.move)) {
ent.count++;
return;
}
}
bookMoves.push( new BookEntry(moveToAdd, TextIO.moveToString(pos, moveToAdd, false) ) );
this.numBookMoves++;
}
/** Return a random book move for a position, or null if out of book. */
public function getBookMove( pos:POSITION ):MOVE {
var bookMoves:Array = this.GetMvList(pos);
if(bookMoves == null) return null;
var moves:MoveList = MoveGen.pseudoLegalMoves(pos);
MoveGen.removeIllegal(pos, moves);
var sum:int = 0;
for (var i2:int = 0; i2 < bookMoves.length; i2++) {
var be:BookEntry = bookMoves[i2];
var containz:Boolean = false;
for (var mi:int = 0; mi < moves.size; mi++)
if ( be.move.equalsMove(moves.m[mi])) {
containz = true;
break;
}
if (!containz) {
// If an illegal move was found, it means there was a hash collision.
return null;
}
sum += this.getWeight(be.count);
}
if (sum <= 0) return null;
var rnd:int = Math.floor(Math.random()*sum);
sum = 0;
for ( i2 = 0; i2 < bookMoves.length; i2++) {
be = bookMoves[i2];
sum += this.getWeight(be.count);
if (rnd < sum) {
return be.move;
}
}
// Should never get here
/*throw new*/ trace("BookMove exception!");
return new MOVE(0, 0, 0, 0);
}
private function getWeight( count:int ):int {
var tmp:Number = Math.sqrt(count);
return int((tmp * Math.sqrt(tmp) * 100) + 1);
}
/** Return a string describing all book moves. */
public function getAllBookMoves( pos:POSITION ):String {
var bookMoves:Array = this.GetMvList(pos);
if(bookMoves == null) return "";
var ret:String = "";
for (var i2:int = 0; i2 < bookMoves.length; i2++) {
var be:BookEntry = bookMoves[i2];
ret+= be.moveStr + "(" + be.count.toString() + ") ";
}
return ret;
}
private function pieceToProm( p2:int ):int {
var i2:int = ( p2>6? p2-6 : p2 );
if( i2>1 && i2<6 ) return i2-1;
return 0;
}
private function promToPiece( p2:int, whiteMove:Boolean ):int {
if(p2>0 && p2<5) return (p2 + (whiteMove?1:7));
return 0;
}
}
}