From 13478b270adffcdf6fb2f0daf28b64dfbf71515a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Thu, 18 Apr 2013 03:35:20 +0200 Subject: [PATCH] gif: use only one graphic control extension block per image. The encoder now doesn't produce any extra graphic control extension block anymore. Only the image is encoded, and the muxer writing its own GCE containing notably the timing information now includes the optional palette transmitted through packet side data. This commit avoid setting clashes between the two GCE, and reduce the size of the generated file with pal8 output. --- libavcodec/gif.c | 29 +--- libavformat/gif.c | 28 ++- tests/ref/fate/gifenc-pal8 | 346 ++++++++++++++++++------------------- 3 files changed, 205 insertions(+), 198 deletions(-) diff --git a/libavcodec/gif.c b/libavcodec/gif.c index b35cfd1b46..0df302e65a 100644 --- a/libavcodec/gif.c +++ b/libavcodec/gif.c @@ -56,28 +56,6 @@ static int gif_image_write_image(AVCodecContext *avctx, int x_start = 0, y_start = 0; const uint8_t *ptr; - /* Mark one colour as transparent if the input palette contains at least - * one colour that is more than 50% transparent. */ - if (palette) { - unsigned i, smallest_alpha = 0xFF, alpha_component = 0; - for (i = 0; i < AVPALETTE_COUNT; i++) { - const uint32_t v = palette[i]; - if (v >> 24 < smallest_alpha) { - smallest_alpha = v >> 24; - alpha_component = i; - } - } - if (smallest_alpha < 128) { - bytestream_put_byte(bytestream, 0x21); /* Extension Introducer */ - bytestream_put_byte(bytestream, 0xf9); /* Graphic Control Label */ - bytestream_put_byte(bytestream, 0x04); /* block length */ - bytestream_put_byte(bytestream, 0x01); /* Transparent Color Flag */ - bytestream_put_le16(bytestream, 0x00); /* no delay */ - bytestream_put_byte(bytestream, alpha_component); - bytestream_put_byte(bytestream, 0x00); - } - } - /* Crop image */ // TODO support with palette change if (s->last_frame && !palette) { @@ -210,8 +188,13 @@ static int gif_encode_frame(AVCodecContext *avctx, AVPacket *pkt, p->pict_type = AV_PICTURE_TYPE_I; p->key_frame = 1; - if (avctx->pix_fmt == AV_PIX_FMT_PAL8) + if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { + uint8_t *pal_exdata = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE, AVPALETTE_SIZE); + if (!pal_exdata) + return AVERROR(ENOMEM); + memcpy(pal_exdata, p->data[1], AVPALETTE_SIZE); palette = (uint32_t*)p->data[1]; + } gif_image_write_image(avctx, &outbuf_ptr, end, palette, pict->data[0], pict->linesize[0]); if (!s->last_frame) { diff --git a/libavformat/gif.c b/libavformat/gif.c index 3d86f23fe6..f26d537b84 100644 --- a/libavformat/gif.c +++ b/libavformat/gif.c @@ -102,15 +102,39 @@ static int gif_write_header(AVFormatContext *s) static int gif_write_packet(AVFormatContext *s, AVPacket *pkt) { + int size; AVCodecContext *enc = s->streams[pkt->stream_index]->codec; AVIOContext *pb = s->pb; int jiffies; + uint8_t flags = 0x4, transparent_color_index = 0x1f; + const uint32_t *palette; + + /* Mark one colour as transparent if the input palette contains at least + * one colour that is more than 50% transparent. */ + palette = (uint32_t*)av_packet_get_side_data(pkt, AV_PKT_DATA_PALETTE, &size); + if (palette && size != AVPALETTE_SIZE) { + av_log(s, AV_LOG_ERROR, "Invalid palette extradata\n"); + return AVERROR_INVALIDDATA; + } + if (palette) { + unsigned i, smallest_alpha = 0xff; + + for (i = 0; i < AVPALETTE_COUNT; i++) { + const uint32_t v = palette[i]; + if (v >> 24 < smallest_alpha) { + smallest_alpha = v >> 24; + transparent_color_index = i; + } + } + if (smallest_alpha < 128) + flags |= 0x1; /* Transparent Color Flag */ + } /* graphic control extension block */ avio_w8(pb, 0x21); avio_w8(pb, 0xf9); avio_w8(pb, 0x04); /* block size */ - avio_w8(pb, 0x04); /* flags */ + avio_w8(pb, flags); /* 1 jiffy is 1/70 s */ /* the delay_time field indicates the number of jiffies - 1 */ @@ -121,7 +145,7 @@ static int gif_write_packet(AVFormatContext *s, AVPacket *pkt) avio_wl16(pb, jiffies); - avio_w8(pb, 0x1f); /* transparent color index */ + avio_w8(pb, transparent_color_index); avio_w8(pb, 0x00); avio_write(pb, pkt->data, pkt->size); diff --git a/tests/ref/fate/gifenc-pal8 b/tests/ref/fate/gifenc-pal8 index 7cf1eaec0c..4ae4d17b4f 100644 --- a/tests/ref/fate/gifenc-pal8 +++ b/tests/ref/fate/gifenc-pal8 @@ -1,174 +1,174 @@ #tb 0: 1/100 -0, 0, 0, 1, 1320, 0x95d1a9e9 -0, 10, 10, 1, 1463, 0xa697fe95 -0, 20, 20, 1, 1637, 0x294d54f9 -0, 30, 30, 1, 1755, 0x7e0b9c4d -0, 40, 40, 1, 1896, 0x4aacc768 -0, 50, 50, 1, 2038, 0x209d1490 -0, 60, 60, 1, 2168, 0x0c405606 -0, 70, 70, 1, 2258, 0xc2fa9229 -0, 80, 80, 1, 2441, 0x2076ec47 -0, 90, 90, 1, 2565, 0x15742730 -0, 100, 100, 1, 2733, 0x2eb57d95 -0, 110, 110, 1, 2849, 0x9f16ad46 -0, 120, 120, 1, 2981, 0xf139f908 -0, 130, 130, 1, 3081, 0x0b2a4aeb -0, 140, 140, 1, 3200, 0x35227f42 -0, 150, 150, 1, 3315, 0x35edc001 -0, 160, 160, 1, 3462, 0x27a20d23 -0, 170, 170, 1, 3599, 0x83c52b01 -0, 180, 180, 1, 3712, 0x947d49d1 -0, 190, 190, 1, 3838, 0xf87eb223 -0, 200, 200, 1, 3948, 0x5203eede -0, 210, 210, 1, 4083, 0x32101e33 -0, 220, 220, 1, 4186, 0x6b0e5a13 -0, 230, 230, 1, 4323, 0x6326a0f5 -0, 240, 240, 1, 4426, 0x5f6bd655 -0, 250, 250, 1, 4564, 0xc62005fd -0, 260, 260, 1, 4664, 0x43e97006 -0, 270, 270, 1, 4808, 0xf6e08d4f -0, 280, 280, 1, 4932, 0x2d51e0b5 -0, 290, 290, 1, 5071, 0x25e830c7 -0, 300, 300, 1, 5246, 0x452e945c -0, 310, 310, 1, 5353, 0x27eec140 -0, 320, 320, 1, 5535, 0xda38038c -0, 330, 330, 1, 5691, 0x358970e4 -0, 340, 340, 1, 5835, 0xd89201d8 -0, 350, 350, 1, 5966, 0xfbee1fed -0, 360, 360, 1, 6082, 0xd4b88e90 -0, 370, 370, 1, 6276, 0x1b02e684 -0, 380, 380, 1, 6382, 0xc1db2297 -0, 390, 390, 1, 6509, 0xc65473a6 -0, 400, 400, 1, 6621, 0xca917a35 -0, 410, 410, 1, 6714, 0x70f29b1d -0, 420, 420, 1, 6822, 0x6f02e7ec -0, 430, 430, 1, 6880, 0x95440d97 -0, 440, 440, 1, 6983, 0xab7a43fb -0, 450, 450, 1, 7085, 0xc3427580 -0, 460, 460, 1, 7242, 0x3d00c5f0 -0, 470, 470, 1, 7349, 0x453fad59 -0, 480, 480, 1, 7513, 0x96d12666 -0, 490, 490, 1, 7575, 0xf8cb3c77 -0, 500, 500, 1, 7759, 0x1fe6ab40 -0, 510, 510, 1, 7846, 0x3853fd0f -0, 520, 520, 1, 7975, 0x88d02c47 -0, 530, 530, 1, 8092, 0xe28a3368 -0, 540, 540, 1, 8188, 0x159a5d3b -0, 550, 550, 1, 8307, 0x598cae50 -0, 560, 560, 1, 8436, 0xd104ee50 -0, 570, 570, 1, 8498, 0x0b1527ed -0, 580, 580, 1, 8559, 0x0f722288 -0, 590, 590, 1, 8661, 0x3efb2500 -0, 600, 600, 1, 8774, 0x1e188a8b -0, 610, 610, 1, 8848, 0x5b438dbb -0, 620, 620, 1, 8968, 0x4b47ecb3 -0, 630, 630, 1, 9036, 0x7a8e0791 -0, 640, 640, 1, 9114, 0x7379131a -0, 650, 650, 1, 9258, 0x06099246 -0, 660, 660, 1, 9423, 0x721ac9ab -0, 670, 670, 1, 9529, 0xbb1c0d18 -0, 680, 680, 1, 9608, 0xc29a05f0 -0, 690, 690, 1, 9668, 0xf35221ff -0, 700, 700, 1, 9709, 0x8c6d33f0 -0, 710, 710, 1, 9810, 0x2d5b59f4 -0, 720, 720, 1, 9879, 0x110ea6e5 -0, 730, 730, 1, 10038, 0x5945f5f4 -0, 740, 740, 1, 10120, 0xab24f519 -0, 750, 750, 1, 10218, 0x090d305a -0, 760, 760, 1, 10231, 0xa77e6a66 -0, 770, 770, 1, 10313, 0x192254b7 -0, 780, 780, 1, 10444, 0x36609934 -0, 790, 790, 1, 10670, 0xfa971206 -0, 800, 800, 1, 10902, 0x01b59fd5 -0, 810, 810, 1, 10992, 0x1f2ab0bc -0, 820, 820, 1, 11044, 0x7f5b1dc2 -0, 830, 830, 1, 11170, 0x0beaee49 -0, 840, 840, 1, 11267, 0xb1ae3808 -0, 850, 850, 1, 11427, 0x2cc9aa3f -0, 860, 860, 1, 11529, 0x654de4f3 -0, 870, 870, 1, 11632, 0xf4972bdf -0, 880, 880, 1, 11825, 0x0cd2548c -0, 890, 890, 1, 11864, 0x80758637 -0, 900, 900, 1, 11949, 0x87c86fb9 -0, 910, 910, 1, 12088, 0x1b99c82b -0, 920, 920, 1, 12160, 0x72fbf4ac -0, 930, 930, 1, 12305, 0x9f62069a -0, 940, 940, 1, 12295, 0x0625d96b -0, 950, 950, 1, 12496, 0xe67cb2cf -0, 960, 960, 1, 12660, 0x4d1d05ea -0, 970, 970, 1, 12763, 0x12542531 -0, 980, 980, 1, 12916, 0x37c444db -0, 990, 990, 1, 13021, 0xa1c89f22 -0, 1000, 1000, 1, 13184, 0xe13ad0be -0, 1010, 1010, 1, 13315, 0x11b93a5d -0, 1020, 1020, 1, 13336, 0x128254ee -0, 1030, 1030, 1, 13536, 0x48b7b5de -0, 1040, 1040, 1, 13728, 0x03f4d302 -0, 1050, 1050, 1, 13821, 0xfe4e97eb -0, 1060, 1060, 1, 14002, 0x0de77dfc -0, 1070, 1070, 1, 14156, 0xf1b1d4e1 -0, 1080, 1080, 1, 14256, 0x355320cc -0, 1090, 1090, 1, 14451, 0x306cb131 -0, 1100, 1100, 1, 14508, 0xca729c8e -0, 1110, 1110, 1, 14683, 0x7abec197 -0, 1120, 1120, 1, 14852, 0xa5b90496 -0, 1130, 1130, 1, 15090, 0xcd29839d -0, 1140, 1140, 1, 15225, 0xfd85f899 -0, 1150, 1150, 1, 15340, 0x07411310 -0, 1160, 1160, 1, 15473, 0xe90086c1 -0, 1170, 1170, 1, 15583, 0x524da1f3 -0, 1180, 1180, 1, 15683, 0x404cbd62 -0, 1190, 1190, 1, 15779, 0x3ec01717 -0, 1200, 1200, 1, 15934, 0xac8b4c03 -0, 1210, 1210, 1, 16116, 0xb4fa83c9 -0, 1220, 1220, 1, 16153, 0x18f669c1 -0, 1230, 1230, 1, 16303, 0x765b10e4 -0, 1240, 1240, 1, 16460, 0xc4a8149a -0, 1250, 1250, 1, 16475, 0x48664e2d -0, 1260, 1260, 1, 16710, 0x8a599742 -0, 1270, 1270, 1, 16848, 0x8634a3d5 -0, 1280, 1280, 1, 16955, 0x01f1ebda -0, 1290, 1290, 1, 17044, 0xd57b47df -0, 1300, 1300, 1, 17153, 0xc5cf7bc7 -0, 1310, 1310, 1, 17375, 0xbbeea767 -0, 1320, 1320, 1, 17476, 0xd7a25686 -0, 1330, 1330, 1, 17602, 0x1c99b228 -0, 1340, 1340, 1, 17676, 0xd860d1d2 -0, 1350, 1350, 1, 17799, 0xe4ccb3ae -0, 1360, 1360, 1, 17930, 0xf322e416 -0, 1370, 1370, 1, 18201, 0xc6f1cfa7 -0, 1380, 1380, 1, 18409, 0x7cdfe609 -0, 1390, 1390, 1, 18686, 0xf65e5519 -0, 1400, 1400, 1, 18790, 0x6d5c8a90 -0, 1410, 1410, 1, 18891, 0x4702a6cf -0, 1420, 1420, 1, 18995, 0x69e5e02d -0, 1430, 1430, 1, 19058, 0xc56f0272 -0, 1440, 1440, 1, 19223, 0xe89733f6 -0, 1450, 1450, 1, 19501, 0xdb80f9e9 -0, 1460, 1460, 1, 19566, 0xa3952da8 -0, 1470, 1470, 1, 19692, 0x65925150 -0, 1480, 1480, 1, 19730, 0x1352599a -0, 1490, 1490, 1, 19916, 0xd246bf9b -0, 1500, 1500, 1, 20136, 0x1c462eea -0, 1510, 1510, 1, 20210, 0xdec93f63 -0, 1520, 1520, 1, 20311, 0xdff7836e -0, 1530, 1530, 1, 20377, 0x753d813f -0, 1540, 1540, 1, 20478, 0x7592b1a8 -0, 1550, 1550, 1, 20597, 0x58313994 -0, 1560, 1560, 1, 20717, 0xcdd9c665 -0, 1570, 1570, 1, 20816, 0x803b4b03 -0, 1580, 1580, 1, 20912, 0xce36ce22 -0, 1590, 1590, 1, 20975, 0x1d08e543 -0, 1600, 1600, 1, 21130, 0xc966e24c -0, 1610, 1610, 1, 21343, 0x735e614e -0, 1620, 1620, 1, 21455, 0x78d7afd1 -0, 1630, 1630, 1, 21533, 0x62a10f46 -0, 1640, 1640, 1, 21645, 0x8e53a12f -0, 1650, 1650, 1, 21931, 0x3b2f7226 -0, 1660, 1660, 1, 22009, 0xf06bc58a -0, 1670, 1670, 1, 22115, 0xeeb1c5d7 -0, 1680, 1680, 1, 22211, 0xcbab1084 -0, 1690, 1690, 1, 22380, 0xf07d5cb7 -0, 1700, 1700, 1, 22443, 0xcb79441c -0, 1710, 1710, 1, 22588, 0xcad49814 -0, 1720, 1720, 1, 22706, 0x34924e43 +0, 0, 0, 1, 1320, 0x95d1a9e9, S=1, 1024, 0xec907a9e +0, 10, 10, 1, 1463, 0xa697fe95, S=1, 1024, 0xec907a9e +0, 20, 20, 1, 1637, 0x294d54f9, S=1, 1024, 0xec907a9e +0, 30, 30, 1, 1755, 0x7e0b9c4d, S=1, 1024, 0xec907a9e +0, 40, 40, 1, 1896, 0x4aacc768, S=1, 1024, 0xec907a9e +0, 50, 50, 1, 2038, 0x209d1490, S=1, 1024, 0xec907a9e +0, 60, 60, 1, 2168, 0x0c405606, S=1, 1024, 0xec907a9e +0, 70, 70, 1, 2258, 0xc2fa9229, S=1, 1024, 0xec907a9e +0, 80, 80, 1, 2441, 0x2076ec47, S=1, 1024, 0xec907a9e +0, 90, 90, 1, 2565, 0x15742730, S=1, 1024, 0xec907a9e +0, 100, 100, 1, 2733, 0x2eb57d95, S=1, 1024, 0xec907a9e +0, 110, 110, 1, 2849, 0x9f16ad46, S=1, 1024, 0xec907a9e +0, 120, 120, 1, 2981, 0xf139f908, S=1, 1024, 0xec907a9e +0, 130, 130, 1, 3081, 0x0b2a4aeb, S=1, 1024, 0xec907a9e +0, 140, 140, 1, 3200, 0x35227f42, S=1, 1024, 0xec907a9e +0, 150, 150, 1, 3315, 0x35edc001, S=1, 1024, 0xec907a9e +0, 160, 160, 1, 3462, 0x27a20d23, S=1, 1024, 0xec907a9e +0, 170, 170, 1, 3599, 0x83c52b01, S=1, 1024, 0xec907a9e +0, 180, 180, 1, 3712, 0x947d49d1, S=1, 1024, 0xec907a9e +0, 190, 190, 1, 3838, 0xf87eb223, S=1, 1024, 0xec907a9e +0, 200, 200, 1, 3948, 0x5203eede, S=1, 1024, 0xec907a9e +0, 210, 210, 1, 4083, 0x32101e33, S=1, 1024, 0xec907a9e +0, 220, 220, 1, 4186, 0x6b0e5a13, S=1, 1024, 0xec907a9e +0, 230, 230, 1, 4323, 0x6326a0f5, S=1, 1024, 0xec907a9e +0, 240, 240, 1, 4426, 0x5f6bd655, S=1, 1024, 0xec907a9e +0, 250, 250, 1, 4564, 0xc62005fd, S=1, 1024, 0xec907a9e +0, 260, 260, 1, 4664, 0x43e97006, S=1, 1024, 0xec907a9e +0, 270, 270, 1, 4808, 0xf6e08d4f, S=1, 1024, 0xec907a9e +0, 280, 280, 1, 4932, 0x2d51e0b5, S=1, 1024, 0xec907a9e +0, 290, 290, 1, 5071, 0x25e830c7, S=1, 1024, 0xec907a9e +0, 300, 300, 1, 5246, 0x452e945c, S=1, 1024, 0xec907a9e +0, 310, 310, 1, 5353, 0x27eec140, S=1, 1024, 0xec907a9e +0, 320, 320, 1, 5535, 0xda38038c, S=1, 1024, 0xec907a9e +0, 330, 330, 1, 5691, 0x358970e4, S=1, 1024, 0xec907a9e +0, 340, 340, 1, 5835, 0xd89201d8, S=1, 1024, 0xec907a9e +0, 350, 350, 1, 5966, 0xfbee1fed, S=1, 1024, 0xec907a9e +0, 360, 360, 1, 6082, 0xd4b88e90, S=1, 1024, 0xec907a9e +0, 370, 370, 1, 6276, 0x1b02e684, S=1, 1024, 0xec907a9e +0, 380, 380, 1, 6382, 0xc1db2297, S=1, 1024, 0xec907a9e +0, 390, 390, 1, 6509, 0xc65473a6, S=1, 1024, 0xec907a9e +0, 400, 400, 1, 6621, 0xca917a35, S=1, 1024, 0xec907a9e +0, 410, 410, 1, 6714, 0x70f29b1d, S=1, 1024, 0xec907a9e +0, 420, 420, 1, 6822, 0x6f02e7ec, S=1, 1024, 0xec907a9e +0, 430, 430, 1, 6880, 0x95440d97, S=1, 1024, 0xec907a9e +0, 440, 440, 1, 6983, 0xab7a43fb, S=1, 1024, 0xec907a9e +0, 450, 450, 1, 7085, 0xc3427580, S=1, 1024, 0xec907a9e +0, 460, 460, 1, 7242, 0x3d00c5f0, S=1, 1024, 0xec907a9e +0, 470, 470, 1, 7349, 0x453fad59, S=1, 1024, 0xec907a9e +0, 480, 480, 1, 7513, 0x96d12666, S=1, 1024, 0xec907a9e +0, 490, 490, 1, 7575, 0xf8cb3c77, S=1, 1024, 0xec907a9e +0, 500, 500, 1, 7759, 0x1fe6ab40, S=1, 1024, 0xec907a9e +0, 510, 510, 1, 7846, 0x3853fd0f, S=1, 1024, 0xec907a9e +0, 520, 520, 1, 7975, 0x88d02c47, S=1, 1024, 0xec907a9e +0, 530, 530, 1, 8092, 0xe28a3368, S=1, 1024, 0xec907a9e +0, 540, 540, 1, 8188, 0x159a5d3b, S=1, 1024, 0xec907a9e +0, 550, 550, 1, 8307, 0x598cae50, S=1, 1024, 0xec907a9e +0, 560, 560, 1, 8436, 0xd104ee50, S=1, 1024, 0xec907a9e +0, 570, 570, 1, 8498, 0x0b1527ed, S=1, 1024, 0xec907a9e +0, 580, 580, 1, 8559, 0x0f722288, S=1, 1024, 0xec907a9e +0, 590, 590, 1, 8661, 0x3efb2500, S=1, 1024, 0xec907a9e +0, 600, 600, 1, 8774, 0x1e188a8b, S=1, 1024, 0xec907a9e +0, 610, 610, 1, 8848, 0x5b438dbb, S=1, 1024, 0xec907a9e +0, 620, 620, 1, 8968, 0x4b47ecb3, S=1, 1024, 0xec907a9e +0, 630, 630, 1, 9036, 0x7a8e0791, S=1, 1024, 0xec907a9e +0, 640, 640, 1, 9114, 0x7379131a, S=1, 1024, 0xec907a9e +0, 650, 650, 1, 9258, 0x06099246, S=1, 1024, 0xec907a9e +0, 660, 660, 1, 9423, 0x721ac9ab, S=1, 1024, 0xec907a9e +0, 670, 670, 1, 9529, 0xbb1c0d18, S=1, 1024, 0xec907a9e +0, 680, 680, 1, 9608, 0xc29a05f0, S=1, 1024, 0xec907a9e +0, 690, 690, 1, 9668, 0xf35221ff, S=1, 1024, 0xec907a9e +0, 700, 700, 1, 9709, 0x8c6d33f0, S=1, 1024, 0xec907a9e +0, 710, 710, 1, 9810, 0x2d5b59f4, S=1, 1024, 0xec907a9e +0, 720, 720, 1, 9879, 0x110ea6e5, S=1, 1024, 0xec907a9e +0, 730, 730, 1, 10038, 0x5945f5f4, S=1, 1024, 0xec907a9e +0, 740, 740, 1, 10120, 0xab24f519, S=1, 1024, 0xec907a9e +0, 750, 750, 1, 10218, 0x090d305a, S=1, 1024, 0xec907a9e +0, 760, 760, 1, 10231, 0xa77e6a66, S=1, 1024, 0xec907a9e +0, 770, 770, 1, 10313, 0x192254b7, S=1, 1024, 0xec907a9e +0, 780, 780, 1, 10444, 0x36609934, S=1, 1024, 0xec907a9e +0, 790, 790, 1, 10670, 0xfa971206, S=1, 1024, 0xec907a9e +0, 800, 800, 1, 10902, 0x01b59fd5, S=1, 1024, 0xec907a9e +0, 810, 810, 1, 10992, 0x1f2ab0bc, S=1, 1024, 0xec907a9e +0, 820, 820, 1, 11044, 0x7f5b1dc2, S=1, 1024, 0xec907a9e +0, 830, 830, 1, 11170, 0x0beaee49, S=1, 1024, 0xec907a9e +0, 840, 840, 1, 11267, 0xb1ae3808, S=1, 1024, 0xec907a9e +0, 850, 850, 1, 11427, 0x2cc9aa3f, S=1, 1024, 0xec907a9e +0, 860, 860, 1, 11529, 0x654de4f3, S=1, 1024, 0xec907a9e +0, 870, 870, 1, 11632, 0xf4972bdf, S=1, 1024, 0xec907a9e +0, 880, 880, 1, 11825, 0x0cd2548c, S=1, 1024, 0xec907a9e +0, 890, 890, 1, 11864, 0x80758637, S=1, 1024, 0xec907a9e +0, 900, 900, 1, 11949, 0x87c86fb9, S=1, 1024, 0xec907a9e +0, 910, 910, 1, 12088, 0x1b99c82b, S=1, 1024, 0xec907a9e +0, 920, 920, 1, 12160, 0x72fbf4ac, S=1, 1024, 0xec907a9e +0, 930, 930, 1, 12305, 0x9f62069a, S=1, 1024, 0xec907a9e +0, 940, 940, 1, 12295, 0x0625d96b, S=1, 1024, 0xec907a9e +0, 950, 950, 1, 12496, 0xe67cb2cf, S=1, 1024, 0xec907a9e +0, 960, 960, 1, 12660, 0x4d1d05ea, S=1, 1024, 0xec907a9e +0, 970, 970, 1, 12763, 0x12542531, S=1, 1024, 0xec907a9e +0, 980, 980, 1, 12916, 0x37c444db, S=1, 1024, 0xec907a9e +0, 990, 990, 1, 13021, 0xa1c89f22, S=1, 1024, 0xec907a9e +0, 1000, 1000, 1, 13184, 0xe13ad0be, S=1, 1024, 0xec907a9e +0, 1010, 1010, 1, 13315, 0x11b93a5d, S=1, 1024, 0xec907a9e +0, 1020, 1020, 1, 13336, 0x128254ee, S=1, 1024, 0xec907a9e +0, 1030, 1030, 1, 13536, 0x48b7b5de, S=1, 1024, 0xec907a9e +0, 1040, 1040, 1, 13728, 0x03f4d302, S=1, 1024, 0xec907a9e +0, 1050, 1050, 1, 13821, 0xfe4e97eb, S=1, 1024, 0xec907a9e +0, 1060, 1060, 1, 14002, 0x0de77dfc, S=1, 1024, 0xec907a9e +0, 1070, 1070, 1, 14156, 0xf1b1d4e1, S=1, 1024, 0xec907a9e +0, 1080, 1080, 1, 14256, 0x355320cc, S=1, 1024, 0xec907a9e +0, 1090, 1090, 1, 14451, 0x306cb131, S=1, 1024, 0xec907a9e +0, 1100, 1100, 1, 14508, 0xca729c8e, S=1, 1024, 0xec907a9e +0, 1110, 1110, 1, 14683, 0x7abec197, S=1, 1024, 0xec907a9e +0, 1120, 1120, 1, 14852, 0xa5b90496, S=1, 1024, 0xec907a9e +0, 1130, 1130, 1, 15090, 0xcd29839d, S=1, 1024, 0xec907a9e +0, 1140, 1140, 1, 15225, 0xfd85f899, S=1, 1024, 0xec907a9e +0, 1150, 1150, 1, 15340, 0x07411310, S=1, 1024, 0xec907a9e +0, 1160, 1160, 1, 15473, 0xe90086c1, S=1, 1024, 0xec907a9e +0, 1170, 1170, 1, 15583, 0x524da1f3, S=1, 1024, 0xec907a9e +0, 1180, 1180, 1, 15683, 0x404cbd62, S=1, 1024, 0xec907a9e +0, 1190, 1190, 1, 15779, 0x3ec01717, S=1, 1024, 0xec907a9e +0, 1200, 1200, 1, 15934, 0xac8b4c03, S=1, 1024, 0xec907a9e +0, 1210, 1210, 1, 16116, 0xb4fa83c9, S=1, 1024, 0xec907a9e +0, 1220, 1220, 1, 16153, 0x18f669c1, S=1, 1024, 0xec907a9e +0, 1230, 1230, 1, 16303, 0x765b10e4, S=1, 1024, 0xec907a9e +0, 1240, 1240, 1, 16460, 0xc4a8149a, S=1, 1024, 0xec907a9e +0, 1250, 1250, 1, 16475, 0x48664e2d, S=1, 1024, 0xec907a9e +0, 1260, 1260, 1, 16710, 0x8a599742, S=1, 1024, 0xec907a9e +0, 1270, 1270, 1, 16848, 0x8634a3d5, S=1, 1024, 0xec907a9e +0, 1280, 1280, 1, 16955, 0x01f1ebda, S=1, 1024, 0xec907a9e +0, 1290, 1290, 1, 17044, 0xd57b47df, S=1, 1024, 0xec907a9e +0, 1300, 1300, 1, 17153, 0xc5cf7bc7, S=1, 1024, 0xec907a9e +0, 1310, 1310, 1, 17375, 0xbbeea767, S=1, 1024, 0xec907a9e +0, 1320, 1320, 1, 17476, 0xd7a25686, S=1, 1024, 0xec907a9e +0, 1330, 1330, 1, 17602, 0x1c99b228, S=1, 1024, 0xec907a9e +0, 1340, 1340, 1, 17676, 0xd860d1d2, S=1, 1024, 0xec907a9e +0, 1350, 1350, 1, 17799, 0xe4ccb3ae, S=1, 1024, 0xec907a9e +0, 1360, 1360, 1, 17930, 0xf322e416, S=1, 1024, 0xec907a9e +0, 1370, 1370, 1, 18201, 0xc6f1cfa7, S=1, 1024, 0xec907a9e +0, 1380, 1380, 1, 18409, 0x7cdfe609, S=1, 1024, 0xec907a9e +0, 1390, 1390, 1, 18686, 0xf65e5519, S=1, 1024, 0xec907a9e +0, 1400, 1400, 1, 18790, 0x6d5c8a90, S=1, 1024, 0xec907a9e +0, 1410, 1410, 1, 18891, 0x4702a6cf, S=1, 1024, 0xec907a9e +0, 1420, 1420, 1, 18995, 0x69e5e02d, S=1, 1024, 0xec907a9e +0, 1430, 1430, 1, 19058, 0xc56f0272, S=1, 1024, 0xec907a9e +0, 1440, 1440, 1, 19223, 0xe89733f6, S=1, 1024, 0xec907a9e +0, 1450, 1450, 1, 19501, 0xdb80f9e9, S=1, 1024, 0xec907a9e +0, 1460, 1460, 1, 19566, 0xa3952da8, S=1, 1024, 0xec907a9e +0, 1470, 1470, 1, 19692, 0x65925150, S=1, 1024, 0xec907a9e +0, 1480, 1480, 1, 19730, 0x1352599a, S=1, 1024, 0xec907a9e +0, 1490, 1490, 1, 19916, 0xd246bf9b, S=1, 1024, 0xec907a9e +0, 1500, 1500, 1, 20136, 0x1c462eea, S=1, 1024, 0xec907a9e +0, 1510, 1510, 1, 20210, 0xdec93f63, S=1, 1024, 0xec907a9e +0, 1520, 1520, 1, 20311, 0xdff7836e, S=1, 1024, 0xec907a9e +0, 1530, 1530, 1, 20377, 0x753d813f, S=1, 1024, 0xec907a9e +0, 1540, 1540, 1, 20478, 0x7592b1a8, S=1, 1024, 0xec907a9e +0, 1550, 1550, 1, 20597, 0x58313994, S=1, 1024, 0xec907a9e +0, 1560, 1560, 1, 20717, 0xcdd9c665, S=1, 1024, 0xec907a9e +0, 1570, 1570, 1, 20816, 0x803b4b03, S=1, 1024, 0xec907a9e +0, 1580, 1580, 1, 20912, 0xce36ce22, S=1, 1024, 0xec907a9e +0, 1590, 1590, 1, 20975, 0x1d08e543, S=1, 1024, 0xec907a9e +0, 1600, 1600, 1, 21130, 0xc966e24c, S=1, 1024, 0xec907a9e +0, 1610, 1610, 1, 21343, 0x735e614e, S=1, 1024, 0xec907a9e +0, 1620, 1620, 1, 21455, 0x78d7afd1, S=1, 1024, 0xec907a9e +0, 1630, 1630, 1, 21533, 0x62a10f46, S=1, 1024, 0xec907a9e +0, 1640, 1640, 1, 21645, 0x8e53a12f, S=1, 1024, 0xec907a9e +0, 1650, 1650, 1, 21931, 0x3b2f7226, S=1, 1024, 0xec907a9e +0, 1660, 1660, 1, 22009, 0xf06bc58a, S=1, 1024, 0xec907a9e +0, 1670, 1670, 1, 22115, 0xeeb1c5d7, S=1, 1024, 0xec907a9e +0, 1680, 1680, 1, 22211, 0xcbab1084, S=1, 1024, 0xec907a9e +0, 1690, 1690, 1, 22380, 0xf07d5cb7, S=1, 1024, 0xec907a9e +0, 1700, 1700, 1, 22443, 0xcb79441c, S=1, 1024, 0xec907a9e +0, 1710, 1710, 1, 22588, 0xcad49814, S=1, 1024, 0xec907a9e +0, 1720, 1720, 1, 22706, 0x34924e43, S=1, 1024, 0xec907a9e