1.原理
相位累加器:N表示K值位宽。K=2^N*Fout/Fclk。并且在输入相位累加器之前还进行了数据寄存,表示K值在变化的时候,不会影响相位累加器的工作。
相位调制器:寄存器的作用一样的,防止P变化影响相位调制器的正常工作。
波形数据表ROM会存储要显示的完整周期的信号。比如完整周期的正弦波信号,假如地址位宽是12位宽,数据位宽是8位宽,那么就表示有2^12=4096个地址,每个地址可以存储1B数据。对正弦波信号进行完整的存储就是沿着横轴进行等间隔采样4096次,每次 采集的信号幅值用1个字节来表示。最大值是255,最小值是0。每个存储单元都写入一个幅值,这样就把完整的正弦波信号写入到波形数据表ROM当中。然后以相位调制器传入的数据,作为ROM的读地址,然后将地址对应的幅值以数字量的形式输出。
D/A转换器将数字幅值数字量转换成模拟量,就得到了输出信号。
如果有第5部分的话,就将输出信号通过一个低通滤波器,再输出。
当K等于1时(K是不为0的整数),得到的输出时钟的频率是最小的,得出的Fout是DDS的最小分辨率。K值越大输出时钟的频率越大,但K也不是无限大的,根据采样定理,K<=2^n/2。
相位累加器得到的相位码M是如何实现寻址的功能的呢?波形数据表的位宽应该等于M位宽。如果2^N=2^M,也就是N=M,如果N很大,那么对波形数据表的存贮空间就很大,增加了技术上的要求和成本,在实际中若M!=N,一般都是使用相位累加值的高几位对ROM寻址。也就是N>M,如图,把N的高8位传给M,也就是并不是每个系统时钟都会对ROM读地址进行一次更新,而是多个时钟周期进行读地址更新,能保证相位累加器溢出时,从正弦ROM表中刚好读取的时整个正弦周期的采样点。相位累加器每计数2^N次对应一个正弦周期,相位累加器一秒钟计数的频率是系统时钟的频率,如果K等于1,输出的时钟就是频率的分辨率,控制K值增加,相位累加器溢出的值就会增加,对应的clk_out的频率就会变为K倍频率分辨率。这样就实现了频率的调节。
举个例子:M=12,D=8,N=32,那么只把N的高12位传给相位调制器,当K等于1,N的低20位每个时钟周期就加1,直到低20位全都为111...111。此时需要进位,把进位就传给M,此时低为又开始从0计数到20位都为1。ROM地址开始等于0,就是把0地址的数据读取2^20次。完成读取之后会向前进位,将1地址,读取2^20次,依次读取,ROM中4096个地址,每个地址都会读取2^20次。输出的频率应该是1/2^20,周期被扩大了2^20倍,当K=100,低20位的数据每次增加100,低20位溢出的时间会比K=1时快100倍,ROM当中一个地址读的次数就是2^20/100次,这时输出的频率就是K=1时输出频率的100倍
2.实验目标
利用外部的AD/DA板卡,设计并实现一个简易的DDS信号发生器,使用按键切换正弦波、锯齿波、方波、三角波四种波形的输出。频率相位可以在代码中调节。FPGA实现的是波形数据表ROM及其之间的部分。
最终输出有改动,在输出时钟前加了一个反相器
2.1 所有波形matlab代码
clc; %清除命令行命令
clear all; %清除工作区变量,释放内存空间
F1=1; %信号频率
Fs=2^12; %采样频率
P1=0; %信号初始相位
N=2^12; %采样点数
t=[0:1/Fs:(N-1)/Fs]; %采样时刻
ADC=2^7 - 1; %直流分量
A=2^7; %信号幅度
s1=A*sin(2*pi*F1*t + pi*P1/180) + ADC; %正弦波信号
s2=A*square(2*pi*F1*t + pi*P1/180) + ADC; %方波信号
s3=A*sawtooth(2*pi*F1*t + pi*P1/180,0.5) + ADC; %三角波信号
s4=A*sawtooth(2*pi*F1*t + pi*P1/180) + ADC; %锯齿波信号
%创建mif文件
fild = fopen('all_wave_16384x8.mif','wt');
%写入mif文件头
fprintf(fild, '%s\n','WIDTH=8;'); %位宽
fprintf(fild, '%s\n\n','DEPTH=16384;'); %深度
fprintf(fild, '%s\n','ADDRESS_RADIX=UNS;'); %地址格式
fprintf(fild, '%s\n\n','DATA_RADIX=UNS;'); %数据格式
fprintf(fild, '%s\t','CONTENT'); %地址
fprintf(fild, '%s\n','BEGIN'); %开始
for j = 1:4
for i = 1:N
if j == 1 %打印正弦信号数据
s0(i) = round(s1(i)); %对小数四舍五入以取整
fprintf(fild, '\t%g\t',i-1); %地址编码
end
if j == 2 %打印方波信号数据
s0(i) = round(s2(i)); %对小数四舍五入以取整
fprintf(fild, '\t%g\t',i-1+N); %地址编码
end
if j == 3 %打印三角波信号数据
s0(i) = round(s3(i)); %对小数四舍五入以取整
fprintf(fild, '\t%g\t',i-1+(2*N)); %地址编码
end
if j == 4 %打印锯齿波信号数据
s0(i) = round(s4(i)); %对小数四舍五入以取整
fprintf(fild, '\t%g\t',i-1+(3*N)); %地址编码
end
if s0(i) <0 %负1强制置零
s0(i) = 0
end
fprintf(fild, '%s\t',':'); %冒号
fprintf(fild, '%d',s0(i)); %数据写入
fprintf(fild, '%s\n',';'); %分号,换行
end
end
fprintf(fild, '%s\n','END;'); %结束
fclose(fild);
.coe文件
memory_initialization_radix=10;
memory_initialization_vector=
127,
127,
127,
128,
128,
128,
128,
128,
129,
129,
129,
129,
129,
130,
130,
130,
130,
130,
131,
131,
131,
131,
131,
132,
132,
132,
132,
132,
132,
133,
133,
133,
133,
133,
134,
134,
134,
134,
134,
135,
135,
135,
135,
135,
136,
136,
136,
136,
136,
137,
137,
137,
137,
137,
138,
138,
138,
138,
138,
139,
139,
139,
139,
139,
140,
140,
140,
140,
140,
141,
141,
141,
141,
141,
141,
142,
142,
142,
142,
142,
143,
143,
143,
143,
143,
144,
144,
144,
144,
144,
145,
145,
145,
145,
145,
146,
146,
146,
146,
146,
147,
147,
147,
147,
147,
148,
148,
148,
148,
148,
148,
149,
149,
149,
149,
149,
150,
150,
150,
150,
150,
151,
151,
151,
151,
151,
152,
152,
152,
152,
152,
153,
153,
153,
153,
153,
154,
154,
154,
154,
154,
154,
155,
155,
155,
155,
155,
156,
156,
156,
156,
156,
157,
157,
157,
157,
157,
158,
158,
158,
158,
158,
158,
159,
159,
159,
159,
159,
160,
160,
160,
160,
160,
161,
161,
161,
161,
161,
162,
162,
162,
162,
162,
162,
163,
163,
163,
163,
163,
164,
164,
164,
164,
164,
165,
165,
165,
165,
165,
165,
166,
166,
166,
166,
166,
167,
167,
167,
167,
167,
168,
168,
168,
168,
168,
168,
169,
169,
169,
169,
169,
170,
170,
170,
170,
170,
170,
171,
171,
171,
171,
171,
172,
172,
172,
172,
172,
173,
173,
173,
173,
173,
173,
174,
174,
174,
174,
174,
175,
175,
175,
175,
175,
175,
176,
176,
176,
176,
176,
177,
177,
177,
177,
177,
177,
178,
178,
178,
178,
178,
179,
179,
179,
179,
179,
179,
180,
180,
180,
180,
180,
180,
181,
181,
181,
181,
181,
182,
182,
182,
182,
182,
182,
183,
183,
183,
183,
183,
183,
184,
184,
184,
184,
184,
185,
185,
185,
185,
185,
185,
186,
186,
186,
186,
186,
186,
187,
187,
187,
187,
187,
188,
188,
188,
188,
188,
188,
189,
189,
189,
189,
189,
189,
190,
190,
190,
190,
190,
190,
191,
191,
191,
191,
191,
191,
192,
192,
192,
192,
192,
192,
193,
193,
193,
193,
193,
193,
194,
194,
194,
194,
194,
194,
195,
195,
195,
195,
195,
195,
196,
196,
196,
196,
196,
196,
197,
197,
197,
197,
197,
197,
198,
198,
198,
198,
198,
198,
199,
199,
199,
199,
199,
199,
200,
200,
200,
200,
200,
200,
201,
201,
201,
201,
201,
201,
202,
202,
202,
202,
202,
202,
202,
203,
203,
203,
203,
203,
203,
204,
204,
204,
204,
204,
204,
205,
205,
205,
205,
205,
205,
205,
206,
206,
206,
206,
206,
206,
207,
207,
207,
207,
207,
207,
207,
208,
208,
208,
208,
208,
208,
209,
209,
209,
209,
209,
209,
209,
210,
210,
210,
210,
210,
210,
210,
211,
211,
211,
211,
211,
211,
211,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
214,
214,
214,
214,
214,
214,
214,
215,
215,
215,
215,
215,
215,
215,
216,
216,
216,
216,
216,
216,
216,
217,
217,
217,
217,
217,
217,
217,
218,
218,
218,
218,
218,
218,
218,
218,
219,
219,
219,
219,
219,
219,
219,
220,
220,
220,
220,
220,
220,
220,
221,
221,
221,
221,
221,
221,
221,
221,
222,
222,
222,
222,
222,
222,
222,
222,
223,
223,
223,
223,
223,
223,
223,
224,
224,
224,
224,
224,
224,
224,
224,
225,
225,
225,
225,
225,
225,
225,
225,
226,
226,
226,
226,
226,
226,
226,
226,
227,
227,
227,
227,
227,
227,
227,
227,
228,
228,
228,
228,
228,
228,
228,
228,
229,
229,
229,
229,
229,
229,
229,
229,
229,
230,
230,
230,
230,
230,
230,
230,
230,
231,
231,
231,
231,
231,
231,
231,
231,
231,
232,
232,
232,
232,
232,
232,
232,
232,
232,
233,
233,
233,
233,
233,
233,
233,
233,
233,
234,
234,
234,
234,
234,
234,
234,
234,
234,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
234,
234,
234,
234,
234,
234,
234,
234,
234,
233,
233,
233,
233,
233,
233,
233,
233,
233,
232,
232,
232,
232,
232,
232,
232,
232,
232,
231,
231,
231,
231,
231,
231,
231,
231,
231,
230,
230,
230,
230,
230,
230,
230,
230,
229,
229,
229,
229,
229,
229,
229,
229,
229,
228,
228,
228,
228,
228,
228,
228,
228,
227,
227,
227,
227,
227,
227,
227,
227,
226,
226,
226,
226,
226,
226,
226,
226,
225,
225,
225,
225,
225,
225,
225,
225,
224,
224,
224,
224,
224,
224,
224,
224,
223,
223,
223,
223,
223,
223,
223,
222,
222,
222,
222,
222,
222,
222,
222,
221,
221,
221,
221,
221,
221,
221,
221,
220,
220,
220,
220,
220,
220,
220,
219,
219,
219,
219,
219,
219,
219,
218,
218,
218,
218,
218,
218,
218,
218,
217,
217,
217,
217,
217,
217,
217,
216,
216,
216,
216,
216,
216,
216,
215,
215,
215,
215,
215,
215,
215,
214,
214,
214,
214,
214,
214,
214,
213,
213,
213,
213,
213,
213,
213,
212,
212,
212,
212,
212,
212,
211,
211,
211,
211,
211,
211,
211,
210,
210,
210,
210,
210,
210,
210,
209,
209,
209,
209,
209,
209,
209,
208,
208,
208,
208,
208,
208,
207,
207,
207,
207,
207,
207,
207,
206,
206,
206,
206,
206,
206,
205,
205,
205,
205,
205,
205,
205,
204,
204,
204,
204,
204,
204,
203,
203,
203,
203,
203,
203,
202,
202,
202,
202,
202,
202,
202,
201,
201,
201,
201,
201,
201,
200,
200,
200,
200,
200,
200,
199,
199,
199,
199,
199,
199,
198,
198,
198,
198,
198,
198,
197,
197,
197,
197,
197,
197,
196,
196,
196,
196,
196,
196,
195,
195,
195,
195,
195,
195,
194,
194,
194,
194,
194,
194,
193,
193,
193,
193,
193,
193,
192,
192,
192,
192,
192,
192,
191,
191,
191,
191,
191,
191,
190,
190,
190,
190,
190,
190,
189,
189,
189,
189,
189,
189,
188,
188,
188,
188,
188,
188,
187,
187,
187,
187,
187,
186,
186,
186,
186,
186,
186,
185,
185,
185,
185,
185,
185,
184,
184,
184,
184,
184,
183,
183,
183,
183,
183,
183,
182,
182,
182,
182,
182,
182,
181,
181,
181,
181,
181,
180,
180,
180,
180,
180,
180,
179,
179,
179,
179,
179,
179,
178,
178,
178,
178,
178,
177,
177,
177,
177,
177,
177,
176,
176,
176,
176,
176,
175,
175,
175,
175,
175,
175,
174,
174,
174,
174,
174,
173,
173,
173,
173,
173,
173,
172,
172,
172,
172,
172,
171,
171,
171,
171,
171,
170,
170,
170,
170,
170,
170,
169,
169,
169,
169,
169,
168,
168,
168,
168,
168,
168,
167,
167,
167,
167,
167,
166,
166,
166,
166,
166,
165,
165,
165,
165,
165,
165,
164,
164,
164,
164,
164,
163,
163,
163,
163,
163,
162,
162,
162,
162,
162,
162,
161,
161,
161,
161,
161,
160,
160,
160,
160,
160,
159,
159,
159,
159,
159,
158,
158,
158,
158,
158,
158,
157,
157,
157,
157,
157,
156,
156,
156,
156,
156,
155,
155,
155,
155,
155,
154,
154,
154,
154,
154,
154,
153,
153,
153,
153,
153,
152,
152,
152,
152,
152,
151,
151,
151,
151,
151,
150,
150,
150,
150,
150,
149,
149,
149,
149,
149,
148,
148,
148,
148,
148,
148,
147,
147,
147,
147,
147,
146,
146,
146,
146,
146,
145,
145,
145,
145,
145,
144,
144,
144,
144,
144,
143,
143,
143,
143,
143,
142,
142,
142,
142,
142,
141,
141,
141,
141,
141,
141,
140,
140,
140,
140,
140,
139,
139,
139,
139,
139,
138,
138,
138,
138,
138,
137,
137,
137,
137,
137,
136,
136,
136,
136,
136,
135,
135,
135,
135,
135,
134,
134,
134,
134,
134,
133,
133,
133,
133,
133,
132,
132,
132,
132,
132,
132,
131,
131,
131,
131,
131,
130,
130,
130,
130,
130,
129,
129,
129,
129,
129,
128,
128,
128,
128,
128,
127,
127,
127,
127,
127,
126,
126,
126,
126,
126,
125,
125,
125,
125,
125,
124,
124,
124,
124,
124,
123,
123,
123,
123,
123,
122,
122,
122,
122,
122,
122,
121,
121,
121,
121,
121,
120,
120,
120,
120,
120,
119,
119,
119,
119,
119,
118,
118,
118,
118,
118,
117,
117,
117,
117,
117,
116,
116,
116,
116,
116,
115,
115,
115,
115,
115,
114,
114,
114,
114,
114,
113,
113,
113,
113,
113,
113,
112,
112,
112,
112,
112,
111,
111,
111,
111,
111,
110,
110,
110,
110,
110,
109,
109,
109,
109,
109,
108,
108,
108,
108,
108,
107,
107,
107,
107,
107,
106,
106,
106,
106,
106,
106,
105,
105,
105,
105,
105,
104,
104,
104,
104,
104,
103,
103,
103,
103,
103,
102,
102,
102,
102,
102,
101,
101,
101,
101,
101,
100,
100,
100,
100,
100,
100,
99,
99,
99,
99,
99,
98,
98,
98,
98,
98,
97,
97,
97,
97,
97,
96,
96,
96,
96,
96,
96,
95,
95,
95,
95,
95,
94,
94,
94,
94,
94,
93,
93,
93,
93,
93,
92,
92,
92,
92,
92,
92,
91,
91,
91,
91,
91,
90,
90,
90,
90,
90,
89,
89,
89,
89,
89,
89,
88,
88,
88,
88,
88,
87,
87,
87,
87,
87,
86,
86,
86,
86,
86,
86,
85,
85,
85,
85,
85,
84,
84,
84,
84,
84,
84,
83,
83,
83,
83,
83,
82,
82,
82,
82,
82,
81,
81,
81,
81,
81,
81,
80,
80,
80,
80,
80,
79,
79,
79,
79,
79,
79,
78,
78,
78,
78,
78,
77,
77,
77,
77,
77,
77,
76,
76,
76,
76,
76,
75,
75,
75,
75,
75,
75,
74,
74,
74,
74,
74,
74,
73,
73,
73,
73,
73,
72,
72,
72,
72,
72,
72,
71,
71,
71,
71,
71,
71,
70,
70,
70,
70,
70,
69,
69,
69,
69,
69,
69,
68,
68,
68,
68,
68,
68,
67,
67,
67,
67,
67,
66,
66,
66,
66,
66,
66,
65,
65,
65,
65,
65,
65,
64,
64,
64,
64,
64,
64,
63,
63,
63,
63,
63,
63,
62,
62,
62,
62,
62,
62,
61,
61,
61,
61,
61,
61,
60,
60,
60,
60,
60,
60,
59,
59,
59,
59,
59,
59,
58,
58,
58,
58,
58,
58,
57,
57,
57,
57,
57,
57,
56,
56,
56,
56,
56,
56,
55,
55,
55,
55,
55,
55,
54,
54,
54,
54,
54,
54,
53,
53,
53,
53,
53,
53,
52,
52,
52,
52,
52,
52,
52,
51,
51,
51,
51,
51,
51,
50,
50,
50,
50,
50,
50,
49,
49,
49,
49,
49,
49,
49,
48,
48,
48,
48,
48,
48,
47,
47,
47,
47,
47,
47,
47,
46,
46,
46,
46,
46,
46,
45,
45,
45,
45,
45,
45,
45,
44,
44,
44,
44,
44,
44,
44,
43,
43,
43,
43,
43,
43,
43,
42,
42,
42,
42,
42,
42,
41,
41,
41,
41,
41,
41,
41,
40,
40,
40,
40,
40,
40,
40,
39,
39,
39,
39,
39,
39,
39,
38,
38,
38,
38,
38,
38,
38,
37,
37,
37,
37,
37,
37,
37,
36,
36,
36,
36,
36,
36,
36,
36,
35,
35,
35,
35,
35,
35,
35,
34,
34,
34,
34,
34,
34,
34,
33,
33,
33,
33,
33,
33,
33,
33,
32,
32,
32,
32,
32,
32,
32,
32,
31,
31,
31,
31,
31,
31,
31,
30,
30,
30,
30,
30,
30,
30,
30,
29,
29,
29,
29,
29,
29,
29,
29,
28,
28,
28,
28,
28,
28,
28,
28,
27,
27,
27,
27,
27,
27,
27,
27,
26,
26,
26,
26,
26,
26,
26,
26,
25,
25,
25,
25,
25,
25,
25,
25,
25,
24,
24,
24,
24,
24,
24,
24,
24,
23,
23,
23,
23,
23,
23,
23,
23,
23,
22,
22,
22,
22,
22,
22,
22,
22,
22,
21,
21,
21,
21,
21,
21,
21,
21,
21,
20,
20,
20,
20,
20,
20,
20,
20,
20,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
20,
20,
20,
20,
20,
20,
20,
20,
20,
21,
21,
21,
21,
21,
21,
21,
21,
21,
22,
22,
22,
22,
22,
22,
22,
22,
22,
23,
23,
23,
23,
23,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
30,
30,
30,
30,
30,
30,
30,
30,
31,
31,
31,
31,
31,
31,
31,
32,
32,
32,
32,
32,
32,
32,
32,
33,
33,
33,
33,
33,
33,
33,
33,
34,
34,
34,
34,
34,
34,
34,
35,
35,
35,
35,
35,
35,
35,
36,
36,
36,
36,
36,
36,
36,
36,
37,
37,
37,
37,
37,
37,
37,
38,
38,
38,
38,
38,
38,
38,
39,
39,
39,
39,
39,
39,
39,
40,
40,
40,
40,
40,
40,
40,
41,
41,
41,
41,
41,
41,
41,
42,
42,
42,
42,
42,
42,
43,
43,
43,
43,
43,
43,
43,
44,
44,
44,
44,
44,
44,
44,
45,
45,
45,
45,
45,
45,
45,
46,
46,
46,
46,
46,
46,
47,
47,
47,
47,
47,
47,
47,
48,
48,
48,
48,
48,
48,
49,
49,
49,
49,
49,
49,
49,
50,
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
51,
52,
52,
52,
52,
52,
52,
52,
53,
53,
53,
53,
53,
53,
54,
54,
54,
54,
54,
54,
55,
55,
55,
55,
55,
55,
56,
56,
56,
56,
56,
56,
57,
57,
57,
57,
57,
57,
58,
58,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
61,
61,
61,
61,
61,
61,
62,
62,
62,
62,
62,
62,
63,
63,
63,
63,
63,
63,
64,
64,
64,
64,
64,
64,
65,
65,
65,
65,
65,
65,
66,
66,
66,
66,
66,
66,
67,
67,
67,
67,
67,
68,
68,
68,
68,
68,
68,
69,
69,
69,
69,
69,
69,
70,
70,
70,
70,
70,
71,
71,
71,
71,
71,
71,
72,
72,
72,
72,
72,
72,
73,
73,
73,
73,
73,
74,
74,
74,
74,
74,
74,
75,
75,
75,
75,
75,
75,
76,
76,
76,
76,
76,
77,
77,
77,
77,
77,
77,
78,
78,
78,
78,
78,
79,
79,
79,
79,
79,
79,
80,
80,
80,
80,
80,
81,
81,
81,
81,
81,
81,
82,
82,
82,
82,
82,
83,
83,
83,
83,
83,
84,
84,
84,
84,
84,
84,
85,
85,
85,
85,
85,
86,
86,
86,
86,
86,
86,
87,
87,
87,
87,
87,
88,
88,
88,
88,
88,
89,
89,
89,
89,
89,
89,
90,
90,
90,
90,
90,
91,
91,
91,
91,
91,
92,
92,
92,
92,
92,
92,
93,
93,
93,
93,
93,
94,
94,
94,
94,
94,
95,
95,
95,
95,
95,
96,
96,
96,
96,
96,
96,
97,
97,
97,
97,
97,
98,
98,
98,
98,
98,
99,
99,
99,
99,
99,
100,
100,
100,
100,
100,
100,
101,
101,
101,
101,
101,
102,
102,
102,
102,
102,
103,
103,
103,
103,
103,
104,
104,
104,
104,
104,
105,
105,
105,
105,
105,
106,
106,
106,
106,
106,
106,
107,
107,
107,
107,
107,
108,
108,
108,
108,
108,
109,
109,
109,
109,
109,
110,
110,
110,
110,
110,
111,
111,
111,
111,
111,
112,
112,
112,
112,
112,
113,
113,
113,
113,
113,
113,
114,
114,
114,
114,
114,
115,
115,
115,
115,
115,
116,
116,
116,
116,
116,
117,
117,
117,
117,
117,
118,
118,
118,
118,
118,
119,
119,
119,
119,
119,
120,
120,
120,
120,
120,
121,
121,
121,
121,
121,
122,
122,
122,
122,
122,
122,
123,
123,
123,
123,
123,
124,
124,
124,
124,
124,
125,
125,
125,
125,
125,
126,
126,
126,
126,
126,
127,
127,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
18,
18,
18,
18,
18,
18,
18,
18,
19,
19,
19,
19,
19,
19,
19,
19,
20,
20,
20,
20,
20,
20,
20,
20,
21,
21,
21,
21,
21,
21,
21,
21,
22,
22,
22,
22,
22,
22,
22,
22,
23,
23,
23,
23,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
30,
30,
30,
30,
30,
30,
30,
30,
31,
31,
31,
31,
31,
31,
31,
31,
32,
32,
32,
32,
32,
32,
32,
32,
33,
33,
33,
33,
33,
33,
33,
33,
34,
34,
34,
34,
34,
34,
34,
34,
35,
35,
35,
35,
35,
35,
35,
35,
36,
36,
36,
36,
36,
36,
36,
36,
37,
37,
37,
37,
37,
37,
37,
37,
38,
38,
38,
38,
38,
38,
38,
38,
39,
39,
39,
39,
39,
39,
39,
39,
40,
40,
40,
40,
40,
40,
40,
40,
41,
41,
41,
41,
41,
41,
41,
41,
42,
42,
42,
42,
42,
42,
42,
42,
43,
43,
43,
43,
43,
43,
43,
43,
44,
44,
44,
44,
44,
44,
44,
44,
45,
45,
45,
45,
45,
45,
45,
45,
46,
46,
46,
46,
46,
46,
46,
46,
47,
47,
47,
47,
47,
47,
47,
47,
48,
48,
48,
48,
48,
48,
48,
48,
49,
49,
49,
49,
49,
49,
49,
49,
50,
50,
50,
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
51,
51,
51,
52,
52,
52,
52,
52,
52,
52,
52,
53,
53,
53,
53,
53,
53,
53,
53,
54,
54,
54,
54,
54,
54,
54,
54,
55,
55,
55,
55,
55,
55,
55,
55,
56,
56,
56,
56,
56,
56,
56,
56,
57,
57,
57,
57,
57,
57,
57,
57,
58,
58,
58,
58,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
60,
60,
61,
61,
61,
61,
61,
61,
61,
61,
62,
62,
62,
62,
62,
62,
62,
62,
63,
63,
63,
63,
63,
63,
63,
63,
64,
64,
64,
64,
64,
64,
64,
64,
65,
65,
65,
65,
65,
65,
65,
65,
66,
66,
66,
66,
66,
66,
66,
66,
67,
67,
67,
67,
67,
67,
67,
67,
68,
68,
68,
68,
68,
68,
68,
68,
69,
69,
69,
69,
69,
69,
69,
69,
70,
70,
70,
70,
70,
70,
70,
70,
71,
71,
71,
71,
71,
71,
71,
71,
72,
72,
72,
72,
72,
72,
72,
72,
73,
73,
73,
73,
73,
73,
73,
73,
74,
74,
74,
74,
74,
74,
74,
74,
75,
75,
75,
75,
75,
75,
75,
75,
76,
76,
76,
76,
76,
76,
76,
76,
77,
77,
77,
77,
77,
77,
77,
77,
78,
78,
78,
78,
78,
78,
78,
78,
79,
79,
79,
79,
79,
79,
79,
79,
80,
80,
80,
80,
80,
80,
80,
80,
81,
81,
81,
81,
81,
81,
81,
81,
82,
82,
82,
82,
82,
82,
82,
82,
83,
83,
83,
83,
83,
83,
83,
83,
84,
84,
84,
84,
84,
84,
84,
84,
85,
85,
85,
85,
85,
85,
85,
85,
86,
86,
86,
86,
86,
86,
86,
86,
87,
87,
87,
87,
87,
87,
87,
87,
88,
88,
88,
88,
88,
88,
88,
88,
89,
89,
89,
89,
89,
89,
89,
89,
90,
90,
90,
90,
90,
90,
90,
90,
91,
91,
91,
91,
91,
91,
91,
91,
92,
92,
92,
92,
92,
92,
92,
92,
93,
93,
93,
93,
93,
93,
93,
93,
94,
94,
94,
94,
94,
94,
94,
94,
95,
95,
95,
95,
95,
95,
95,
95,
96,
96,
96,
96,
96,
96,
96,
96,
97,
97,
97,
97,
97,
97,
97,
97,
98,
98,
98,
98,
98,
98,
98,
98,
99,
99,
99,
99,
99,
99,
99,
99,
100,
100,
100,
100,
100,
100,
100,
100,
101,
101,
101,
101,
101,
101,
101,
101,
102,
102,
102,
102,
102,
102,
102,
102,
103,
103,
103,
103,
103,
103,
103,
103,
104,
104,
104,
104,
104,
104,
104,
104,
105,
105,
105,
105,
105,
105,
105,
105,
106,
106,
106,
106,
106,
106,
106,
106,
107,
107,
107,
107,
107,
107,
107,
107,
108,
108,
108,
108,
108,
108,
108,
108,
109,
109,
109,
109,
109,
109,
109,
109,
110,
110,
110,
110,
110,
110,
110,
110,
111,
111,
111,
111,
111,
111,
111,
111,
112,
112,
112,
112,
112,
112,
112,
112,
113,
113,
113,
113,
113,
113,
113,
113,
114,
114,
114,
114,
114,
114,
114,
114,
115,
115,
115,
115,
115,
115,
115,
115,
116,
116,
116,
116,
116,
116,
116,
116,
117,
117,
117,
117,
117,
117,
117,
117,
118,
118,
118,
118,
118,
118,
118,
118,
119,
119,
119,
119,
119,
119,
119,
119,
120,
120,
120,
120,
120,
120,
120,
120,
121,
121,
121,
121,
121,
121,
121,
121,
122,
122,
122,
122,
122,
122,
122,
122,
123,
123,
123,
123,
123,
123,
123,
123,
124,
124,
124,
124,
124,
124,
124,
124,
125,
125,
125,
125,
125,
125,
125,
125,
126,
126,
126,
126,
126,
126,
126,
126,
127,
127,
127,
127,
127,
127,
127,
127,
128,
128,
128,
128,
128,
128,
128,
128,
129,
129,
129,
129,
129,
129,
129,
129,
130,
130,
130,
130,
130,
130,
130,
130,
131,
131,
131,
131,
131,
131,
131,
131,
132,
132,
132,
132,
132,
132,
132,
132,
133,
133,
133,
133,
133,
133,
133,
133,
134,
134,
134,
134,
134,
134,
134,
134,
135,
135,
135,
135,
135,
135,
135,
135,
136,
136,
136,
136,
136,
136,
136,
136,
137,
137,
137,
137,
137,
137,
137,
137,
138,
138,
138,
138,
138,
138,
138,
138,
139,
139,
139,
139,
139,
139,
139,
139,
140,
140,
140,
140,
140,
140,
140,
140,
141,
141,
141,
141,
141,
141,
141,
141,
142,
142,
142,
142,
142,
142,
142,
142,
143,
143,
143,
143,
143,
143,
143,
143,
144,
144,
144,
144,
144,
144,
144,
144,
145,
145,
145,
145,
145,
145,
145,
145,
146,
146,
146,
146,
146,
146,
146,
146,
147,
147,
147,
147,
147,
147,
147,
147,
148,
148,
148,
148,
148,
148,
148,
148,
149,
149,
149,
149,
149,
149,
149,
149,
150,
150,
150,
150,
150,
150,
150,
150,
151,
151,
151,
151,
151,
151,
151,
151,
152,
152,
152,
152,
152,
152,
152,
152,
153,
153,
153,
153,
153,
153,
153,
153,
154,
154,
154,
154,
154,
154,
154,
154,
155,
155,
155,
155,
155,
155,
155,
155,
156,
156,
156,
156,
156,
156,
156,
156,
157,
157,
157,
157,
157,
157,
157,
157,
158,
158,
158,
158,
158,
158,
158,
158,
159,
159,
159,
159,
159,
159,
159,
159,
160,
160,
160,
160,
160,
160,
160,
160,
161,
161,
161,
161,
161,
161,
161,
161,
162,
162,
162,
162,
162,
162,
162,
162,
163,
163,
163,
163,
163,
163,
163,
163,
164,
164,
164,
164,
164,
164,
164,
164,
165,
165,
165,
165,
165,
165,
165,
165,
166,
166,
166,
166,
166,
166,
166,
166,
167,
167,
167,
167,
167,
167,
167,
167,
168,
168,
168,
168,
168,
168,
168,
168,
169,
169,
169,
169,
169,
169,
169,
169,
170,
170,
170,
170,
170,
170,
170,
170,
171,
171,
171,
171,
171,
171,
171,
171,
172,
172,
172,
172,
172,
172,
172,
172,
173,
173,
173,
173,
173,
173,
173,
173,
174,
174,
174,
174,
174,
174,
174,
174,
175,
175,
175,
175,
175,
175,
175,
175,
176,
176,
176,
176,
176,
176,
176,
176,
177,
177,
177,
177,
177,
177,
177,
177,
178,
178,
178,
178,
178,
178,
178,
178,
179,
179,
179,
179,
179,
179,
179,
179,
180,
180,
180,
180,
180,
180,
180,
180,
181,
181,
181,
181,
181,
181,
181,
181,
182,
182,
182,
182,
182,
182,
182,
182,
183,
183,
183,
183,
183,
183,
183,
183,
184,
184,
184,
184,
184,
184,
184,
184,
185,
185,
185,
185,
185,
185,
185,
185,
186,
186,
186,
186,
186,
186,
186,
186,
187,
187,
187,
187,
187,
187,
187,
187,
188,
188,
188,
188,
188,
188,
188,
188,
189,
189,
189,
189,
189,
189,
189,
189,
190,
190,
190,
190,
190,
190,
190,
190,
191,
191,
191,
191,
191,
191,
191,
191,
192,
192,
192,
192,
192,
192,
192,
192,
193,
193,
193,
193,
193,
193,
193,
193,
194,
194,
194,
194,
194,
194,
194,
194,
195,
195,
195,
195,
195,
195,
195,
195,
196,
196,
196,
196,
196,
196,
196,
196,
197,
197,
197,
197,
197,
197,
197,
197,
198,
198,
198,
198,
198,
198,
198,
198,
199,
199,
199,
199,
199,
199,
199,
199,
200,
200,
200,
200,
200,
200,
200,
200,
201,
201,
201,
201,
201,
201,
201,
201,
202,
202,
202,
202,
202,
202,
202,
202,
203,
203,
203,
203,
203,
203,
203,
203,
204,
204,
204,
204,
204,
204,
204,
204,
205,
205,
205,
205,
205,
205,
205,
205,
206,
206,
206,
206,
206,
206,
206,
206,
207,
207,
207,
207,
207,
207,
207,
207,
208,
208,
208,
208,
208,
208,
208,
208,
209,
209,
209,
209,
209,
209,
209,
209,
210,
210,
210,
210,
210,
210,
210,
210,
211,
211,
211,
211,
211,
211,
211,
211,
212,
212,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
213,
214,
214,
214,
214,
214,
214,
214,
214,
215,
215,
215,
215,
215,
215,
215,
215,
216,
216,
216,
216,
216,
216,
216,
216,
217,
217,
217,
217,
217,
217,
217,
217,
218,
218,
218,
218,
218,
218,
218,
218,
219,
219,
219,
219,
219,
219,
219,
219,
220,
220,
220,
220,
220,
220,
220,
220,
221,
221,
221,
221,
221,
221,
221,
221,
222,
222,
222,
222,
222,
222,
222,
222,
223,
223,
223,
223,
223,
223,
223,
223,
224,
224,
224,
224,
224,
224,
224,
224,
225,
225,
225,
225,
225,
225,
225,
225,
226,
226,
226,
226,
226,
226,
226,
226,
227,
227,
227,
227,
227,
227,
227,
227,
228,
228,
228,
228,
228,
228,
228,
228,
229,
229,
229,
229,
229,
229,
229,
229,
230,
230,
230,
230,
230,
230,
230,
230,
231,
231,
231,
231,
231,
231,
231,
231,
232,
232,
232,
232,
232,
232,
232,
232,
233,
233,
233,
233,
233,
233,
233,
233,
234,
234,
234,
234,
234,
234,
234,
234,
235,
235,
235,
235,
235,
235,
235,
235,
236,
236,
236,
236,
236,
236,
236,
236,
237,
237,
237,
237,
237,
237,
237,
237,
238,
238,
238,
238,
238,
238,
238,
238,
239,
239,
239,
239,
239,
239,
239,
239,
240,
240,
240,
240,
240,
240,
240,
240,
241,
241,
241,
241,
241,
241,
241,
241,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
246,
246,
246,
246,
246,
246,
246,
246,
247,
247,
247,
247,
247,
247,
247,
247,
248,
248,
248,
248,
248,
248,
248,
248,
249,
249,
249,
249,
249,
249,
249,
249,
250,
250,
250,
250,
250,
250,
250,
250,
251,
251,
251,
251,
251,
251,
251,
251,
252,
252,
252,
252,
252,
252,
252,
252,
253,
253,
253,
253,
253,
253,
253,
253,
254,
254,
254,
254,
254,
254,
254,
254,
255,
255,
255,
255,
255,
255,
255,
255,
255,
254,
254,
254,
254,
254,
254,
254,
254,
253,
253,
253,
253,
253,
253,
253,
253,
252,
252,
252,
252,
252,
252,
252,
252,
251,
251,
251,
251,
251,
251,
251,
251,
250,
250,
250,
250,
250,
250,
250,
250,
249,
249,
249,
249,
249,
249,
249,
249,
248,
248,
248,
248,
248,
248,
248,
248,
247,
247,
247,
247,
247,
247,
247,
247,
246,
246,
246,
246,
246,
246,
246,
246,
245,
245,
245,
245,
245,
245,
245,
245,
244,
244,
244,
244,
244,
244,
244,
244,
243,
243,
243,
243,
243,
243,
243,
243,
242,
242,
242,
242,
242,
242,
242,
242,
241,
241,
241,
241,
241,
241,
241,
241,
240,
240,
240,
240,
240,
240,
240,
240,
239,
239,
239,
239,
239,
239,
239,
239,
238,
238,
238,
238,
238,
238,
238,
238,
237,
237,
237,
237,
237,
237,
237,
237,
236,
236,
236,
236,
236,
236,
236,
236,
235,
235,
235,
235,
235,
235,
235,
235,
234,
234,
234,
234,
234,
234,
234,
234,
233,
233,
233,
233,
233,
233,
233,
233,
232,
232,
232,
232,
232,
232,
232,
232,
231,
231,
231,
231,
231,
231,
231,
231,
230,
230,
230,
230,
230,
230,
230,
230,
229,
229,
229,
229,
229,
229,
229,
229,
228,
228,
228,
228,
228,
228,
228,
228,
227,
227,
227,
227,
227,
227,
227,
227,
226,
226,
226,
226,
226,
226,
226,
226,
225,
225,
225,
225,
225,
225,
225,
225,
224,
224,
224,
224,
224,
224,
224,
224,
223,
223,
223,
223,
223,
223,
223,
223,
222,
222,
222,
222,
222,
222,
222,
222,
221,
221,
221,
221,
221,
221,
221,
221,
220,
220,
220,
220,
220,
220,
220,
220,
219,
219,
219,
219,
219,
219,
219,
219,
218,
218,
218,
218,
218,
218,
218,
218,
217,
217,
217,
217,
217,
217,
217,
217,
216,
216,
216,
216,
216,
216,
216,
216,
215,
215,
215,
215,
215,
215,
215,
215,
214,
214,
214,
214,
214,
214,
214,
214,
213,
213,
213,
213,
213,
213,
213,
213,
212,
212,
212,
212,
212,
212,
212,
212,
211,
211,
211,
211,
211,
211,
211,
211,
210,
210,
210,
210,
210,
210,
210,
210,
209,
209,
209,
209,
209,
209,
209,
209,
208,
208,
208,
208,
208,
208,
208,
208,
207,
207,
207,
207,
207,
207,
207,
207,
206,
206,
206,
206,
206,
206,
206,
206,
205,
205,
205,
205,
205,
205,
205,
205,
204,
204,
204,
204,
204,
204,
204,
204,
203,
203,
203,
203,
203,
203,
203,
203,
202,
202,
202,
202,
202,
202,
202,
202,
201,
201,
201,
201,
201,
201,
201,
201,
200,
200,
200,
200,
200,
200,
200,
200,
199,
199,
199,
199,
199,
199,
199,
199,
198,
198,
198,
198,
198,
198,
198,
198,
197,
197,
197,
197,
197,
197,
197,
197,
196,
196,
196,
196,
196,
196,
196,
196,
195,
195,
195,
195,
195,
195,
195,
195,
194,
194,
194,
194,
194,
194,
194,
194,
193,
193,
193,
193,
193,
193,
193,
193,
192,
192,
192,
192,
192,
192,
192,
192,
191,
191,
191,
191,
191,
191,
191,
191,
190,
190,
190,
190,
190,
190,
190,
190,
189,
189,
189,
189,
189,
189,
189,
189,
188,
188,
188,
188,
188,
188,
188,
188,
187,
187,
187,
187,
187,
187,
187,
187,
186,
186,
186,
186,
186,
186,
186,
186,
185,
185,
185,
185,
185,
185,
185,
184,
184,
184,
184,
184,
184,
184,
184,
184,
183,
183,
183,
183,
183,
183,
183,
182,
182,
182,
182,
182,
182,
182,
182,
182,
181,
181,
181,
181,
181,
181,
181,
181,
180,
180,
180,
180,
180,
180,
180,
180,
179,
179,
179,
179,
179,
179,
179,
179,
178,
178,
178,
178,
178,
178,
178,
178,
177,
177,
177,
177,
177,
177,
177,
177,
176,
176,
176,
176,
176,
176,
176,
176,
175,
175,
175,
175,
175,
175,
175,
175,
174,
174,
174,
174,
174,
174,
174,
173,
173,
173,
173,
173,
173,
173,
173,
173,
172,
172,
172,
172,
172,
172,
172,
171,
171,
171,
171,
171,
171,
171,
171,
171,
170,
170,
170,
170,
170,
170,
170,
170,
169,
169,
169,
169,
169,
169,
169,
169,
168,
168,
168,
168,
168,
168,
168,
168,
167,
167,
167,
167,
167,
167,
167,
167,
166,
166,
166,
166,
166,
166,
166,
166,
165,
165,
165,
165,
165,
165,
165,
165,
164,
164,
164,
164,
164,
164,
164,
164,
163,
163,
163,
163,
163,
163,
163,
162,
162,
162,
162,
162,
162,
162,
162,
162,
161,
161,
161,
161,
161,
161,
161,
160,
160,
160,
160,
160,
160,
160,
160,
160,
159,
159,
159,
159,
159,
159,
159,
159,
158,
158,
158,
158,
158,
158,
158,
158,
157,
157,
157,
157,
157,
157,
157,
157,
156,
156,
156,
156,
156,
156,
156,
156,
155,
155,
155,
155,
155,
155,
155,
155,
154,
154,
154,
154,
154,
154,
154,
153,
153,
153,
153,
153,
153,
153,
153,
153,
152,
152,
152,
152,
152,
152,
152,
151,
151,
151,
151,
151,
151,
151,
151,
151,
150,
150,
150,
150,
150,
150,
150,
149,
149,
149,
149,
149,
149,
149,
149,
149,
148,
148,
148,
148,
148,
148,
148,
148,
147,
147,
147,
147,
147,
147,
147,
147,
146,
146,
146,
146,
146,
146,
146,
146,
145,
145,
145,
145,
145,
145,
145,
145,
144,
144,
144,
144,
144,
144,
144,
144,
143,
143,
143,
143,
143,
143,
143,
142,
142,
142,
142,
142,
142,
142,
142,
142,
141,
141,
141,
141,
141,
141,
141,
140,
140,
140,
140,
140,
140,
140,
140,
140,
139,
139,
139,
139,
139,
139,
139,
138,
138,
138,
138,
138,
138,
138,
138,
138,
137,
137,
137,
137,
137,
137,
137,
137,
136,
136,
136,
136,
136,
136,
136,
136,
135,
135,
135,
135,
135,
135,
135,
135,
134,
134,
134,
134,
134,
134,
134,
134,
133,
133,
133,
133,
133,
133,
133,
133,
132,
132,
132,
132,
132,
132,
132,
131,
131,
131,
131,
131,
131,
131,
131,
131,
130,
130,
130,
130,
130,
130,
130,
129,
129,
129,
129,
129,
129,
129,
129,
129,
128,
128,
128,
128,
128,
128,
128,
127,
127,
127,
127,
127,
127,
127,
127,
127,
126,
126,
126,
126,
126,
126,
126,
126,
125,
125,
125,
125,
125,
125,
125,
125,
124,
124,
124,
124,
124,
124,
124,
124,
123,
123,
123,
123,
123,
123,
123,
123,
122,
122,
122,
122,
122,
122,
122,
122,
121,
121,
121,
121,
121,
121,
121,
120,
120,
120,
120,
120,
120,
120,
120,
120,
119,
119,
119,
119,
119,
119,
119,
118,
118,
118,
118,
118,
118,
118,
118,
118,
117,
117,
117,
117,
117,
117,
117,
117,
116,
116,
116,
116,
116,
116,
116,
116,
115,
115,
115,
115,
115,
115,
115,
115,
114,
114,
114,
114,
114,
114,
114,
114,
113,
113,
113,
113,
113,
113,
113,
113,
112,
112,
112,
112,
112,
112,
112,
112,
111,
111,
111,
111,
111,
111,
111,
111,
110,
110,
110,
110,
110,
110,
110,
109,
109,
109,
109,
109,
109,
109,
109,
109,
108,
108,
108,
108,
108,
108,
108,
107,
107,
107,
107,
107,
107,
107,
107,
107,
106,
106,
106,
106,
106,
106,
106,
106,
105,
105,
105,
105,
105,
105,
105,
105,
104,
104,
104,
104,
104,
104,
104,
104,
103,
103,
103,
103,
103,
103,
103,
103,
102,
102,
102,
102,
102,
102,
102,
102,
101,
101,
101,
101,
101,
101,
101,
101,
100,
100,
100,
100,
100,
100,
100,
100,
99,
99,
99,
99,
99,
99,
99,
98,
98,
98,
98,
98,
98,
98,
98,
98,
97,
97,
97,
97,
97,
97,
97,
96,
96,
96,
96,
96,
96,
96,
96,
96,
95,
95,
95,
95,
95,
95,
95,
95,
94,
94,
94,
94,
94,
94,
94,
94,
93,
93,
93,
93,
93,
93,
93,
93,
92,
92,
92,
92,
92,
92,
92,
92,
91,
91,
91,
91,
91,
91,
91,
91,
90,
90,
90,
90,
90,
90,
90,
89,
89,
89,
89,
89,
89,
89,
89,
89,
88,
88,
88,
88,
88,
88,
88,
87,
87,
87,
87,
87,
87,
87,
87,
87,
86,
86,
86,
86,
86,
86,
86,
85,
85,
85,
85,
85,
85,
85,
85,
85,
84,
84,
84,
84,
84,
84,
84,
84,
83,
83,
83,
83,
83,
83,
83,
83,
82,
82,
82,
82,
82,
82,
82,
82,
81,
81,
81,
81,
81,
81,
81,
81,
80,
80,
80,
80,
80,
80,
80,
80,
79,
79,
79,
79,
79,
79,
79,
78,
78,
78,
78,
78,
78,
78,
78,
78,
77,
77,
77,
77,
77,
77,
77,
76,
76,
76,
76,
76,
76,
76,
76,
76,
75,
75,
75,
75,
75,
75,
75,
74,
74,
74,
74,
74,
74,
74,
74,
74,
73,
73,
73,
73,
73,
73,
73,
73,
72,
72,
72,
72,
72,
72,
72,
72,
71,
71,
71,
71,
71,
71,
71,
71,
70,
70,
70,
70,
70,
70,
70,
70,
69,
69,
69,
69,
69,
69,
69,
69,
68,
68,
68,
68,
68,
68,
68,
67,
67,
67,
67,
67,
67,
67,
67,
67,
66,
66,
66,
66,
66,
66,
66,
65,
65,
65,
65,
65,
65,
65,
65,
65,
64,
64,
64,
64,
64,
64,
64,
63,
63,
63,
63,
63,
63,
63,
63,
63,
62,
62,
62,
62,
62,
62,
62,
62,
61,
61,
61,
61,
61,
61,
61,
61,
60,
60,
60,
60,
60,
60,
60,
60,
59,
59,
59,
59,
59,
59,
59,
59,
58,
58,
58,
58,
58,
58,
58,
58,
57,
57,
57,
57,
57,
57,
57,
56,
56,
56,
56,
56,
56,
56,
56,
56,
55,
55,
55,
55,
55,
55,
55,
54,
54,
54,
54,
54,
54,
54,
54,
54,
53,
53,
53,
53,
53,
53,
53,
52,
52,
52,
52,
52,
52,
52,
52,
52,
51,
51,
51,
51,
51,
51,
51,
51,
50,
50,
50,
50,
50,
50,
50,
50,
49,
49,
49,
49,
49,
49,
49,
49,
48,
48,
48,
48,
48,
48,
48,
48,
47,
47,
47,
47,
47,
47,
47,
47,
46,
46,
46,
46,
46,
46,
46,
45,
45,
45,
45,
45,
45,
45,
45,
45,
44,
44,
44,
44,
44,
44,
44,
43,
43,
43,
43,
43,
43,
43,
43,
43,
42,
42,
42,
42,
42,
42,
42,
42,
41,
41,
41,
41,
41,
41,
41,
41,
40,
40,
40,
40,
40,
40,
40,
40,
39,
39,
39,
39,
39,
39,
39,
39,
38,
38,
38,
38,
38,
38,
38,
38,
37,
37,
37,
37,
37,
37,
37,
37,
36,
36,
36,
36,
36,
36,
36,
36,
35,
35,
35,
35,
35,
35,
35,
34,
34,
34,
34,
34,
34,
34,
34,
34,
33,
33,
33,
33,
33,
33,
33,
32,
32,
32,
32,
32,
32,
32,
32,
32,
31,
31,
31,
31,
31,
31,
31,
31,
30,
30,
30,
30,
30,
30,
30,
30,
29,
29,
29,
29,
29,
29,
29,
29,
28,
28,
28,
28,
28,
28,
28,
28,
27,
27,
27,
27,
27,
27,
27,
27,
26,
26,
26,
26,
26,
26,
26,
25,
25,
25,
25,
25,
25,
25,
25,
25,
24,
24,
24,
24,
24,
24,
24,
23,
23,
23,
23,
23,
23,
23,
23,
23,
22,
22,
22,
22,
22,
22,
22,
21,
21,
21,
21,
21,
21,
21,
21,
21,
20,
20,
20,
20,
20,
20,
20,
20,
19,
19,
19,
19,
19,
19,
19,
19,
18,
18,
18,
18,
18,
18,
18,
18,
17,
17,
17,
17,
17,
17,
17,
17,
16,
16,
16,
16,
16,
16,
16,
16,
15,
15,
15,
15,
15,
15,
15,
14,
14,
14,
14,
14,
14,
14,
14,
14,
13,
13,
13,
13,
13,
13,
13,
12,
12,
12,
12,
12,
12,
12,
12,
12,
11,
11,
11,
11,
11,
11,
11,
10,
10,
10,
10,
10,
10,
10,
10,
10,
9,
9,
9,
9,
9,
9,
9,
9,
8,
8,
8,
8,
8,
8,
8,
8,
7,
7,
7,
7,
7,
7,
7,
7,
6,
6,
6,
6,
6,
6,
6,
6,
5,
5,
5,
5,
5,
5,
5,
5,
4,
4,
4,
4,
4,
4,
4,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
255,
255,
255,
255,
255,
255,
255,
255;
2.1 正弦波生成
调用ROMIP核,将波形数据表作为初始化文件写入ROM当中,文件格式可以是mif文件也可以是hex文件,使用matlab绘制4种波形,然后对这四种波形进行等间隔采样,以采样次数作为ROM的存储地址,采集的波形幅值数据作为存储数据写入到存储地址对应的存储空间。才阳光次数2^12=4096次,M=12,波形幅值数据是8位宽。
2.2 方波
2.3 三角波
2.4 锯齿波
2.2 dds_ctrl
定义输出信号满足500HZ,由公式计算出K,系统时钟为50mhz
取整数,为42949。
定义初相位是2分之Π。
所以P等于1024
2.2.1 dds_ctrl.v
module dds_ctrl
(
input wire sys_clk ,
input wire sys_rst_n ,
input wire [3:0] wave_sel ,
output wire [7:0] dac_data
);
parameter F_WORD=32'd42949,
P_WORD=12'd1024 ;
reg[31:0] freq_add;
reg [11:0] rom_addr_reg;
reg [13:0] rom_addr;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)
freq_add<=32'd0;
else
freq_add<=freq_add+F_WORD;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)
rom_addr_reg<=12'd0;
else
rom_addr_reg<=freq_add[31:20]+P_WORD;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)
rom_addr<=14'd0;
else
case(wave_sel)
4'b0001:rom_addr<=rom_addr_reg;
4'b0010:rom_addr<=rom_addr_reg+14'd4096;
4'b0100:rom_addr<=rom_addr_reg+14'd8192;
4'b1000:rom_addr<=rom_addr_reg+14'd12288;
default:rom_addr<=rom_addr_reg;
endcase
wave_rom wave_rom_inst
(
.clka(sys_clk), // input wire clka
.addra(rom_addr), // input wire [13 : 0] addra
.douta(dac_data) // output wire [7 : 0] douta
);
endmodule
2.2.2 tb_dds_ctrl.v
`timescale 1ns/1ns
module tb_dds_ctrl();
reg sys_clk;
reg sys_rst_n;
reg [3:0]wave_sel;
wire [7:0]dac_data;
initial
begin
sys_clk=1'b1;
sys_rst_n<=1'b0;
wave_sel<=4'b0000;
#200
sys_rst_n<=1'b1;
#10000
wave_sel<=4'b0001;
#8_000_000
wave_sel<=4'b0010;
#8_000_000
wave_sel<=4'b0100;
#8_000_000
wave_sel<=4'b1000;
#8_000_000
wave_sel<=4'b0000;
end
always #10 sys_clk=~sys_clk;
dds_ctrl dds_ctrl_inst(
.sys_clk (sys_clk ) ,
.sys_rst_n (sys_rst_n) ,
.wave_sel (wave_sel) ,
.dac_data (dac_data)
);
endmodule
2.3 dds.v
module dds(
input wire sys_clk ,
input wire sys_rst_n ,
input wire [3:0] key ,
output wire dac_clk ,
output wire[7:0] dac_data
);
wire[3:0] wave_sel;
//时钟取反相当于,把时钟的上升沿往后延迟半个时钟周期,起到采集稳定数据的作用
assign dac_clk=~sys_clk;
//为什么要取反呢,因为dds_ctrl内部初始化了一个rom表,
//rom表的读时钟是系统时钟,在系统时钟上升沿就会输出读出的幅值数据,
//幅值数据和系统时钟是保持同步的,
key_ctrl key_ctrl_inst(
.sys_clk (sys_clk ) ,
.sys_rst_n (sys_rst_n),
.key (key ) ,
.wave_sel (wave_sel )
);
dds_ctrl dds_ctrl_inst
(
.sys_clk (sys_clk ) ,
.sys_rst_n (sys_rst_n ) ,
.wave_sel (wave_sel ) ,
.dac_data (dac_data )
);
endmodule
时钟取反的作用是为了在数据稳定的时候采集。