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

Signed-off-by: Peter Ross <pross@xvid.org>
This commit is contained in:
Peter Ross 2019-01-13 15:45:07 +11:00
parent 160ebe0a8d
commit d8ebfd1bdf
6 changed files with 213 additions and 178 deletions

View File

@ -252,6 +252,7 @@ static int vp5_parse_coeff(VP56Context *s)
for (i=coeff_idx; i<=ctx_last; i++)
s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;
s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];
s->idct_selector[b] = 63;
}
return 0;
}

View File

@ -406,6 +406,24 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src,
}
}
static void vp56_idct_put(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
{
if (selector > 10 || selector == 1)
s->vp3dsp.idct_put(dest, stride, block);
else
ff_vp3dsp_idct10_put(dest, stride, block);
}
static void vp56_idct_add(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
{
if (selector > 10)
s->vp3dsp.idct_add(dest, stride, block);
else if (selector > 1)
ff_vp3dsp_idct10_add(dest, stride, block);
else
s->vp3dsp.idct_dc_add(dest, stride, block);
}
static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, int is_alpha, VP56mb mb_type)
{
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
case VP56_MB_INTRA:
for (b=0; b<b_max; b++) {
plane = ff_vp56_b2p[b+ab];
s->vp3dsp.idct_put(frame_current->data[plane] + s->block_offset[b],
s->stride[plane], s->block_coeff[b]);
vp56_idct_put(s, frame_current->data[plane] + s->block_offset[b],
s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
}
break;
@ -439,8 +457,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off,
frame_ref->data[plane] + off,
s->stride[plane], 8);
s->vp3dsp.idct_add(frame_current->data[plane] + off,
s->stride[plane], s->block_coeff[b]);
vp56_idct_add(s, frame_current->data[plane] + off,
s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
}
break;
@ -457,8 +475,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
plane = ff_vp56_b2p[b+ab];
vp56_mc(s, b, plane, frame_ref->data[plane], s->stride[plane],
16*col+x_off, 16*row+y_off);
s->vp3dsp.idct_add(frame_current->data[plane] + s->block_offset[b],
s->stride[plane], s->block_coeff[b]);
vp56_idct_add(s, frame_current->data[plane] + s->block_offset[b],
s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
}
break;
}

View File

@ -105,6 +105,7 @@ typedef struct VP56Macroblock {
typedef struct VP56Model {
uint8_t coeff_reorder[64]; /* used in vp6 only */
uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
uint8_t vector_sig[2]; /* delta sign */
uint8_t vector_dct[2]; /* delta coding types */
uint8_t vector_pdi[2][2]; /* predefined delta init */
@ -157,6 +158,7 @@ struct vp56_context {
VP56mb mb_type;
VP56Macroblock *macroblocks;
DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
int idct_selector[6];
/* motion vectors */
VP56mv mv[6]; /* vectors for each block in MB */

View File

@ -194,6 +194,18 @@ static void vp6_coeff_order_table_init(VP56Context *s)
for (pos=1; pos<64; pos++)
if (s->modelp->coeff_reorder[pos] == i)
s->modelp->coeff_index_to_pos[idx++] = pos;
for (idx = 0; idx < 64; idx++) {
int max = 0;
for (i = 0; i <= idx; i++) {
int v = s->modelp->coeff_index_to_pos[i];
if (v > max)
max = v;
}
if (s->sub_version > 6)
max++;
s->modelp->coeff_index_to_idct_selector[idx] = max;
}
}
static void vp6_default_models_init(VP56Context *s)
@ -446,6 +458,7 @@ static int vp6_parse_coeff_huffman(VP56Context *s)
cg = FFMIN(vp6_coeff_groups[coeff_idx], 3);
vlc_coeff = &s->ract_vlc[pt][ct][cg];
}
s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
}
return 0;
}
@ -527,6 +540,7 @@ static int vp6_parse_coeff(VP56Context *s)
s->left_block[ff_vp56_b6to4[b]].not_null_dc =
s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];
s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
}
return 0;
}

View File

@ -4,95 +4,95 @@
#dimensions 0: 300x180
#sar 0: 0/1
0, 0, 0, 1, 135000, 0x9dceed6d
0, 1, 1, 1, 135000, 0x47e5778d
0, 2, 2, 1, 135000, 0x5de36599
0, 3, 3, 1, 135000, 0x540d8079
0, 4, 4, 1, 135000, 0xba9ea534
0, 5, 5, 1, 135000, 0xa75088f8
0, 6, 6, 1, 135000, 0x7d867559
0, 7, 7, 1, 135000, 0xcc678fee
0, 8, 8, 1, 135000, 0x79c590b9
0, 9, 9, 1, 135000, 0x87789918
0, 10, 10, 1, 135000, 0xaa939213
0, 11, 11, 1, 135000, 0x3912916d
0, 12, 12, 1, 135000, 0x41305d0b
0, 13, 13, 1, 135000, 0x2686b5dd
0, 14, 14, 1, 135000, 0xa69ae422
0, 15, 15, 1, 135000, 0x998a3478
0, 16, 16, 1, 135000, 0x5842768d
0, 17, 17, 1, 135000, 0xf6a85b16
0, 18, 18, 1, 135000, 0x7a5b2708
0, 19, 19, 1, 135000, 0x8b2abb63
0, 20, 20, 1, 135000, 0x7dc8468b
0, 21, 21, 1, 135000, 0x04d85001
0, 22, 22, 1, 135000, 0x83e3c647
0, 23, 23, 1, 135000, 0xcddd687e
0, 24, 24, 1, 135000, 0x818e785e
0, 25, 25, 1, 135000, 0x3a915080
0, 26, 26, 1, 135000, 0x953d603d
0, 27, 27, 1, 135000, 0x79005ebf
0, 28, 28, 1, 135000, 0x80afec75
0, 29, 29, 1, 135000, 0xfc8e376b
0, 30, 30, 1, 135000, 0xf957b7ef
0, 31, 31, 1, 135000, 0xe878da44
0, 32, 32, 1, 135000, 0xe68ecca3
0, 33, 33, 1, 135000, 0x1a2cc7d3
0, 34, 34, 1, 135000, 0x4f346a69
0, 35, 35, 1, 135000, 0x7a0cf4ac
0, 36, 36, 1, 135000, 0x6d4eee7a
0, 37, 37, 1, 135000, 0xf0688cbd
0, 38, 38, 1, 135000, 0xca4abbbc
0, 39, 39, 1, 135000, 0x87669519
0, 40, 40, 1, 135000, 0xd090e9d7
0, 41, 41, 1, 135000, 0xd7f536c1
0, 42, 42, 1, 135000, 0x353ede54
0, 43, 43, 1, 135000, 0xbc8f5358
0, 44, 44, 1, 135000, 0xb52cd59a
0, 45, 45, 1, 135000, 0x0b882eba
0, 46, 46, 1, 135000, 0xc544cd54
0, 47, 47, 1, 135000, 0x31ca7e73
0, 1, 1, 1, 135000, 0x1fc377a4
0, 2, 2, 1, 135000, 0x0b4465d4
0, 3, 3, 1, 135000, 0x136b8062
0, 4, 4, 1, 135000, 0x4691a55c
0, 5, 5, 1, 135000, 0x55bb8a19
0, 6, 6, 1, 135000, 0xdbf67651
0, 7, 7, 1, 135000, 0x6fb19113
0, 8, 8, 1, 135000, 0x3edc9227
0, 9, 9, 1, 135000, 0x53b39aff
0, 10, 10, 1, 135000, 0x699e94b0
0, 11, 11, 1, 135000, 0xeedd9388
0, 12, 12, 1, 135000, 0x14055f96
0, 13, 13, 1, 135000, 0x71fbb5fd
0, 14, 14, 1, 135000, 0x6fb4e491
0, 15, 15, 1, 135000, 0x35ca3482
0, 16, 16, 1, 135000, 0x0c2a7530
0, 17, 17, 1, 135000, 0x422c5581
0, 18, 18, 1, 135000, 0x19eb2155
0, 19, 19, 1, 135000, 0x07e1b114
0, 20, 20, 1, 135000, 0xa10f3f81
0, 21, 21, 1, 135000, 0x75684dcd
0, 22, 22, 1, 135000, 0x1721c337
0, 23, 23, 1, 135000, 0x3897667d
0, 24, 24, 1, 135000, 0x1232769e
0, 25, 25, 1, 135000, 0xec975059
0, 26, 26, 1, 135000, 0xb2a46123
0, 27, 27, 1, 135000, 0x052c5f72
0, 28, 28, 1, 135000, 0x3087eb2f
0, 29, 29, 1, 135000, 0xd1e0373a
0, 30, 30, 1, 135000, 0x64dab704
0, 31, 31, 1, 135000, 0xa44dd89e
0, 32, 32, 1, 135000, 0x380ecae9
0, 33, 33, 1, 135000, 0x8c6fc4ab
0, 34, 34, 1, 135000, 0x02096903
0, 35, 35, 1, 135000, 0x11edf432
0, 36, 36, 1, 135000, 0x3585ee5f
0, 37, 37, 1, 135000, 0xe1338c40
0, 38, 38, 1, 135000, 0x5edfbd0c
0, 39, 39, 1, 135000, 0x9420965c
0, 40, 40, 1, 135000, 0x0caceb17
0, 41, 41, 1, 135000, 0x3fdc36c3
0, 42, 42, 1, 135000, 0x8a24df14
0, 43, 43, 1, 135000, 0x5dc057b0
0, 44, 44, 1, 135000, 0xdc5eda65
0, 45, 45, 1, 135000, 0x60433612
0, 46, 46, 1, 135000, 0x6a91d6c9
0, 47, 47, 1, 135000, 0x53598734
0, 48, 48, 1, 135000, 0xb1569ce9
0, 49, 49, 1, 135000, 0x8bf4394f
0, 50, 50, 1, 135000, 0xf413812a
0, 51, 51, 1, 135000, 0xf2fa90ab
0, 52, 52, 1, 135000, 0xdcd8b265
0, 53, 53, 1, 135000, 0xa89cdba1
0, 54, 54, 1, 135000, 0x212b59a5
0, 55, 55, 1, 135000, 0x10c589c3
0, 56, 56, 1, 135000, 0x432ab5b4
0, 49, 49, 1, 135000, 0xf5e83a33
0, 50, 50, 1, 135000, 0xebe18275
0, 51, 51, 1, 135000, 0x98af9447
0, 52, 52, 1, 135000, 0x3f03b765
0, 53, 53, 1, 135000, 0x7423e0b8
0, 54, 54, 1, 135000, 0x6c1b5faa
0, 55, 55, 1, 135000, 0xebf98d52
0, 56, 56, 1, 135000, 0xf3dfb8b6
0, 57, 57, 1, 135000, 0x85a9634a
0, 58, 58, 1, 135000, 0x10db5b87
0, 59, 59, 1, 135000, 0x583145d9
0, 60, 60, 1, 135000, 0x7d3a33bd
0, 61, 61, 1, 135000, 0xcf592423
0, 62, 62, 1, 135000, 0xb59728e5
0, 63, 63, 1, 135000, 0x1eeca660
0, 64, 64, 1, 135000, 0xff7bcc34
0, 65, 65, 1, 135000, 0x0ef8f271
0, 66, 66, 1, 135000, 0x8c9ca8ee
0, 67, 67, 1, 135000, 0x8a7ece34
0, 68, 68, 1, 135000, 0x7d4c3b5d
0, 69, 69, 1, 135000, 0x99118f21
0, 70, 70, 1, 135000, 0xd97fe7e2
0, 71, 71, 1, 135000, 0xf93842f1
0, 72, 72, 1, 135000, 0x35c912e8
0, 73, 73, 1, 135000, 0x14e59e97
0, 58, 58, 1, 135000, 0x4d425bb5
0, 59, 59, 1, 135000, 0xfb7945ee
0, 60, 60, 1, 135000, 0x593534c1
0, 61, 61, 1, 135000, 0xe3fa2517
0, 62, 62, 1, 135000, 0x893629e3
0, 63, 63, 1, 135000, 0xdc3ca6ad
0, 64, 64, 1, 135000, 0x16b1ce27
0, 65, 65, 1, 135000, 0x8296f478
0, 66, 66, 1, 135000, 0x9e9baaa3
0, 67, 67, 1, 135000, 0x994ecd4a
0, 68, 68, 1, 135000, 0x40f83b3c
0, 69, 69, 1, 135000, 0x0de38f90
0, 70, 70, 1, 135000, 0x5455ea6c
0, 71, 71, 1, 135000, 0x053e41e8
0, 72, 72, 1, 135000, 0x0fee1281
0, 73, 73, 1, 135000, 0xa0c9a434
0, 74, 74, 1, 135000, 0x8e4c19aa
0, 75, 75, 1, 135000, 0x4adfbc53
0, 76, 76, 1, 135000, 0x0613adde
0, 77, 77, 1, 135000, 0x8db264ab
0, 78, 78, 1, 135000, 0x3948b619
0, 79, 79, 1, 135000, 0x843d7c02
0, 80, 80, 1, 135000, 0x534fea34
0, 75, 75, 1, 135000, 0x34bebc00
0, 76, 76, 1, 135000, 0x6670ad6f
0, 77, 77, 1, 135000, 0xdbba63fc
0, 78, 78, 1, 135000, 0xe34fb839
0, 79, 79, 1, 135000, 0xa3ce7eb1
0, 80, 80, 1, 135000, 0xdec7ed7d
0, 81, 81, 1, 135000, 0xdb7041bf
0, 82, 82, 1, 135000, 0xd0ce1cce
0, 83, 83, 1, 135000, 0x3c008335
0, 84, 84, 1, 135000, 0xb699208f
0, 85, 85, 1, 135000, 0xe07da3ca
0, 86, 86, 1, 135000, 0x26331f41
0, 87, 87, 1, 135000, 0x4e19fe83
0, 88, 88, 1, 135000, 0xaa9a9e45
0, 89, 89, 1, 135000, 0x336b7ed0
0, 90, 90, 1, 135000, 0xc9bf7611
0, 82, 82, 1, 135000, 0x2b1d1dc1
0, 83, 83, 1, 135000, 0xaaa384c1
0, 84, 84, 1, 135000, 0x37f42217
0, 85, 85, 1, 135000, 0x928ba4da
0, 86, 86, 1, 135000, 0x2b681f41
0, 87, 87, 1, 135000, 0xcbe1ff84
0, 88, 88, 1, 135000, 0x47949f24
0, 89, 89, 1, 135000, 0x368b7fe5
0, 90, 90, 1, 135000, 0x1cf4773b
0, 91, 91, 1, 135000, 0x14c33a35
0, 92, 92, 1, 135000, 0xdc08470e

View File

@ -4,95 +4,95 @@
#dimensions 0: 300x180
#sar 0: 0/1
0, 0, 0, 1, 81000, 0xcb92962d
0, 1, 1, 1, 81000, 0xae381904
0, 2, 2, 1, 81000, 0x1fcc0c75
0, 3, 3, 1, 81000, 0x023f0c21
0, 4, 4, 1, 81000, 0xad691402
0, 5, 5, 1, 81000, 0x42390be0
0, 6, 6, 1, 81000, 0xc1c10a4e
0, 7, 7, 1, 81000, 0x9c0315ac
0, 8, 8, 1, 81000, 0xc2a315a7
0, 9, 9, 1, 81000, 0x3a631392
0, 10, 10, 1, 81000, 0x11591414
0, 11, 11, 1, 81000, 0x1a551125
0, 12, 12, 1, 81000, 0x2e1efa4f
0, 13, 13, 1, 81000, 0x4aa3f016
0, 14, 14, 1, 81000, 0x74c029d8
0, 15, 15, 1, 81000, 0xdee9a98b
0, 16, 16, 1, 81000, 0xdf3502d5
0, 17, 17, 1, 81000, 0x4653536b
0, 18, 18, 1, 81000, 0x7f658c75
0, 19, 19, 1, 81000, 0xab18ff13
0, 20, 20, 1, 81000, 0xac2b8f3b
0, 21, 21, 1, 81000, 0xd61ff094
0, 22, 22, 1, 81000, 0x425bfc2b
0, 23, 23, 1, 81000, 0x6be7ecd3
0, 24, 24, 1, 81000, 0x0b0ee65b
0, 25, 25, 1, 81000, 0x3c6f146b
0, 26, 26, 1, 81000, 0x27c4e9c8
0, 27, 27, 1, 81000, 0x174022c4
0, 28, 28, 1, 81000, 0x3320fe81
0, 29, 29, 1, 81000, 0x7a3c342e
0, 30, 30, 1, 81000, 0x448b4346
0, 31, 31, 1, 81000, 0xd285b23d
0, 32, 32, 1, 81000, 0x852ed590
0, 33, 33, 1, 81000, 0xc9d3df17
0, 34, 34, 1, 81000, 0x4d23727b
0, 35, 35, 1, 81000, 0x1fae66cd
0, 36, 36, 1, 81000, 0x384d54ab
0, 37, 37, 1, 81000, 0x2fee6ba3
0, 38, 38, 1, 81000, 0xd7ad6f59
0, 39, 39, 1, 81000, 0xaf5e3e76
0, 40, 40, 1, 81000, 0x10fceda4
0, 41, 41, 1, 81000, 0xb26df92b
0, 42, 42, 1, 81000, 0xd6676e08
0, 43, 43, 1, 81000, 0xff6b1b95
0, 44, 44, 1, 81000, 0x6196d598
0, 45, 45, 1, 81000, 0x833ebf1b
0, 46, 46, 1, 81000, 0x7b085af1
0, 47, 47, 1, 81000, 0xe8f583b4
0, 1, 1, 1, 81000, 0x8fef1925
0, 2, 2, 1, 81000, 0xf0350cb6
0, 3, 3, 1, 81000, 0xa70a0c52
0, 4, 4, 1, 81000, 0x21ef1490
0, 5, 5, 1, 81000, 0x98bc0c96
0, 6, 6, 1, 81000, 0x92380b27
0, 7, 7, 1, 81000, 0xbba216cd
0, 8, 8, 1, 81000, 0x92a8172b
0, 9, 9, 1, 81000, 0xfbc21592
0, 10, 10, 1, 81000, 0xdad416a1
0, 11, 11, 1, 81000, 0xec4d13aa
0, 12, 12, 1, 81000, 0xaf36fcff
0, 13, 13, 1, 81000, 0xb4fcf056
0, 14, 14, 1, 81000, 0xe3782a3f
0, 15, 15, 1, 81000, 0x714daa0b
0, 16, 16, 1, 81000, 0xe2770382
0, 17, 17, 1, 81000, 0x553253ff
0, 18, 18, 1, 81000, 0x928d8c46
0, 19, 19, 1, 81000, 0x06c8fe82
0, 20, 20, 1, 81000, 0xb8198f5a
0, 21, 21, 1, 81000, 0x0029f118
0, 22, 22, 1, 81000, 0x6fe7fc6f
0, 23, 23, 1, 81000, 0x9165edde
0, 24, 24, 1, 81000, 0xe76ae791
0, 25, 25, 1, 81000, 0xa4dd145a
0, 26, 26, 1, 81000, 0x2d7de9d8
0, 27, 27, 1, 81000, 0xe102228b
0, 28, 28, 1, 81000, 0xc57ffe0e
0, 29, 29, 1, 81000, 0x324434cb
0, 30, 30, 1, 81000, 0xedc0433e
0, 31, 31, 1, 81000, 0xd42bb18a
0, 32, 32, 1, 81000, 0xedb3d561
0, 33, 33, 1, 81000, 0x5244de92
0, 34, 34, 1, 81000, 0x0bb27280
0, 35, 35, 1, 81000, 0xc6116736
0, 36, 36, 1, 81000, 0x42f154e2
0, 37, 37, 1, 81000, 0xffbd6bf9
0, 38, 38, 1, 81000, 0x813170d0
0, 39, 39, 1, 81000, 0x430c4040
0, 40, 40, 1, 81000, 0x56d1eecb
0, 41, 41, 1, 81000, 0xaa4afa12
0, 42, 42, 1, 81000, 0x2c3d6fb8
0, 43, 43, 1, 81000, 0xfedf1e3e
0, 44, 44, 1, 81000, 0xf538d893
0, 45, 45, 1, 81000, 0xcc81c3b5
0, 46, 46, 1, 81000, 0x59b95fbc
0, 47, 47, 1, 81000, 0xb4da87a0
0, 48, 48, 1, 81000, 0x3426d5e4
0, 49, 49, 1, 81000, 0x214069ed
0, 50, 50, 1, 81000, 0x7dbdfd3f
0, 51, 51, 1, 81000, 0xf19b3f45
0, 52, 52, 1, 81000, 0x0f05c7e2
0, 53, 53, 1, 81000, 0xba94e323
0, 54, 54, 1, 81000, 0x0de7b0c2
0, 55, 55, 1, 81000, 0xfcf93c55
0, 56, 56, 1, 81000, 0x8a8dbd55
0, 49, 49, 1, 81000, 0x8d066aae
0, 50, 50, 1, 81000, 0x09effe79
0, 51, 51, 1, 81000, 0xecc540ae
0, 52, 52, 1, 81000, 0x845dc90c
0, 53, 53, 1, 81000, 0x9c2fe4d2
0, 54, 54, 1, 81000, 0x8887b277
0, 55, 55, 1, 81000, 0x3bdc3ca9
0, 56, 56, 1, 81000, 0x094fbe27
0, 57, 57, 1, 81000, 0xddf22b97
0, 58, 58, 1, 81000, 0x49a830ff
0, 59, 59, 1, 81000, 0x82ab2a4b
0, 60, 60, 1, 81000, 0xd23420e5
0, 61, 61, 1, 81000, 0x7c1017d1
0, 62, 62, 1, 81000, 0x9aa61b38
0, 63, 63, 1, 81000, 0x2a724a18
0, 64, 64, 1, 81000, 0xc18055f2
0, 65, 65, 1, 81000, 0xecba3855
0, 66, 66, 1, 81000, 0x0eed6b0f
0, 67, 67, 1, 81000, 0x4be73816
0, 68, 68, 1, 81000, 0xa681214e
0, 69, 69, 1, 81000, 0x4958f83d
0, 70, 70, 1, 81000, 0xca0f0d61
0, 71, 71, 1, 81000, 0x3c453de1
0, 72, 72, 1, 81000, 0xff60360a
0, 73, 73, 1, 81000, 0xdcef0949
0, 58, 58, 1, 81000, 0x31b23156
0, 59, 59, 1, 81000, 0xf5bf2ad8
0, 60, 60, 1, 81000, 0x4a9321c4
0, 61, 61, 1, 81000, 0xdd1b18ca
0, 62, 62, 1, 81000, 0x4ece1cdd
0, 63, 63, 1, 81000, 0x6a9a4b53
0, 64, 64, 1, 81000, 0x6624578b
0, 65, 65, 1, 81000, 0x89273a0f
0, 66, 66, 1, 81000, 0x9eb56c4c
0, 67, 67, 1, 81000, 0xe60238f5
0, 68, 68, 1, 81000, 0xbc4c228a
0, 69, 69, 1, 81000, 0x3feefa08
0, 70, 70, 1, 81000, 0x0d620f37
0, 71, 71, 1, 81000, 0x93693fc8
0, 72, 72, 1, 81000, 0xfc4b3848
0, 73, 73, 1, 81000, 0xd9950bfb
0, 74, 74, 1, 81000, 0xe5e3732d
0, 75, 75, 1, 81000, 0x39747fd4
0, 76, 76, 1, 81000, 0x6bec70e6
0, 77, 77, 1, 81000, 0x7026a8c0
0, 78, 78, 1, 81000, 0x92de5b61
0, 79, 79, 1, 81000, 0x3f00507f
0, 80, 80, 1, 81000, 0x5620c377
0, 75, 75, 1, 81000, 0x53517fd2
0, 76, 76, 1, 81000, 0xb57c70b0
0, 77, 77, 1, 81000, 0x378ea87c
0, 78, 78, 1, 81000, 0xfd2b5b58
0, 79, 79, 1, 81000, 0x66d45077
0, 80, 80, 1, 81000, 0x6e07c3f8
0, 81, 81, 1, 81000, 0x39f5ed38
0, 82, 82, 1, 81000, 0x6ee35d67
0, 83, 83, 1, 81000, 0x4f99a409
0, 84, 84, 1, 81000, 0x0a05b6ea
0, 85, 85, 1, 81000, 0xd6c442d9
0, 86, 86, 1, 81000, 0x0bb3d2f0
0, 87, 87, 1, 81000, 0x6891c5b1
0, 88, 88, 1, 81000, 0xf16ba9be
0, 89, 89, 1, 81000, 0xba53528e
0, 90, 90, 1, 81000, 0xc847de49
0, 82, 82, 1, 81000, 0x55b05da7
0, 83, 83, 1, 81000, 0x7f78a42c
0, 84, 84, 1, 81000, 0x5139b79c
0, 85, 85, 1, 81000, 0x4054437d
0, 86, 86, 1, 81000, 0x0f9dd327
0, 87, 87, 1, 81000, 0xa885c60e
0, 88, 88, 1, 81000, 0x37abaa72
0, 89, 89, 1, 81000, 0xdab25345
0, 90, 90, 1, 81000, 0xbdf4df9d
0, 91, 91, 1, 81000, 0xc5b2e2b0
0, 92, 92, 1, 81000, 0xb0b497ff