videoplayer: allow diplaying time indefinitely long
[nihav-player.git] / videoplayer / src / osd.rs
CommitLineData
8686f9f6
KS
1use std::time::Instant;
2
2425989e
KS
3const XOFF: usize = 10;
4const YOFF: usize = 4;
5
8686f9f6
KS
6#[derive(Default)]
7pub struct OSD {
8 time: Option<Instant>,
9 text: Vec<u8>,
10 text_stride: usize,
2425989e 11 duration: u64,
5a268da1 12 perm: bool,
8686f9f6
KS
13}
14
15impl OSD {
16 pub fn new() -> Self { Self::default() }
2425989e
KS
17 pub fn reset(&mut self) {
18 self.text.clear();
19 self.duration = 0;
20 self.time = None;
21 }
22 pub fn set_duration(&mut self, duration: u64) { self.duration = duration; }
8686f9f6 23 pub fn toggle(&mut self) {
5a268da1
KS
24 if self.perm {
25 self.perm = false;
26 self.time = None;
27 return;
28 }
8686f9f6
KS
29 if self.time.is_none() {
30 self.time = Some(Instant::now());
31 } else {
32 self.time = None;
33 }
34 }
5a268da1
KS
35 pub fn toggle_perm(&mut self) {
36 if !self.perm {
37 self.perm = true;
38 } else {
39 self.perm = false;
40 self.time = None;
41 }
42 }
8686f9f6
KS
43 pub fn update(&mut self) {
44 if let Some(time) = self.time {
45 if time.elapsed().as_millis() > 3000 {
46 self.time = None;
47 }
48 }
49 }
5a268da1 50 pub fn is_active(&self) -> bool { self.time.is_some() || self.perm }
8686f9f6
KS
51 pub fn prepare(&mut self, ts: u64) {
52 self.update();
53 if !self.is_active() {
54 return;
55 }
2425989e
KS
56 let mut time_str = format_time(ts);
57 if self.duration != 0 {
58 time_str += "/";
59 time_str += format_time(self.duration).as_str();
60 }
8686f9f6
KS
61 let mut w = 0;
62 let mut syms = Vec::with_capacity(time_str.len());
63 for chr in time_str.chars() {
64 let sym_idx = OSD_GLYPHS.iter().position(|el| el.sym == chr).unwrap_or(0);
65 w += OSD_GLYPHS[sym_idx].width;
66 syms.push(sym_idx);
67 }
68 self.text_stride = w;
69 if w > 0 {
70 self.text.resize(self.text_stride * 16, 0);
71 let mut pos = 0;
72 for &sym_idx in syms.iter() {
73 let glyph = &OSD_GLYPHS[sym_idx];
74 let mut mask = 1 << (glyph.width - 1);
75 while mask > 0 {
76 for (dline, (bits, mbits)) in self.text.chunks_exact_mut(w).zip(glyph.bits.iter().zip(glyph.mask.iter())) {
77 let wval = (bits & mask) != 0;
78 let bval = (mbits & mask) != 0;
79 dline[pos] = if wval { 2 } else if bval { 1 } else { 0 };
80 }
81 mask >>= 1;
82 pos += 1;
83 }
84 }
85 } else {
86 self.text.clear();
87 }
88 }
89 pub fn draw_yuv(&self, buffer: &mut [u8], pitch: usize) {
90 if !self.is_active() || self.text_stride == 0 {
91 return;
92 }
2425989e
KS
93 for (dline, sline) in buffer.chunks_exact_mut(pitch).skip(YOFF).zip(self.text.chunks_exact(self.text_stride)) {
94 for (dst, &src) in dline.iter_mut().skip(XOFF).zip(sline.iter()) {
8686f9f6
KS
95 match src {
96 2 => *dst = 0xFF,
97 1 => *dst = 0x00,
98 _ => {},
99 };
100 }
101 }
102 }
103 pub fn draw_rgb(&self, buffer: &mut [u8], pitch: usize) {
104 if !self.is_active() || self.text_stride == 0 {
105 return;
106 }
2425989e
KS
107 for (dline, sline) in buffer.chunks_exact_mut(pitch).skip(YOFF).zip(self.text.chunks_exact(self.text_stride)) {
108 for (dst, &src) in dline.chunks_exact_mut(3).skip(XOFF).zip(sline.iter()) {
8686f9f6
KS
109 match src {
110 2 => dst.copy_from_slice(&[0xFF, 0xFF, 0xFF]),
111 1 => dst.copy_from_slice(&[0x00, 0x00, 0x00]),
112 _ => {},
113 };
114 }
115 }
116 }
117}
118
119fn format_time(ms: u64) -> String {
120 let s = ms / 1000;
121 let (min, s) = (s / 60, s % 60);
122 let (h, min) = (min / 60, min % 60);
123 if h == 0 {
124 if min == 0 {
2425989e 125 format!("0:{:02}", s)
8686f9f6
KS
126 } else {
127 format!("{}:{:02}", min, s)
128 }
129 } else {
130 format!("{}:{:02}:{:02}", h, min, s)
131 }
132}
133
134struct Glyph {
135 width: usize,
136 sym: char,
137 bits: [u16; 16],
138 mask: [u16; 16],
139}
140
141const OSD_GLYPHS: &[Glyph] = &[
142 Glyph {
2425989e 143 width: 14,
8686f9f6
KS
144 sym: '?',
145 bits: [
146 0b_0000000000000000,
2425989e
KS
147 0b_0000011111110000,
148 0b_0000110000111000,
149 0b_0000000000011000,
150 0b_0000000000011000,
8686f9f6
KS
151 0b_0000000000110000,
152 0b_0000000001100000,
153 0b_0000000011000000,
2425989e
KS
154 0b_0000000011000000,
155 0b_0000000011000000,
8686f9f6
KS
156 0b_0000000000000000,
157 0b_0000000000000000,
158 0b_0000000000000000,
2425989e
KS
159 0b_0000000111100000,
160 0b_0000000111100000,
8686f9f6
KS
161 0b_0000000000000000
162 ],
163 mask: [
2425989e
KS
164 0b_0000011111110000,
165 0b_0000111111111000,
166 0b_0001111111111100,
167 0b_0000110000111100,
168 0b_0000000000111100,
8686f9f6
KS
169 0b_0000000001111000,
170 0b_0000000011110000,
171 0b_0000000111100000,
2425989e
KS
172 0b_0000000111100000,
173 0b_0000000111100000,
174 0b_0000000011000000,
175 0b_0000000000000000,
176 0b_0000000111100000,
177 0b_0000001111110000,
178 0b_0000001111110000,
179 0b_0000000111100000
8686f9f6
KS
180 ],
181 },
182 Glyph {
2425989e 183 width: 12,
8686f9f6
KS
184 sym: '0',
185 bits: [
186 0b_0000000000000000,
187 0b_0000000000000000,
188 0b_0000000000000000,
2425989e
KS
189 0b_0000000011110000,
190 0b_0000000100001000,
191 0b_0000001000001100,
192 0b_0000001000010100,
193 0b_0000001000100100,
194 0b_0000001001000100,
195 0b_0000001010000100,
196 0b_0000001100000100,
197 0b_0000000100001000,
198 0b_0000000011110000,
8686f9f6
KS
199 0b_0000000000000000,
200 0b_0000000000000000,
201 0b_0000000000000000
202 ],
203 mask: [
204 0b_0000000000000000,
205 0b_0000000000000000,
2425989e
KS
206 0b_0000000111111000,
207 0b_0000001100001100,
208 0b_0000011011110110,
209 0b_0000010100010010,
210 0b_0000010100101010,
211 0b_0000010101011010,
212 0b_0000010110101010,
213 0b_0000010101001010,
214 0b_0000010010011010,
215 0b_0000011011110110,
216 0b_0000001100001100,
217 0b_0000000111111000,
8686f9f6
KS
218 0b_0000000000000000,
219 0b_0000000000000000
220 ],
221 },
222 Glyph {
2425989e 223 width: 10,
8686f9f6
KS
224 sym: '1',
225 bits: [
226 0b_0000000000000000,
227 0b_0000000000000000,
228 0b_0000000000000000,
2425989e
KS
229 0b_0000000000110000,
230 0b_0000000001110000,
231 0b_0000000011010000,
232 0b_0000000000010000,
233 0b_0000000000010000,
234 0b_0000000000010000,
235 0b_0000000000010000,
236 0b_0000000000010000,
237 0b_0000000000010000,
238 0b_0000000001111100,
8686f9f6
KS
239 0b_0000000000000000,
240 0b_0000000000000000,
241 0b_0000000000000000
242 ],
243 mask: [
244 0b_0000000000000000,
245 0b_0000000000000000,
2425989e
KS
246 0b_0000000000111000,
247 0b_0000000001001000,
248 0b_0000000010001000,
249 0b_0000000100101000,
250 0b_0000000111101000,
251 0b_0000000000101000,
252 0b_0000000000101000,
253 0b_0000000000101000,
254 0b_0000000000101000,
255 0b_0000000011101110,
256 0b_0000000010000010,
257 0b_0000000011111110,
8686f9f6
KS
258 0b_0000000000000000,
259 0b_0000000000000000
260 ],
261 },
262 Glyph {
2425989e 263 width: 10,
8686f9f6
KS
264 sym: '2',
265 bits: [
266 0b_0000000000000000,
267 0b_0000000000000000,
2425989e
KS
268 0b_0000000001110000,
269 0b_0000000010001000,
270 0b_0000000000000100,
271 0b_0000000000000100,
272 0b_0000000000000100,
8686f9f6
KS
273 0b_0000000000001000,
274 0b_0000000000010000,
275 0b_0000000000100000,
276 0b_0000000001000000,
277 0b_0000000010000000,
2425989e 278 0b_0000000011111100,
8686f9f6
KS
279 0b_0000000000000000,
280 0b_0000000000000000,
281 0b_0000000000000000
282 ],
283 mask: [
284 0b_0000000000000000,
2425989e
KS
285 0b_0000000001110000,
286 0b_0000000010001000,
287 0b_0000000101110100,
288 0b_0000000110001010,
289 0b_0000000000001010,
290 0b_0000000000001010,
8686f9f6
KS
291 0b_0000000000010100,
292 0b_0000000000101000,
293 0b_0000000001010000,
294 0b_0000000010100000,
2425989e
KS
295 0b_0000000101111110,
296 0b_0000000100000010,
297 0b_0000000111111110,
8686f9f6
KS
298 0b_0000000000000000,
299 0b_0000000000000000
300 ],
301 },
302 Glyph {
2425989e 303 width: 10,
8686f9f6
KS
304 sym: '3',
305 bits: [
306 0b_0000000000000000,
307 0b_0000000000000000,
308 0b_0000000000000000,
2425989e
KS
309 0b_0000000011111100,
310 0b_0000000010000100,
311 0b_0000000000001000,
8686f9f6
KS
312 0b_0000000000010000,
313 0b_0000000000100000,
8686f9f6
KS
314 0b_0000000000010000,
315 0b_0000000000001000,
2425989e
KS
316 0b_0000000000000100,
317 0b_0000000010000100,
318 0b_0000000001111000,
8686f9f6
KS
319 0b_0000000000000000,
320 0b_0000000000000000,
321 0b_0000000000000000
322 ],
323 mask: [
324 0b_0000000000000000,
325 0b_0000000000000000,
2425989e
KS
326 0b_0000000111111110,
327 0b_0000000100000010,
328 0b_0000000101111010,
329 0b_0000000111010100,
330 0b_0000000000101000,
8686f9f6
KS
331 0b_0000000001010000,
332 0b_0000000000101000,
2425989e
KS
333 0b_0000000000010100,
334 0b_0000000110001010,
335 0b_0000000101111010,
336 0b_0000000010000100,
337 0b_0000000001111000,
8686f9f6
KS
338 0b_0000000000000000,
339 0b_0000000000000000
340 ],
341 },
342 Glyph {
2425989e 343 width: 10,
8686f9f6
KS
344 sym: '4',
345 bits: [
346 0b_0000000000000000,
347 0b_0000000000000000,
348 0b_0000000000000000,
2425989e
KS
349 0b_0000000000001100,
350 0b_0000000000010100,
351 0b_0000000000100100,
352 0b_0000000001000100,
353 0b_0000000010000100,
354 0b_0000000011111100,
355 0b_0000000000000100,
356 0b_0000000000000100,
357 0b_0000000000000100,
358 0b_0000000000000100,
8686f9f6
KS
359 0b_0000000000000000,
360 0b_0000000000000000,
361 0b_0000000000000000
362 ],
363 mask: [
364 0b_0000000000000000,
365 0b_0000000000000000,
2425989e
KS
366 0b_0000000000001110,
367 0b_0000000000010010,
368 0b_0000000000101010,
369 0b_0000000001011010,
370 0b_0000000010101010,
371 0b_0000000101111010,
372 0b_0000000100000010,
373 0b_0000000111111010,
374 0b_0000000000001010,
375 0b_0000000000001010,
376 0b_0000000000001010,
377 0b_0000000000001110,
8686f9f6
KS
378 0b_0000000000000000,
379 0b_0000000000000000
380 ],
381 },
382 Glyph {
2425989e 383 width: 10,
8686f9f6
KS
384 sym: '5',
385 bits: [
386 0b_0000000000000000,
387 0b_0000000000000000,
388 0b_0000000000000000,
2425989e
KS
389 0b_0000000011111100,
390 0b_0000000010000100,
8686f9f6
KS
391 0b_0000000010000000,
392 0b_0000000001000000,
2425989e
KS
393 0b_0000000000100000,
394 0b_0000000000011000,
395 0b_0000000000000100,
396 0b_0000000000000100,
397 0b_0000000010000100,
398 0b_0000000001111000,
8686f9f6
KS
399 0b_0000000000000000,
400 0b_0000000000000000,
401 0b_0000000000000000
402 ],
403 mask: [
404 0b_0000000000000000,
405 0b_0000000000000000,
2425989e
KS
406 0b_0000000111111110,
407 0b_0000000100000010,
408 0b_0000000101111010,
409 0b_0000000101001110,
410 0b_0000000010100000,
411 0b_0000000001011000,
412 0b_0000000000100100,
413 0b_0000000000011010,
414 0b_0000000110001010,
415 0b_0000000101111010,
416 0b_0000000010000100,
417 0b_0000000001111000,
8686f9f6
KS
418 0b_0000000000000000,
419 0b_0000000000000000
420 ],
421 },
422 Glyph {
2425989e 423 width: 10,
8686f9f6
KS
424 sym: '6',
425 bits: [
426 0b_0000000000000000,
427 0b_0000000000000000,
428 0b_0000000000000000,
2425989e
KS
429 0b_0000000001111000,
430 0b_0000000010000100,
431 0b_0000000010000000,
432 0b_0000000010000000,
433 0b_0000000010000000,
434 0b_0000000011111000,
435 0b_0000000010000100,
436 0b_0000000010000100,
437 0b_0000000010000100,
438 0b_0000000001111000,
8686f9f6
KS
439 0b_0000000000000000,
440 0b_0000000000000000,
441 0b_0000000000000000
442 ],
443 mask: [
444 0b_0000000000000000,
445 0b_0000000000000000,
2425989e
KS
446 0b_0000000001111000,
447 0b_0000000010000100,
448 0b_0000000101111010,
449 0b_0000000101001110,
450 0b_0000000101000000,
451 0b_0000000101111000,
452 0b_0000000100000100,
453 0b_0000000101111010,
454 0b_0000000101001010,
455 0b_0000000101111010,
456 0b_0000000010000100,
457 0b_0000000001111000,
8686f9f6
KS
458 0b_0000000000000000,
459 0b_0000000000000000
460 ],
461 },
462 Glyph {
2425989e 463 width: 10,
8686f9f6
KS
464 sym: '7',
465 bits: [
466 0b_0000000000000000,
467 0b_0000000000000000,
468 0b_0000000000000000,
2425989e
KS
469 0b_0000000111111100,
470 0b_0000000100000100,
471 0b_0000000000000100,
472 0b_0000000000001000,
473 0b_0000000000001000,
8686f9f6
KS
474 0b_0000000000001000,
475 0b_0000000000010000,
476 0b_0000000000010000,
2425989e 477 0b_0000000000110000,
8686f9f6 478 0b_0000000000100000,
8686f9f6
KS
479 0b_0000000000000000,
480 0b_0000000000000000,
481 0b_0000000000000000
482 ],
483 mask: [
484 0b_0000000000000000,
485 0b_0000000000000000,
2425989e
KS
486 0b_0000001111111110,
487 0b_0000001000000010,
488 0b_0000001011111010,
489 0b_0000001110001010,
490 0b_0000000000010100,
491 0b_0000000000010100,
492 0b_0000000000010100,
8686f9f6
KS
493 0b_0000000000101000,
494 0b_0000000000101000,
2425989e 495 0b_0000000001001000,
8686f9f6 496 0b_0000000001010000,
2425989e 497 0b_0000000001110000,
8686f9f6
KS
498 0b_0000000000000000,
499 0b_0000000000000000
500 ],
501 },
502 Glyph {
2425989e 503 width: 10,
8686f9f6
KS
504 sym: '8',
505 bits: [
506 0b_0000000000000000,
507 0b_0000000000000000,
508 0b_0000000000000000,
2425989e
KS
509 0b_0000000001111000,
510 0b_0000000010000100,
511 0b_0000000010000100,
512 0b_0000000010000100,
513 0b_0000000001111000,
514 0b_0000000001001000,
515 0b_0000000010000100,
516 0b_0000000010000100,
517 0b_0000000010000100,
518 0b_0000000001111000,
8686f9f6
KS
519 0b_0000000000000000,
520 0b_0000000000000000,
521 0b_0000000000000000
522 ],
523 mask: [
524 0b_0000000000000000,
525 0b_0000000000000000,
2425989e
KS
526 0b_0000000001111000,
527 0b_0000000010000100,
528 0b_0000000101111010,
529 0b_0000000101001010,
530 0b_0000000101111010,
531 0b_0000000010000100,
532 0b_0000000010110100,
533 0b_0000000101001010,
534 0b_0000000101001010,
535 0b_0000000101111010,
536 0b_0000000010000100,
537 0b_0000000001111000,
8686f9f6
KS
538 0b_0000000000000000,
539 0b_0000000000000000
540 ],
541 },
542 Glyph {
2425989e 543 width: 10,
8686f9f6
KS
544 sym: '9',
545 bits: [
546 0b_0000000000000000,
547 0b_0000000000000000,
548 0b_0000000000000000,
2425989e
KS
549 0b_0000000001111000,
550 0b_0000000010000100,
551 0b_0000000010000100,
552 0b_0000000010000100,
553 0b_0000000001111100,
554 0b_0000000000000100,
555 0b_0000000000000100,
556 0b_0000000000000100,
557 0b_0000000010000100,
558 0b_0000000001111000,
8686f9f6
KS
559 0b_0000000000000000,
560 0b_0000000000000000,
561 0b_0000000000000000
562 ],
563 mask: [
564 0b_0000000000000000,
565 0b_0000000000000000,
2425989e
KS
566 0b_0000000001111000,
567 0b_0000000010000100,
568 0b_0000000101111010,
569 0b_0000000101001010,
570 0b_0000000101111010,
571 0b_0000000010000010,
572 0b_0000000001111010,
573 0b_0000000000001010,
574 0b_0000000111001010,
575 0b_0000000101111010,
576 0b_0000000010000100,
577 0b_0000000001111000,
8686f9f6
KS
578 0b_0000000000000000,
579 0b_0000000000000000
580 ],
581 },
582 Glyph {
2425989e 583 width: 7,
8686f9f6
KS
584 sym: ':',
585 bits: [
586 0b_0000000000000000,
587 0b_0000000000000000,
588 0b_0000000000000000,
589 0b_0000000000000000,
590 0b_0000000000000000,
2425989e
KS
591 0b_0000000000011100,
592 0b_0000000000011100,
8686f9f6
KS
593 0b_0000000000000000,
594 0b_0000000000000000,
595 0b_0000000000000000,
596 0b_0000000000000000,
2425989e
KS
597 0b_0000000000011100,
598 0b_0000000000011100,
8686f9f6
KS
599 0b_0000000000000000,
600 0b_0000000000000000,
601 0b_0000000000000000
602 ],
603 mask: [
604 0b_0000000000000000,
605 0b_0000000000000000,
606 0b_0000000000000000,
607 0b_0000000000000000,
2425989e
KS
608 0b_0000000000011100,
609 0b_0000000000111110,
610 0b_0000000000111110,
611 0b_0000000000011100,
8686f9f6
KS
612 0b_0000000000000000,
613 0b_0000000000000000,
2425989e
KS
614 0b_0000000000011100,
615 0b_0000000000111110,
616 0b_0000000000111110,
617 0b_0000000000011100,
618 0b_0000000000000000,
619 0b_0000000000000000
620 ],
621 },
622 Glyph {
623 width: 9,
624 sym: '/',
625 bits: [
626 0b_0000000000000000,
627 0b_0000000000000000,
628 0b_0000000000000000,
629 0b_0000000000000100,
630 0b_0000000000000100,
631 0b_0000000000001000,
632 0b_0000000000001000,
633 0b_0000000000010000,
634 0b_0000000000010000,
635 0b_0000000000100000,
636 0b_0000000000100000,
637 0b_0000000001000000,
638 0b_0000000001000000,
639 0b_0000000000000000,
640 0b_0000000000000000,
641 0b_0000000000000000
642 ],
643 mask: [
644 0b_0000000000000000,
645 0b_0000000000000000,
646 0b_0000000000001110,
647 0b_0000000000001010,
648 0b_0000000000001010,
649 0b_0000000000010100,
650 0b_0000000000010100,
651 0b_0000000000101000,
652 0b_0000000000101000,
653 0b_0000000001010000,
654 0b_0000000001010000,
655 0b_0000000010100000,
656 0b_0000000010100000,
657 0b_0000000011100000,
8686f9f6
KS
658 0b_0000000000000000,
659 0b_0000000000000000
660 ],
661 },
87eacb3a
KS
662 Glyph {
663 width: 7,
664 sym: '.',
665 bits: [
666 0b_0000000000000000,
667 0b_0000000000000000,
668 0b_0000000000000000,
669 0b_0000000000000000,
670 0b_0000000000000000,
671 0b_0000000000000000,
672 0b_0000000000000000,
673 0b_0000000000000000,
674 0b_0000000000000000,
675 0b_0000000000000000,
676 0b_0000000000000000,
677 0b_0000000000011100,
678 0b_0000000000011100,
679 0b_0000000000000000,
680 0b_0000000000000000,
681 0b_0000000000000000
682 ],
683 mask: [
684 0b_0000000000000000,
685 0b_0000000000000000,
686 0b_0000000000000000,
687 0b_0000000000000000,
688 0b_0000000000000000,
689 0b_0000000000000000,
690 0b_0000000000000000,
691 0b_0000000000000000,
692 0b_0000000000000000,
693 0b_0000000000000000,
694 0b_0000000000011100,
695 0b_0000000000111110,
696 0b_0000000000111110,
697 0b_0000000000011100,
698 0b_0000000000000000,
699 0b_0000000000000000
700 ],
701 },
702 Glyph {
703 width: 12,
704 sym: 'x',
705 bits: [
706 0b_0000000000000000,
707 0b_0000000000000000,
708 0b_0000000000000000,
709 0b_0000000000000000,
710 0b_0000000000000000,
711 0b_0000000000000000,
712 0b_0000000000000000,
713 0b_0000001110011100,
714 0b_0000000111111000,
715 0b_0000000011110000,
716 0b_0000000011110000,
717 0b_0000000111111000,
718 0b_0000001110011100,
719 0b_0000000000000000,
720 0b_0000000000000000,
721 0b_0000000000000000
722 ],
723 mask: [
724 0b_0000000000000000,
725 0b_0000000000000000,
726 0b_0000000000000000,
727 0b_0000000000000000,
728 0b_0000000000000000,
729 0b_0000000000000000,
730 0b_0000001110011100,
731 0b_0000011111111110,
732 0b_0000011111111110,
733 0b_0000001111111100,
734 0b_0000001111111100,
735 0b_0000011111111110,
736 0b_0000011111111110,
737 0b_0000001110011100,
738 0b_0000000000000000,
739 0b_0000000000000000
740 ],
741 },
8686f9f6
KS
742 Glyph {
743 width: 12,
744 sym: ' ',
745 bits: [
746 0b_0000000000000000,
747 0b_0000000000000000,
748 0b_0000000000000000,
749 0b_0000000000000000,
750 0b_0000000000000000,
751 0b_0000000000000000,
752 0b_0000000000000000,
753 0b_0000000000000000,
754 0b_0000000000000000,
755 0b_0000000000000000,
756 0b_0000000000000000,
757 0b_0000000000000000,
758 0b_0000000000000000,
759 0b_0000000000000000,
760 0b_0000000000000000,
761 0b_0000000000000000
762 ],
763 mask: [
764 0b_0000000000000000,
765 0b_0000000000000000,
766 0b_0000000000000000,
767 0b_0000000000000000,
768 0b_0000000000000000,
769 0b_0000000000000000,
770 0b_0000000000000000,
771 0b_0000000000000000,
772 0b_0000000000000000,
773 0b_0000000000000000,
774 0b_0000000000000000,
775 0b_0000000000000000,
776 0b_0000000000000000,
777 0b_0000000000000000,
778 0b_0000000000000000,
779 0b_0000000000000000
780 ],
781 },
782];