History

avcodec/vp6: select idct based (loosely) on number of coefficients decoded

The VP3/4/5/6 reference decoders all use three IDCT versions: one for the DC-only case, another for blocks with more than 10 coefficients, and an optimised one for blocks with up to 10 AC coefficents. VP6 relies on the sparse 10 coefficient version, and without it, IDCT drift occurs. Fixes: https://trac.ffmpeg.org/ticket/1282

Peter Ross committed 7 years ago

Commit d8ebfd11 parent 160ebe06 files · +213 −178Browse files

Unified · Split

6 files
  1. libavcodec/vp5.c +1 −0
  2. libavcodec/vp56.c +24 −6
  3. libavcodec/vp56.h +2 −0
  4. libavcodec/vp6.c +14 −0
  5. tests/ref/fate/vp6a +86 −86
  6. tests/ref/fate/vp6a-skip_alpha +86 −86
libavcodec/vp5.c+1−0
@@ -252,6 +252,7 @@ static int vp5_parse_coeff(VP56Context *s) · 251 unmodified lines
252 for (i=coeff_idx; i<=ctx_last; i++)252 for (i=coeff_idx; i<=ctx_last; i++)
253 s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;253 s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;
254 s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];254 s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];
255 s->idct_selector[b] = 63;
255 }256 }
256 return 0;257 return 0;
257}258}
libavcodec/vp56.c+24−6
@@ -406,6 +406,24 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src, · 405 unmodified lines
406 }406 }
407}407}
408 408
409static void vp56_idct_put(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
410{
411 if (selector > 10 || selector == 1)
412 s->vp3dsp.idct_put(dest, stride, block);
413 else
414 ff_vp3dsp_idct10_put(dest, stride, block);
415}
416
417static void vp56_idct_add(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
418{
419 if (selector > 10)
420 s->vp3dsp.idct_add(dest, stride, block);
421 else if (selector > 1)
422 ff_vp3dsp_idct10_add(dest, stride, block);
423 else
424 s->vp3dsp.idct_dc_add(dest, stride, block);
425}
426
409static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, int is_alpha, VP56mb mb_type)427static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, int is_alpha, VP56mb mb_type)
410{428{
411 int b, ab, b_max, plane, off;429 int b, ab, b_max, plane, off;
@@ -426,8 +444,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in · 14 unmodified lines
426 case VP56_MB_INTRA:444 case VP56_MB_INTRA:
427 for (b=0; b<b_max; b++) {445 for (b=0; b<b_max; b++) {
428 plane = ff_vp56_b2p[b+ab];446 plane = ff_vp56_b2p[b+ab];
429 s->vp3dsp.idct_put(frame_current->data[plane] + s->block_offset[b],447 vp56_idct_put(s, frame_current->data[plane] + s->block_offset[b],
430 s->stride[plane], s->block_coeff[b]);448 s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
431 }449 }
432 break;450 break;
433 451
@@ -439,8 +457,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in · 5 unmodified lines
439 s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off,457 s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off,
440 frame_ref->data[plane] + off,458 frame_ref->data[plane] + off,
441 s->stride[plane], 8);459 s->stride[plane], 8);
442 s->vp3dsp.idct_add(frame_current->data[plane] + off,460 vp56_idct_add(s, frame_current->data[plane] + off,
443 s->stride[plane], s->block_coeff[b]);461 s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
444 }462 }
445 break;463 break;
446 464
@@ -457,8 +475,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in · 10 unmodified lines
457 plane = ff_vp56_b2p[b+ab];475 plane = ff_vp56_b2p[b+ab];
458 vp56_mc(s, b, plane, frame_ref->data[plane], s->stride[plane],476 vp56_mc(s, b, plane, frame_ref->data[plane], s->stride[plane],
459 16*col+x_off, 16*row+y_off);477 16*col+x_off, 16*row+y_off);
460 s->vp3dsp.idct_add(frame_current->data[plane] + s->block_offset[b],478 vp56_idct_add(s, frame_current->data[plane] + s->block_offset[b],
461 s->stride[plane], s->block_coeff[b]);479 s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
462 }480 }
463 break;481 break;
464 }482 }
libavcodec/vp56.h+2−0
@@ -105,6 +105,7 @@ typedef struct VP56Macroblock { · 104 unmodified lines
105typedef struct VP56Model {105typedef struct VP56Model {
106 uint8_t coeff_reorder[64]; /* used in vp6 only */106 uint8_t coeff_reorder[64]; /* used in vp6 only */
107 uint8_t coeff_index_to_pos[64]; /* used in vp6 only */107 uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
108 uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
108 uint8_t vector_sig[2]; /* delta sign */109 uint8_t vector_sig[2]; /* delta sign */
109 uint8_t vector_dct[2]; /* delta coding types */110 uint8_t vector_dct[2]; /* delta coding types */
110 uint8_t vector_pdi[2][2]; /* predefined delta init */111 uint8_t vector_pdi[2][2]; /* predefined delta init */
@@ -157,6 +158,7 @@ struct vp56_context { · 46 unmodified lines
157 VP56mb mb_type;158 VP56mb mb_type;
158 VP56Macroblock *macroblocks;159 VP56Macroblock *macroblocks;
159 DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];160 DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
161 int idct_selector[6];
160 162
161 /* motion vectors */163 /* motion vectors */
162 VP56mv mv[6]; /* vectors for each block in MB */164 VP56mv mv[6]; /* vectors for each block in MB */
libavcodec/vp6.c+14−0
@@ -194,6 +194,18 @@ static void vp6_coeff_order_table_init(VP56Context *s) · 193 unmodified lines
194 for (pos=1; pos<64; pos++)194 for (pos=1; pos<64; pos++)
195 if (s->modelp->coeff_reorder[pos] == i)195 if (s->modelp->coeff_reorder[pos] == i)
196 s->modelp->coeff_index_to_pos[idx++] = pos;196 s->modelp->coeff_index_to_pos[idx++] = pos;
197
198 for (idx = 0; idx < 64; idx++) {
199 int max = 0;
200 for (i = 0; i <= idx; i++) {
201 int v = s->modelp->coeff_index_to_pos[i];
202 if (v > max)
203 max = v;
204 }
205 if (s->sub_version > 6)
206 max++;
207 s->modelp->coeff_index_to_idct_selector[idx] = max;
208 }
197}209}
198 210
199static void vp6_default_models_init(VP56Context *s)211static void vp6_default_models_init(VP56Context *s)
@@ -446,6 +458,7 @@ static int vp6_parse_coeff_huffman(VP56Context *s) · 246 unmodified lines
446 cg = FFMIN(vp6_coeff_groups[coeff_idx], 3);458 cg = FFMIN(vp6_coeff_groups[coeff_idx], 3);
447 vlc_coeff = &s->ract_vlc[pt][ct][cg];459 vlc_coeff = &s->ract_vlc[pt][ct][cg];
448 }460 }
461 s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
449 }462 }
450 return 0;463 return 0;
451}464}
@@ -527,6 +540,7 @@ static int vp6_parse_coeff(VP56Context *s) · 75 unmodified lines
527 540
528 s->left_block[ff_vp56_b6to4[b]].not_null_dc =541 s->left_block[ff_vp56_b6to4[b]].not_null_dc =
529 s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];542 s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];
543 s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
530 }544 }
531 return 0;545 return 0;
532}546}
tests/ref/fate/vp6a+86−86
@@ -4,95 +4,95 @@ · 3 unmodified lines
4#dimensions 0: 300x1804#dimensions 0: 300x180
5#sar 0: 0/15#sar 0: 0/1
60, 0, 0, 1, 135000, 0x9dceed6d60, 0, 0, 1, 135000, 0x9dceed6d
70, 1, 1, 1, 135000, 0x47e5778d70, 1, 1, 1, 135000, 0x1fc377a4
80, 2, 2, 1, 135000, 0x5de3659980, 2, 2, 1, 135000, 0x0b4465d4
90, 3, 3, 1, 135000, 0x540d807990, 3, 3, 1, 135000, 0x136b8062
100, 4, 4, 1, 135000, 0xba9ea534100, 4, 4, 1, 135000, 0x4691a55c
110, 5, 5, 1, 135000, 0xa75088f8110, 5, 5, 1, 135000, 0x55bb8a19
120, 6, 6, 1, 135000, 0x7d867559120, 6, 6, 1, 135000, 0xdbf67651
130, 7, 7, 1, 135000, 0xcc678fee130, 7, 7, 1, 135000, 0x6fb19113
140, 8, 8, 1, 135000, 0x79c590b9140, 8, 8, 1, 135000, 0x3edc9227
150, 9, 9, 1, 135000, 0x87789918150, 9, 9, 1, 135000, 0x53b39aff
160, 10, 10, 1, 135000, 0xaa939213160, 10, 10, 1, 135000, 0x699e94b0
170, 11, 11, 1, 135000, 0x3912916d170, 11, 11, 1, 135000, 0xeedd9388
180, 12, 12, 1, 135000, 0x41305d0b180, 12, 12, 1, 135000, 0x14055f96
190, 13, 13, 1, 135000, 0x2686b5dd190, 13, 13, 1, 135000, 0x71fbb5fd
200, 14, 14, 1, 135000, 0xa69ae422200, 14, 14, 1, 135000, 0x6fb4e491
210, 15, 15, 1, 135000, 0x998a3478210, 15, 15, 1, 135000, 0x35ca3482
220, 16, 16, 1, 135000, 0x5842768d220, 16, 16, 1, 135000, 0x0c2a7530
230, 17, 17, 1, 135000, 0xf6a85b16230, 17, 17, 1, 135000, 0x422c5581
240, 18, 18, 1, 135000, 0x7a5b2708240, 18, 18, 1, 135000, 0x19eb2155
250, 19, 19, 1, 135000, 0x8b2abb63250, 19, 19, 1, 135000, 0x07e1b114
260, 20, 20, 1, 135000, 0x7dc8468b260, 20, 20, 1, 135000, 0xa10f3f81
270, 21, 21, 1, 135000, 0x04d85001270, 21, 21, 1, 135000, 0x75684dcd
280, 22, 22, 1, 135000, 0x83e3c647280, 22, 22, 1, 135000, 0x1721c337
290, 23, 23, 1, 135000, 0xcddd687e290, 23, 23, 1, 135000, 0x3897667d
300, 24, 24, 1, 135000, 0x818e785e300, 24, 24, 1, 135000, 0x1232769e
310, 25, 25, 1, 135000, 0x3a915080310, 25, 25, 1, 135000, 0xec975059
320, 26, 26, 1, 135000, 0x953d603d320, 26, 26, 1, 135000, 0xb2a46123
330, 27, 27, 1, 135000, 0x79005ebf330, 27, 27, 1, 135000, 0x052c5f72
340, 28, 28, 1, 135000, 0x80afec75340, 28, 28, 1, 135000, 0x3087eb2f
350, 29, 29, 1, 135000, 0xfc8e376b350, 29, 29, 1, 135000, 0xd1e0373a
360, 30, 30, 1, 135000, 0xf957b7ef360, 30, 30, 1, 135000, 0x64dab704
370, 31, 31, 1, 135000, 0xe878da44370, 31, 31, 1, 135000, 0xa44dd89e
380, 32, 32, 1, 135000, 0xe68ecca3380, 32, 32, 1, 135000, 0x380ecae9
390, 33, 33, 1, 135000, 0x1a2cc7d3390, 33, 33, 1, 135000, 0x8c6fc4ab
400, 34, 34, 1, 135000, 0x4f346a69400, 34, 34, 1, 135000, 0x02096903
410, 35, 35, 1, 135000, 0x7a0cf4ac410, 35, 35, 1, 135000, 0x11edf432
420, 36, 36, 1, 135000, 0x6d4eee7a420, 36, 36, 1, 135000, 0x3585ee5f
430, 37, 37, 1, 135000, 0xf0688cbd430, 37, 37, 1, 135000, 0xe1338c40
440, 38, 38, 1, 135000, 0xca4abbbc440, 38, 38, 1, 135000, 0x5edfbd0c
450, 39, 39, 1, 135000, 0x87669519450, 39, 39, 1, 135000, 0x9420965c
460, 40, 40, 1, 135000, 0xd090e9d7460, 40, 40, 1, 135000, 0x0caceb17
470, 41, 41, 1, 135000, 0xd7f536c1470, 41, 41, 1, 135000, 0x3fdc36c3
480, 42, 42, 1, 135000, 0x353ede54480, 42, 42, 1, 135000, 0x8a24df14
490, 43, 43, 1, 135000, 0xbc8f5358490, 43, 43, 1, 135000, 0x5dc057b0
500, 44, 44, 1, 135000, 0xb52cd59a500, 44, 44, 1, 135000, 0xdc5eda65
510, 45, 45, 1, 135000, 0x0b882eba510, 45, 45, 1, 135000, 0x60433612
520, 46, 46, 1, 135000, 0xc544cd54520, 46, 46, 1, 135000, 0x6a91d6c9
530, 47, 47, 1, 135000, 0x31ca7e73530, 47, 47, 1, 135000, 0x53598734
540, 48, 48, 1, 135000, 0xb1569ce9540, 48, 48, 1, 135000, 0xb1569ce9
550, 49, 49, 1, 135000, 0x8bf4394f550, 49, 49, 1, 135000, 0xf5e83a33
560, 50, 50, 1, 135000, 0xf413812a560, 50, 50, 1, 135000, 0xebe18275
570, 51, 51, 1, 135000, 0xf2fa90ab570, 51, 51, 1, 135000, 0x98af9447
580, 52, 52, 1, 135000, 0xdcd8b265580, 52, 52, 1, 135000, 0x3f03b765
590, 53, 53, 1, 135000, 0xa89cdba1590, 53, 53, 1, 135000, 0x7423e0b8
600, 54, 54, 1, 135000, 0x212b59a5600, 54, 54, 1, 135000, 0x6c1b5faa
610, 55, 55, 1, 135000, 0x10c589c3610, 55, 55, 1, 135000, 0xebf98d52
620, 56, 56, 1, 135000, 0x432ab5b4620, 56, 56, 1, 135000, 0xf3dfb8b6
630, 57, 57, 1, 135000, 0x85a9634a630, 57, 57, 1, 135000, 0x85a9634a
640, 58, 58, 1, 135000, 0x10db5b87640, 58, 58, 1, 135000, 0x4d425bb5
650, 59, 59, 1, 135000, 0x583145d9650, 59, 59, 1, 135000, 0xfb7945ee
660, 60, 60, 1, 135000, 0x7d3a33bd660, 60, 60, 1, 135000, 0x593534c1
670, 61, 61, 1, 135000, 0xcf592423670, 61, 61, 1, 135000, 0xe3fa2517
680, 62, 62, 1, 135000, 0xb59728e5680, 62, 62, 1, 135000, 0x893629e3
690, 63, 63, 1, 135000, 0x1eeca660690, 63, 63, 1, 135000, 0xdc3ca6ad
700, 64, 64, 1, 135000, 0xff7bcc34700, 64, 64, 1, 135000, 0x16b1ce27
710, 65, 65, 1, 135000, 0x0ef8f271710, 65, 65, 1, 135000, 0x8296f478
720, 66, 66, 1, 135000, 0x8c9ca8ee720, 66, 66, 1, 135000, 0x9e9baaa3
730, 67, 67, 1, 135000, 0x8a7ece34730, 67, 67, 1, 135000, 0x994ecd4a
740, 68, 68, 1, 135000, 0x7d4c3b5d740, 68, 68, 1, 135000, 0x40f83b3c
750, 69, 69, 1, 135000, 0x99118f21750, 69, 69, 1, 135000, 0x0de38f90
760, 70, 70, 1, 135000, 0xd97fe7e2760, 70, 70, 1, 135000, 0x5455ea6c
770, 71, 71, 1, 135000, 0xf93842f1770, 71, 71, 1, 135000, 0x053e41e8
780, 72, 72, 1, 135000, 0x35c912e8780, 72, 72, 1, 135000, 0x0fee1281
790, 73, 73, 1, 135000, 0x14e59e97790, 73, 73, 1, 135000, 0xa0c9a434
800, 74, 74, 1, 135000, 0x8e4c19aa800, 74, 74, 1, 135000, 0x8e4c19aa
810, 75, 75, 1, 135000, 0x4adfbc53810, 75, 75, 1, 135000, 0x34bebc00
820, 76, 76, 1, 135000, 0x0613adde820, 76, 76, 1, 135000, 0x6670ad6f
830, 77, 77, 1, 135000, 0x8db264ab830, 77, 77, 1, 135000, 0xdbba63fc
840, 78, 78, 1, 135000, 0x3948b619840, 78, 78, 1, 135000, 0xe34fb839
850, 79, 79, 1, 135000, 0x843d7c02850, 79, 79, 1, 135000, 0xa3ce7eb1
860, 80, 80, 1, 135000, 0x534fea34860, 80, 80, 1, 135000, 0xdec7ed7d
870, 81, 81, 1, 135000, 0xdb7041bf870, 81, 81, 1, 135000, 0xdb7041bf
880, 82, 82, 1, 135000, 0xd0ce1cce880, 82, 82, 1, 135000, 0x2b1d1dc1
890, 83, 83, 1, 135000, 0x3c008335890, 83, 83, 1, 135000, 0xaaa384c1
900, 84, 84, 1, 135000, 0xb699208f900, 84, 84, 1, 135000, 0x37f42217
910, 85, 85, 1, 135000, 0xe07da3ca910, 85, 85, 1, 135000, 0x928ba4da
920, 86, 86, 1, 135000, 0x26331f41920, 86, 86, 1, 135000, 0x2b681f41
930, 87, 87, 1, 135000, 0x4e19fe83930, 87, 87, 1, 135000, 0xcbe1ff84
940, 88, 88, 1, 135000, 0xaa9a9e45940, 88, 88, 1, 135000, 0x47949f24
950, 89, 89, 1, 135000, 0x336b7ed0950, 89, 89, 1, 135000, 0x368b7fe5
960, 90, 90, 1, 135000, 0xc9bf7611960, 90, 90, 1, 135000, 0x1cf4773b
970, 91, 91, 1, 135000, 0x14c33a35970, 91, 91, 1, 135000, 0x14c33a35
980, 92, 92, 1, 135000, 0xdc08470e980, 92, 92, 1, 135000, 0xdc08470e
tests/ref/fate/vp6a-skip_alpha+86−86
@@ -4,95 +4,95 @@ · 3 unmodified lines
4#dimensions 0: 300x1804#dimensions 0: 300x180
5#sar 0: 0/15#sar 0: 0/1
60, 0, 0, 1, 81000, 0xcb92962d60, 0, 0, 1, 81000, 0xcb92962d
70, 1, 1, 1, 81000, 0xae38190470, 1, 1, 1, 81000, 0x8fef1925
80, 2, 2, 1, 81000, 0x1fcc0c7580, 2, 2, 1, 81000, 0xf0350cb6
90, 3, 3, 1, 81000, 0x023f0c2190, 3, 3, 1, 81000, 0xa70a0c52
100, 4, 4, 1, 81000, 0xad691402100, 4, 4, 1, 81000, 0x21ef1490
110, 5, 5, 1, 81000, 0x42390be0110, 5, 5, 1, 81000, 0x98bc0c96
120, 6, 6, 1, 81000, 0xc1c10a4e120, 6, 6, 1, 81000, 0x92380b27
130, 7, 7, 1, 81000, 0x9c0315ac130, 7, 7, 1, 81000, 0xbba216cd
140, 8, 8, 1, 81000, 0xc2a315a7140, 8, 8, 1, 81000, 0x92a8172b
150, 9, 9, 1, 81000, 0x3a631392150, 9, 9, 1, 81000, 0xfbc21592
160, 10, 10, 1, 81000, 0x11591414160, 10, 10, 1, 81000, 0xdad416a1
170, 11, 11, 1, 81000, 0x1a551125170, 11, 11, 1, 81000, 0xec4d13aa
180, 12, 12, 1, 81000, 0x2e1efa4f180, 12, 12, 1, 81000, 0xaf36fcff
190, 13, 13, 1, 81000, 0x4aa3f016190, 13, 13, 1, 81000, 0xb4fcf056
200, 14, 14, 1, 81000, 0x74c029d8200, 14, 14, 1, 81000, 0xe3782a3f
210, 15, 15, 1, 81000, 0xdee9a98b210, 15, 15, 1, 81000, 0x714daa0b
220, 16, 16, 1, 81000, 0xdf3502d5220, 16, 16, 1, 81000, 0xe2770382
230, 17, 17, 1, 81000, 0x4653536b230, 17, 17, 1, 81000, 0x553253ff
240, 18, 18, 1, 81000, 0x7f658c75240, 18, 18, 1, 81000, 0x928d8c46
250, 19, 19, 1, 81000, 0xab18ff13250, 19, 19, 1, 81000, 0x06c8fe82
260, 20, 20, 1, 81000, 0xac2b8f3b260, 20, 20, 1, 81000, 0xb8198f5a
270, 21, 21, 1, 81000, 0xd61ff094270, 21, 21, 1, 81000, 0x0029f118
280, 22, 22, 1, 81000, 0x425bfc2b280, 22, 22, 1, 81000, 0x6fe7fc6f
290, 23, 23, 1, 81000, 0x6be7ecd3290, 23, 23, 1, 81000, 0x9165edde
300, 24, 24, 1, 81000, 0x0b0ee65b300, 24, 24, 1, 81000, 0xe76ae791
310, 25, 25, 1, 81000, 0x3c6f146b310, 25, 25, 1, 81000, 0xa4dd145a
320, 26, 26, 1, 81000, 0x27c4e9c8320, 26, 26, 1, 81000, 0x2d7de9d8
330, 27, 27, 1, 81000, 0x174022c4330, 27, 27, 1, 81000, 0xe102228b
340, 28, 28, 1, 81000, 0x3320fe81340, 28, 28, 1, 81000, 0xc57ffe0e
350, 29, 29, 1, 81000, 0x7a3c342e350, 29, 29, 1, 81000, 0x324434cb
360, 30, 30, 1, 81000, 0x448b4346360, 30, 30, 1, 81000, 0xedc0433e
370, 31, 31, 1, 81000, 0xd285b23d370, 31, 31, 1, 81000, 0xd42bb18a
380, 32, 32, 1, 81000, 0x852ed590380, 32, 32, 1, 81000, 0xedb3d561
390, 33, 33, 1, 81000, 0xc9d3df17390, 33, 33, 1, 81000, 0x5244de92
400, 34, 34, 1, 81000, 0x4d23727b400, 34, 34, 1, 81000, 0x0bb27280
410, 35, 35, 1, 81000, 0x1fae66cd410, 35, 35, 1, 81000, 0xc6116736
420, 36, 36, 1, 81000, 0x384d54ab420, 36, 36, 1, 81000, 0x42f154e2
430, 37, 37, 1, 81000, 0x2fee6ba3430, 37, 37, 1, 81000, 0xffbd6bf9
440, 38, 38, 1, 81000, 0xd7ad6f59440, 38, 38, 1, 81000, 0x813170d0
450, 39, 39, 1, 81000, 0xaf5e3e76450, 39, 39, 1, 81000, 0x430c4040
460, 40, 40, 1, 81000, 0x10fceda4460, 40, 40, 1, 81000, 0x56d1eecb
470, 41, 41, 1, 81000, 0xb26df92b470, 41, 41, 1, 81000, 0xaa4afa12
480, 42, 42, 1, 81000, 0xd6676e08480, 42, 42, 1, 81000, 0x2c3d6fb8
490, 43, 43, 1, 81000, 0xff6b1b95490, 43, 43, 1, 81000, 0xfedf1e3e
500, 44, 44, 1, 81000, 0x6196d598500, 44, 44, 1, 81000, 0xf538d893
510, 45, 45, 1, 81000, 0x833ebf1b510, 45, 45, 1, 81000, 0xcc81c3b5
520, 46, 46, 1, 81000, 0x7b085af1520, 46, 46, 1, 81000, 0x59b95fbc
530, 47, 47, 1, 81000, 0xe8f583b4530, 47, 47, 1, 81000, 0xb4da87a0
540, 48, 48, 1, 81000, 0x3426d5e4540, 48, 48, 1, 81000, 0x3426d5e4
550, 49, 49, 1, 81000, 0x214069ed550, 49, 49, 1, 81000, 0x8d066aae
560, 50, 50, 1, 81000, 0x7dbdfd3f560, 50, 50, 1, 81000, 0x09effe79
570, 51, 51, 1, 81000, 0xf19b3f45570, 51, 51, 1, 81000, 0xecc540ae
580, 52, 52, 1, 81000, 0x0f05c7e2580, 52, 52, 1, 81000, 0x845dc90c
590, 53, 53, 1, 81000, 0xba94e323590, 53, 53, 1, 81000, 0x9c2fe4d2
600, 54, 54, 1, 81000, 0x0de7b0c2600, 54, 54, 1, 81000, 0x8887b277
610, 55, 55, 1, 81000, 0xfcf93c55610, 55, 55, 1, 81000, 0x3bdc3ca9
620, 56, 56, 1, 81000, 0x8a8dbd55620, 56, 56, 1, 81000, 0x094fbe27
630, 57, 57, 1, 81000, 0xddf22b97630, 57, 57, 1, 81000, 0xddf22b97
640, 58, 58, 1, 81000, 0x49a830ff640, 58, 58, 1, 81000, 0x31b23156
650, 59, 59, 1, 81000, 0x82ab2a4b650, 59, 59, 1, 81000, 0xf5bf2ad8
660, 60, 60, 1, 81000, 0xd23420e5660, 60, 60, 1, 81000, 0x4a9321c4
670, 61, 61, 1, 81000, 0x7c1017d1670, 61, 61, 1, 81000, 0xdd1b18ca
680, 62, 62, 1, 81000, 0x9aa61b38680, 62, 62, 1, 81000, 0x4ece1cdd
690, 63, 63, 1, 81000, 0x2a724a18690, 63, 63, 1, 81000, 0x6a9a4b53
700, 64, 64, 1, 81000, 0xc18055f2700, 64, 64, 1, 81000, 0x6624578b
710, 65, 65, 1, 81000, 0xecba3855710, 65, 65, 1, 81000, 0x89273a0f
720, 66, 66, 1, 81000, 0x0eed6b0f720, 66, 66, 1, 81000, 0x9eb56c4c
730, 67, 67, 1, 81000, 0x4be73816730, 67, 67, 1, 81000, 0xe60238f5
740, 68, 68, 1, 81000, 0xa681214e740, 68, 68, 1, 81000, 0xbc4c228a
750, 69, 69, 1, 81000, 0x4958f83d750, 69, 69, 1, 81000, 0x3feefa08
760, 70, 70, 1, 81000, 0xca0f0d61760, 70, 70, 1, 81000, 0x0d620f37
770, 71, 71, 1, 81000, 0x3c453de1770, 71, 71, 1, 81000, 0x93693fc8
780, 72, 72, 1, 81000, 0xff60360a780, 72, 72, 1, 81000, 0xfc4b3848
790, 73, 73, 1, 81000, 0xdcef0949790, 73, 73, 1, 81000, 0xd9950bfb
800, 74, 74, 1, 81000, 0xe5e3732d800, 74, 74, 1, 81000, 0xe5e3732d
810, 75, 75, 1, 81000, 0x39747fd4810, 75, 75, 1, 81000, 0x53517fd2
820, 76, 76, 1, 81000, 0x6bec70e6820, 76, 76, 1, 81000, 0xb57c70b0
830, 77, 77, 1, 81000, 0x7026a8c0830, 77, 77, 1, 81000, 0x378ea87c
840, 78, 78, 1, 81000, 0x92de5b61840, 78, 78, 1, 81000, 0xfd2b5b58
850, 79, 79, 1, 81000, 0x3f00507f850, 79, 79, 1, 81000, 0x66d45077
860, 80, 80, 1, 81000, 0x5620c377860, 80, 80, 1, 81000, 0x6e07c3f8
870, 81, 81, 1, 81000, 0x39f5ed38870, 81, 81, 1, 81000, 0x39f5ed38
880, 82, 82, 1, 81000, 0x6ee35d67880, 82, 82, 1, 81000, 0x55b05da7
890, 83, 83, 1, 81000, 0x4f99a409890, 83, 83, 1, 81000, 0x7f78a42c
900, 84, 84, 1, 81000, 0x0a05b6ea900, 84, 84, 1, 81000, 0x5139b79c
910, 85, 85, 1, 81000, 0xd6c442d9910, 85, 85, 1, 81000, 0x4054437d
920, 86, 86, 1, 81000, 0x0bb3d2f0920, 86, 86, 1, 81000, 0x0f9dd327
930, 87, 87, 1, 81000, 0x6891c5b1930, 87, 87, 1, 81000, 0xa885c60e
940, 88, 88, 1, 81000, 0xf16ba9be940, 88, 88, 1, 81000, 0x37abaa72
950, 89, 89, 1, 81000, 0xba53528e950, 89, 89, 1, 81000, 0xdab25345
960, 90, 90, 1, 81000, 0xc847de49960, 90, 90, 1, 81000, 0xbdf4df9d
970, 91, 91, 1, 81000, 0xc5b2e2b0970, 91, 91, 1, 81000, 0xc5b2e2b0
980, 92, 92, 1, 81000, 0xb0b497ff980, 92, 92, 1, 81000, 0xb0b497ff

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t