summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res-hdpi/images/loop00000.pngbin9715 -> 9201 bytes
-rw-r--r--res-hdpi/images/loop00001.pngbin9823 -> 9276 bytes
-rw-r--r--res-hdpi/images/loop00002.pngbin9807 -> 9279 bytes
-rw-r--r--res-hdpi/images/loop00003.pngbin9748 -> 9267 bytes
-rw-r--r--res-hdpi/images/loop00004.pngbin9966 -> 9476 bytes
-rw-r--r--res-hdpi/images/loop00005.pngbin10030 -> 9528 bytes
-rw-r--r--res-hdpi/images/loop00006.pngbin10211 -> 9690 bytes
-rw-r--r--res-hdpi/images/loop00007.pngbin10300 -> 9779 bytes
-rw-r--r--res-hdpi/images/loop00008.pngbin10271 -> 9764 bytes
-rw-r--r--res-hdpi/images/loop00009.pngbin10172 -> 9678 bytes
-rw-r--r--res-hdpi/images/loop00010.pngbin10252 -> 9798 bytes
-rw-r--r--res-hdpi/images/loop00011.pngbin10194 -> 9731 bytes
-rw-r--r--res-hdpi/images/loop00012.pngbin10246 -> 9821 bytes
-rw-r--r--res-hdpi/images/loop00013.pngbin10280 -> 9829 bytes
-rw-r--r--res-hdpi/images/loop00014.pngbin10263 -> 9823 bytes
-rw-r--r--res-hdpi/images/loop00015.pngbin10214 -> 9800 bytes
-rw-r--r--res-hdpi/images/loop00016.pngbin10308 -> 9890 bytes
-rw-r--r--res-hdpi/images/loop00017.pngbin10082 -> 9641 bytes
-rw-r--r--res-hdpi/images/loop00018.pngbin10115 -> 9681 bytes
-rw-r--r--res-hdpi/images/loop00019.pngbin10004 -> 9578 bytes
-rw-r--r--res-hdpi/images/loop00020.pngbin9793 -> 9383 bytes
-rw-r--r--res-hdpi/images/loop00021.pngbin9952 -> 9529 bytes
-rw-r--r--res-hdpi/images/loop00022.pngbin9784 -> 9372 bytes
-rw-r--r--res-hdpi/images/loop00023.pngbin9758 -> 9307 bytes
-rw-r--r--res-hdpi/images/loop00024.pngbin9738 -> 9284 bytes
-rw-r--r--res-hdpi/images/loop00025.pngbin9716 -> 9279 bytes
-rw-r--r--res-hdpi/images/loop00026.pngbin9912 -> 9477 bytes
-rw-r--r--res-hdpi/images/loop00027.pngbin9716 -> 9265 bytes
-rw-r--r--res-hdpi/images/loop00028.pngbin10005 -> 9532 bytes
-rw-r--r--res-hdpi/images/loop00029.pngbin10038 -> 9536 bytes
-rw-r--r--res-hdpi/images/loop00030.pngbin9975 -> 9511 bytes
-rw-r--r--res-hdpi/images/loop00031.pngbin9855 -> 9368 bytes
-rw-r--r--res-hdpi/images/loop00032.pngbin9743 -> 9280 bytes
-rw-r--r--res-hdpi/images/loop00033.pngbin9989 -> 9513 bytes
-rw-r--r--res-hdpi/images/loop00034.pngbin10005 -> 9521 bytes
-rw-r--r--res-hdpi/images/loop00035.pngbin10192 -> 9692 bytes
-rw-r--r--res-hdpi/images/loop00036.pngbin10112 -> 9636 bytes
-rw-r--r--res-hdpi/images/loop00037.pngbin10325 -> 9833 bytes
-rw-r--r--res-hdpi/images/loop00038.pngbin10477 -> 10034 bytes
-rw-r--r--res-hdpi/images/loop00039.pngbin10458 -> 10005 bytes
-rw-r--r--res-hdpi/images/loop00040.pngbin10381 -> 9925 bytes
-rw-r--r--res-hdpi/images/loop00041.pngbin10791 -> 10310 bytes
-rw-r--r--res-hdpi/images/loop00042.pngbin10753 -> 10307 bytes
-rw-r--r--res-hdpi/images/loop00043.pngbin10721 -> 10253 bytes
-rw-r--r--res-hdpi/images/loop00044.pngbin10763 -> 10274 bytes
-rw-r--r--res-hdpi/images/loop00045.pngbin10839 -> 10364 bytes
-rw-r--r--res-hdpi/images/loop00046.pngbin10883 -> 10416 bytes
-rw-r--r--res-hdpi/images/loop00047.pngbin11049 -> 10593 bytes
-rw-r--r--res-hdpi/images/loop00048.pngbin10971 -> 10473 bytes
-rw-r--r--res-hdpi/images/loop00049.pngbin11018 -> 10521 bytes
-rw-r--r--res-hdpi/images/loop00050.pngbin10662 -> 10203 bytes
-rw-r--r--res-hdpi/images/loop00051.pngbin10500 -> 10022 bytes
-rw-r--r--res-hdpi/images/loop00052.pngbin10593 -> 10115 bytes
-rw-r--r--res-hdpi/images/loop00053.pngbin10591 -> 10126 bytes
-rw-r--r--res-hdpi/images/loop00054.pngbin10594 -> 10117 bytes
-rw-r--r--res-hdpi/images/loop00055.pngbin10338 -> 9845 bytes
-rw-r--r--res-hdpi/images/loop00056.pngbin10291 -> 9782 bytes
-rw-r--r--res-hdpi/images/loop00057.pngbin10227 -> 9735 bytes
-rw-r--r--res-hdpi/images/loop00058.pngbin10082 -> 9582 bytes
-rw-r--r--res-hdpi/images/loop00059.pngbin9914 -> 9391 bytes
-rw-r--r--res-hdpi/images/loop00060.pngbin10011 -> 9512 bytes
-rw-r--r--res-hdpi/images/loop00061.pngbin9884 -> 9383 bytes
-rw-r--r--res-hdpi/images/loop00062.pngbin9943 -> 9404 bytes
-rw-r--r--res-hdpi/images/loop00063.pngbin9961 -> 9421 bytes
-rw-r--r--res-hdpi/images/loop00064.pngbin9965 -> 9430 bytes
-rw-r--r--res-hdpi/images/loop00065.pngbin9969 -> 9429 bytes
-rw-r--r--res-hdpi/images/loop00066.pngbin9816 -> 9308 bytes
-rw-r--r--res-hdpi/images/loop00067.pngbin10008 -> 9516 bytes
-rw-r--r--res-hdpi/images/loop00068.pngbin9980 -> 9468 bytes
-rw-r--r--res-hdpi/images/loop00069.pngbin9829 -> 9302 bytes
-rw-r--r--res-hdpi/images/loop00070.pngbin10000 -> 9517 bytes
-rw-r--r--res-hdpi/images/loop00071.pngbin9831 -> 9358 bytes
-rw-r--r--res-hdpi/images/loop00072.pngbin9641 -> 9165 bytes
-rw-r--r--res-hdpi/images/loop00073.pngbin9616 -> 9171 bytes
-rw-r--r--res-hdpi/images/loop00074.pngbin9440 -> 8981 bytes
-rw-r--r--res-hdpi/images/loop00075.pngbin9238 -> 8780 bytes
-rw-r--r--res-hdpi/images/loop00076.pngbin9244 -> 8790 bytes
-rw-r--r--res-hdpi/images/loop00077.pngbin9056 -> 8609 bytes
-rw-r--r--res-hdpi/images/loop00078.pngbin9027 -> 8561 bytes
-rw-r--r--res-hdpi/images/loop00079.pngbin9030 -> 8543 bytes
-rw-r--r--res-hdpi/images/loop00080.pngbin9251 -> 8797 bytes
-rw-r--r--res-hdpi/images/loop00081.pngbin9435 -> 9012 bytes
-rw-r--r--res-hdpi/images/loop00082.pngbin9672 -> 9226 bytes
-rw-r--r--res-hdpi/images/loop00083.pngbin9581 -> 9140 bytes
-rw-r--r--res-hdpi/images/loop00084.pngbin9684 -> 9214 bytes
-rw-r--r--res-hdpi/images/loop00085.pngbin9824 -> 9336 bytes
-rw-r--r--res-hdpi/images/loop00086.pngbin9833 -> 9322 bytes
-rw-r--r--res-hdpi/images/loop00087.pngbin9827 -> 9309 bytes
-rw-r--r--res-hdpi/images/loop00088.pngbin9772 -> 9265 bytes
-rw-r--r--res-hdpi/images/loop00089.pngbin9626 -> 9137 bytes
-rw-r--r--res-hdpi/images/loop00090.pngbin9715 -> 9201 bytes
-rw-r--r--res-mdpi/images/loop00000.pngbin6155 -> 5900 bytes
-rw-r--r--res-mdpi/images/loop00001.pngbin6135 -> 5873 bytes
-rw-r--r--res-mdpi/images/loop00002.pngbin6122 -> 5854 bytes
-rw-r--r--res-mdpi/images/loop00003.pngbin6181 -> 5924 bytes
-rw-r--r--res-mdpi/images/loop00004.pngbin6224 -> 5981 bytes
-rw-r--r--res-mdpi/images/loop00005.pngbin6280 -> 6052 bytes
-rw-r--r--res-mdpi/images/loop00006.pngbin6318 -> 6096 bytes
-rw-r--r--res-mdpi/images/loop00007.pngbin6345 -> 6126 bytes
-rw-r--r--res-mdpi/images/loop00008.pngbin6382 -> 6132 bytes
-rw-r--r--res-mdpi/images/loop00009.pngbin6406 -> 6179 bytes
-rw-r--r--res-mdpi/images/loop00010.pngbin6299 -> 6078 bytes
-rw-r--r--res-mdpi/images/loop00011.pngbin6373 -> 6167 bytes
-rw-r--r--res-mdpi/images/loop00012.pngbin6269 -> 6079 bytes
-rw-r--r--res-mdpi/images/loop00013.pngbin6351 -> 6147 bytes
-rw-r--r--res-mdpi/images/loop00014.pngbin6257 -> 6052 bytes
-rw-r--r--res-mdpi/images/loop00015.pngbin6288 -> 6089 bytes
-rw-r--r--res-mdpi/images/loop00016.pngbin6273 -> 6069 bytes
-rw-r--r--res-mdpi/images/loop00017.pngbin6228 -> 6040 bytes
-rw-r--r--res-mdpi/images/loop00018.pngbin6248 -> 6055 bytes
-rw-r--r--res-mdpi/images/loop00019.pngbin6116 -> 5923 bytes
-rw-r--r--res-mdpi/images/loop00020.pngbin6031 -> 5831 bytes
-rw-r--r--res-mdpi/images/loop00021.pngbin6036 -> 5844 bytes
-rw-r--r--res-mdpi/images/loop00022.pngbin6049 -> 5839 bytes
-rw-r--r--res-mdpi/images/loop00023.pngbin6077 -> 5865 bytes
-rw-r--r--res-mdpi/images/loop00024.pngbin5992 -> 5789 bytes
-rw-r--r--res-mdpi/images/loop00025.pngbin6007 -> 5779 bytes
-rw-r--r--res-mdpi/images/loop00026.pngbin6029 -> 5819 bytes
-rw-r--r--res-mdpi/images/loop00027.pngbin5993 -> 5763 bytes
-rw-r--r--res-mdpi/images/loop00028.pngbin6004 -> 5769 bytes
-rw-r--r--res-mdpi/images/loop00029.pngbin6146 -> 5932 bytes
-rw-r--r--res-mdpi/images/loop00030.pngbin6196 -> 5973 bytes
-rw-r--r--res-mdpi/images/loop00031.pngbin6134 -> 5904 bytes
-rw-r--r--res-mdpi/images/loop00032.pngbin6114 -> 5872 bytes
-rw-r--r--res-mdpi/images/loop00033.pngbin6083 -> 5843 bytes
-rw-r--r--res-mdpi/images/loop00034.pngbin6132 -> 5903 bytes
-rw-r--r--res-mdpi/images/loop00035.pngbin6239 -> 6000 bytes
-rw-r--r--res-mdpi/images/loop00036.pngbin6260 -> 6023 bytes
-rw-r--r--res-mdpi/images/loop00037.pngbin6317 -> 6057 bytes
-rw-r--r--res-mdpi/images/loop00038.pngbin6424 -> 6204 bytes
-rw-r--r--res-mdpi/images/loop00039.pngbin6479 -> 6265 bytes
-rw-r--r--res-mdpi/images/loop00040.pngbin6515 -> 6307 bytes
-rw-r--r--res-mdpi/images/loop00041.pngbin6643 -> 6420 bytes
-rw-r--r--res-mdpi/images/loop00042.pngbin6654 -> 6448 bytes
-rw-r--r--res-mdpi/images/loop00043.pngbin6619 -> 6411 bytes
-rw-r--r--res-mdpi/images/loop00044.pngbin6730 -> 6504 bytes
-rw-r--r--res-mdpi/images/loop00045.pngbin6622 -> 6384 bytes
-rw-r--r--res-mdpi/images/loop00046.pngbin6683 -> 6447 bytes
-rw-r--r--res-mdpi/images/loop00047.pngbin6655 -> 6437 bytes
-rw-r--r--res-mdpi/images/loop00048.pngbin6768 -> 6532 bytes
-rw-r--r--res-mdpi/images/loop00049.pngbin6671 -> 6424 bytes
-rw-r--r--res-mdpi/images/loop00050.pngbin6572 -> 6323 bytes
-rw-r--r--res-mdpi/images/loop00051.pngbin6551 -> 6327 bytes
-rw-r--r--res-mdpi/images/loop00052.pngbin6561 -> 6342 bytes
-rw-r--r--res-mdpi/images/loop00053.pngbin6486 -> 6263 bytes
-rw-r--r--res-mdpi/images/loop00054.pngbin6559 -> 6347 bytes
-rw-r--r--res-mdpi/images/loop00055.pngbin6498 -> 6277 bytes
-rw-r--r--res-mdpi/images/loop00056.pngbin6369 -> 6133 bytes
-rw-r--r--res-mdpi/images/loop00057.pngbin6336 -> 6103 bytes
-rw-r--r--res-mdpi/images/loop00058.pngbin6329 -> 6083 bytes
-rw-r--r--res-mdpi/images/loop00059.pngbin6261 -> 6014 bytes
-rw-r--r--res-mdpi/images/loop00060.pngbin6168 -> 5930 bytes
-rw-r--r--res-mdpi/images/loop00061.pngbin6161 -> 5902 bytes
-rw-r--r--res-mdpi/images/loop00062.pngbin6185 -> 5927 bytes
-rw-r--r--res-mdpi/images/loop00063.pngbin6235 -> 5952 bytes
-rw-r--r--res-mdpi/images/loop00064.pngbin6226 -> 5965 bytes
-rw-r--r--res-mdpi/images/loop00065.pngbin6280 -> 6010 bytes
-rw-r--r--res-mdpi/images/loop00066.pngbin6167 -> 5918 bytes
-rw-r--r--res-mdpi/images/loop00067.pngbin6161 -> 5916 bytes
-rw-r--r--res-mdpi/images/loop00068.pngbin6234 -> 5976 bytes
-rw-r--r--res-mdpi/images/loop00069.pngbin6190 -> 5941 bytes
-rw-r--r--res-mdpi/images/loop00070.pngbin6168 -> 5948 bytes
-rw-r--r--res-mdpi/images/loop00071.pngbin6083 -> 5867 bytes
-rw-r--r--res-mdpi/images/loop00072.pngbin5992 -> 5777 bytes
-rw-r--r--res-mdpi/images/loop00073.pngbin5967 -> 5757 bytes
-rw-r--r--res-mdpi/images/loop00074.pngbin5818 -> 5602 bytes
-rw-r--r--res-mdpi/images/loop00075.pngbin5717 -> 5468 bytes
-rw-r--r--res-mdpi/images/loop00076.pngbin5724 -> 5507 bytes
-rw-r--r--res-mdpi/images/loop00077.pngbin5644 -> 5417 bytes
-rw-r--r--res-mdpi/images/loop00078.pngbin5660 -> 5415 bytes
-rw-r--r--res-mdpi/images/loop00079.pngbin5670 -> 5430 bytes
-rw-r--r--res-mdpi/images/loop00080.pngbin5718 -> 5478 bytes
-rw-r--r--res-mdpi/images/loop00081.pngbin5872 -> 5633 bytes
-rw-r--r--res-mdpi/images/loop00082.pngbin5929 -> 5706 bytes
-rw-r--r--res-mdpi/images/loop00083.pngbin6009 -> 5783 bytes
-rw-r--r--res-mdpi/images/loop00084.pngbin5988 -> 5750 bytes
-rw-r--r--res-mdpi/images/loop00085.pngbin6026 -> 5778 bytes
-rw-r--r--res-mdpi/images/loop00086.pngbin6021 -> 5782 bytes
-rw-r--r--res-mdpi/images/loop00087.pngbin6163 -> 5927 bytes
-rw-r--r--res-mdpi/images/loop00088.pngbin6127 -> 5882 bytes
-rw-r--r--res-mdpi/images/loop00089.pngbin6243 -> 5992 bytes
-rw-r--r--res-mdpi/images/loop00090.pngbin6155 -> 5900 bytes
-rw-r--r--res-xhdpi/images/loop00000.pngbin13121 -> 12215 bytes
-rw-r--r--res-xhdpi/images/loop00001.pngbin12986 -> 12095 bytes
-rw-r--r--res-xhdpi/images/loop00002.pngbin13588 -> 12714 bytes
-rw-r--r--res-xhdpi/images/loop00003.pngbin13584 -> 12748 bytes
-rw-r--r--res-xhdpi/images/loop00004.pngbin13685 -> 12846 bytes
-rw-r--r--res-xhdpi/images/loop00005.pngbin13802 -> 12919 bytes
-rw-r--r--res-xhdpi/images/loop00006.pngbin14188 -> 13349 bytes
-rw-r--r--res-xhdpi/images/loop00007.pngbin14027 -> 13162 bytes
-rw-r--r--res-xhdpi/images/loop00008.pngbin14273 -> 13426 bytes
-rw-r--r--res-xhdpi/images/loop00009.pngbin14122 -> 13291 bytes
-rw-r--r--res-xhdpi/images/loop00010.pngbin14226 -> 13407 bytes
-rw-r--r--res-xhdpi/images/loop00011.pngbin14155 -> 13346 bytes
-rw-r--r--res-xhdpi/images/loop00012.pngbin14375 -> 13566 bytes
-rw-r--r--res-xhdpi/images/loop00013.pngbin14231 -> 13444 bytes
-rw-r--r--res-xhdpi/images/loop00014.pngbin14037 -> 13322 bytes
-rw-r--r--res-xhdpi/images/loop00015.pngbin14052 -> 13292 bytes
-rw-r--r--res-xhdpi/images/loop00016.pngbin13930 -> 13175 bytes
-rw-r--r--res-xhdpi/images/loop00017.pngbin14127 -> 13359 bytes
-rw-r--r--res-xhdpi/images/loop00018.pngbin14157 -> 13405 bytes
-rw-r--r--res-xhdpi/images/loop00019.pngbin13666 -> 12973 bytes
-rw-r--r--res-xhdpi/images/loop00020.pngbin13677 -> 12998 bytes
-rw-r--r--res-xhdpi/images/loop00021.pngbin13777 -> 13037 bytes
-rw-r--r--res-xhdpi/images/loop00022.pngbin13546 -> 12811 bytes
-rw-r--r--res-xhdpi/images/loop00023.pngbin13674 -> 12911 bytes
-rw-r--r--res-xhdpi/images/loop00024.pngbin13465 -> 12696 bytes
-rw-r--r--res-xhdpi/images/loop00025.pngbin13421 -> 12677 bytes
-rw-r--r--res-xhdpi/images/loop00026.pngbin13507 -> 12789 bytes
-rw-r--r--res-xhdpi/images/loop00027.pngbin13272 -> 12504 bytes
-rw-r--r--res-xhdpi/images/loop00028.pngbin13692 -> 12906 bytes
-rw-r--r--res-xhdpi/images/loop00029.pngbin13709 -> 12916 bytes
-rw-r--r--res-xhdpi/images/loop00030.pngbin13650 -> 12847 bytes
-rw-r--r--res-xhdpi/images/loop00031.pngbin13519 -> 12718 bytes
-rw-r--r--res-xhdpi/images/loop00032.pngbin13523 -> 12708 bytes
-rw-r--r--res-xhdpi/images/loop00033.pngbin13526 -> 12751 bytes
-rw-r--r--res-xhdpi/images/loop00034.pngbin13751 -> 12940 bytes
-rw-r--r--res-xhdpi/images/loop00035.pngbin14005 -> 13215 bytes
-rw-r--r--res-xhdpi/images/loop00036.pngbin14137 -> 13399 bytes
-rw-r--r--res-xhdpi/images/loop00037.pngbin14320 -> 13587 bytes
-rw-r--r--res-xhdpi/images/loop00038.pngbin14322 -> 13600 bytes
-rw-r--r--res-xhdpi/images/loop00039.pngbin14536 -> 13801 bytes
-rw-r--r--res-xhdpi/images/loop00040.pngbin14550 -> 13828 bytes
-rw-r--r--res-xhdpi/images/loop00041.pngbin14691 -> 13956 bytes
-rw-r--r--res-xhdpi/images/loop00042.pngbin14935 -> 14150 bytes
-rw-r--r--res-xhdpi/images/loop00043.pngbin14884 -> 14067 bytes
-rw-r--r--res-xhdpi/images/loop00044.pngbin14958 -> 14166 bytes
-rw-r--r--res-xhdpi/images/loop00045.pngbin14868 -> 14042 bytes
-rw-r--r--res-xhdpi/images/loop00046.pngbin15135 -> 14322 bytes
-rw-r--r--res-xhdpi/images/loop00047.pngbin14967 -> 14156 bytes
-rw-r--r--res-xhdpi/images/loop00048.pngbin15144 -> 14298 bytes
-rw-r--r--res-xhdpi/images/loop00049.pngbin15063 -> 14274 bytes
-rw-r--r--res-xhdpi/images/loop00050.pngbin14846 -> 14025 bytes
-rw-r--r--res-xhdpi/images/loop00051.pngbin14867 -> 14001 bytes
-rw-r--r--res-xhdpi/images/loop00052.pngbin14738 -> 13965 bytes
-rw-r--r--res-xhdpi/images/loop00053.pngbin14750 -> 13886 bytes
-rw-r--r--res-xhdpi/images/loop00054.pngbin14430 -> 13573 bytes
-rw-r--r--res-xhdpi/images/loop00055.pngbin14483 -> 13665 bytes
-rw-r--r--res-xhdpi/images/loop00056.pngbin14106 -> 13313 bytes
-rw-r--r--res-xhdpi/images/loop00057.pngbin14331 -> 13505 bytes
-rw-r--r--res-xhdpi/images/loop00058.pngbin13771 -> 12874 bytes
-rw-r--r--res-xhdpi/images/loop00059.pngbin13765 -> 12906 bytes
-rw-r--r--res-xhdpi/images/loop00060.pngbin13502 -> 12708 bytes
-rw-r--r--res-xhdpi/images/loop00061.pngbin13758 -> 12947 bytes
-rw-r--r--res-xhdpi/images/loop00062.pngbin13659 -> 12817 bytes
-rw-r--r--res-xhdpi/images/loop00063.pngbin13836 -> 13004 bytes
-rw-r--r--res-xhdpi/images/loop00064.pngbin13734 -> 12871 bytes
-rw-r--r--res-xhdpi/images/loop00065.pngbin13620 -> 12785 bytes
-rw-r--r--res-xhdpi/images/loop00066.pngbin13530 -> 12684 bytes
-rw-r--r--res-xhdpi/images/loop00067.pngbin13549 -> 12712 bytes
-rw-r--r--res-xhdpi/images/loop00068.pngbin13608 -> 12809 bytes
-rw-r--r--res-xhdpi/images/loop00069.pngbin13454 -> 12696 bytes
-rw-r--r--res-xhdpi/images/loop00070.pngbin13830 -> 12995 bytes
-rw-r--r--res-xhdpi/images/loop00071.pngbin13616 -> 12807 bytes
-rw-r--r--res-xhdpi/images/loop00072.pngbin13308 -> 12497 bytes
-rw-r--r--res-xhdpi/images/loop00073.pngbin13150 -> 12366 bytes
-rw-r--r--res-xhdpi/images/loop00074.pngbin13091 -> 12355 bytes
-rw-r--r--res-xhdpi/images/loop00075.pngbin12954 -> 12181 bytes
-rw-r--r--res-xhdpi/images/loop00076.pngbin12621 -> 11868 bytes
-rw-r--r--res-xhdpi/images/loop00077.pngbin12465 -> 11726 bytes
-rw-r--r--res-xhdpi/images/loop00078.pngbin12583 -> 11873 bytes
-rw-r--r--res-xhdpi/images/loop00079.pngbin12643 -> 11893 bytes
-rw-r--r--res-xhdpi/images/loop00080.pngbin12859 -> 12119 bytes
-rw-r--r--res-xhdpi/images/loop00081.pngbin13182 -> 12445 bytes
-rw-r--r--res-xhdpi/images/loop00082.pngbin13031 -> 12273 bytes
-rw-r--r--res-xhdpi/images/loop00083.pngbin12974 -> 12183 bytes
-rw-r--r--res-xhdpi/images/loop00084.pngbin13116 -> 12329 bytes
-rw-r--r--res-xhdpi/images/loop00085.pngbin13734 -> 12875 bytes
-rw-r--r--res-xhdpi/images/loop00086.pngbin13390 -> 12559 bytes
-rw-r--r--res-xhdpi/images/loop00087.pngbin13576 -> 12706 bytes
-rw-r--r--res-xhdpi/images/loop00088.pngbin13439 -> 12610 bytes
-rw-r--r--res-xhdpi/images/loop00089.pngbin13377 -> 12531 bytes
-rw-r--r--res-xhdpi/images/loop00090.pngbin13121 -> 12215 bytes
-rw-r--r--res-xxhdpi/images/loop00000.pngbin23844 -> 22250 bytes
-rw-r--r--res-xxhdpi/images/loop00001.pngbin23888 -> 22260 bytes
-rw-r--r--res-xxhdpi/images/loop00002.pngbin23921 -> 22323 bytes
-rw-r--r--res-xxhdpi/images/loop00003.pngbin23643 -> 22069 bytes
-rw-r--r--res-xxhdpi/images/loop00004.pngbin24601 -> 22969 bytes
-rw-r--r--res-xxhdpi/images/loop00005.pngbin24930 -> 23280 bytes
-rw-r--r--res-xxhdpi/images/loop00006.pngbin25409 -> 23713 bytes
-rw-r--r--res-xxhdpi/images/loop00007.pngbin25252 -> 23577 bytes
-rw-r--r--res-xxhdpi/images/loop00008.pngbin25374 -> 23713 bytes
-rw-r--r--res-xxhdpi/images/loop00009.pngbin25053 -> 23372 bytes
-rw-r--r--res-xxhdpi/images/loop00010.pngbin25072 -> 23521 bytes
-rw-r--r--res-xxhdpi/images/loop00011.pngbin25067 -> 23468 bytes
-rw-r--r--res-xxhdpi/images/loop00012.pngbin24800 -> 23188 bytes
-rw-r--r--res-xxhdpi/images/loop00013.pngbin24816 -> 23279 bytes
-rw-r--r--res-xxhdpi/images/loop00014.pngbin24964 -> 23440 bytes
-rw-r--r--res-xxhdpi/images/loop00015.pngbin25074 -> 23498 bytes
-rw-r--r--res-xxhdpi/images/loop00016.pngbin25015 -> 23475 bytes
-rw-r--r--res-xxhdpi/images/loop00017.pngbin25105 -> 23496 bytes
-rw-r--r--res-xxhdpi/images/loop00018.pngbin25231 -> 23561 bytes
-rw-r--r--res-xxhdpi/images/loop00019.pngbin24874 -> 23270 bytes
-rw-r--r--res-xxhdpi/images/loop00020.pngbin24930 -> 23358 bytes
-rw-r--r--res-xxhdpi/images/loop00021.pngbin24971 -> 23377 bytes
-rw-r--r--res-xxhdpi/images/loop00022.pngbin25078 -> 23475 bytes
-rw-r--r--res-xxhdpi/images/loop00023.pngbin24149 -> 22471 bytes
-rw-r--r--res-xxhdpi/images/loop00024.pngbin24109 -> 22493 bytes
-rw-r--r--res-xxhdpi/images/loop00025.pngbin23882 -> 22297 bytes
-rw-r--r--res-xxhdpi/images/loop00026.pngbin24783 -> 23125 bytes
-rw-r--r--res-xxhdpi/images/loop00027.pngbin24047 -> 22420 bytes
-rw-r--r--res-xxhdpi/images/loop00028.pngbin24328 -> 22678 bytes
-rw-r--r--res-xxhdpi/images/loop00029.pngbin24725 -> 23034 bytes
-rw-r--r--res-xxhdpi/images/loop00030.pngbin24785 -> 23109 bytes
-rw-r--r--res-xxhdpi/images/loop00031.pngbin24155 -> 22555 bytes
-rw-r--r--res-xxhdpi/images/loop00032.pngbin25102 -> 23459 bytes
-rw-r--r--res-xxhdpi/images/loop00033.pngbin24598 -> 23005 bytes
-rw-r--r--res-xxhdpi/images/loop00034.pngbin24534 -> 22961 bytes
-rw-r--r--res-xxhdpi/images/loop00035.pngbin25207 -> 23649 bytes
-rw-r--r--res-xxhdpi/images/loop00036.pngbin24850 -> 23331 bytes
-rw-r--r--res-xxhdpi/images/loop00037.pngbin25157 -> 23640 bytes
-rw-r--r--res-xxhdpi/images/loop00038.pngbin25568 -> 24031 bytes
-rw-r--r--res-xxhdpi/images/loop00039.pngbin25564 -> 24099 bytes
-rw-r--r--res-xxhdpi/images/loop00040.pngbin26059 -> 24521 bytes
-rw-r--r--res-xxhdpi/images/loop00041.pngbin25794 -> 24242 bytes
-rw-r--r--res-xxhdpi/images/loop00042.pngbin26273 -> 24703 bytes
-rw-r--r--res-xxhdpi/images/loop00043.pngbin25908 -> 24344 bytes
-rw-r--r--res-xxhdpi/images/loop00044.pngbin26792 -> 25285 bytes
-rw-r--r--res-xxhdpi/images/loop00045.pngbin26875 -> 25408 bytes
-rw-r--r--res-xxhdpi/images/loop00046.pngbin26449 -> 24991 bytes
-rw-r--r--res-xxhdpi/images/loop00047.pngbin27025 -> 25458 bytes
-rw-r--r--res-xxhdpi/images/loop00048.pngbin27182 -> 25598 bytes
-rw-r--r--res-xxhdpi/images/loop00049.pngbin27526 -> 25977 bytes
-rw-r--r--res-xxhdpi/images/loop00050.pngbin25743 -> 24186 bytes
-rw-r--r--res-xxhdpi/images/loop00051.pngbin26020 -> 24442 bytes
-rw-r--r--res-xxhdpi/images/loop00052.pngbin26003 -> 24436 bytes
-rw-r--r--res-xxhdpi/images/loop00053.pngbin25282 -> 23786 bytes
-rw-r--r--res-xxhdpi/images/loop00054.pngbin25708 -> 24167 bytes
-rw-r--r--res-xxhdpi/images/loop00055.pngbin25423 -> 23910 bytes
-rw-r--r--res-xxhdpi/images/loop00056.pngbin25506 -> 23882 bytes
-rw-r--r--res-xxhdpi/images/loop00057.pngbin25419 -> 23858 bytes
-rw-r--r--res-xxhdpi/images/loop00058.pngbin24999 -> 23387 bytes
-rw-r--r--res-xxhdpi/images/loop00059.pngbin24117 -> 22514 bytes
-rw-r--r--res-xxhdpi/images/loop00060.pngbin24146 -> 22566 bytes
-rw-r--r--res-xxhdpi/images/loop00061.pngbin24194 -> 22578 bytes
-rw-r--r--res-xxhdpi/images/loop00062.pngbin24219 -> 22564 bytes
-rw-r--r--res-xxhdpi/images/loop00063.pngbin24330 -> 22657 bytes
-rw-r--r--res-xxhdpi/images/loop00064.pngbin24550 -> 22874 bytes
-rw-r--r--res-xxhdpi/images/loop00065.pngbin24535 -> 22746 bytes
-rw-r--r--res-xxhdpi/images/loop00066.pngbin24626 -> 22808 bytes
-rw-r--r--res-xxhdpi/images/loop00067.pngbin24133 -> 22384 bytes
-rw-r--r--res-xxhdpi/images/loop00068.pngbin24107 -> 22328 bytes
-rw-r--r--res-xxhdpi/images/loop00069.pngbin24891 -> 23196 bytes
-rw-r--r--res-xxhdpi/images/loop00070.pngbin24404 -> 22758 bytes
-rw-r--r--res-xxhdpi/images/loop00071.pngbin24130 -> 22433 bytes
-rw-r--r--res-xxhdpi/images/loop00072.pngbin24004 -> 22350 bytes
-rw-r--r--res-xxhdpi/images/loop00073.pngbin23694 -> 22077 bytes
-rw-r--r--res-xxhdpi/images/loop00074.pngbin23131 -> 21585 bytes
-rw-r--r--res-xxhdpi/images/loop00075.pngbin23422 -> 21795 bytes
-rw-r--r--res-xxhdpi/images/loop00076.pngbin22994 -> 21463 bytes
-rw-r--r--res-xxhdpi/images/loop00077.pngbin23012 -> 21422 bytes
-rw-r--r--res-xxhdpi/images/loop00078.pngbin22839 -> 21289 bytes
-rw-r--r--res-xxhdpi/images/loop00079.pngbin23360 -> 21748 bytes
-rw-r--r--res-xxhdpi/images/loop00080.pngbin23761 -> 22136 bytes
-rw-r--r--res-xxhdpi/images/loop00081.pngbin23512 -> 21906 bytes
-rw-r--r--res-xxhdpi/images/loop00082.pngbin23673 -> 22050 bytes
-rw-r--r--res-xxhdpi/images/loop00083.pngbin24356 -> 22755 bytes
-rw-r--r--res-xxhdpi/images/loop00084.pngbin23987 -> 22357 bytes
-rw-r--r--res-xxhdpi/images/loop00085.pngbin24223 -> 22632 bytes
-rw-r--r--res-xxhdpi/images/loop00086.pngbin24309 -> 22726 bytes
-rw-r--r--res-xxhdpi/images/loop00087.pngbin24488 -> 22801 bytes
-rw-r--r--res-xxhdpi/images/loop00088.pngbin24539 -> 22898 bytes
-rw-r--r--res-xxhdpi/images/loop00089.pngbin24543 -> 22853 bytes
-rw-r--r--res-xxhdpi/images/loop00090.pngbin23844 -> 22250 bytes
-rw-r--r--res-xxxhdpi/images/loop00000.pngbin32138 -> 29744 bytes
-rw-r--r--res-xxxhdpi/images/loop00001.pngbin32195 -> 29762 bytes
-rw-r--r--res-xxxhdpi/images/loop00002.pngbin32040 -> 29731 bytes
-rw-r--r--res-xxxhdpi/images/loop00003.pngbin32554 -> 30210 bytes
-rw-r--r--res-xxxhdpi/images/loop00004.pngbin32935 -> 30518 bytes
-rw-r--r--res-xxxhdpi/images/loop00005.pngbin33131 -> 30698 bytes
-rw-r--r--res-xxxhdpi/images/loop00006.pngbin33508 -> 31133 bytes
-rw-r--r--res-xxxhdpi/images/loop00007.pngbin34862 -> 32354 bytes
-rw-r--r--res-xxxhdpi/images/loop00008.pngbin34026 -> 31543 bytes
-rw-r--r--res-xxxhdpi/images/loop00009.pngbin33660 -> 31303 bytes
-rw-r--r--res-xxxhdpi/images/loop00010.pngbin34391 -> 32007 bytes
-rw-r--r--res-xxxhdpi/images/loop00011.pngbin34154 -> 31710 bytes
-rw-r--r--res-xxxhdpi/images/loop00012.pngbin34256 -> 31918 bytes
-rw-r--r--res-xxxhdpi/images/loop00013.pngbin34040 -> 31732 bytes
-rw-r--r--res-xxxhdpi/images/loop00014.pngbin35473 -> 33175 bytes
-rw-r--r--res-xxxhdpi/images/loop00015.pngbin34333 -> 31977 bytes
-rw-r--r--res-xxxhdpi/images/loop00016.pngbin33916 -> 31668 bytes
-rw-r--r--res-xxxhdpi/images/loop00017.pngbin34493 -> 32141 bytes
-rw-r--r--res-xxxhdpi/images/loop00018.pngbin33763 -> 31503 bytes
-rw-r--r--res-xxxhdpi/images/loop00019.pngbin33855 -> 31538 bytes
-rw-r--r--res-xxxhdpi/images/loop00020.pngbin33288 -> 31061 bytes
-rw-r--r--res-xxxhdpi/images/loop00021.pngbin33174 -> 30781 bytes
-rw-r--r--res-xxxhdpi/images/loop00022.pngbin33157 -> 30730 bytes
-rw-r--r--res-xxxhdpi/images/loop00023.pngbin33287 -> 30866 bytes
-rw-r--r--res-xxxhdpi/images/loop00024.pngbin32859 -> 30482 bytes
-rw-r--r--res-xxxhdpi/images/loop00025.pngbin32260 -> 29882 bytes
-rw-r--r--res-xxxhdpi/images/loop00026.pngbin32597 -> 30197 bytes
-rw-r--r--res-xxxhdpi/images/loop00027.pngbin31878 -> 29631 bytes
-rw-r--r--res-xxxhdpi/images/loop00028.pngbin32518 -> 30156 bytes
-rw-r--r--res-xxxhdpi/images/loop00029.pngbin32930 -> 30608 bytes
-rw-r--r--res-xxxhdpi/images/loop00030.pngbin33688 -> 31201 bytes
-rw-r--r--res-xxxhdpi/images/loop00031.pngbin32547 -> 30294 bytes
-rw-r--r--res-xxxhdpi/images/loop00032.pngbin33104 -> 30856 bytes
-rw-r--r--res-xxxhdpi/images/loop00033.pngbin32907 -> 30695 bytes
-rw-r--r--res-xxxhdpi/images/loop00034.pngbin33611 -> 31456 bytes
-rw-r--r--res-xxxhdpi/images/loop00035.pngbin33202 -> 31051 bytes
-rw-r--r--res-xxxhdpi/images/loop00036.pngbin32973 -> 31007 bytes
-rw-r--r--res-xxxhdpi/images/loop00037.pngbin33595 -> 31503 bytes
-rw-r--r--res-xxxhdpi/images/loop00038.pngbin34809 -> 32686 bytes
-rw-r--r--res-xxxhdpi/images/loop00039.pngbin34692 -> 32568 bytes
-rw-r--r--res-xxxhdpi/images/loop00040.pngbin35484 -> 33303 bytes
-rw-r--r--res-xxxhdpi/images/loop00041.pngbin35146 -> 33036 bytes
-rw-r--r--res-xxxhdpi/images/loop00042.pngbin34815 -> 32627 bytes
-rw-r--r--res-xxxhdpi/images/loop00043.pngbin35465 -> 33272 bytes
-rw-r--r--res-xxxhdpi/images/loop00044.pngbin35643 -> 33420 bytes
-rw-r--r--res-xxxhdpi/images/loop00045.pngbin35835 -> 33601 bytes
-rw-r--r--res-xxxhdpi/images/loop00046.pngbin36635 -> 34392 bytes
-rw-r--r--res-xxxhdpi/images/loop00047.pngbin36481 -> 34190 bytes
-rw-r--r--res-xxxhdpi/images/loop00048.pngbin36482 -> 34209 bytes
-rw-r--r--res-xxxhdpi/images/loop00049.pngbin36341 -> 34099 bytes
-rw-r--r--res-xxxhdpi/images/loop00050.pngbin34835 -> 32586 bytes
-rw-r--r--res-xxxhdpi/images/loop00051.pngbin35569 -> 33282 bytes
-rw-r--r--res-xxxhdpi/images/loop00052.pngbin34899 -> 32691 bytes
-rw-r--r--res-xxxhdpi/images/loop00053.pngbin34589 -> 32340 bytes
-rw-r--r--res-xxxhdpi/images/loop00054.pngbin34365 -> 32088 bytes
-rw-r--r--res-xxxhdpi/images/loop00055.pngbin34332 -> 32066 bytes
-rw-r--r--res-xxxhdpi/images/loop00056.pngbin34188 -> 31890 bytes
-rw-r--r--res-xxxhdpi/images/loop00057.pngbin33961 -> 31671 bytes
-rw-r--r--res-xxxhdpi/images/loop00058.pngbin33300 -> 31028 bytes
-rw-r--r--res-xxxhdpi/images/loop00059.pngbin33405 -> 31030 bytes
-rw-r--r--res-xxxhdpi/images/loop00060.pngbin33229 -> 30831 bytes
-rw-r--r--res-xxxhdpi/images/loop00061.pngbin31814 -> 29450 bytes
-rw-r--r--res-xxxhdpi/images/loop00062.pngbin32900 -> 30420 bytes
-rw-r--r--res-xxxhdpi/images/loop00063.pngbin32809 -> 30289 bytes
-rw-r--r--res-xxxhdpi/images/loop00064.pngbin32625 -> 30063 bytes
-rw-r--r--res-xxxhdpi/images/loop00065.pngbin33560 -> 30967 bytes
-rw-r--r--res-xxxhdpi/images/loop00066.pngbin32825 -> 30301 bytes
-rw-r--r--res-xxxhdpi/images/loop00067.pngbin32885 -> 30273 bytes
-rw-r--r--res-xxxhdpi/images/loop00068.pngbin31901 -> 29460 bytes
-rw-r--r--res-xxxhdpi/images/loop00069.pngbin32514 -> 29991 bytes
-rw-r--r--res-xxxhdpi/images/loop00070.pngbin33063 -> 30574 bytes
-rw-r--r--res-xxxhdpi/images/loop00071.pngbin32486 -> 30057 bytes
-rw-r--r--res-xxxhdpi/images/loop00072.pngbin32218 -> 29668 bytes
-rw-r--r--res-xxxhdpi/images/loop00073.pngbin32100 -> 29647 bytes
-rw-r--r--res-xxxhdpi/images/loop00074.pngbin31018 -> 28742 bytes
-rw-r--r--res-xxxhdpi/images/loop00075.pngbin31186 -> 28865 bytes
-rw-r--r--res-xxxhdpi/images/loop00076.pngbin30704 -> 28477 bytes
-rw-r--r--res-xxxhdpi/images/loop00077.pngbin30379 -> 28217 bytes
-rw-r--r--res-xxxhdpi/images/loop00078.pngbin31001 -> 28767 bytes
-rw-r--r--res-xxxhdpi/images/loop00079.pngbin31273 -> 29012 bytes
-rw-r--r--res-xxxhdpi/images/loop00080.pngbin30904 -> 28594 bytes
-rw-r--r--res-xxxhdpi/images/loop00081.pngbin31821 -> 29414 bytes
-rw-r--r--res-xxxhdpi/images/loop00082.pngbin31287 -> 28937 bytes
-rw-r--r--res-xxxhdpi/images/loop00083.pngbin31149 -> 28804 bytes
-rw-r--r--res-xxxhdpi/images/loop00084.pngbin31294 -> 28994 bytes
-rw-r--r--res-xxxhdpi/images/loop00085.pngbin31875 -> 29510 bytes
-rw-r--r--res-xxxhdpi/images/loop00086.pngbin32357 -> 30033 bytes
-rw-r--r--res-xxxhdpi/images/loop00087.pngbin32312 -> 29930 bytes
-rw-r--r--res-xxxhdpi/images/loop00088.pngbin31914 -> 29559 bytes
-rw-r--r--res-xxxhdpi/images/loop00089.pngbin32685 -> 30335 bytes
-rw-r--r--res-xxxhdpi/images/loop00090.pngbin32138 -> 29744 bytes
-rw-r--r--tests/unit/rangeset_test.cpp40
-rw-r--r--tools/recovery_l10n/res/values-hi/strings.xml2
-rw-r--r--update_verifier/update_verifier.cpp2
-rw-r--r--update_verifier/update_verifier.rc8
-rw-r--r--updater/blockimg.cpp392
-rw-r--r--updater/include/updater/rangeset.h125
-rw-r--r--verifier.cpp6
462 files changed, 330 insertions, 245 deletions
diff --git a/res-hdpi/images/loop00000.png b/res-hdpi/images/loop00000.png
index 030fa2b36..9e9d1e320 100644
--- a/res-hdpi/images/loop00000.png
+++ b/res-hdpi/images/loop00000.png
Binary files differ
diff --git a/res-hdpi/images/loop00001.png b/res-hdpi/images/loop00001.png
index 546a10247..cd53cc6cd 100644
--- a/res-hdpi/images/loop00001.png
+++ b/res-hdpi/images/loop00001.png
Binary files differ
diff --git a/res-hdpi/images/loop00002.png b/res-hdpi/images/loop00002.png
index 262be3f24..d5b5cead4 100644
--- a/res-hdpi/images/loop00002.png
+++ b/res-hdpi/images/loop00002.png
Binary files differ
diff --git a/res-hdpi/images/loop00003.png b/res-hdpi/images/loop00003.png
index 1282fb308..50e08ded4 100644
--- a/res-hdpi/images/loop00003.png
+++ b/res-hdpi/images/loop00003.png
Binary files differ
diff --git a/res-hdpi/images/loop00004.png b/res-hdpi/images/loop00004.png
index 2ff7678ff..d69f76263 100644
--- a/res-hdpi/images/loop00004.png
+++ b/res-hdpi/images/loop00004.png
Binary files differ
diff --git a/res-hdpi/images/loop00005.png b/res-hdpi/images/loop00005.png
index 20b4d815b..32d368e28 100644
--- a/res-hdpi/images/loop00005.png
+++ b/res-hdpi/images/loop00005.png
Binary files differ
diff --git a/res-hdpi/images/loop00006.png b/res-hdpi/images/loop00006.png
index 0f5b28d49..fcc750bdf 100644
--- a/res-hdpi/images/loop00006.png
+++ b/res-hdpi/images/loop00006.png
Binary files differ
diff --git a/res-hdpi/images/loop00007.png b/res-hdpi/images/loop00007.png
index 008acc85b..d37ba5ca8 100644
--- a/res-hdpi/images/loop00007.png
+++ b/res-hdpi/images/loop00007.png
Binary files differ
diff --git a/res-hdpi/images/loop00008.png b/res-hdpi/images/loop00008.png
index ca1309dc2..5a1605470 100644
--- a/res-hdpi/images/loop00008.png
+++ b/res-hdpi/images/loop00008.png
Binary files differ
diff --git a/res-hdpi/images/loop00009.png b/res-hdpi/images/loop00009.png
index b2730f198..49ede64ad 100644
--- a/res-hdpi/images/loop00009.png
+++ b/res-hdpi/images/loop00009.png
Binary files differ
diff --git a/res-hdpi/images/loop00010.png b/res-hdpi/images/loop00010.png
index 3867e9c96..f9e219ff7 100644
--- a/res-hdpi/images/loop00010.png
+++ b/res-hdpi/images/loop00010.png
Binary files differ
diff --git a/res-hdpi/images/loop00011.png b/res-hdpi/images/loop00011.png
index 2761d8fcb..3fbe0b5aa 100644
--- a/res-hdpi/images/loop00011.png
+++ b/res-hdpi/images/loop00011.png
Binary files differ
diff --git a/res-hdpi/images/loop00012.png b/res-hdpi/images/loop00012.png
index 2d976ef62..32294612c 100644
--- a/res-hdpi/images/loop00012.png
+++ b/res-hdpi/images/loop00012.png
Binary files differ
diff --git a/res-hdpi/images/loop00013.png b/res-hdpi/images/loop00013.png
index 5c96bb52c..69773ec6c 100644
--- a/res-hdpi/images/loop00013.png
+++ b/res-hdpi/images/loop00013.png
Binary files differ
diff --git a/res-hdpi/images/loop00014.png b/res-hdpi/images/loop00014.png
index d481ec57a..56c15ccde 100644
--- a/res-hdpi/images/loop00014.png
+++ b/res-hdpi/images/loop00014.png
Binary files differ
diff --git a/res-hdpi/images/loop00015.png b/res-hdpi/images/loop00015.png
index 47716ede3..26126814d 100644
--- a/res-hdpi/images/loop00015.png
+++ b/res-hdpi/images/loop00015.png
Binary files differ
diff --git a/res-hdpi/images/loop00016.png b/res-hdpi/images/loop00016.png
index c0cffe85c..69f632ec4 100644
--- a/res-hdpi/images/loop00016.png
+++ b/res-hdpi/images/loop00016.png
Binary files differ
diff --git a/res-hdpi/images/loop00017.png b/res-hdpi/images/loop00017.png
index a0dc2e51f..af356150e 100644
--- a/res-hdpi/images/loop00017.png
+++ b/res-hdpi/images/loop00017.png
Binary files differ
diff --git a/res-hdpi/images/loop00018.png b/res-hdpi/images/loop00018.png
index c8eefc5f8..0f72ff090 100644
--- a/res-hdpi/images/loop00018.png
+++ b/res-hdpi/images/loop00018.png
Binary files differ
diff --git a/res-hdpi/images/loop00019.png b/res-hdpi/images/loop00019.png
index 0d9d8e0fe..f167644c3 100644
--- a/res-hdpi/images/loop00019.png
+++ b/res-hdpi/images/loop00019.png
Binary files differ
diff --git a/res-hdpi/images/loop00020.png b/res-hdpi/images/loop00020.png
index b4909a80d..202a0fe3e 100644
--- a/res-hdpi/images/loop00020.png
+++ b/res-hdpi/images/loop00020.png
Binary files differ
diff --git a/res-hdpi/images/loop00021.png b/res-hdpi/images/loop00021.png
index b3c5274c8..8c102d983 100644
--- a/res-hdpi/images/loop00021.png
+++ b/res-hdpi/images/loop00021.png
Binary files differ
diff --git a/res-hdpi/images/loop00022.png b/res-hdpi/images/loop00022.png
index 827c93707..4bde99c61 100644
--- a/res-hdpi/images/loop00022.png
+++ b/res-hdpi/images/loop00022.png
Binary files differ
diff --git a/res-hdpi/images/loop00023.png b/res-hdpi/images/loop00023.png
index 84440fec6..350acfb07 100644
--- a/res-hdpi/images/loop00023.png
+++ b/res-hdpi/images/loop00023.png
Binary files differ
diff --git a/res-hdpi/images/loop00024.png b/res-hdpi/images/loop00024.png
index cfc4c5bab..dde1a8e70 100644
--- a/res-hdpi/images/loop00024.png
+++ b/res-hdpi/images/loop00024.png
Binary files differ
diff --git a/res-hdpi/images/loop00025.png b/res-hdpi/images/loop00025.png
index fd048fdcf..a133ebd4d 100644
--- a/res-hdpi/images/loop00025.png
+++ b/res-hdpi/images/loop00025.png
Binary files differ
diff --git a/res-hdpi/images/loop00026.png b/res-hdpi/images/loop00026.png
index 68251873a..6825ad93d 100644
--- a/res-hdpi/images/loop00026.png
+++ b/res-hdpi/images/loop00026.png
Binary files differ
diff --git a/res-hdpi/images/loop00027.png b/res-hdpi/images/loop00027.png
index 238dad60a..91bf1cf74 100644
--- a/res-hdpi/images/loop00027.png
+++ b/res-hdpi/images/loop00027.png
Binary files differ
diff --git a/res-hdpi/images/loop00028.png b/res-hdpi/images/loop00028.png
index 55e058d2e..8cba9bba3 100644
--- a/res-hdpi/images/loop00028.png
+++ b/res-hdpi/images/loop00028.png
Binary files differ
diff --git a/res-hdpi/images/loop00029.png b/res-hdpi/images/loop00029.png
index fc761370e..bd0599357 100644
--- a/res-hdpi/images/loop00029.png
+++ b/res-hdpi/images/loop00029.png
Binary files differ
diff --git a/res-hdpi/images/loop00030.png b/res-hdpi/images/loop00030.png
index 920634f89..e30821a93 100644
--- a/res-hdpi/images/loop00030.png
+++ b/res-hdpi/images/loop00030.png
Binary files differ
diff --git a/res-hdpi/images/loop00031.png b/res-hdpi/images/loop00031.png
index f54846461..40198609b 100644
--- a/res-hdpi/images/loop00031.png
+++ b/res-hdpi/images/loop00031.png
Binary files differ
diff --git a/res-hdpi/images/loop00032.png b/res-hdpi/images/loop00032.png
index 4cff5c44c..41832bb94 100644
--- a/res-hdpi/images/loop00032.png
+++ b/res-hdpi/images/loop00032.png
Binary files differ
diff --git a/res-hdpi/images/loop00033.png b/res-hdpi/images/loop00033.png
index 5d2d27222..583f19cba 100644
--- a/res-hdpi/images/loop00033.png
+++ b/res-hdpi/images/loop00033.png
Binary files differ
diff --git a/res-hdpi/images/loop00034.png b/res-hdpi/images/loop00034.png
index b4d73416e..bffa72bcd 100644
--- a/res-hdpi/images/loop00034.png
+++ b/res-hdpi/images/loop00034.png
Binary files differ
diff --git a/res-hdpi/images/loop00035.png b/res-hdpi/images/loop00035.png
index 49025b82d..d65d6b4e8 100644
--- a/res-hdpi/images/loop00035.png
+++ b/res-hdpi/images/loop00035.png
Binary files differ
diff --git a/res-hdpi/images/loop00036.png b/res-hdpi/images/loop00036.png
index b3aa58da5..a26cda154 100644
--- a/res-hdpi/images/loop00036.png
+++ b/res-hdpi/images/loop00036.png
Binary files differ
diff --git a/res-hdpi/images/loop00037.png b/res-hdpi/images/loop00037.png
index ff47e85d6..660530dca 100644
--- a/res-hdpi/images/loop00037.png
+++ b/res-hdpi/images/loop00037.png
Binary files differ
diff --git a/res-hdpi/images/loop00038.png b/res-hdpi/images/loop00038.png
index 8039b925f..a3c9f31b9 100644
--- a/res-hdpi/images/loop00038.png
+++ b/res-hdpi/images/loop00038.png
Binary files differ
diff --git a/res-hdpi/images/loop00039.png b/res-hdpi/images/loop00039.png
index e76d4bc96..609d8cac2 100644
--- a/res-hdpi/images/loop00039.png
+++ b/res-hdpi/images/loop00039.png
Binary files differ
diff --git a/res-hdpi/images/loop00040.png b/res-hdpi/images/loop00040.png
index 963cce7b6..41904445b 100644
--- a/res-hdpi/images/loop00040.png
+++ b/res-hdpi/images/loop00040.png
Binary files differ
diff --git a/res-hdpi/images/loop00041.png b/res-hdpi/images/loop00041.png
index dcd5f1117..9c3c37188 100644
--- a/res-hdpi/images/loop00041.png
+++ b/res-hdpi/images/loop00041.png
Binary files differ
diff --git a/res-hdpi/images/loop00042.png b/res-hdpi/images/loop00042.png
index 72fe63ab4..dd5baae16 100644
--- a/res-hdpi/images/loop00042.png
+++ b/res-hdpi/images/loop00042.png
Binary files differ
diff --git a/res-hdpi/images/loop00043.png b/res-hdpi/images/loop00043.png
index c109af88f..814724ef5 100644
--- a/res-hdpi/images/loop00043.png
+++ b/res-hdpi/images/loop00043.png
Binary files differ
diff --git a/res-hdpi/images/loop00044.png b/res-hdpi/images/loop00044.png
index 6648ec226..63c7392a1 100644
--- a/res-hdpi/images/loop00044.png
+++ b/res-hdpi/images/loop00044.png
Binary files differ
diff --git a/res-hdpi/images/loop00045.png b/res-hdpi/images/loop00045.png
index 90bf4313d..5c666effc 100644
--- a/res-hdpi/images/loop00045.png
+++ b/res-hdpi/images/loop00045.png
Binary files differ
diff --git a/res-hdpi/images/loop00046.png b/res-hdpi/images/loop00046.png
index 50473f0eb..6fa4667ab 100644
--- a/res-hdpi/images/loop00046.png
+++ b/res-hdpi/images/loop00046.png
Binary files differ
diff --git a/res-hdpi/images/loop00047.png b/res-hdpi/images/loop00047.png
index db4702369..52537ea6e 100644
--- a/res-hdpi/images/loop00047.png
+++ b/res-hdpi/images/loop00047.png
Binary files differ
diff --git a/res-hdpi/images/loop00048.png b/res-hdpi/images/loop00048.png
index 462a42131..412fd1c71 100644
--- a/res-hdpi/images/loop00048.png
+++ b/res-hdpi/images/loop00048.png
Binary files differ
diff --git a/res-hdpi/images/loop00049.png b/res-hdpi/images/loop00049.png
index f86af40f2..6cc8ef01b 100644
--- a/res-hdpi/images/loop00049.png
+++ b/res-hdpi/images/loop00049.png
Binary files differ
diff --git a/res-hdpi/images/loop00050.png b/res-hdpi/images/loop00050.png
index 8c0af52ff..caf36c504 100644
--- a/res-hdpi/images/loop00050.png
+++ b/res-hdpi/images/loop00050.png
Binary files differ
diff --git a/res-hdpi/images/loop00051.png b/res-hdpi/images/loop00051.png
index 2360fc0db..1cf8fb4a5 100644
--- a/res-hdpi/images/loop00051.png
+++ b/res-hdpi/images/loop00051.png
Binary files differ
diff --git a/res-hdpi/images/loop00052.png b/res-hdpi/images/loop00052.png
index dd5220018..7ee60e82a 100644
--- a/res-hdpi/images/loop00052.png
+++ b/res-hdpi/images/loop00052.png
Binary files differ
diff --git a/res-hdpi/images/loop00053.png b/res-hdpi/images/loop00053.png
index c7f0c1886..691bca0ea 100644
--- a/res-hdpi/images/loop00053.png
+++ b/res-hdpi/images/loop00053.png
Binary files differ
diff --git a/res-hdpi/images/loop00054.png b/res-hdpi/images/loop00054.png
index 7f16eff59..fa8d0002d 100644
--- a/res-hdpi/images/loop00054.png
+++ b/res-hdpi/images/loop00054.png
Binary files differ
diff --git a/res-hdpi/images/loop00055.png b/res-hdpi/images/loop00055.png
index b9af0ce54..3b7acb052 100644
--- a/res-hdpi/images/loop00055.png
+++ b/res-hdpi/images/loop00055.png
Binary files differ
diff --git a/res-hdpi/images/loop00056.png b/res-hdpi/images/loop00056.png
index 40b9e9b32..1c94d3094 100644
--- a/res-hdpi/images/loop00056.png
+++ b/res-hdpi/images/loop00056.png
Binary files differ
diff --git a/res-hdpi/images/loop00057.png b/res-hdpi/images/loop00057.png
index 51068cb20..703f48e95 100644
--- a/res-hdpi/images/loop00057.png
+++ b/res-hdpi/images/loop00057.png
Binary files differ
diff --git a/res-hdpi/images/loop00058.png b/res-hdpi/images/loop00058.png
index eba4486ac..8dae68a71 100644
--- a/res-hdpi/images/loop00058.png
+++ b/res-hdpi/images/loop00058.png
Binary files differ
diff --git a/res-hdpi/images/loop00059.png b/res-hdpi/images/loop00059.png
index 28761ac84..1105b4381 100644
--- a/res-hdpi/images/loop00059.png
+++ b/res-hdpi/images/loop00059.png
Binary files differ
diff --git a/res-hdpi/images/loop00060.png b/res-hdpi/images/loop00060.png
index 6532eb93a..8ae4a864c 100644
--- a/res-hdpi/images/loop00060.png
+++ b/res-hdpi/images/loop00060.png
Binary files differ
diff --git a/res-hdpi/images/loop00061.png b/res-hdpi/images/loop00061.png
index fbe2e2e9d..c4fca2f7e 100644
--- a/res-hdpi/images/loop00061.png
+++ b/res-hdpi/images/loop00061.png
Binary files differ
diff --git a/res-hdpi/images/loop00062.png b/res-hdpi/images/loop00062.png
index 54341e34a..d59b9d40d 100644
--- a/res-hdpi/images/loop00062.png
+++ b/res-hdpi/images/loop00062.png
Binary files differ
diff --git a/res-hdpi/images/loop00063.png b/res-hdpi/images/loop00063.png
index cfe9c802c..7ac8fdf08 100644
--- a/res-hdpi/images/loop00063.png
+++ b/res-hdpi/images/loop00063.png
Binary files differ
diff --git a/res-hdpi/images/loop00064.png b/res-hdpi/images/loop00064.png
index e1fe674ea..1fa8fe817 100644
--- a/res-hdpi/images/loop00064.png
+++ b/res-hdpi/images/loop00064.png
Binary files differ
diff --git a/res-hdpi/images/loop00065.png b/res-hdpi/images/loop00065.png
index efa35b64a..542ed34cf 100644
--- a/res-hdpi/images/loop00065.png
+++ b/res-hdpi/images/loop00065.png
Binary files differ
diff --git a/res-hdpi/images/loop00066.png b/res-hdpi/images/loop00066.png
index d8c20fef1..7b6af52f5 100644
--- a/res-hdpi/images/loop00066.png
+++ b/res-hdpi/images/loop00066.png
Binary files differ
diff --git a/res-hdpi/images/loop00067.png b/res-hdpi/images/loop00067.png
index ddf1ea4cc..58d4fb732 100644
--- a/res-hdpi/images/loop00067.png
+++ b/res-hdpi/images/loop00067.png
Binary files differ
diff --git a/res-hdpi/images/loop00068.png b/res-hdpi/images/loop00068.png
index 827cfc6af..1f1616e82 100644
--- a/res-hdpi/images/loop00068.png
+++ b/res-hdpi/images/loop00068.png
Binary files differ
diff --git a/res-hdpi/images/loop00069.png b/res-hdpi/images/loop00069.png
index 6ab833f4b..a2dbbfaec 100644
--- a/res-hdpi/images/loop00069.png
+++ b/res-hdpi/images/loop00069.png
Binary files differ
diff --git a/res-hdpi/images/loop00070.png b/res-hdpi/images/loop00070.png
index a4cc06f12..60a345fc9 100644
--- a/res-hdpi/images/loop00070.png
+++ b/res-hdpi/images/loop00070.png
Binary files differ
diff --git a/res-hdpi/images/loop00071.png b/res-hdpi/images/loop00071.png
index 96653c188..ac444273e 100644
--- a/res-hdpi/images/loop00071.png
+++ b/res-hdpi/images/loop00071.png
Binary files differ
diff --git a/res-hdpi/images/loop00072.png b/res-hdpi/images/loop00072.png
index 44a15f874..a9171eb7d 100644
--- a/res-hdpi/images/loop00072.png
+++ b/res-hdpi/images/loop00072.png
Binary files differ
diff --git a/res-hdpi/images/loop00073.png b/res-hdpi/images/loop00073.png
index 8352c7ce0..7911d324c 100644
--- a/res-hdpi/images/loop00073.png
+++ b/res-hdpi/images/loop00073.png
Binary files differ
diff --git a/res-hdpi/images/loop00074.png b/res-hdpi/images/loop00074.png
index 914f1b7fb..dcea580a2 100644
--- a/res-hdpi/images/loop00074.png
+++ b/res-hdpi/images/loop00074.png
Binary files differ
diff --git a/res-hdpi/images/loop00075.png b/res-hdpi/images/loop00075.png
index 372b87139..0a7a5a527 100644
--- a/res-hdpi/images/loop00075.png
+++ b/res-hdpi/images/loop00075.png
Binary files differ
diff --git a/res-hdpi/images/loop00076.png b/res-hdpi/images/loop00076.png
index ffbf28570..674c9d233 100644
--- a/res-hdpi/images/loop00076.png
+++ b/res-hdpi/images/loop00076.png
Binary files differ
diff --git a/res-hdpi/images/loop00077.png b/res-hdpi/images/loop00077.png
index 8dc6a4002..e344f47f3 100644
--- a/res-hdpi/images/loop00077.png
+++ b/res-hdpi/images/loop00077.png
Binary files differ
diff --git a/res-hdpi/images/loop00078.png b/res-hdpi/images/loop00078.png
index cf1ea6120..e0968ce3c 100644
--- a/res-hdpi/images/loop00078.png
+++ b/res-hdpi/images/loop00078.png
Binary files differ
diff --git a/res-hdpi/images/loop00079.png b/res-hdpi/images/loop00079.png
index 8674c822a..2ff1fb088 100644
--- a/res-hdpi/images/loop00079.png
+++ b/res-hdpi/images/loop00079.png
Binary files differ
diff --git a/res-hdpi/images/loop00080.png b/res-hdpi/images/loop00080.png
index 3d84259bb..26de5af76 100644
--- a/res-hdpi/images/loop00080.png
+++ b/res-hdpi/images/loop00080.png
Binary files differ
diff --git a/res-hdpi/images/loop00081.png b/res-hdpi/images/loop00081.png
index aed44c53b..1ef6cdd98 100644
--- a/res-hdpi/images/loop00081.png
+++ b/res-hdpi/images/loop00081.png
Binary files differ
diff --git a/res-hdpi/images/loop00082.png b/res-hdpi/images/loop00082.png
index a39769bdb..334874ff1 100644
--- a/res-hdpi/images/loop00082.png
+++ b/res-hdpi/images/loop00082.png
Binary files differ
diff --git a/res-hdpi/images/loop00083.png b/res-hdpi/images/loop00083.png
index 905355d9e..3b0deb1cb 100644
--- a/res-hdpi/images/loop00083.png
+++ b/res-hdpi/images/loop00083.png
Binary files differ
diff --git a/res-hdpi/images/loop00084.png b/res-hdpi/images/loop00084.png
index c86deea16..4b8494c4c 100644
--- a/res-hdpi/images/loop00084.png
+++ b/res-hdpi/images/loop00084.png
Binary files differ
diff --git a/res-hdpi/images/loop00085.png b/res-hdpi/images/loop00085.png
index 3744ab708..2e5702753 100644
--- a/res-hdpi/images/loop00085.png
+++ b/res-hdpi/images/loop00085.png
Binary files differ
diff --git a/res-hdpi/images/loop00086.png b/res-hdpi/images/loop00086.png
index 0bb9b0963..ab6f437bc 100644
--- a/res-hdpi/images/loop00086.png
+++ b/res-hdpi/images/loop00086.png
Binary files differ
diff --git a/res-hdpi/images/loop00087.png b/res-hdpi/images/loop00087.png
index 83f97bdd0..d6c3dcdde 100644
--- a/res-hdpi/images/loop00087.png
+++ b/res-hdpi/images/loop00087.png
Binary files differ
diff --git a/res-hdpi/images/loop00088.png b/res-hdpi/images/loop00088.png
index 6fd37909a..88b386842 100644
--- a/res-hdpi/images/loop00088.png
+++ b/res-hdpi/images/loop00088.png
Binary files differ
diff --git a/res-hdpi/images/loop00089.png b/res-hdpi/images/loop00089.png
index 09500f87f..5b4551be9 100644
--- a/res-hdpi/images/loop00089.png
+++ b/res-hdpi/images/loop00089.png
Binary files differ
diff --git a/res-hdpi/images/loop00090.png b/res-hdpi/images/loop00090.png
index 030fa2b36..9e9d1e320 100644
--- a/res-hdpi/images/loop00090.png
+++ b/res-hdpi/images/loop00090.png
Binary files differ
diff --git a/res-mdpi/images/loop00000.png b/res-mdpi/images/loop00000.png
index d7092b68f..0e11c0100 100644
--- a/res-mdpi/images/loop00000.png
+++ b/res-mdpi/images/loop00000.png
Binary files differ
diff --git a/res-mdpi/images/loop00001.png b/res-mdpi/images/loop00001.png
index e04a5255a..9d87ecc7d 100644
--- a/res-mdpi/images/loop00001.png
+++ b/res-mdpi/images/loop00001.png
Binary files differ
diff --git a/res-mdpi/images/loop00002.png b/res-mdpi/images/loop00002.png
index e2a783102..4a4798645 100644
--- a/res-mdpi/images/loop00002.png
+++ b/res-mdpi/images/loop00002.png
Binary files differ
diff --git a/res-mdpi/images/loop00003.png b/res-mdpi/images/loop00003.png
index 28f79bf4b..5e01eabd2 100644
--- a/res-mdpi/images/loop00003.png
+++ b/res-mdpi/images/loop00003.png
Binary files differ
diff --git a/res-mdpi/images/loop00004.png b/res-mdpi/images/loop00004.png
index e4bec8084..cebf84a4b 100644
--- a/res-mdpi/images/loop00004.png
+++ b/res-mdpi/images/loop00004.png
Binary files differ
diff --git a/res-mdpi/images/loop00005.png b/res-mdpi/images/loop00005.png
index de673e03a..4d0e8b039 100644
--- a/res-mdpi/images/loop00005.png
+++ b/res-mdpi/images/loop00005.png
Binary files differ
diff --git a/res-mdpi/images/loop00006.png b/res-mdpi/images/loop00006.png
index 71d420311..00f9543cd 100644
--- a/res-mdpi/images/loop00006.png
+++ b/res-mdpi/images/loop00006.png
Binary files differ
diff --git a/res-mdpi/images/loop00007.png b/res-mdpi/images/loop00007.png
index dee70b3b4..95642214c 100644
--- a/res-mdpi/images/loop00007.png
+++ b/res-mdpi/images/loop00007.png
Binary files differ
diff --git a/res-mdpi/images/loop00008.png b/res-mdpi/images/loop00008.png
index 9eccc7fe4..8d41cc514 100644
--- a/res-mdpi/images/loop00008.png
+++ b/res-mdpi/images/loop00008.png
Binary files differ
diff --git a/res-mdpi/images/loop00009.png b/res-mdpi/images/loop00009.png
index d6672ac0f..2761756b8 100644
--- a/res-mdpi/images/loop00009.png
+++ b/res-mdpi/images/loop00009.png
Binary files differ
diff --git a/res-mdpi/images/loop00010.png b/res-mdpi/images/loop00010.png
index 1bb8f5c38..d8b4865de 100644
--- a/res-mdpi/images/loop00010.png
+++ b/res-mdpi/images/loop00010.png
Binary files differ
diff --git a/res-mdpi/images/loop00011.png b/res-mdpi/images/loop00011.png
index 849ce3dd0..84423537e 100644
--- a/res-mdpi/images/loop00011.png
+++ b/res-mdpi/images/loop00011.png
Binary files differ
diff --git a/res-mdpi/images/loop00012.png b/res-mdpi/images/loop00012.png
index cee9dcf04..cb986c532 100644
--- a/res-mdpi/images/loop00012.png
+++ b/res-mdpi/images/loop00012.png
Binary files differ
diff --git a/res-mdpi/images/loop00013.png b/res-mdpi/images/loop00013.png
index 1ef61d734..63b89b29e 100644
--- a/res-mdpi/images/loop00013.png
+++ b/res-mdpi/images/loop00013.png
Binary files differ
diff --git a/res-mdpi/images/loop00014.png b/res-mdpi/images/loop00014.png
index bc84637bd..9713813a4 100644
--- a/res-mdpi/images/loop00014.png
+++ b/res-mdpi/images/loop00014.png
Binary files differ
diff --git a/res-mdpi/images/loop00015.png b/res-mdpi/images/loop00015.png
index f5607f237..3f666d7c6 100644
--- a/res-mdpi/images/loop00015.png
+++ b/res-mdpi/images/loop00015.png
Binary files differ
diff --git a/res-mdpi/images/loop00016.png b/res-mdpi/images/loop00016.png
index 235527c33..3d76b046e 100644
--- a/res-mdpi/images/loop00016.png
+++ b/res-mdpi/images/loop00016.png
Binary files differ
diff --git a/res-mdpi/images/loop00017.png b/res-mdpi/images/loop00017.png
index 88307a6b6..1438d77b8 100644
--- a/res-mdpi/images/loop00017.png
+++ b/res-mdpi/images/loop00017.png
Binary files differ
diff --git a/res-mdpi/images/loop00018.png b/res-mdpi/images/loop00018.png
index 02472d753..c285fc6e9 100644
--- a/res-mdpi/images/loop00018.png
+++ b/res-mdpi/images/loop00018.png
Binary files differ
diff --git a/res-mdpi/images/loop00019.png b/res-mdpi/images/loop00019.png
index f06bdaae5..d6969ec44 100644
--- a/res-mdpi/images/loop00019.png
+++ b/res-mdpi/images/loop00019.png
Binary files differ
diff --git a/res-mdpi/images/loop00020.png b/res-mdpi/images/loop00020.png
index dc522c071..89aa0124e 100644
--- a/res-mdpi/images/loop00020.png
+++ b/res-mdpi/images/loop00020.png
Binary files differ
diff --git a/res-mdpi/images/loop00021.png b/res-mdpi/images/loop00021.png
index 3a53ee53d..b0bd51402 100644
--- a/res-mdpi/images/loop00021.png
+++ b/res-mdpi/images/loop00021.png
Binary files differ
diff --git a/res-mdpi/images/loop00022.png b/res-mdpi/images/loop00022.png
index 09b8eea14..684d023de 100644
--- a/res-mdpi/images/loop00022.png
+++ b/res-mdpi/images/loop00022.png
Binary files differ
diff --git a/res-mdpi/images/loop00023.png b/res-mdpi/images/loop00023.png
index ebc677d41..d008e9873 100644
--- a/res-mdpi/images/loop00023.png
+++ b/res-mdpi/images/loop00023.png
Binary files differ
diff --git a/res-mdpi/images/loop00024.png b/res-mdpi/images/loop00024.png
index a4fd8e508..8fe2185eb 100644
--- a/res-mdpi/images/loop00024.png
+++ b/res-mdpi/images/loop00024.png
Binary files differ
diff --git a/res-mdpi/images/loop00025.png b/res-mdpi/images/loop00025.png
index 9435624ee..c534bbd92 100644
--- a/res-mdpi/images/loop00025.png
+++ b/res-mdpi/images/loop00025.png
Binary files differ
diff --git a/res-mdpi/images/loop00026.png b/res-mdpi/images/loop00026.png
index b7e808154..61b11b555 100644
--- a/res-mdpi/images/loop00026.png
+++ b/res-mdpi/images/loop00026.png
Binary files differ
diff --git a/res-mdpi/images/loop00027.png b/res-mdpi/images/loop00027.png
index 757d8ed90..5c01dfc7b 100644
--- a/res-mdpi/images/loop00027.png
+++ b/res-mdpi/images/loop00027.png
Binary files differ
diff --git a/res-mdpi/images/loop00028.png b/res-mdpi/images/loop00028.png
index 8eefa3a57..c3e61c08e 100644
--- a/res-mdpi/images/loop00028.png
+++ b/res-mdpi/images/loop00028.png
Binary files differ
diff --git a/res-mdpi/images/loop00029.png b/res-mdpi/images/loop00029.png
index 8d890dee6..e0b23ffaa 100644
--- a/res-mdpi/images/loop00029.png
+++ b/res-mdpi/images/loop00029.png
Binary files differ
diff --git a/res-mdpi/images/loop00030.png b/res-mdpi/images/loop00030.png
index 8e0eeb6f8..6618ef7dc 100644
--- a/res-mdpi/images/loop00030.png
+++ b/res-mdpi/images/loop00030.png
Binary files differ
diff --git a/res-mdpi/images/loop00031.png b/res-mdpi/images/loop00031.png
index 178b29d6e..dfde81e69 100644
--- a/res-mdpi/images/loop00031.png
+++ b/res-mdpi/images/loop00031.png
Binary files differ
diff --git a/res-mdpi/images/loop00032.png b/res-mdpi/images/loop00032.png
index 39192c75a..dc6a01ea2 100644
--- a/res-mdpi/images/loop00032.png
+++ b/res-mdpi/images/loop00032.png
Binary files differ
diff --git a/res-mdpi/images/loop00033.png b/res-mdpi/images/loop00033.png
index 0647e5001..86d104bc9 100644
--- a/res-mdpi/images/loop00033.png
+++ b/res-mdpi/images/loop00033.png
Binary files differ
diff --git a/res-mdpi/images/loop00034.png b/res-mdpi/images/loop00034.png
index d6bc079a6..07a6d7cdd 100644
--- a/res-mdpi/images/loop00034.png
+++ b/res-mdpi/images/loop00034.png
Binary files differ
diff --git a/res-mdpi/images/loop00035.png b/res-mdpi/images/loop00035.png
index 68352e85c..3e5cb4ea9 100644
--- a/res-mdpi/images/loop00035.png
+++ b/res-mdpi/images/loop00035.png
Binary files differ
diff --git a/res-mdpi/images/loop00036.png b/res-mdpi/images/loop00036.png
index 92d9da27b..6ac7e35e6 100644
--- a/res-mdpi/images/loop00036.png
+++ b/res-mdpi/images/loop00036.png
Binary files differ
diff --git a/res-mdpi/images/loop00037.png b/res-mdpi/images/loop00037.png
index a0e4d337f..527c48d20 100644
--- a/res-mdpi/images/loop00037.png
+++ b/res-mdpi/images/loop00037.png
Binary files differ
diff --git a/res-mdpi/images/loop00038.png b/res-mdpi/images/loop00038.png
index c52317363..41c6a0356 100644
--- a/res-mdpi/images/loop00038.png
+++ b/res-mdpi/images/loop00038.png
Binary files differ
diff --git a/res-mdpi/images/loop00039.png b/res-mdpi/images/loop00039.png
index aae776583..d24d6429c 100644
--- a/res-mdpi/images/loop00039.png
+++ b/res-mdpi/images/loop00039.png
Binary files differ
diff --git a/res-mdpi/images/loop00040.png b/res-mdpi/images/loop00040.png
index af9e0188b..f3f077f8b 100644
--- a/res-mdpi/images/loop00040.png
+++ b/res-mdpi/images/loop00040.png
Binary files differ
diff --git a/res-mdpi/images/loop00041.png b/res-mdpi/images/loop00041.png
index 8e089c200..33e0715f2 100644
--- a/res-mdpi/images/loop00041.png
+++ b/res-mdpi/images/loop00041.png
Binary files differ
diff --git a/res-mdpi/images/loop00042.png b/res-mdpi/images/loop00042.png
index e3e3b8a49..b1ef14691 100644
--- a/res-mdpi/images/loop00042.png
+++ b/res-mdpi/images/loop00042.png
Binary files differ
diff --git a/res-mdpi/images/loop00043.png b/res-mdpi/images/loop00043.png
index cc8acbaeb..d835f3399 100644
--- a/res-mdpi/images/loop00043.png
+++ b/res-mdpi/images/loop00043.png
Binary files differ
diff --git a/res-mdpi/images/loop00044.png b/res-mdpi/images/loop00044.png
index 9a3a9b998..47ee00f0a 100644
--- a/res-mdpi/images/loop00044.png
+++ b/res-mdpi/images/loop00044.png
Binary files differ
diff --git a/res-mdpi/images/loop00045.png b/res-mdpi/images/loop00045.png
index ec5e3c4d1..2c9dd7127 100644
--- a/res-mdpi/images/loop00045.png
+++ b/res-mdpi/images/loop00045.png
Binary files differ
diff --git a/res-mdpi/images/loop00046.png b/res-mdpi/images/loop00046.png
index 925e2b788..7b0a557bb 100644
--- a/res-mdpi/images/loop00046.png
+++ b/res-mdpi/images/loop00046.png
Binary files differ
diff --git a/res-mdpi/images/loop00047.png b/res-mdpi/images/loop00047.png
index 62fff8864..60368fef6 100644
--- a/res-mdpi/images/loop00047.png
+++ b/res-mdpi/images/loop00047.png
Binary files differ
diff --git a/res-mdpi/images/loop00048.png b/res-mdpi/images/loop00048.png
index 46efe7032..8da21b50b 100644
--- a/res-mdpi/images/loop00048.png
+++ b/res-mdpi/images/loop00048.png
Binary files differ
diff --git a/res-mdpi/images/loop00049.png b/res-mdpi/images/loop00049.png
index 678dce473..8604a1748 100644
--- a/res-mdpi/images/loop00049.png
+++ b/res-mdpi/images/loop00049.png
Binary files differ
diff --git a/res-mdpi/images/loop00050.png b/res-mdpi/images/loop00050.png
index cbc6fdbf0..230ebd99c 100644
--- a/res-mdpi/images/loop00050.png
+++ b/res-mdpi/images/loop00050.png
Binary files differ
diff --git a/res-mdpi/images/loop00051.png b/res-mdpi/images/loop00051.png
index afa906677..3165ae893 100644
--- a/res-mdpi/images/loop00051.png
+++ b/res-mdpi/images/loop00051.png
Binary files differ
diff --git a/res-mdpi/images/loop00052.png b/res-mdpi/images/loop00052.png
index 4d2d98c53..bf4311234 100644
--- a/res-mdpi/images/loop00052.png
+++ b/res-mdpi/images/loop00052.png
Binary files differ
diff --git a/res-mdpi/images/loop00053.png b/res-mdpi/images/loop00053.png
index 48136a5da..7d801fa0a 100644
--- a/res-mdpi/images/loop00053.png
+++ b/res-mdpi/images/loop00053.png
Binary files differ
diff --git a/res-mdpi/images/loop00054.png b/res-mdpi/images/loop00054.png
index 09f706af6..f3ee2468d 100644
--- a/res-mdpi/images/loop00054.png
+++ b/res-mdpi/images/loop00054.png
Binary files differ
diff --git a/res-mdpi/images/loop00055.png b/res-mdpi/images/loop00055.png
index 7565a1c21..fb9fcfff5 100644
--- a/res-mdpi/images/loop00055.png
+++ b/res-mdpi/images/loop00055.png
Binary files differ
diff --git a/res-mdpi/images/loop00056.png b/res-mdpi/images/loop00056.png
index 2765831a9..f6b1ee7f3 100644
--- a/res-mdpi/images/loop00056.png
+++ b/res-mdpi/images/loop00056.png
Binary files differ
diff --git a/res-mdpi/images/loop00057.png b/res-mdpi/images/loop00057.png
index de440e0dd..af009d1ec 100644
--- a/res-mdpi/images/loop00057.png
+++ b/res-mdpi/images/loop00057.png
Binary files differ
diff --git a/res-mdpi/images/loop00058.png b/res-mdpi/images/loop00058.png
index 67d49c78f..1cd550adc 100644
--- a/res-mdpi/images/loop00058.png
+++ b/res-mdpi/images/loop00058.png
Binary files differ
diff --git a/res-mdpi/images/loop00059.png b/res-mdpi/images/loop00059.png
index a622f4587..cf8d18c7b 100644
--- a/res-mdpi/images/loop00059.png
+++ b/res-mdpi/images/loop00059.png
Binary files differ
diff --git a/res-mdpi/images/loop00060.png b/res-mdpi/images/loop00060.png
index 06d6eec8b..cfa53848d 100644
--- a/res-mdpi/images/loop00060.png
+++ b/res-mdpi/images/loop00060.png
Binary files differ
diff --git a/res-mdpi/images/loop00061.png b/res-mdpi/images/loop00061.png
index 7f11945a0..5fcbf4717 100644
--- a/res-mdpi/images/loop00061.png
+++ b/res-mdpi/images/loop00061.png
Binary files differ
diff --git a/res-mdpi/images/loop00062.png b/res-mdpi/images/loop00062.png
index 8197c94cf..d360d2437 100644
--- a/res-mdpi/images/loop00062.png
+++ b/res-mdpi/images/loop00062.png
Binary files differ
diff --git a/res-mdpi/images/loop00063.png b/res-mdpi/images/loop00063.png
index 4093c9b06..7f59a6673 100644
--- a/res-mdpi/images/loop00063.png
+++ b/res-mdpi/images/loop00063.png
Binary files differ
diff --git a/res-mdpi/images/loop00064.png b/res-mdpi/images/loop00064.png
index d09bd1ebd..e02809f50 100644
--- a/res-mdpi/images/loop00064.png
+++ b/res-mdpi/images/loop00064.png
Binary files differ
diff --git a/res-mdpi/images/loop00065.png b/res-mdpi/images/loop00065.png
index cbb6c1b80..597e7965f 100644
--- a/res-mdpi/images/loop00065.png
+++ b/res-mdpi/images/loop00065.png
Binary files differ
diff --git a/res-mdpi/images/loop00066.png b/res-mdpi/images/loop00066.png
index aed0a700a..3f308f007 100644
--- a/res-mdpi/images/loop00066.png
+++ b/res-mdpi/images/loop00066.png
Binary files differ
diff --git a/res-mdpi/images/loop00067.png b/res-mdpi/images/loop00067.png
index dd0da799f..643598277 100644
--- a/res-mdpi/images/loop00067.png
+++ b/res-mdpi/images/loop00067.png
Binary files differ
diff --git a/res-mdpi/images/loop00068.png b/res-mdpi/images/loop00068.png
index 161802c8e..580790b16 100644
--- a/res-mdpi/images/loop00068.png
+++ b/res-mdpi/images/loop00068.png
Binary files differ
diff --git a/res-mdpi/images/loop00069.png b/res-mdpi/images/loop00069.png
index 4ee0372a5..ae2f4e816 100644
--- a/res-mdpi/images/loop00069.png
+++ b/res-mdpi/images/loop00069.png
Binary files differ
diff --git a/res-mdpi/images/loop00070.png b/res-mdpi/images/loop00070.png
index 41a64fff6..82403915a 100644
--- a/res-mdpi/images/loop00070.png
+++ b/res-mdpi/images/loop00070.png
Binary files differ
diff --git a/res-mdpi/images/loop00071.png b/res-mdpi/images/loop00071.png
index c4793d79c..03f157ce8 100644
--- a/res-mdpi/images/loop00071.png
+++ b/res-mdpi/images/loop00071.png
Binary files differ
diff --git a/res-mdpi/images/loop00072.png b/res-mdpi/images/loop00072.png
index 9399d193c..b62dfd0d8 100644
--- a/res-mdpi/images/loop00072.png
+++ b/res-mdpi/images/loop00072.png
Binary files differ
diff --git a/res-mdpi/images/loop00073.png b/res-mdpi/images/loop00073.png
index d4e55adc9..ba746f2cb 100644
--- a/res-mdpi/images/loop00073.png
+++ b/res-mdpi/images/loop00073.png
Binary files differ
diff --git a/res-mdpi/images/loop00074.png b/res-mdpi/images/loop00074.png
index f29a0af5f..bafd21374 100644
--- a/res-mdpi/images/loop00074.png
+++ b/res-mdpi/images/loop00074.png
Binary files differ
diff --git a/res-mdpi/images/loop00075.png b/res-mdpi/images/loop00075.png
index 020568e4a..fe1f3a4df 100644
--- a/res-mdpi/images/loop00075.png
+++ b/res-mdpi/images/loop00075.png
Binary files differ
diff --git a/res-mdpi/images/loop00076.png b/res-mdpi/images/loop00076.png
index 51a54cc98..49960e5ee 100644
--- a/res-mdpi/images/loop00076.png
+++ b/res-mdpi/images/loop00076.png
Binary files differ
diff --git a/res-mdpi/images/loop00077.png b/res-mdpi/images/loop00077.png
index f6e80a918..a112cb8d2 100644
--- a/res-mdpi/images/loop00077.png
+++ b/res-mdpi/images/loop00077.png
Binary files differ
diff --git a/res-mdpi/images/loop00078.png b/res-mdpi/images/loop00078.png
index 944452120..5d69ab843 100644
--- a/res-mdpi/images/loop00078.png
+++ b/res-mdpi/images/loop00078.png
Binary files differ
diff --git a/res-mdpi/images/loop00079.png b/res-mdpi/images/loop00079.png
index b1ef2c308..31f3b5589 100644
--- a/res-mdpi/images/loop00079.png
+++ b/res-mdpi/images/loop00079.png
Binary files differ
diff --git a/res-mdpi/images/loop00080.png b/res-mdpi/images/loop00080.png
index 8a911fba8..42730befa 100644
--- a/res-mdpi/images/loop00080.png
+++ b/res-mdpi/images/loop00080.png
Binary files differ
diff --git a/res-mdpi/images/loop00081.png b/res-mdpi/images/loop00081.png
index f848df4c8..5ea003ef7 100644
--- a/res-mdpi/images/loop00081.png
+++ b/res-mdpi/images/loop00081.png
Binary files differ
diff --git a/res-mdpi/images/loop00082.png b/res-mdpi/images/loop00082.png
index 35b1325aa..ead63597d 100644
--- a/res-mdpi/images/loop00082.png
+++ b/res-mdpi/images/loop00082.png
Binary files differ
diff --git a/res-mdpi/images/loop00083.png b/res-mdpi/images/loop00083.png
index 1571fb5a4..1d10991a1 100644
--- a/res-mdpi/images/loop00083.png
+++ b/res-mdpi/images/loop00083.png
Binary files differ
diff --git a/res-mdpi/images/loop00084.png b/res-mdpi/images/loop00084.png
index 92b529509..5aafdec1d 100644
--- a/res-mdpi/images/loop00084.png
+++ b/res-mdpi/images/loop00084.png
Binary files differ
diff --git a/res-mdpi/images/loop00085.png b/res-mdpi/images/loop00085.png
index cde8880c7..6813c3375 100644
--- a/res-mdpi/images/loop00085.png
+++ b/res-mdpi/images/loop00085.png
Binary files differ
diff --git a/res-mdpi/images/loop00086.png b/res-mdpi/images/loop00086.png
index 45889e551..5d63072c6 100644
--- a/res-mdpi/images/loop00086.png
+++ b/res-mdpi/images/loop00086.png
Binary files differ
diff --git a/res-mdpi/images/loop00087.png b/res-mdpi/images/loop00087.png
index 9cad9aa39..9c65826dd 100644
--- a/res-mdpi/images/loop00087.png
+++ b/res-mdpi/images/loop00087.png
Binary files differ
diff --git a/res-mdpi/images/loop00088.png b/res-mdpi/images/loop00088.png
index dcf98c8b6..6cb1bf0cf 100644
--- a/res-mdpi/images/loop00088.png
+++ b/res-mdpi/images/loop00088.png
Binary files differ
diff --git a/res-mdpi/images/loop00089.png b/res-mdpi/images/loop00089.png
index 584cb8994..b3d742dbf 100644
--- a/res-mdpi/images/loop00089.png
+++ b/res-mdpi/images/loop00089.png
Binary files differ
diff --git a/res-mdpi/images/loop00090.png b/res-mdpi/images/loop00090.png
index d7092b68f..0e11c0100 100644
--- a/res-mdpi/images/loop00090.png
+++ b/res-mdpi/images/loop00090.png
Binary files differ
diff --git a/res-xhdpi/images/loop00000.png b/res-xhdpi/images/loop00000.png
index f5bf7a73b..b438e9e67 100644
--- a/res-xhdpi/images/loop00000.png
+++ b/res-xhdpi/images/loop00000.png
Binary files differ
diff --git a/res-xhdpi/images/loop00001.png b/res-xhdpi/images/loop00001.png
index 95c14ebf3..343a18572 100644
--- a/res-xhdpi/images/loop00001.png
+++ b/res-xhdpi/images/loop00001.png
Binary files differ
diff --git a/res-xhdpi/images/loop00002.png b/res-xhdpi/images/loop00002.png
index 5910fd106..aa5bc616f 100644
--- a/res-xhdpi/images/loop00002.png
+++ b/res-xhdpi/images/loop00002.png
Binary files differ
diff --git a/res-xhdpi/images/loop00003.png b/res-xhdpi/images/loop00003.png
index e6861d2a2..5385340ca 100644
--- a/res-xhdpi/images/loop00003.png
+++ b/res-xhdpi/images/loop00003.png
Binary files differ
diff --git a/res-xhdpi/images/loop00004.png b/res-xhdpi/images/loop00004.png
index 453cdc615..cdead7d74 100644
--- a/res-xhdpi/images/loop00004.png
+++ b/res-xhdpi/images/loop00004.png
Binary files differ
diff --git a/res-xhdpi/images/loop00005.png b/res-xhdpi/images/loop00005.png
index 12157c961..8eb502fdf 100644
--- a/res-xhdpi/images/loop00005.png
+++ b/res-xhdpi/images/loop00005.png
Binary files differ
diff --git a/res-xhdpi/images/loop00006.png b/res-xhdpi/images/loop00006.png
index 5e7838535..60b0f4a61 100644
--- a/res-xhdpi/images/loop00006.png
+++ b/res-xhdpi/images/loop00006.png
Binary files differ
diff --git a/res-xhdpi/images/loop00007.png b/res-xhdpi/images/loop00007.png
index c69abf4f2..a76c588a1 100644
--- a/res-xhdpi/images/loop00007.png
+++ b/res-xhdpi/images/loop00007.png
Binary files differ
diff --git a/res-xhdpi/images/loop00008.png b/res-xhdpi/images/loop00008.png
index 78c3b993c..80e160322 100644
--- a/res-xhdpi/images/loop00008.png
+++ b/res-xhdpi/images/loop00008.png
Binary files differ
diff --git a/res-xhdpi/images/loop00009.png b/res-xhdpi/images/loop00009.png
index e510b6b80..b8f4954c1 100644
--- a/res-xhdpi/images/loop00009.png
+++ b/res-xhdpi/images/loop00009.png
Binary files differ
diff --git a/res-xhdpi/images/loop00010.png b/res-xhdpi/images/loop00010.png
index 9d775faa4..b58d6ac57 100644
--- a/res-xhdpi/images/loop00010.png
+++ b/res-xhdpi/images/loop00010.png
Binary files differ
diff --git a/res-xhdpi/images/loop00011.png b/res-xhdpi/images/loop00011.png
index 36c01957e..0b67f3736 100644
--- a/res-xhdpi/images/loop00011.png
+++ b/res-xhdpi/images/loop00011.png
Binary files differ
diff --git a/res-xhdpi/images/loop00012.png b/res-xhdpi/images/loop00012.png
index ac65096d9..234d77a84 100644
--- a/res-xhdpi/images/loop00012.png
+++ b/res-xhdpi/images/loop00012.png
Binary files differ
diff --git a/res-xhdpi/images/loop00013.png b/res-xhdpi/images/loop00013.png
index e3fdaafa7..13c65243e 100644
--- a/res-xhdpi/images/loop00013.png
+++ b/res-xhdpi/images/loop00013.png
Binary files differ
diff --git a/res-xhdpi/images/loop00014.png b/res-xhdpi/images/loop00014.png
index 6e85108df..92e30e3d8 100644
--- a/res-xhdpi/images/loop00014.png
+++ b/res-xhdpi/images/loop00014.png
Binary files differ
diff --git a/res-xhdpi/images/loop00015.png b/res-xhdpi/images/loop00015.png
index 9e6032951..9c6076dc9 100644
--- a/res-xhdpi/images/loop00015.png
+++ b/res-xhdpi/images/loop00015.png
Binary files differ
diff --git a/res-xhdpi/images/loop00016.png b/res-xhdpi/images/loop00016.png
index 68417aa54..6f626c07b 100644
--- a/res-xhdpi/images/loop00016.png
+++ b/res-xhdpi/images/loop00016.png
Binary files differ
diff --git a/res-xhdpi/images/loop00017.png b/res-xhdpi/images/loop00017.png
index 4ac5dded3..ff67d5bd6 100644
--- a/res-xhdpi/images/loop00017.png
+++ b/res-xhdpi/images/loop00017.png
Binary files differ
diff --git a/res-xhdpi/images/loop00018.png b/res-xhdpi/images/loop00018.png
index d6511287e..67b5d8fe4 100644
--- a/res-xhdpi/images/loop00018.png
+++ b/res-xhdpi/images/loop00018.png
Binary files differ
diff --git a/res-xhdpi/images/loop00019.png b/res-xhdpi/images/loop00019.png
index 374273574..06ca98012 100644
--- a/res-xhdpi/images/loop00019.png
+++ b/res-xhdpi/images/loop00019.png
Binary files differ
diff --git a/res-xhdpi/images/loop00020.png b/res-xhdpi/images/loop00020.png
index 04489a10f..c2288b424 100644
--- a/res-xhdpi/images/loop00020.png
+++ b/res-xhdpi/images/loop00020.png
Binary files differ
diff --git a/res-xhdpi/images/loop00021.png b/res-xhdpi/images/loop00021.png
index 59c70166c..ba5df4618 100644
--- a/res-xhdpi/images/loop00021.png
+++ b/res-xhdpi/images/loop00021.png
Binary files differ
diff --git a/res-xhdpi/images/loop00022.png b/res-xhdpi/images/loop00022.png
index 0b9a59f38..2b1e947ad 100644
--- a/res-xhdpi/images/loop00022.png
+++ b/res-xhdpi/images/loop00022.png
Binary files differ
diff --git a/res-xhdpi/images/loop00023.png b/res-xhdpi/images/loop00023.png
index 31abae79f..292e07472 100644
--- a/res-xhdpi/images/loop00023.png
+++ b/res-xhdpi/images/loop00023.png
Binary files differ
diff --git a/res-xhdpi/images/loop00024.png b/res-xhdpi/images/loop00024.png
index 98d8ee39c..11352f6f7 100644
--- a/res-xhdpi/images/loop00024.png
+++ b/res-xhdpi/images/loop00024.png
Binary files differ
diff --git a/res-xhdpi/images/loop00025.png b/res-xhdpi/images/loop00025.png
index 9f074d266..4212c76a7 100644
--- a/res-xhdpi/images/loop00025.png
+++ b/res-xhdpi/images/loop00025.png
Binary files differ
diff --git a/res-xhdpi/images/loop00026.png b/res-xhdpi/images/loop00026.png
index 063fca2de..774d00f76 100644
--- a/res-xhdpi/images/loop00026.png
+++ b/res-xhdpi/images/loop00026.png
Binary files differ
diff --git a/res-xhdpi/images/loop00027.png b/res-xhdpi/images/loop00027.png
index 67e503a70..1827471b2 100644
--- a/res-xhdpi/images/loop00027.png
+++ b/res-xhdpi/images/loop00027.png
Binary files differ
diff --git a/res-xhdpi/images/loop00028.png b/res-xhdpi/images/loop00028.png
index 7e76be845..f4e79f91d 100644
--- a/res-xhdpi/images/loop00028.png
+++ b/res-xhdpi/images/loop00028.png
Binary files differ
diff --git a/res-xhdpi/images/loop00029.png b/res-xhdpi/images/loop00029.png
index 4902f6b5e..863850011 100644
--- a/res-xhdpi/images/loop00029.png
+++ b/res-xhdpi/images/loop00029.png
Binary files differ
diff --git a/res-xhdpi/images/loop00030.png b/res-xhdpi/images/loop00030.png
index 387b893b0..94fd37619 100644
--- a/res-xhdpi/images/loop00030.png
+++ b/res-xhdpi/images/loop00030.png
Binary files differ
diff --git a/res-xhdpi/images/loop00031.png b/res-xhdpi/images/loop00031.png
index ad116280f..441a52d9e 100644
--- a/res-xhdpi/images/loop00031.png
+++ b/res-xhdpi/images/loop00031.png
Binary files differ
diff --git a/res-xhdpi/images/loop00032.png b/res-xhdpi/images/loop00032.png
index 7d809e6b2..a10598ff6 100644
--- a/res-xhdpi/images/loop00032.png
+++ b/res-xhdpi/images/loop00032.png
Binary files differ
diff --git a/res-xhdpi/images/loop00033.png b/res-xhdpi/images/loop00033.png
index 59fcdc108..96bf45389 100644
--- a/res-xhdpi/images/loop00033.png
+++ b/res-xhdpi/images/loop00033.png
Binary files differ
diff --git a/res-xhdpi/images/loop00034.png b/res-xhdpi/images/loop00034.png
index cb4301c31..59baf8c64 100644
--- a/res-xhdpi/images/loop00034.png
+++ b/res-xhdpi/images/loop00034.png
Binary files differ
diff --git a/res-xhdpi/images/loop00035.png b/res-xhdpi/images/loop00035.png
index 6b1687807..400a8959b 100644
--- a/res-xhdpi/images/loop00035.png
+++ b/res-xhdpi/images/loop00035.png
Binary files differ
diff --git a/res-xhdpi/images/loop00036.png b/res-xhdpi/images/loop00036.png
index 3aa78502f..fda7acc21 100644
--- a/res-xhdpi/images/loop00036.png
+++ b/res-xhdpi/images/loop00036.png
Binary files differ
diff --git a/res-xhdpi/images/loop00037.png b/res-xhdpi/images/loop00037.png
index a60e8512c..d474e6f76 100644
--- a/res-xhdpi/images/loop00037.png
+++ b/res-xhdpi/images/loop00037.png
Binary files differ
diff --git a/res-xhdpi/images/loop00038.png b/res-xhdpi/images/loop00038.png
index 50107f3aa..c5632e191 100644
--- a/res-xhdpi/images/loop00038.png
+++ b/res-xhdpi/images/loop00038.png
Binary files differ
diff --git a/res-xhdpi/images/loop00039.png b/res-xhdpi/images/loop00039.png
index c85201e25..3cf8b867b 100644
--- a/res-xhdpi/images/loop00039.png
+++ b/res-xhdpi/images/loop00039.png
Binary files differ
diff --git a/res-xhdpi/images/loop00040.png b/res-xhdpi/images/loop00040.png
index 6ae161218..ef55a9281 100644
--- a/res-xhdpi/images/loop00040.png
+++ b/res-xhdpi/images/loop00040.png
Binary files differ
diff --git a/res-xhdpi/images/loop00041.png b/res-xhdpi/images/loop00041.png
index 7602b04a7..60bf78084 100644
--- a/res-xhdpi/images/loop00041.png
+++ b/res-xhdpi/images/loop00041.png
Binary files differ
diff --git a/res-xhdpi/images/loop00042.png b/res-xhdpi/images/loop00042.png
index 054da6d75..cee69800b 100644
--- a/res-xhdpi/images/loop00042.png
+++ b/res-xhdpi/images/loop00042.png
Binary files differ
diff --git a/res-xhdpi/images/loop00043.png b/res-xhdpi/images/loop00043.png
index d28be8b8e..fe5abc15a 100644
--- a/res-xhdpi/images/loop00043.png
+++ b/res-xhdpi/images/loop00043.png
Binary files differ
diff --git a/res-xhdpi/images/loop00044.png b/res-xhdpi/images/loop00044.png
index 83271268f..f33fcee56 100644
--- a/res-xhdpi/images/loop00044.png
+++ b/res-xhdpi/images/loop00044.png
Binary files differ
diff --git a/res-xhdpi/images/loop00045.png b/res-xhdpi/images/loop00045.png
index d749e22d7..e61b2a04e 100644
--- a/res-xhdpi/images/loop00045.png
+++ b/res-xhdpi/images/loop00045.png
Binary files differ
diff --git a/res-xhdpi/images/loop00046.png b/res-xhdpi/images/loop00046.png
index 60025d1be..4d919c036 100644
--- a/res-xhdpi/images/loop00046.png
+++ b/res-xhdpi/images/loop00046.png
Binary files differ
diff --git a/res-xhdpi/images/loop00047.png b/res-xhdpi/images/loop00047.png
index b0be5c69c..deaf9a377 100644
--- a/res-xhdpi/images/loop00047.png
+++ b/res-xhdpi/images/loop00047.png
Binary files differ
diff --git a/res-xhdpi/images/loop00048.png b/res-xhdpi/images/loop00048.png
index be926d9f2..82d8b2b88 100644
--- a/res-xhdpi/images/loop00048.png
+++ b/res-xhdpi/images/loop00048.png
Binary files differ
diff --git a/res-xhdpi/images/loop00049.png b/res-xhdpi/images/loop00049.png
index 456085442..a310cc9e6 100644
--- a/res-xhdpi/images/loop00049.png
+++ b/res-xhdpi/images/loop00049.png
Binary files differ
diff --git a/res-xhdpi/images/loop00050.png b/res-xhdpi/images/loop00050.png
index 967dd87ff..ad802300e 100644
--- a/res-xhdpi/images/loop00050.png
+++ b/res-xhdpi/images/loop00050.png
Binary files differ
diff --git a/res-xhdpi/images/loop00051.png b/res-xhdpi/images/loop00051.png
index c1698597a..52f1ce673 100644
--- a/res-xhdpi/images/loop00051.png
+++ b/res-xhdpi/images/loop00051.png
Binary files differ
diff --git a/res-xhdpi/images/loop00052.png b/res-xhdpi/images/loop00052.png
index 27c23830a..c579e8757 100644
--- a/res-xhdpi/images/loop00052.png
+++ b/res-xhdpi/images/loop00052.png
Binary files differ
diff --git a/res-xhdpi/images/loop00053.png b/res-xhdpi/images/loop00053.png
index cd2ca21c8..2c1bc91b5 100644
--- a/res-xhdpi/images/loop00053.png
+++ b/res-xhdpi/images/loop00053.png
Binary files differ
diff --git a/res-xhdpi/images/loop00054.png b/res-xhdpi/images/loop00054.png
index 588586b3a..888547519 100644
--- a/res-xhdpi/images/loop00054.png
+++ b/res-xhdpi/images/loop00054.png
Binary files differ
diff --git a/res-xhdpi/images/loop00055.png b/res-xhdpi/images/loop00055.png
index 0984d01fe..00d67dacf 100644
--- a/res-xhdpi/images/loop00055.png
+++ b/res-xhdpi/images/loop00055.png
Binary files differ
diff --git a/res-xhdpi/images/loop00056.png b/res-xhdpi/images/loop00056.png
index bab299846..00ad26a5e 100644
--- a/res-xhdpi/images/loop00056.png
+++ b/res-xhdpi/images/loop00056.png
Binary files differ
diff --git a/res-xhdpi/images/loop00057.png b/res-xhdpi/images/loop00057.png
index 4acfce540..351179569 100644
--- a/res-xhdpi/images/loop00057.png
+++ b/res-xhdpi/images/loop00057.png
Binary files differ
diff --git a/res-xhdpi/images/loop00058.png b/res-xhdpi/images/loop00058.png
index d49fea46f..9d28f7d1c 100644
--- a/res-xhdpi/images/loop00058.png
+++ b/res-xhdpi/images/loop00058.png
Binary files differ
diff --git a/res-xhdpi/images/loop00059.png b/res-xhdpi/images/loop00059.png
index fdd75c6b9..776f40e42 100644
--- a/res-xhdpi/images/loop00059.png
+++ b/res-xhdpi/images/loop00059.png
Binary files differ
diff --git a/res-xhdpi/images/loop00060.png b/res-xhdpi/images/loop00060.png
index 06ac591ef..7f728fc03 100644
--- a/res-xhdpi/images/loop00060.png
+++ b/res-xhdpi/images/loop00060.png
Binary files differ
diff --git a/res-xhdpi/images/loop00061.png b/res-xhdpi/images/loop00061.png
index 63be53676..deba02149 100644
--- a/res-xhdpi/images/loop00061.png
+++ b/res-xhdpi/images/loop00061.png
Binary files differ
diff --git a/res-xhdpi/images/loop00062.png b/res-xhdpi/images/loop00062.png
index e25c906cb..e6b618497 100644
--- a/res-xhdpi/images/loop00062.png
+++ b/res-xhdpi/images/loop00062.png
Binary files differ
diff --git a/res-xhdpi/images/loop00063.png b/res-xhdpi/images/loop00063.png
index 1fcaefe25..0e590a573 100644
--- a/res-xhdpi/images/loop00063.png
+++ b/res-xhdpi/images/loop00063.png
Binary files differ
diff --git a/res-xhdpi/images/loop00064.png b/res-xhdpi/images/loop00064.png
index fe373d042..c7b8102ba 100644
--- a/res-xhdpi/images/loop00064.png
+++ b/res-xhdpi/images/loop00064.png
Binary files differ
diff --git a/res-xhdpi/images/loop00065.png b/res-xhdpi/images/loop00065.png
index c5feed6ed..2ccad2577 100644
--- a/res-xhdpi/images/loop00065.png
+++ b/res-xhdpi/images/loop00065.png
Binary files differ
diff --git a/res-xhdpi/images/loop00066.png b/res-xhdpi/images/loop00066.png
index bc336e755..c5573b992 100644
--- a/res-xhdpi/images/loop00066.png
+++ b/res-xhdpi/images/loop00066.png
Binary files differ
diff --git a/res-xhdpi/images/loop00067.png b/res-xhdpi/images/loop00067.png
index a4cdcaea4..005e9a6f6 100644
--- a/res-xhdpi/images/loop00067.png
+++ b/res-xhdpi/images/loop00067.png
Binary files differ
diff --git a/res-xhdpi/images/loop00068.png b/res-xhdpi/images/loop00068.png
index 65d41a280..b8d6a6a07 100644
--- a/res-xhdpi/images/loop00068.png
+++ b/res-xhdpi/images/loop00068.png
Binary files differ
diff --git a/res-xhdpi/images/loop00069.png b/res-xhdpi/images/loop00069.png
index 5707b62c7..7e3ba3063 100644
--- a/res-xhdpi/images/loop00069.png
+++ b/res-xhdpi/images/loop00069.png
Binary files differ
diff --git a/res-xhdpi/images/loop00070.png b/res-xhdpi/images/loop00070.png
index 50ea15925..b9810b301 100644
--- a/res-xhdpi/images/loop00070.png
+++ b/res-xhdpi/images/loop00070.png
Binary files differ
diff --git a/res-xhdpi/images/loop00071.png b/res-xhdpi/images/loop00071.png
index 244a91060..726030ca1 100644
--- a/res-xhdpi/images/loop00071.png
+++ b/res-xhdpi/images/loop00071.png
Binary files differ
diff --git a/res-xhdpi/images/loop00072.png b/res-xhdpi/images/loop00072.png
index e5ee2abe7..30c1e87e1 100644
--- a/res-xhdpi/images/loop00072.png
+++ b/res-xhdpi/images/loop00072.png
Binary files differ
diff --git a/res-xhdpi/images/loop00073.png b/res-xhdpi/images/loop00073.png
index fced739ae..207a5acfc 100644
--- a/res-xhdpi/images/loop00073.png
+++ b/res-xhdpi/images/loop00073.png
Binary files differ
diff --git a/res-xhdpi/images/loop00074.png b/res-xhdpi/images/loop00074.png
index 1b739d346..4482b0c5d 100644
--- a/res-xhdpi/images/loop00074.png
+++ b/res-xhdpi/images/loop00074.png
Binary files differ
diff --git a/res-xhdpi/images/loop00075.png b/res-xhdpi/images/loop00075.png
index 989144f69..72afd0876 100644
--- a/res-xhdpi/images/loop00075.png
+++ b/res-xhdpi/images/loop00075.png
Binary files differ
diff --git a/res-xhdpi/images/loop00076.png b/res-xhdpi/images/loop00076.png
index 458c2a9a2..4b66068f5 100644
--- a/res-xhdpi/images/loop00076.png
+++ b/res-xhdpi/images/loop00076.png
Binary files differ
diff --git a/res-xhdpi/images/loop00077.png b/res-xhdpi/images/loop00077.png
index 9cecb1d0d..a94989efc 100644
--- a/res-xhdpi/images/loop00077.png
+++ b/res-xhdpi/images/loop00077.png
Binary files differ
diff --git a/res-xhdpi/images/loop00078.png b/res-xhdpi/images/loop00078.png
index c2c8dee86..810e22308 100644
--- a/res-xhdpi/images/loop00078.png
+++ b/res-xhdpi/images/loop00078.png
Binary files differ
diff --git a/res-xhdpi/images/loop00079.png b/res-xhdpi/images/loop00079.png
index 4f4fdd142..8085b2595 100644
--- a/res-xhdpi/images/loop00079.png
+++ b/res-xhdpi/images/loop00079.png
Binary files differ
diff --git a/res-xhdpi/images/loop00080.png b/res-xhdpi/images/loop00080.png
index b224378de..4aefa4c94 100644
--- a/res-xhdpi/images/loop00080.png
+++ b/res-xhdpi/images/loop00080.png
Binary files differ
diff --git a/res-xhdpi/images/loop00081.png b/res-xhdpi/images/loop00081.png
index 57d958755..c4a79fbcd 100644
--- a/res-xhdpi/images/loop00081.png
+++ b/res-xhdpi/images/loop00081.png
Binary files differ
diff --git a/res-xhdpi/images/loop00082.png b/res-xhdpi/images/loop00082.png
index c00f82a04..0fc9caa21 100644
--- a/res-xhdpi/images/loop00082.png
+++ b/res-xhdpi/images/loop00082.png
Binary files differ
diff --git a/res-xhdpi/images/loop00083.png b/res-xhdpi/images/loop00083.png
index 078311f09..f5fb15db5 100644
--- a/res-xhdpi/images/loop00083.png
+++ b/res-xhdpi/images/loop00083.png
Binary files differ
diff --git a/res-xhdpi/images/loop00084.png b/res-xhdpi/images/loop00084.png
index cac170893..ada5a2533 100644
--- a/res-xhdpi/images/loop00084.png
+++ b/res-xhdpi/images/loop00084.png
Binary files differ
diff --git a/res-xhdpi/images/loop00085.png b/res-xhdpi/images/loop00085.png
index 2ea4b0afc..f05e8d620 100644
--- a/res-xhdpi/images/loop00085.png
+++ b/res-xhdpi/images/loop00085.png
Binary files differ
diff --git a/res-xhdpi/images/loop00086.png b/res-xhdpi/images/loop00086.png
index 9ba6ca615..28c5dfd88 100644
--- a/res-xhdpi/images/loop00086.png
+++ b/res-xhdpi/images/loop00086.png
Binary files differ
diff --git a/res-xhdpi/images/loop00087.png b/res-xhdpi/images/loop00087.png
index 75694a387..d969905ce 100644
--- a/res-xhdpi/images/loop00087.png
+++ b/res-xhdpi/images/loop00087.png
Binary files differ
diff --git a/res-xhdpi/images/loop00088.png b/res-xhdpi/images/loop00088.png
index 971e50848..653300297 100644
--- a/res-xhdpi/images/loop00088.png
+++ b/res-xhdpi/images/loop00088.png
Binary files differ
diff --git a/res-xhdpi/images/loop00089.png b/res-xhdpi/images/loop00089.png
index 41b6ce6b1..0d5cdea7a 100644
--- a/res-xhdpi/images/loop00089.png
+++ b/res-xhdpi/images/loop00089.png
Binary files differ
diff --git a/res-xhdpi/images/loop00090.png b/res-xhdpi/images/loop00090.png
index f5bf7a73b..b438e9e67 100644
--- a/res-xhdpi/images/loop00090.png
+++ b/res-xhdpi/images/loop00090.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00000.png b/res-xxhdpi/images/loop00000.png
index c5172629d..003c2f875 100644
--- a/res-xxhdpi/images/loop00000.png
+++ b/res-xxhdpi/images/loop00000.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00001.png b/res-xxhdpi/images/loop00001.png
index 1b1ce7397..05de3ddcf 100644
--- a/res-xxhdpi/images/loop00001.png
+++ b/res-xxhdpi/images/loop00001.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00002.png b/res-xxhdpi/images/loop00002.png
index e984a24c9..3b025475a 100644
--- a/res-xxhdpi/images/loop00002.png
+++ b/res-xxhdpi/images/loop00002.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00003.png b/res-xxhdpi/images/loop00003.png
index b11dddcb8..21f0dcc66 100644
--- a/res-xxhdpi/images/loop00003.png
+++ b/res-xxhdpi/images/loop00003.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00004.png b/res-xxhdpi/images/loop00004.png
index 10272b271..6a8b75891 100644
--- a/res-xxhdpi/images/loop00004.png
+++ b/res-xxhdpi/images/loop00004.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00005.png b/res-xxhdpi/images/loop00005.png
index 9558d7e68..a179aef45 100644
--- a/res-xxhdpi/images/loop00005.png
+++ b/res-xxhdpi/images/loop00005.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00006.png b/res-xxhdpi/images/loop00006.png
index 0e6c92d69..ef9f5e849 100644
--- a/res-xxhdpi/images/loop00006.png
+++ b/res-xxhdpi/images/loop00006.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00007.png b/res-xxhdpi/images/loop00007.png
index 0a353ad02..80a477d48 100644
--- a/res-xxhdpi/images/loop00007.png
+++ b/res-xxhdpi/images/loop00007.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00008.png b/res-xxhdpi/images/loop00008.png
index 2f0c1620c..6c5cec08b 100644
--- a/res-xxhdpi/images/loop00008.png
+++ b/res-xxhdpi/images/loop00008.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00009.png b/res-xxhdpi/images/loop00009.png
index 960d683fa..ac5dd30ee 100644
--- a/res-xxhdpi/images/loop00009.png
+++ b/res-xxhdpi/images/loop00009.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00010.png b/res-xxhdpi/images/loop00010.png
index b65c3011a..18f10a17e 100644
--- a/res-xxhdpi/images/loop00010.png
+++ b/res-xxhdpi/images/loop00010.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00011.png b/res-xxhdpi/images/loop00011.png
index 21444fa54..eac89e933 100644
--- a/res-xxhdpi/images/loop00011.png
+++ b/res-xxhdpi/images/loop00011.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00012.png b/res-xxhdpi/images/loop00012.png
index 587db0990..390f3cfd4 100644
--- a/res-xxhdpi/images/loop00012.png
+++ b/res-xxhdpi/images/loop00012.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00013.png b/res-xxhdpi/images/loop00013.png
index 57f2f66e2..18339e93f 100644
--- a/res-xxhdpi/images/loop00013.png
+++ b/res-xxhdpi/images/loop00013.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00014.png b/res-xxhdpi/images/loop00014.png
index d308a6530..77b5be491 100644
--- a/res-xxhdpi/images/loop00014.png
+++ b/res-xxhdpi/images/loop00014.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00015.png b/res-xxhdpi/images/loop00015.png
index 3585facad..7c16937af 100644
--- a/res-xxhdpi/images/loop00015.png
+++ b/res-xxhdpi/images/loop00015.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00016.png b/res-xxhdpi/images/loop00016.png
index fd5089c44..50ea46e76 100644
--- a/res-xxhdpi/images/loop00016.png
+++ b/res-xxhdpi/images/loop00016.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00017.png b/res-xxhdpi/images/loop00017.png
index 2c8c6a434..40bb9db17 100644
--- a/res-xxhdpi/images/loop00017.png
+++ b/res-xxhdpi/images/loop00017.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00018.png b/res-xxhdpi/images/loop00018.png
index 23d7ca287..55b4d70f6 100644
--- a/res-xxhdpi/images/loop00018.png
+++ b/res-xxhdpi/images/loop00018.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00019.png b/res-xxhdpi/images/loop00019.png
index cdefe2c55..a443090e9 100644
--- a/res-xxhdpi/images/loop00019.png
+++ b/res-xxhdpi/images/loop00019.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00020.png b/res-xxhdpi/images/loop00020.png
index ae78e4cfe..96e77eec9 100644
--- a/res-xxhdpi/images/loop00020.png
+++ b/res-xxhdpi/images/loop00020.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00021.png b/res-xxhdpi/images/loop00021.png
index ad83cfe04..35260af50 100644
--- a/res-xxhdpi/images/loop00021.png
+++ b/res-xxhdpi/images/loop00021.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00022.png b/res-xxhdpi/images/loop00022.png
index 850076ac1..1861848d8 100644
--- a/res-xxhdpi/images/loop00022.png
+++ b/res-xxhdpi/images/loop00022.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00023.png b/res-xxhdpi/images/loop00023.png
index cd30b3997..4b2e7da5f 100644
--- a/res-xxhdpi/images/loop00023.png
+++ b/res-xxhdpi/images/loop00023.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00024.png b/res-xxhdpi/images/loop00024.png
index e7ae4b277..1ffc765f4 100644
--- a/res-xxhdpi/images/loop00024.png
+++ b/res-xxhdpi/images/loop00024.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00025.png b/res-xxhdpi/images/loop00025.png
index 4e24bd118..9fb29d44b 100644
--- a/res-xxhdpi/images/loop00025.png
+++ b/res-xxhdpi/images/loop00025.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00026.png b/res-xxhdpi/images/loop00026.png
index 27713cce9..143def39f 100644
--- a/res-xxhdpi/images/loop00026.png
+++ b/res-xxhdpi/images/loop00026.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00027.png b/res-xxhdpi/images/loop00027.png
index 34e4ade2e..623d6bed2 100644
--- a/res-xxhdpi/images/loop00027.png
+++ b/res-xxhdpi/images/loop00027.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00028.png b/res-xxhdpi/images/loop00028.png
index 0e6fdee75..b7b43d27f 100644
--- a/res-xxhdpi/images/loop00028.png
+++ b/res-xxhdpi/images/loop00028.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00029.png b/res-xxhdpi/images/loop00029.png
index 21c1c635b..c9f183db1 100644
--- a/res-xxhdpi/images/loop00029.png
+++ b/res-xxhdpi/images/loop00029.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00030.png b/res-xxhdpi/images/loop00030.png
index 984c24f9b..b85c7e35c 100644
--- a/res-xxhdpi/images/loop00030.png
+++ b/res-xxhdpi/images/loop00030.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00031.png b/res-xxhdpi/images/loop00031.png
index 25fe1de26..4d938e25a 100644
--- a/res-xxhdpi/images/loop00031.png
+++ b/res-xxhdpi/images/loop00031.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00032.png b/res-xxhdpi/images/loop00032.png
index c089cb8a4..0a1787602 100644
--- a/res-xxhdpi/images/loop00032.png
+++ b/res-xxhdpi/images/loop00032.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00033.png b/res-xxhdpi/images/loop00033.png
index 82a2d9b54..c8919c312 100644
--- a/res-xxhdpi/images/loop00033.png
+++ b/res-xxhdpi/images/loop00033.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00034.png b/res-xxhdpi/images/loop00034.png
index 1aa76b94c..1584d5dbb 100644
--- a/res-xxhdpi/images/loop00034.png
+++ b/res-xxhdpi/images/loop00034.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00035.png b/res-xxhdpi/images/loop00035.png
index 4399143e4..2220cd3c8 100644
--- a/res-xxhdpi/images/loop00035.png
+++ b/res-xxhdpi/images/loop00035.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00036.png b/res-xxhdpi/images/loop00036.png
index 975ae666e..97ae5485d 100644
--- a/res-xxhdpi/images/loop00036.png
+++ b/res-xxhdpi/images/loop00036.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00037.png b/res-xxhdpi/images/loop00037.png
index dcf9a9050..84fca9758 100644
--- a/res-xxhdpi/images/loop00037.png
+++ b/res-xxhdpi/images/loop00037.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00038.png b/res-xxhdpi/images/loop00038.png
index f10b8b723..bba2181d6 100644
--- a/res-xxhdpi/images/loop00038.png
+++ b/res-xxhdpi/images/loop00038.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00039.png b/res-xxhdpi/images/loop00039.png
index 9c0d1e361..4659625fd 100644
--- a/res-xxhdpi/images/loop00039.png
+++ b/res-xxhdpi/images/loop00039.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00040.png b/res-xxhdpi/images/loop00040.png
index b6b4908f6..6b3092ae5 100644
--- a/res-xxhdpi/images/loop00040.png
+++ b/res-xxhdpi/images/loop00040.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00041.png b/res-xxhdpi/images/loop00041.png
index 12a1a1e9a..5b3cd1663 100644
--- a/res-xxhdpi/images/loop00041.png
+++ b/res-xxhdpi/images/loop00041.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00042.png b/res-xxhdpi/images/loop00042.png
index f1fc35baf..dbb8a7f3a 100644
--- a/res-xxhdpi/images/loop00042.png
+++ b/res-xxhdpi/images/loop00042.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00043.png b/res-xxhdpi/images/loop00043.png
index 50ac99e5e..582454237 100644
--- a/res-xxhdpi/images/loop00043.png
+++ b/res-xxhdpi/images/loop00043.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00044.png b/res-xxhdpi/images/loop00044.png
index f115dcc9b..d814246ad 100644
--- a/res-xxhdpi/images/loop00044.png
+++ b/res-xxhdpi/images/loop00044.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00045.png b/res-xxhdpi/images/loop00045.png
index adf7a671e..e6a8d3089 100644
--- a/res-xxhdpi/images/loop00045.png
+++ b/res-xxhdpi/images/loop00045.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00046.png b/res-xxhdpi/images/loop00046.png
index 588eeb3fb..2f616bf01 100644
--- a/res-xxhdpi/images/loop00046.png
+++ b/res-xxhdpi/images/loop00046.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00047.png b/res-xxhdpi/images/loop00047.png
index 9dea7701d..39b74d95f 100644
--- a/res-xxhdpi/images/loop00047.png
+++ b/res-xxhdpi/images/loop00047.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00048.png b/res-xxhdpi/images/loop00048.png
index d5eaeb126..2a94b8c70 100644
--- a/res-xxhdpi/images/loop00048.png
+++ b/res-xxhdpi/images/loop00048.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00049.png b/res-xxhdpi/images/loop00049.png
index fb837295b..6d86e2e14 100644
--- a/res-xxhdpi/images/loop00049.png
+++ b/res-xxhdpi/images/loop00049.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00050.png b/res-xxhdpi/images/loop00050.png
index 72441db4f..c6cb34417 100644
--- a/res-xxhdpi/images/loop00050.png
+++ b/res-xxhdpi/images/loop00050.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00051.png b/res-xxhdpi/images/loop00051.png
index bf7170a53..dc510fa03 100644
--- a/res-xxhdpi/images/loop00051.png
+++ b/res-xxhdpi/images/loop00051.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00052.png b/res-xxhdpi/images/loop00052.png
index c512b56d4..9fdd3ad72 100644
--- a/res-xxhdpi/images/loop00052.png
+++ b/res-xxhdpi/images/loop00052.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00053.png b/res-xxhdpi/images/loop00053.png
index 6ac3ca6f3..8fff9cc12 100644
--- a/res-xxhdpi/images/loop00053.png
+++ b/res-xxhdpi/images/loop00053.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00054.png b/res-xxhdpi/images/loop00054.png
index ba194a6ad..1f9dfaf3e 100644
--- a/res-xxhdpi/images/loop00054.png
+++ b/res-xxhdpi/images/loop00054.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00055.png b/res-xxhdpi/images/loop00055.png
index 9623f0d5c..b0f669070 100644
--- a/res-xxhdpi/images/loop00055.png
+++ b/res-xxhdpi/images/loop00055.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00056.png b/res-xxhdpi/images/loop00056.png
index e785e690f..79144d962 100644
--- a/res-xxhdpi/images/loop00056.png
+++ b/res-xxhdpi/images/loop00056.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00057.png b/res-xxhdpi/images/loop00057.png
index 9a5747ae3..a451181c9 100644
--- a/res-xxhdpi/images/loop00057.png
+++ b/res-xxhdpi/images/loop00057.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00058.png b/res-xxhdpi/images/loop00058.png
index 9a097cf12..eb6af3af5 100644
--- a/res-xxhdpi/images/loop00058.png
+++ b/res-xxhdpi/images/loop00058.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00059.png b/res-xxhdpi/images/loop00059.png
index fee2db1e1..d9a976dfd 100644
--- a/res-xxhdpi/images/loop00059.png
+++ b/res-xxhdpi/images/loop00059.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00060.png b/res-xxhdpi/images/loop00060.png
index 0e00e709f..93ff5d9f0 100644
--- a/res-xxhdpi/images/loop00060.png
+++ b/res-xxhdpi/images/loop00060.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00061.png b/res-xxhdpi/images/loop00061.png
index 0ecce17bd..13dcd2ab9 100644
--- a/res-xxhdpi/images/loop00061.png
+++ b/res-xxhdpi/images/loop00061.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00062.png b/res-xxhdpi/images/loop00062.png
index 0a296d129..1ffc8f885 100644
--- a/res-xxhdpi/images/loop00062.png
+++ b/res-xxhdpi/images/loop00062.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00063.png b/res-xxhdpi/images/loop00063.png
index 56c3b8b9b..6ec7dae5c 100644
--- a/res-xxhdpi/images/loop00063.png
+++ b/res-xxhdpi/images/loop00063.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00064.png b/res-xxhdpi/images/loop00064.png
index e6d639a3d..3c5bcc36e 100644
--- a/res-xxhdpi/images/loop00064.png
+++ b/res-xxhdpi/images/loop00064.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00065.png b/res-xxhdpi/images/loop00065.png
index 02e382b99..541fa8893 100644
--- a/res-xxhdpi/images/loop00065.png
+++ b/res-xxhdpi/images/loop00065.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00066.png b/res-xxhdpi/images/loop00066.png
index fe89ed00a..e65ca8ff9 100644
--- a/res-xxhdpi/images/loop00066.png
+++ b/res-xxhdpi/images/loop00066.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00067.png b/res-xxhdpi/images/loop00067.png
index a8f6ce50c..c93125b77 100644
--- a/res-xxhdpi/images/loop00067.png
+++ b/res-xxhdpi/images/loop00067.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00068.png b/res-xxhdpi/images/loop00068.png
index f9b7fb1c9..f7ef8e93e 100644
--- a/res-xxhdpi/images/loop00068.png
+++ b/res-xxhdpi/images/loop00068.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00069.png b/res-xxhdpi/images/loop00069.png
index d0dc50768..e3a16c507 100644
--- a/res-xxhdpi/images/loop00069.png
+++ b/res-xxhdpi/images/loop00069.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00070.png b/res-xxhdpi/images/loop00070.png
index 63f9e4df1..24cfdb111 100644
--- a/res-xxhdpi/images/loop00070.png
+++ b/res-xxhdpi/images/loop00070.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00071.png b/res-xxhdpi/images/loop00071.png
index 5ba39724f..efffad470 100644
--- a/res-xxhdpi/images/loop00071.png
+++ b/res-xxhdpi/images/loop00071.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00072.png b/res-xxhdpi/images/loop00072.png
index de834e398..63d62f368 100644
--- a/res-xxhdpi/images/loop00072.png
+++ b/res-xxhdpi/images/loop00072.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00073.png b/res-xxhdpi/images/loop00073.png
index 4be2aed88..de0f41041 100644
--- a/res-xxhdpi/images/loop00073.png
+++ b/res-xxhdpi/images/loop00073.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00074.png b/res-xxhdpi/images/loop00074.png
index 235e9a228..45c9a74bc 100644
--- a/res-xxhdpi/images/loop00074.png
+++ b/res-xxhdpi/images/loop00074.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00075.png b/res-xxhdpi/images/loop00075.png
index f6d806d5a..a26893783 100644
--- a/res-xxhdpi/images/loop00075.png
+++ b/res-xxhdpi/images/loop00075.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00076.png b/res-xxhdpi/images/loop00076.png
index 1e916d723..9edd577e7 100644
--- a/res-xxhdpi/images/loop00076.png
+++ b/res-xxhdpi/images/loop00076.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00077.png b/res-xxhdpi/images/loop00077.png
index 0dbac748e..23a7cc77c 100644
--- a/res-xxhdpi/images/loop00077.png
+++ b/res-xxhdpi/images/loop00077.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00078.png b/res-xxhdpi/images/loop00078.png
index 504d34a44..67dbf2d06 100644
--- a/res-xxhdpi/images/loop00078.png
+++ b/res-xxhdpi/images/loop00078.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00079.png b/res-xxhdpi/images/loop00079.png
index 51f4e8d7c..0ef021faf 100644
--- a/res-xxhdpi/images/loop00079.png
+++ b/res-xxhdpi/images/loop00079.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00080.png b/res-xxhdpi/images/loop00080.png
index 6ef03b82e..0de307b7a 100644
--- a/res-xxhdpi/images/loop00080.png
+++ b/res-xxhdpi/images/loop00080.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00081.png b/res-xxhdpi/images/loop00081.png
index e2ebc394d..cc31e9201 100644
--- a/res-xxhdpi/images/loop00081.png
+++ b/res-xxhdpi/images/loop00081.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00082.png b/res-xxhdpi/images/loop00082.png
index 9de83a733..6809fa37b 100644
--- a/res-xxhdpi/images/loop00082.png
+++ b/res-xxhdpi/images/loop00082.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00083.png b/res-xxhdpi/images/loop00083.png
index c5c0099de..c3e3a5827 100644
--- a/res-xxhdpi/images/loop00083.png
+++ b/res-xxhdpi/images/loop00083.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00084.png b/res-xxhdpi/images/loop00084.png
index 84c794f31..fc0df350f 100644
--- a/res-xxhdpi/images/loop00084.png
+++ b/res-xxhdpi/images/loop00084.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00085.png b/res-xxhdpi/images/loop00085.png
index 29a40c628..38baf7e71 100644
--- a/res-xxhdpi/images/loop00085.png
+++ b/res-xxhdpi/images/loop00085.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00086.png b/res-xxhdpi/images/loop00086.png
index 89a471735..c6616ebe3 100644
--- a/res-xxhdpi/images/loop00086.png
+++ b/res-xxhdpi/images/loop00086.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00087.png b/res-xxhdpi/images/loop00087.png
index ef8d4d5db..2e6b715cd 100644
--- a/res-xxhdpi/images/loop00087.png
+++ b/res-xxhdpi/images/loop00087.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00088.png b/res-xxhdpi/images/loop00088.png
index 5fc6c6224..660d0df8f 100644
--- a/res-xxhdpi/images/loop00088.png
+++ b/res-xxhdpi/images/loop00088.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00089.png b/res-xxhdpi/images/loop00089.png
index d6d99f42f..a6b82c588 100644
--- a/res-xxhdpi/images/loop00089.png
+++ b/res-xxhdpi/images/loop00089.png
Binary files differ
diff --git a/res-xxhdpi/images/loop00090.png b/res-xxhdpi/images/loop00090.png
index c5172629d..003c2f875 100644
--- a/res-xxhdpi/images/loop00090.png
+++ b/res-xxhdpi/images/loop00090.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00000.png b/res-xxxhdpi/images/loop00000.png
index 1bc9db5b1..d6640c540 100644
--- a/res-xxxhdpi/images/loop00000.png
+++ b/res-xxxhdpi/images/loop00000.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00001.png b/res-xxxhdpi/images/loop00001.png
index f835b8567..e1b82b938 100644
--- a/res-xxxhdpi/images/loop00001.png
+++ b/res-xxxhdpi/images/loop00001.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00002.png b/res-xxxhdpi/images/loop00002.png
index e3bff326c..9b8a381f4 100644
--- a/res-xxxhdpi/images/loop00002.png
+++ b/res-xxxhdpi/images/loop00002.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00003.png b/res-xxxhdpi/images/loop00003.png
index d864c15d7..b4d244c78 100644
--- a/res-xxxhdpi/images/loop00003.png
+++ b/res-xxxhdpi/images/loop00003.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00004.png b/res-xxxhdpi/images/loop00004.png
index 5d861c9b4..c9231596e 100644
--- a/res-xxxhdpi/images/loop00004.png
+++ b/res-xxxhdpi/images/loop00004.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00005.png b/res-xxxhdpi/images/loop00005.png
index e9e860c3c..ed739fae4 100644
--- a/res-xxxhdpi/images/loop00005.png
+++ b/res-xxxhdpi/images/loop00005.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00006.png b/res-xxxhdpi/images/loop00006.png
index d7c516e52..68116922b 100644
--- a/res-xxxhdpi/images/loop00006.png
+++ b/res-xxxhdpi/images/loop00006.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00007.png b/res-xxxhdpi/images/loop00007.png
index fa6d39716..bbeee0111 100644
--- a/res-xxxhdpi/images/loop00007.png
+++ b/res-xxxhdpi/images/loop00007.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00008.png b/res-xxxhdpi/images/loop00008.png
index 888d3a278..2c28032e7 100644
--- a/res-xxxhdpi/images/loop00008.png
+++ b/res-xxxhdpi/images/loop00008.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00009.png b/res-xxxhdpi/images/loop00009.png
index 9e6ead241..4ea659cfa 100644
--- a/res-xxxhdpi/images/loop00009.png
+++ b/res-xxxhdpi/images/loop00009.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00010.png b/res-xxxhdpi/images/loop00010.png
index 30e13e058..45928bc4c 100644
--- a/res-xxxhdpi/images/loop00010.png
+++ b/res-xxxhdpi/images/loop00010.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00011.png b/res-xxxhdpi/images/loop00011.png
index d8abc2bb5..8a8f2f7be 100644
--- a/res-xxxhdpi/images/loop00011.png
+++ b/res-xxxhdpi/images/loop00011.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00012.png b/res-xxxhdpi/images/loop00012.png
index 2d88cfb6a..1714d1be0 100644
--- a/res-xxxhdpi/images/loop00012.png
+++ b/res-xxxhdpi/images/loop00012.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00013.png b/res-xxxhdpi/images/loop00013.png
index 0250f7494..18ab24f2d 100644
--- a/res-xxxhdpi/images/loop00013.png
+++ b/res-xxxhdpi/images/loop00013.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00014.png b/res-xxxhdpi/images/loop00014.png
index c3d9239c9..5099bc502 100644
--- a/res-xxxhdpi/images/loop00014.png
+++ b/res-xxxhdpi/images/loop00014.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00015.png b/res-xxxhdpi/images/loop00015.png
index 644c9c6bd..b7e68683d 100644
--- a/res-xxxhdpi/images/loop00015.png
+++ b/res-xxxhdpi/images/loop00015.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00016.png b/res-xxxhdpi/images/loop00016.png
index eff6e5b4e..bc1337574 100644
--- a/res-xxxhdpi/images/loop00016.png
+++ b/res-xxxhdpi/images/loop00016.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00017.png b/res-xxxhdpi/images/loop00017.png
index b472a86be..8a9bd869d 100644
--- a/res-xxxhdpi/images/loop00017.png
+++ b/res-xxxhdpi/images/loop00017.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00018.png b/res-xxxhdpi/images/loop00018.png
index b17b6ce12..2150d630e 100644
--- a/res-xxxhdpi/images/loop00018.png
+++ b/res-xxxhdpi/images/loop00018.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00019.png b/res-xxxhdpi/images/loop00019.png
index d89b4da52..ec0cc589c 100644
--- a/res-xxxhdpi/images/loop00019.png
+++ b/res-xxxhdpi/images/loop00019.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00020.png b/res-xxxhdpi/images/loop00020.png
index 7e757b845..6596ea215 100644
--- a/res-xxxhdpi/images/loop00020.png
+++ b/res-xxxhdpi/images/loop00020.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00021.png b/res-xxxhdpi/images/loop00021.png
index 1a8ce3ec5..c874649cb 100644
--- a/res-xxxhdpi/images/loop00021.png
+++ b/res-xxxhdpi/images/loop00021.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00022.png b/res-xxxhdpi/images/loop00022.png
index e9ab39a5f..d5f834d45 100644
--- a/res-xxxhdpi/images/loop00022.png
+++ b/res-xxxhdpi/images/loop00022.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00023.png b/res-xxxhdpi/images/loop00023.png
index e1a7bf782..eb8af82fa 100644
--- a/res-xxxhdpi/images/loop00023.png
+++ b/res-xxxhdpi/images/loop00023.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00024.png b/res-xxxhdpi/images/loop00024.png
index f77f70cff..7da550688 100644
--- a/res-xxxhdpi/images/loop00024.png
+++ b/res-xxxhdpi/images/loop00024.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00025.png b/res-xxxhdpi/images/loop00025.png
index 8348cdfca..884414973 100644
--- a/res-xxxhdpi/images/loop00025.png
+++ b/res-xxxhdpi/images/loop00025.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00026.png b/res-xxxhdpi/images/loop00026.png
index 55fecc8bb..ee36358aa 100644
--- a/res-xxxhdpi/images/loop00026.png
+++ b/res-xxxhdpi/images/loop00026.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00027.png b/res-xxxhdpi/images/loop00027.png
index f4edf0641..0299dae07 100644
--- a/res-xxxhdpi/images/loop00027.png
+++ b/res-xxxhdpi/images/loop00027.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00028.png b/res-xxxhdpi/images/loop00028.png
index 6dbe90446..a8f5cef33 100644
--- a/res-xxxhdpi/images/loop00028.png
+++ b/res-xxxhdpi/images/loop00028.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00029.png b/res-xxxhdpi/images/loop00029.png
index 764f27a05..6b2ab3fcd 100644
--- a/res-xxxhdpi/images/loop00029.png
+++ b/res-xxxhdpi/images/loop00029.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00030.png b/res-xxxhdpi/images/loop00030.png
index 2d2156930..2d5b48de3 100644
--- a/res-xxxhdpi/images/loop00030.png
+++ b/res-xxxhdpi/images/loop00030.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00031.png b/res-xxxhdpi/images/loop00031.png
index e02db9c8b..40c4296cd 100644
--- a/res-xxxhdpi/images/loop00031.png
+++ b/res-xxxhdpi/images/loop00031.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00032.png b/res-xxxhdpi/images/loop00032.png
index 03f045684..f130b0ab9 100644
--- a/res-xxxhdpi/images/loop00032.png
+++ b/res-xxxhdpi/images/loop00032.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00033.png b/res-xxxhdpi/images/loop00033.png
index 5bdbbdbaf..24151ba62 100644
--- a/res-xxxhdpi/images/loop00033.png
+++ b/res-xxxhdpi/images/loop00033.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00034.png b/res-xxxhdpi/images/loop00034.png
index c8164e204..f74f89555 100644
--- a/res-xxxhdpi/images/loop00034.png
+++ b/res-xxxhdpi/images/loop00034.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00035.png b/res-xxxhdpi/images/loop00035.png
index ed5721d7c..4a0f8053f 100644
--- a/res-xxxhdpi/images/loop00035.png
+++ b/res-xxxhdpi/images/loop00035.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00036.png b/res-xxxhdpi/images/loop00036.png
index 08dffd26b..74658622d 100644
--- a/res-xxxhdpi/images/loop00036.png
+++ b/res-xxxhdpi/images/loop00036.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00037.png b/res-xxxhdpi/images/loop00037.png
index 583b665e4..5d10d10a5 100644
--- a/res-xxxhdpi/images/loop00037.png
+++ b/res-xxxhdpi/images/loop00037.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00038.png b/res-xxxhdpi/images/loop00038.png
index cc2933d6a..15d5db2f2 100644
--- a/res-xxxhdpi/images/loop00038.png
+++ b/res-xxxhdpi/images/loop00038.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00039.png b/res-xxxhdpi/images/loop00039.png
index 1f0496adb..b92d49d08 100644
--- a/res-xxxhdpi/images/loop00039.png
+++ b/res-xxxhdpi/images/loop00039.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00040.png b/res-xxxhdpi/images/loop00040.png
index 05bf33593..5c19c0254 100644
--- a/res-xxxhdpi/images/loop00040.png
+++ b/res-xxxhdpi/images/loop00040.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00041.png b/res-xxxhdpi/images/loop00041.png
index a868c7b2d..2c9d406b7 100644
--- a/res-xxxhdpi/images/loop00041.png
+++ b/res-xxxhdpi/images/loop00041.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00042.png b/res-xxxhdpi/images/loop00042.png
index 7c7220f29..bb24da5b4 100644
--- a/res-xxxhdpi/images/loop00042.png
+++ b/res-xxxhdpi/images/loop00042.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00043.png b/res-xxxhdpi/images/loop00043.png
index 30336a77b..0a9efd8a2 100644
--- a/res-xxxhdpi/images/loop00043.png
+++ b/res-xxxhdpi/images/loop00043.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00044.png b/res-xxxhdpi/images/loop00044.png
index 80d373584..70e1cbc84 100644
--- a/res-xxxhdpi/images/loop00044.png
+++ b/res-xxxhdpi/images/loop00044.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00045.png b/res-xxxhdpi/images/loop00045.png
index 71a52c20c..0ecb787b9 100644
--- a/res-xxxhdpi/images/loop00045.png
+++ b/res-xxxhdpi/images/loop00045.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00046.png b/res-xxxhdpi/images/loop00046.png
index b3b37029d..c2c425abd 100644
--- a/res-xxxhdpi/images/loop00046.png
+++ b/res-xxxhdpi/images/loop00046.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00047.png b/res-xxxhdpi/images/loop00047.png
index 6ce2b37ab..71812b3a7 100644
--- a/res-xxxhdpi/images/loop00047.png
+++ b/res-xxxhdpi/images/loop00047.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00048.png b/res-xxxhdpi/images/loop00048.png
index 0b428cd73..6ef44ce22 100644
--- a/res-xxxhdpi/images/loop00048.png
+++ b/res-xxxhdpi/images/loop00048.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00049.png b/res-xxxhdpi/images/loop00049.png
index 53c1a4774..5c7b1c50a 100644
--- a/res-xxxhdpi/images/loop00049.png
+++ b/res-xxxhdpi/images/loop00049.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00050.png b/res-xxxhdpi/images/loop00050.png
index 0e17bbdff..10dcf213c 100644
--- a/res-xxxhdpi/images/loop00050.png
+++ b/res-xxxhdpi/images/loop00050.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00051.png b/res-xxxhdpi/images/loop00051.png
index 78a99dcc7..e850b32aa 100644
--- a/res-xxxhdpi/images/loop00051.png
+++ b/res-xxxhdpi/images/loop00051.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00052.png b/res-xxxhdpi/images/loop00052.png
index efd0df559..7abf444a3 100644
--- a/res-xxxhdpi/images/loop00052.png
+++ b/res-xxxhdpi/images/loop00052.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00053.png b/res-xxxhdpi/images/loop00053.png
index 0c417eef9..f680849af 100644
--- a/res-xxxhdpi/images/loop00053.png
+++ b/res-xxxhdpi/images/loop00053.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00054.png b/res-xxxhdpi/images/loop00054.png
index 072077e6f..012c14dee 100644
--- a/res-xxxhdpi/images/loop00054.png
+++ b/res-xxxhdpi/images/loop00054.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00055.png b/res-xxxhdpi/images/loop00055.png
index 693083ac8..ae335dbb9 100644
--- a/res-xxxhdpi/images/loop00055.png
+++ b/res-xxxhdpi/images/loop00055.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00056.png b/res-xxxhdpi/images/loop00056.png
index 07cbd75d1..8e928ea85 100644
--- a/res-xxxhdpi/images/loop00056.png
+++ b/res-xxxhdpi/images/loop00056.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00057.png b/res-xxxhdpi/images/loop00057.png
index cc98ab21a..c23d4f0d7 100644
--- a/res-xxxhdpi/images/loop00057.png
+++ b/res-xxxhdpi/images/loop00057.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00058.png b/res-xxxhdpi/images/loop00058.png
index f55d21821..d5144aa69 100644
--- a/res-xxxhdpi/images/loop00058.png
+++ b/res-xxxhdpi/images/loop00058.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00059.png b/res-xxxhdpi/images/loop00059.png
index 4bfed350a..f8f3a7c16 100644
--- a/res-xxxhdpi/images/loop00059.png
+++ b/res-xxxhdpi/images/loop00059.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00060.png b/res-xxxhdpi/images/loop00060.png
index 59f158b10..8894a236f 100644
--- a/res-xxxhdpi/images/loop00060.png
+++ b/res-xxxhdpi/images/loop00060.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00061.png b/res-xxxhdpi/images/loop00061.png
index fd0dc558d..1c33e84fd 100644
--- a/res-xxxhdpi/images/loop00061.png
+++ b/res-xxxhdpi/images/loop00061.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00062.png b/res-xxxhdpi/images/loop00062.png
index 2c316ce69..c2242ff49 100644
--- a/res-xxxhdpi/images/loop00062.png
+++ b/res-xxxhdpi/images/loop00062.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00063.png b/res-xxxhdpi/images/loop00063.png
index 5b83c81cd..c357ffaae 100644
--- a/res-xxxhdpi/images/loop00063.png
+++ b/res-xxxhdpi/images/loop00063.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00064.png b/res-xxxhdpi/images/loop00064.png
index ced0a9ab5..f9466997e 100644
--- a/res-xxxhdpi/images/loop00064.png
+++ b/res-xxxhdpi/images/loop00064.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00065.png b/res-xxxhdpi/images/loop00065.png
index 6e699dda6..52d976b25 100644
--- a/res-xxxhdpi/images/loop00065.png
+++ b/res-xxxhdpi/images/loop00065.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00066.png b/res-xxxhdpi/images/loop00066.png
index 8853cfffe..cf37f2f97 100644
--- a/res-xxxhdpi/images/loop00066.png
+++ b/res-xxxhdpi/images/loop00066.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00067.png b/res-xxxhdpi/images/loop00067.png
index 24d11d14b..d8a1e7835 100644
--- a/res-xxxhdpi/images/loop00067.png
+++ b/res-xxxhdpi/images/loop00067.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00068.png b/res-xxxhdpi/images/loop00068.png
index d54fff0ba..8bbaf020d 100644
--- a/res-xxxhdpi/images/loop00068.png
+++ b/res-xxxhdpi/images/loop00068.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00069.png b/res-xxxhdpi/images/loop00069.png
index 67f8d7884..99d1072cd 100644
--- a/res-xxxhdpi/images/loop00069.png
+++ b/res-xxxhdpi/images/loop00069.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00070.png b/res-xxxhdpi/images/loop00070.png
index d56fb78a5..bd8979e73 100644
--- a/res-xxxhdpi/images/loop00070.png
+++ b/res-xxxhdpi/images/loop00070.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00071.png b/res-xxxhdpi/images/loop00071.png
index e787b8a5a..e823dccce 100644
--- a/res-xxxhdpi/images/loop00071.png
+++ b/res-xxxhdpi/images/loop00071.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00072.png b/res-xxxhdpi/images/loop00072.png
index 81f2e4c4b..475190fd0 100644
--- a/res-xxxhdpi/images/loop00072.png
+++ b/res-xxxhdpi/images/loop00072.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00073.png b/res-xxxhdpi/images/loop00073.png
index ad46ed162..84c4874c9 100644
--- a/res-xxxhdpi/images/loop00073.png
+++ b/res-xxxhdpi/images/loop00073.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00074.png b/res-xxxhdpi/images/loop00074.png
index d835a2bd3..e2d90a292 100644
--- a/res-xxxhdpi/images/loop00074.png
+++ b/res-xxxhdpi/images/loop00074.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00075.png b/res-xxxhdpi/images/loop00075.png
index aa35a84ba..ff13dfeb8 100644
--- a/res-xxxhdpi/images/loop00075.png
+++ b/res-xxxhdpi/images/loop00075.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00076.png b/res-xxxhdpi/images/loop00076.png
index 6ea547e29..01886ae45 100644
--- a/res-xxxhdpi/images/loop00076.png
+++ b/res-xxxhdpi/images/loop00076.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00077.png b/res-xxxhdpi/images/loop00077.png
index c80938309..4bac4ea9b 100644
--- a/res-xxxhdpi/images/loop00077.png
+++ b/res-xxxhdpi/images/loop00077.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00078.png b/res-xxxhdpi/images/loop00078.png
index 827a75c9f..6ced1a27f 100644
--- a/res-xxxhdpi/images/loop00078.png
+++ b/res-xxxhdpi/images/loop00078.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00079.png b/res-xxxhdpi/images/loop00079.png
index 18dc1cf90..f7baed340 100644
--- a/res-xxxhdpi/images/loop00079.png
+++ b/res-xxxhdpi/images/loop00079.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00080.png b/res-xxxhdpi/images/loop00080.png
index df06b5628..fbb0a138d 100644
--- a/res-xxxhdpi/images/loop00080.png
+++ b/res-xxxhdpi/images/loop00080.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00081.png b/res-xxxhdpi/images/loop00081.png
index a5ba60379..3fc7a4959 100644
--- a/res-xxxhdpi/images/loop00081.png
+++ b/res-xxxhdpi/images/loop00081.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00082.png b/res-xxxhdpi/images/loop00082.png
index e3298c5f3..3114002bc 100644
--- a/res-xxxhdpi/images/loop00082.png
+++ b/res-xxxhdpi/images/loop00082.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00083.png b/res-xxxhdpi/images/loop00083.png
index c395662c4..df1b8301a 100644
--- a/res-xxxhdpi/images/loop00083.png
+++ b/res-xxxhdpi/images/loop00083.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00084.png b/res-xxxhdpi/images/loop00084.png
index f80af8e78..11a72f2e3 100644
--- a/res-xxxhdpi/images/loop00084.png
+++ b/res-xxxhdpi/images/loop00084.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00085.png b/res-xxxhdpi/images/loop00085.png
index c89675830..ba0a43ecc 100644
--- a/res-xxxhdpi/images/loop00085.png
+++ b/res-xxxhdpi/images/loop00085.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00086.png b/res-xxxhdpi/images/loop00086.png
index 97716923f..c4111b2a3 100644
--- a/res-xxxhdpi/images/loop00086.png
+++ b/res-xxxhdpi/images/loop00086.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00087.png b/res-xxxhdpi/images/loop00087.png
index e805dfa01..13b83c7e5 100644
--- a/res-xxxhdpi/images/loop00087.png
+++ b/res-xxxhdpi/images/loop00087.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00088.png b/res-xxxhdpi/images/loop00088.png
index aa1a88e26..e7d9d6d7a 100644
--- a/res-xxxhdpi/images/loop00088.png
+++ b/res-xxxhdpi/images/loop00088.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00089.png b/res-xxxhdpi/images/loop00089.png
index 5bf7781d0..fd1951c6f 100644
--- a/res-xxxhdpi/images/loop00089.png
+++ b/res-xxxhdpi/images/loop00089.png
Binary files differ
diff --git a/res-xxxhdpi/images/loop00090.png b/res-xxxhdpi/images/loop00090.png
index 1bc9db5b1..d6640c540 100644
--- a/res-xxxhdpi/images/loop00090.png
+++ b/res-xxxhdpi/images/loop00090.png
Binary files differ
diff --git a/tests/unit/rangeset_test.cpp b/tests/unit/rangeset_test.cpp
index e66da20e4..3c6d77ef5 100644
--- a/tests/unit/rangeset_test.cpp
+++ b/tests/unit/rangeset_test.cpp
@@ -25,14 +25,15 @@
TEST(RangeSetTest, Parse_smoke) {
RangeSet rs = RangeSet::Parse("2,1,10");
- ASSERT_EQ(static_cast<size_t>(1), rs.count);
- ASSERT_EQ((std::vector<size_t>{ 1, 10 }), rs.pos);
- ASSERT_EQ(static_cast<size_t>(9), rs.size);
+ ASSERT_EQ(static_cast<size_t>(1), rs.size());
+ ASSERT_EQ((Range{ 1, 10 }), rs[0]);
+ ASSERT_EQ(static_cast<size_t>(9), rs.blocks());
RangeSet rs2 = RangeSet::Parse("4,15,20,1,10");
- ASSERT_EQ(static_cast<size_t>(2), rs2.count);
- ASSERT_EQ((std::vector<size_t>{ 15, 20, 1, 10 }), rs2.pos);
- ASSERT_EQ(static_cast<size_t>(14), rs2.size);
+ ASSERT_EQ(static_cast<size_t>(2), rs2.size());
+ ASSERT_EQ((Range{ 15, 20 }), rs2[0]);
+ ASSERT_EQ((Range{ 1, 10 }), rs2[1]);
+ ASSERT_EQ(static_cast<size_t>(14), rs2.blocks());
// Leading zeros are fine. But android::base::ParseUint() doesn't like trailing zeros like "10 ".
ASSERT_EQ(rs, RangeSet::Parse(" 2, 1, 10"));
@@ -82,3 +83,30 @@ TEST(RangeSetTest, GetBlockNumber) {
// Out of bound.
ASSERT_EXIT(rs.GetBlockNumber(9), ::testing::KilledBySignal(SIGABRT), "");
}
+
+TEST(RangeSetTest, equality) {
+ ASSERT_EQ(RangeSet::Parse("2,1,6"), RangeSet::Parse("2,1,6"));
+
+ ASSERT_NE(RangeSet::Parse("2,1,6"), RangeSet::Parse("2,1,7"));
+ ASSERT_NE(RangeSet::Parse("2,1,6"), RangeSet::Parse("2,2,7"));
+
+ // The orders of Range's matter. "4,1,5,8,10" != "4,8,10,1,5".
+ ASSERT_NE(RangeSet::Parse("4,1,5,8,10"), RangeSet::Parse("4,8,10,1,5"));
+}
+
+TEST(RangeSetTest, iterators) {
+ RangeSet rs = RangeSet::Parse("4,1,5,8,10");
+ std::vector<Range> ranges;
+ for (const auto& range : rs) {
+ ranges.push_back(range);
+ }
+ ASSERT_EQ((std::vector<Range>{ Range{ 1, 5 }, Range{ 8, 10 } }), ranges);
+
+ ranges.clear();
+
+ // Reverse iterators.
+ for (auto it = rs.crbegin(); it != rs.crend(); it++) {
+ ranges.push_back(*it);
+ }
+ ASSERT_EQ((std::vector<Range>{ Range{ 8, 10 }, Range{ 1, 5 } }), ranges);
+}
diff --git a/tools/recovery_l10n/res/values-hi/strings.xml b/tools/recovery_l10n/res/values-hi/strings.xml
index de8757848..a8a876ee4 100644
--- a/tools/recovery_l10n/res/values-hi/strings.xml
+++ b/tools/recovery_l10n/res/values-hi/strings.xml
@@ -4,6 +4,6 @@
<string name="recovery_installing" msgid="2013591905463558223">"सिस्टम अपडेट इंस्टॉल किया जा रहा है"</string>
<string name="recovery_erasing" msgid="7334826894904037088">"मिटाया जा रहा है"</string>
<string name="recovery_no_command" msgid="4465476568623024327">"कोई आदेश नहीं"</string>
- <string name="recovery_error" msgid="5748178989622716736">"त्रुटि!"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"गड़बड़ी!"</string>
<string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा अपडेट इंस्टॉल किया जा रहा है"</string>
</resources>
diff --git a/update_verifier/update_verifier.cpp b/update_verifier/update_verifier.cpp
index 59f136c90..350020f13 100644
--- a/update_verifier/update_verifier.cpp
+++ b/update_verifier/update_verifier.cpp
@@ -167,7 +167,7 @@ static bool verify_image(const std::string& care_map_name) {
// in /data/ota_package. To allow the device to continue booting in this situation,
// we should print a warning and skip the block verification.
if (care_map_fd.get() == -1) {
- LOG(WARNING) << "Warning: care map " << care_map_name << " not found.";
+ PLOG(WARNING) << "Failed to open " << care_map_name;
return true;
}
// Care map file has four lines (two lines if vendor partition is not present):
diff --git a/update_verifier/update_verifier.rc b/update_verifier/update_verifier.rc
index fc8a64dee..808f2c055 100644
--- a/update_verifier/update_verifier.rc
+++ b/update_verifier/update_verifier.rc
@@ -1,11 +1,11 @@
service update_verifier_nonencrypted /system/bin/update_verifier nonencrypted
user root
- class cache
+ group cache
priority -20
- ioprio rt 1
+ ioprio rt 0
service update_verifier /system/bin/update_verifier ${vold.decrypt}
user root
- class cache
+ group cache
priority -20
- ioprio rt 1 \ No newline at end of file
+ ioprio rt 0
diff --git a/updater/blockimg.cpp b/updater/blockimg.cpp
index 8199447a9..0f08d17eb 100644
--- a/updater/blockimg.cpp
+++ b/updater/blockimg.cpp
@@ -112,18 +112,17 @@ static int write_all(int fd, const std::vector<uint8_t>& buffer, size_t size) {
}
static bool discard_blocks(int fd, off64_t offset, uint64_t size) {
- // Don't discard blocks unless the update is a retry run.
- if (!is_retry) {
- return true;
- }
-
- uint64_t args[2] = {static_cast<uint64_t>(offset), size};
- int status = ioctl(fd, BLKDISCARD, &args);
- if (status == -1) {
- PLOG(ERROR) << "BLKDISCARD ioctl failed";
- return false;
- }
+ // Don't discard blocks unless the update is a retry run.
+ if (!is_retry) {
return true;
+ }
+
+ uint64_t args[2] = { static_cast<uint64_t>(offset), size };
+ if (ioctl(fd, BLKDISCARD, &args) == -1) {
+ PLOG(ERROR) << "BLKDISCARD ioctl failed";
+ return false;
+ }
+ return true;
}
static bool check_lseek(int fd, off64_t offset, int whence) {
@@ -151,11 +150,11 @@ class RangeSinkWriter {
public:
RangeSinkWriter(int fd, const RangeSet& tgt)
: fd_(fd), tgt_(tgt), next_range_(0), current_range_left_(0) {
- CHECK_NE(tgt.count, static_cast<size_t>(0));
+ CHECK_NE(tgt.size(), static_cast<size_t>(0));
};
bool Finished() const {
- return next_range_ == tgt_.count && current_range_left_ == 0;
+ return next_range_ == tgt_.size() && current_range_left_ == 0;
}
size_t Write(const uint8_t* data, size_t size) {
@@ -168,10 +167,10 @@ class RangeSinkWriter {
while (size > 0) {
// Move to the next range as needed.
if (current_range_left_ == 0) {
- if (next_range_ < tgt_.count) {
- off64_t offset = static_cast<off64_t>(tgt_.pos[next_range_ * 2]) * BLOCKSIZE;
- current_range_left_ =
- (tgt_.pos[next_range_ * 2 + 1] - tgt_.pos[next_range_ * 2]) * BLOCKSIZE;
+ if (next_range_ < tgt_.size()) {
+ const Range& range = tgt_[next_range_];
+ off64_t offset = static_cast<off64_t>(range.first) * BLOCKSIZE;
+ current_range_left_ = (range.second - range.first) * BLOCKSIZE;
next_range_++;
if (!discard_blocks(fd_, offset, current_range_left_)) {
break;
@@ -281,31 +280,28 @@ static void* unzip_new_data(void* cookie) {
}
static int ReadBlocks(const RangeSet& src, std::vector<uint8_t>& buffer, int fd) {
- size_t p = 0;
- uint8_t* data = buffer.data();
-
- for (size_t i = 0; i < src.count; ++i) {
- if (!check_lseek(fd, (off64_t) src.pos[i * 2] * BLOCKSIZE, SEEK_SET)) {
- return -1;
- }
-
- size_t size = (src.pos[i * 2 + 1] - src.pos[i * 2]) * BLOCKSIZE;
-
- if (read_all(fd, data + p, size) == -1) {
- return -1;
- }
+ size_t p = 0;
+ for (const auto& range : src) {
+ if (!check_lseek(fd, static_cast<off64_t>(range.first) * BLOCKSIZE, SEEK_SET)) {
+ return -1;
+ }
- p += size;
+ size_t size = (range.second - range.first) * BLOCKSIZE;
+ if (read_all(fd, buffer.data() + p, size) == -1) {
+ return -1;
}
- return 0;
+ p += size;
+ }
+
+ return 0;
}
static int WriteBlocks(const RangeSet& tgt, const std::vector<uint8_t>& buffer, int fd) {
size_t written = 0;
- for (size_t i = 0; i < tgt.count; ++i) {
- off64_t offset = static_cast<off64_t>(tgt.pos[i * 2]) * BLOCKSIZE;
- size_t size = (tgt.pos[i * 2 + 1] - tgt.pos[i * 2]) * BLOCKSIZE;
+ for (const auto& range : tgt) {
+ off64_t offset = static_cast<off64_t>(range.first) * BLOCKSIZE;
+ size_t size = (range.second - range.first) * BLOCKSIZE;
if (!discard_blocks(fd, offset, size)) {
return -1;
}
@@ -386,21 +382,18 @@ static void PrintHashForCorruptedSourceBlocks(const CommandParameters& params,
// If there's no stashed blocks, content in the buffer is consecutive and has the same
// order as the source blocks.
if (pos == params.tokens.size()) {
- locs.count = 1;
- locs.size = src.size;
- locs.pos = { 0, src.size };
+ locs = RangeSet(std::vector<Range>{ Range{ 0, src.blocks() } });
} else {
// Otherwise, the next token is the offset of the source blocks in the target range.
// Example: for the tokens <4,63946,63947,63948,63979> <4,6,7,8,39> <stashed_blocks>;
// We want to print SHA-1 for the data in buffer[6], buffer[8], buffer[9] ... buffer[38];
// this corresponds to the 32 src blocks #63946, #63948, #63949 ... #63978.
locs = RangeSet::Parse(params.tokens[pos++]);
- CHECK_EQ(src.size, locs.size);
- CHECK_EQ(locs.pos.size() % 2, static_cast<size_t>(0));
+ CHECK_EQ(src.blocks(), locs.blocks());
}
- LOG(INFO) << "printing hash in hex for " << src.size << " source blocks";
- for (size_t i = 0; i < src.size; i++) {
+ LOG(INFO) << "printing hash in hex for " << src.blocks() << " source blocks";
+ for (size_t i = 0; i < src.blocks(); i++) {
size_t block_num = src.GetBlockNumber(i);
size_t buffer_index = locs.GetBlockNumber(i);
CHECK_LE((buffer_index + 1) * BLOCKSIZE, buffer.size());
@@ -418,9 +411,9 @@ static void PrintHashForCorruptedStashedBlocks(const std::string& id,
const std::vector<uint8_t>& buffer,
const RangeSet& src) {
LOG(INFO) << "printing hash in hex for stash_id: " << id;
- CHECK_EQ(src.size * BLOCKSIZE, buffer.size());
+ CHECK_EQ(src.blocks() * BLOCKSIZE, buffer.size());
- for (size_t i = 0; i < src.size; i++) {
+ for (size_t i = 0; i < src.blocks(); i++) {
size_t block_num = src.GetBlockNumber(i);
uint8_t digest[SHA_DIGEST_LENGTH];
@@ -440,7 +433,7 @@ static void PrintHashForMissingStashedBlocks(const std::string& id, int fd) {
LOG(INFO) << "print hash in hex for source blocks in missing stash: " << id;
const RangeSet& src = stash_map[id];
- std::vector<uint8_t> buffer(src.size * BLOCKSIZE);
+ std::vector<uint8_t> buffer(src.blocks() * BLOCKSIZE);
if (ReadBlocks(src, buffer, fd) == -1) {
LOG(ERROR) << "failed to read source blocks for stash: " << id;
return;
@@ -532,81 +525,77 @@ static void DeleteStash(const std::string& base) {
static int LoadStash(CommandParameters& params, const std::string& id, bool verify, size_t* blocks,
std::vector<uint8_t>& buffer, bool printnoent) {
- // In verify mode, if source range_set was saved for the given hash,
- // check contents in the source blocks first. If the check fails,
- // search for the stashed files on /cache as usual.
- if (!params.canwrite) {
- if (stash_map.find(id) != stash_map.end()) {
- const RangeSet& src = stash_map[id];
- allocate(src.size * BLOCKSIZE, buffer);
-
- if (ReadBlocks(src, buffer, params.fd) == -1) {
- LOG(ERROR) << "failed to read source blocks in stash map.";
- return -1;
- }
- if (VerifyBlocks(id, buffer, src.size, true) != 0) {
- LOG(ERROR) << "failed to verify loaded source blocks in stash map.";
- PrintHashForCorruptedStashedBlocks(id, buffer, src);
- return -1;
- }
- return 0;
- }
- }
-
- size_t blockcount = 0;
+ // In verify mode, if source range_set was saved for the given hash, check contents in the source
+ // blocks first. If the check fails, search for the stashed files on /cache as usual.
+ if (!params.canwrite) {
+ if (stash_map.find(id) != stash_map.end()) {
+ const RangeSet& src = stash_map[id];
+ allocate(src.blocks() * BLOCKSIZE, buffer);
- if (!blocks) {
- blocks = &blockcount;
+ if (ReadBlocks(src, buffer, params.fd) == -1) {
+ LOG(ERROR) << "failed to read source blocks in stash map.";
+ return -1;
+ }
+ if (VerifyBlocks(id, buffer, src.blocks(), true) != 0) {
+ LOG(ERROR) << "failed to verify loaded source blocks in stash map.";
+ PrintHashForCorruptedStashedBlocks(id, buffer, src);
+ return -1;
+ }
+ return 0;
}
+ }
- std::string fn = GetStashFileName(params.stashbase, id, "");
+ size_t blockcount = 0;
+ if (!blocks) {
+ blocks = &blockcount;
+ }
- struct stat sb;
- int res = stat(fn.c_str(), &sb);
+ std::string fn = GetStashFileName(params.stashbase, id, "");
- if (res == -1) {
- if (errno != ENOENT || printnoent) {
- PLOG(ERROR) << "stat \"" << fn << "\" failed";
- PrintHashForMissingStashedBlocks(id, params.fd);
- }
- return -1;
+ struct stat sb;
+ if (stat(fn.c_str(), &sb) == -1) {
+ if (errno != ENOENT || printnoent) {
+ PLOG(ERROR) << "stat \"" << fn << "\" failed";
+ PrintHashForMissingStashedBlocks(id, params.fd);
}
+ return -1;
+ }
- LOG(INFO) << " loading " << fn;
+ LOG(INFO) << " loading " << fn;
- if ((sb.st_size % BLOCKSIZE) != 0) {
- LOG(ERROR) << fn << " size " << sb.st_size << " not multiple of block size " << BLOCKSIZE;
- return -1;
- }
+ if ((sb.st_size % BLOCKSIZE) != 0) {
+ LOG(ERROR) << fn << " size " << sb.st_size << " not multiple of block size " << BLOCKSIZE;
+ return -1;
+ }
- android::base::unique_fd fd(TEMP_FAILURE_RETRY(ota_open(fn.c_str(), O_RDONLY)));
- if (fd == -1) {
- PLOG(ERROR) << "open \"" << fn << "\" failed";
- return -1;
- }
+ android::base::unique_fd fd(TEMP_FAILURE_RETRY(ota_open(fn.c_str(), O_RDONLY)));
+ if (fd == -1) {
+ PLOG(ERROR) << "open \"" << fn << "\" failed";
+ return -1;
+ }
- allocate(sb.st_size, buffer);
+ allocate(sb.st_size, buffer);
- if (read_all(fd, buffer, sb.st_size) == -1) {
- return -1;
- }
+ if (read_all(fd, buffer, sb.st_size) == -1) {
+ return -1;
+ }
- *blocks = sb.st_size / BLOCKSIZE;
+ *blocks = sb.st_size / BLOCKSIZE;
- if (verify && VerifyBlocks(id, buffer, *blocks, true) != 0) {
- LOG(ERROR) << "unexpected contents in " << fn;
- if (stash_map.find(id) == stash_map.end()) {
- LOG(ERROR) << "failed to find source blocks number for stash " << id
- << " when executing command: " << params.cmdname;
- } else {
- const RangeSet& src = stash_map[id];
- PrintHashForCorruptedStashedBlocks(id, buffer, src);
- }
- DeleteFile(fn);
- return -1;
+ if (verify && VerifyBlocks(id, buffer, *blocks, true) != 0) {
+ LOG(ERROR) << "unexpected contents in " << fn;
+ if (stash_map.find(id) == stash_map.end()) {
+ LOG(ERROR) << "failed to find source blocks number for stash " << id
+ << " when executing command: " << params.cmdname;
+ } else {
+ const RangeSet& src = stash_map[id];
+ PrintHashForCorruptedStashedBlocks(id, buffer, src);
}
+ DeleteFile(fn);
+ return -1;
+ }
- return 0;
+ return 0;
}
static int WriteStash(const std::string& base, const std::string& id, int blocks,
@@ -780,21 +769,19 @@ static int FreeStash(const std::string& base, const std::string& id) {
return 0;
}
+// Source contains packed data, which we want to move to the locations given in locs in the dest
+// buffer. source and dest may be the same buffer.
static void MoveRange(std::vector<uint8_t>& dest, const RangeSet& locs,
- const std::vector<uint8_t>& source) {
- // source contains packed data, which we want to move to the
- // locations given in locs in the dest buffer. source and dest
- // may be the same buffer.
-
- const uint8_t* from = source.data();
- uint8_t* to = dest.data();
- size_t start = locs.size;
- for (int i = locs.count-1; i >= 0; --i) {
- size_t blocks = locs.pos[i*2+1] - locs.pos[i*2];
- start -= blocks;
- memmove(to + (locs.pos[i*2] * BLOCKSIZE), from + (start * BLOCKSIZE),
- blocks * BLOCKSIZE);
- }
+ const std::vector<uint8_t>& source) {
+ const uint8_t* from = source.data();
+ uint8_t* to = dest.data();
+ size_t start = locs.blocks();
+ // Must do the movement backward.
+ for (auto it = locs.crbegin(); it != locs.crend(); it++) {
+ size_t blocks = it->second - it->first;
+ start -= blocks;
+ memmove(to + (it->first * BLOCKSIZE), from + (start * BLOCKSIZE), blocks * BLOCKSIZE);
+ }
}
/**
@@ -933,13 +920,13 @@ static int LoadSrcTgtVersion3(CommandParameters& params, RangeSet& tgt, size_t*
// <tgt_range>
tgt = RangeSet::Parse(params.tokens[params.cpos++]);
- std::vector<uint8_t> tgtbuffer(tgt.size * BLOCKSIZE);
+ std::vector<uint8_t> tgtbuffer(tgt.blocks() * BLOCKSIZE);
if (ReadBlocks(tgt, tgtbuffer, params.fd) == -1) {
return -1;
}
// Return now if target blocks already have expected content.
- if (VerifyBlocks(tgthash, tgtbuffer, tgt.size, false) == 0) {
+ if (VerifyBlocks(tgthash, tgtbuffer, tgt.blocks(), false) == 0) {
return 1;
}
@@ -1023,7 +1010,7 @@ static int PerformCommandMove(CommandParameters& params) {
params.freestash.clear();
}
- params.written += tgt.size;
+ params.written += tgt.blocks();
return 0;
}
@@ -1045,11 +1032,11 @@ static int PerformCommandStash(CommandParameters& params) {
RangeSet src = RangeSet::Parse(params.tokens[params.cpos++]);
- allocate(src.size * BLOCKSIZE, params.buffer);
+ allocate(src.blocks() * BLOCKSIZE, params.buffer);
if (ReadBlocks(src, params.buffer, params.fd) == -1) {
return -1;
}
- blocks = src.size;
+ blocks = src.blocks();
stash_map[id] = src;
if (VerifyBlocks(id, params.buffer, blocks, true) != 0) {
@@ -1088,46 +1075,45 @@ static int PerformCommandFree(CommandParameters& params) {
}
static int PerformCommandZero(CommandParameters& params) {
+ if (params.cpos >= params.tokens.size()) {
+ LOG(ERROR) << "missing target blocks for zero";
+ return -1;
+ }
- if (params.cpos >= params.tokens.size()) {
- LOG(ERROR) << "missing target blocks for zero";
- return -1;
- }
+ RangeSet tgt = RangeSet::Parse(params.tokens[params.cpos++]);
- RangeSet tgt = RangeSet::Parse(params.tokens[params.cpos++]);
+ LOG(INFO) << " zeroing " << tgt.blocks() << " blocks";
- LOG(INFO) << " zeroing " << tgt.size << " blocks";
+ allocate(BLOCKSIZE, params.buffer);
+ memset(params.buffer.data(), 0, BLOCKSIZE);
+
+ if (params.canwrite) {
+ for (const auto& range : tgt) {
+ off64_t offset = static_cast<off64_t>(range.first) * BLOCKSIZE;
+ size_t size = (range.second - range.first) * BLOCKSIZE;
+ if (!discard_blocks(params.fd, offset, size)) {
+ return -1;
+ }
- allocate(BLOCKSIZE, params.buffer);
- memset(params.buffer.data(), 0, BLOCKSIZE);
+ if (!check_lseek(params.fd, offset, SEEK_SET)) {
+ return -1;
+ }
- if (params.canwrite) {
- for (size_t i = 0; i < tgt.count; ++i) {
- off64_t offset = static_cast<off64_t>(tgt.pos[i * 2]) * BLOCKSIZE;
- size_t size = (tgt.pos[i * 2 + 1] - tgt.pos[i * 2]) * BLOCKSIZE;
- if (!discard_blocks(params.fd, offset, size)) {
- return -1;
- }
-
- if (!check_lseek(params.fd, offset, SEEK_SET)) {
- return -1;
- }
-
- for (size_t j = tgt.pos[i * 2]; j < tgt.pos[i * 2 + 1]; ++j) {
- if (write_all(params.fd, params.buffer, BLOCKSIZE) == -1) {
- return -1;
- }
- }
+ for (size_t j = range.first; j < range.second; ++j) {
+ if (write_all(params.fd, params.buffer, BLOCKSIZE) == -1) {
+ return -1;
}
+ }
}
+ }
- if (params.cmdname[0] == 'z') {
- // Update only for the zero command, as the erase command will call
- // this if DEBUG_ERASE is defined.
- params.written += tgt.size;
- }
+ if (params.cmdname[0] == 'z') {
+ // Update only for the zero command, as the erase command will call
+ // this if DEBUG_ERASE is defined.
+ params.written += tgt.blocks();
+ }
- return 0;
+ return 0;
}
static int PerformCommandNew(CommandParameters& params) {
@@ -1139,7 +1125,7 @@ static int PerformCommandNew(CommandParameters& params) {
RangeSet tgt = RangeSet::Parse(params.tokens[params.cpos++]);
if (params.canwrite) {
- LOG(INFO) << " writing " << tgt.size << " blocks of new data";
+ LOG(INFO) << " writing " << tgt.blocks() << " blocks of new data";
RangeSinkWriter writer(params.fd, tgt);
pthread_mutex_lock(&params.nti.mu);
@@ -1153,7 +1139,7 @@ static int PerformCommandNew(CommandParameters& params) {
pthread_mutex_unlock(&params.nti.mu);
}
- params.written += tgt.size;
+ params.written += tgt.blocks();
return 0;
}
@@ -1195,7 +1181,7 @@ static int PerformCommandDiff(CommandParameters& params) {
if (params.canwrite) {
if (status == 0) {
- LOG(INFO) << "patching " << blocks << " blocks to " << tgt.size;
+ LOG(INFO) << "patching " << blocks << " blocks to " << tgt.blocks();
Value patch_value(
VAL_BLOB, std::string(reinterpret_cast<const char*>(params.patch_start + offset), len));
@@ -1223,7 +1209,7 @@ static int PerformCommandDiff(CommandParameters& params) {
LOG(ERROR) << "range sink underrun?";
}
} else {
- LOG(INFO) << "skipping " << blocks << " blocks already patched to " << tgt.size << " ["
+ LOG(INFO) << "skipping " << blocks << " blocks already patched to " << tgt.blocks() << " ["
<< params.cmdline << "]";
}
}
@@ -1233,52 +1219,52 @@ static int PerformCommandDiff(CommandParameters& params) {
params.freestash.clear();
}
- params.written += tgt.size;
+ params.written += tgt.blocks();
return 0;
}
static int PerformCommandErase(CommandParameters& params) {
- if (DEBUG_ERASE) {
- return PerformCommandZero(params);
- }
+ if (DEBUG_ERASE) {
+ return PerformCommandZero(params);
+ }
- struct stat sb;
- if (fstat(params.fd, &sb) == -1) {
- PLOG(ERROR) << "failed to fstat device to erase";
- return -1;
- }
+ struct stat sb;
+ if (fstat(params.fd, &sb) == -1) {
+ PLOG(ERROR) << "failed to fstat device to erase";
+ return -1;
+ }
- if (!S_ISBLK(sb.st_mode)) {
- LOG(ERROR) << "not a block device; skipping erase";
- return -1;
- }
+ if (!S_ISBLK(sb.st_mode)) {
+ LOG(ERROR) << "not a block device; skipping erase";
+ return -1;
+ }
- if (params.cpos >= params.tokens.size()) {
- LOG(ERROR) << "missing target blocks for erase";
- return -1;
- }
+ if (params.cpos >= params.tokens.size()) {
+ LOG(ERROR) << "missing target blocks for erase";
+ return -1;
+ }
+
+ RangeSet tgt = RangeSet::Parse(params.tokens[params.cpos++]);
- RangeSet tgt = RangeSet::Parse(params.tokens[params.cpos++]);
+ if (params.canwrite) {
+ LOG(INFO) << " erasing " << tgt.blocks() << " blocks";
- if (params.canwrite) {
- LOG(INFO) << " erasing " << tgt.size << " blocks";
-
- for (size_t i = 0; i < tgt.count; ++i) {
- uint64_t blocks[2];
- // offset in bytes
- blocks[0] = tgt.pos[i * 2] * (uint64_t) BLOCKSIZE;
- // length in bytes
- blocks[1] = (tgt.pos[i * 2 + 1] - tgt.pos[i * 2]) * (uint64_t) BLOCKSIZE;
-
- if (ioctl(params.fd, BLKDISCARD, &blocks) == -1) {
- PLOG(ERROR) << "BLKDISCARD ioctl failed";
- return -1;
- }
- }
+ for (const auto& range : tgt) {
+ uint64_t blocks[2];
+ // offset in bytes
+ blocks[0] = range.first * static_cast<uint64_t>(BLOCKSIZE);
+ // length in bytes
+ blocks[1] = (range.second - range.first) * static_cast<uint64_t>(BLOCKSIZE);
+
+ if (ioctl(params.fd, BLKDISCARD, &blocks) == -1) {
+ PLOG(ERROR) << "BLKDISCARD ioctl failed";
+ return -1;
+ }
}
+ }
- return 0;
+ return 0;
}
// Definitions for transfer list command functions
@@ -1645,14 +1631,14 @@ Value* RangeSha1Fn(const char* name, State* state, const std::vector<std::unique
SHA1_Init(&ctx);
std::vector<uint8_t> buffer(BLOCKSIZE);
- for (size_t i = 0; i < rs.count; ++i) {
- if (!check_lseek(fd, (off64_t)rs.pos[i * 2] * BLOCKSIZE, SEEK_SET)) {
+ for (const auto& range : rs) {
+ if (!check_lseek(fd, static_cast<off64_t>(range.first) * BLOCKSIZE, SEEK_SET)) {
ErrorAbort(state, kLseekFailure, "failed to seek %s: %s", blockdev_filename->data.c_str(),
strerror(errno));
return StringValue("");
}
- for (size_t j = rs.pos[i * 2]; j < rs.pos[i * 2 + 1]; ++j) {
+ for (size_t j = range.first; j < range.second; ++j) {
if (read_all(fd, buffer, BLOCKSIZE) == -1) {
ErrorAbort(state, kFreadFailure, "failed to read %s: %s", blockdev_filename->data.c_str(),
strerror(errno));
@@ -1700,7 +1686,7 @@ Value* CheckFirstBlockFn(const char* name, State* state,
return StringValue("");
}
- RangeSet blk0{ 1 /*count*/, 1 /*size*/, std::vector<size_t>{ 0, 1 } /*position*/ };
+ RangeSet blk0(std::vector<Range>{ Range{ 0, 1 } });
std::vector<uint8_t> block0_buffer(BLOCKSIZE);
if (ReadBlocks(blk0, block0_buffer, fd) == -1) {
@@ -1770,24 +1756,20 @@ Value* BlockImageRecoverFn(const char* name, State* state,
}
fec_status status;
-
if (!fh.get_status(status)) {
ErrorAbort(state, kLibfecFailure, "failed to read FEC status");
return StringValue("");
}
- RangeSet rs = RangeSet::Parse(ranges->data);
-
uint8_t buffer[BLOCKSIZE];
-
- for (size_t i = 0; i < rs.count; ++i) {
- for (size_t j = rs.pos[i * 2]; j < rs.pos[i * 2 + 1]; ++j) {
+ for (const auto& range : RangeSet::Parse(ranges->data)) {
+ for (size_t j = range.first; j < range.second; ++j) {
// Stay within the data area, libfec validates and corrects metadata
- if (status.data_size <= (uint64_t)j * BLOCKSIZE) {
+ if (status.data_size <= static_cast<uint64_t>(j) * BLOCKSIZE) {
continue;
}
- if (fh.pread(buffer, BLOCKSIZE, (off64_t)j * BLOCKSIZE) != BLOCKSIZE) {
+ if (fh.pread(buffer, BLOCKSIZE, static_cast<off64_t>(j) * BLOCKSIZE) != BLOCKSIZE) {
ErrorAbort(state, kLibfecFailure, "failed to recover %s (block %zu): %s",
filename->data.c_str(), j, strerror(errno));
return StringValue("");
diff --git a/updater/include/updater/rangeset.h b/updater/include/updater/rangeset.h
index afaa82dcd..fad038043 100644
--- a/updater/include/updater/rangeset.h
+++ b/updater/include/updater/rangeset.h
@@ -19,16 +19,35 @@
#include <stddef.h>
#include <string>
+#include <utility>
#include <vector>
#include <android-base/logging.h>
#include <android-base/parseint.h>
#include <android-base/strings.h>
-struct RangeSet {
- size_t count; // Limit is INT_MAX.
- size_t size; // The number of blocks in the RangeSet.
- std::vector<size_t> pos; // Actual limit is INT_MAX.
+using Range = std::pair<size_t, size_t>;
+
+class RangeSet {
+ public:
+ RangeSet() : blocks_(0) {}
+
+ explicit RangeSet(std::vector<Range>&& pairs) {
+ CHECK_NE(pairs.size(), static_cast<size_t>(0)) << "Invalid number of tokens";
+
+ // Sanity check the input.
+ size_t result = 0;
+ for (const auto& range : pairs) {
+ CHECK_LT(range.first, range.second)
+ << "Empty or negative range: " << range.first << ", " << range.second;
+ size_t sz = range.second - range.first;
+ CHECK_LE(result, SIZE_MAX - sz) << "RangeSet size overflow";
+ result += sz;
+ }
+
+ ranges_ = pairs;
+ blocks_ = result;
+ }
static RangeSet Parse(const std::string& range_text) {
std::vector<std::string> pieces = android::base::Split(range_text, ",");
@@ -42,44 +61,43 @@ struct RangeSet {
CHECK_EQ(num % 2, static_cast<size_t>(0)) << "Number of tokens must be even: " << range_text;
CHECK_EQ(num, pieces.size() - 1) << "Mismatching number of tokens: " << range_text;
- std::vector<size_t> pairs(num);
- size_t size = 0;
+ std::vector<Range> pairs;
for (size_t i = 0; i < num; i += 2) {
- CHECK(android::base::ParseUint(pieces[i + 1], &pairs[i], static_cast<size_t>(INT_MAX)));
- CHECK(android::base::ParseUint(pieces[i + 2], &pairs[i + 1], static_cast<size_t>(INT_MAX)));
- CHECK_LT(pairs[i], pairs[i + 1])
- << "Empty or negative range: " << pairs[i] << ", " << pairs[i + 1];
-
- size_t sz = pairs[i + 1] - pairs[i];
- CHECK_LE(size, SIZE_MAX - sz) << "RangeSet size overflow";
- size += sz;
+ size_t first;
+ CHECK(android::base::ParseUint(pieces[i + 1], &first, static_cast<size_t>(INT_MAX)));
+ size_t second;
+ CHECK(android::base::ParseUint(pieces[i + 2], &second, static_cast<size_t>(INT_MAX)));
+
+ pairs.emplace_back(first, second);
}
- return RangeSet{ num / 2, size, std::move(pairs) };
+ return RangeSet(std::move(pairs));
}
// Get the block number for the i-th (starting from 0) block in the RangeSet.
size_t GetBlockNumber(size_t idx) const {
- CHECK_LT(idx, size) << "Index " << idx << " is greater than RangeSet size " << size;
- for (size_t i = 0; i < pos.size(); i += 2) {
- if (idx < pos[i + 1] - pos[i]) {
- return pos[i] + idx;
+ CHECK_LT(idx, blocks_) << "Out of bound index " << idx << " (total blocks: " << blocks_ << ")";
+
+ for (const auto& range : ranges_) {
+ if (idx < range.second - range.first) {
+ return range.first + idx;
}
- idx -= (pos[i + 1] - pos[i]);
+ idx -= (range.second - range.first);
}
- CHECK(false);
+
+ CHECK(false) << "Failed to find block number for index " << idx;
return 0; // Unreachable, but to make compiler happy.
}
// RangeSet has half-closed half-open bounds. For example, "3,5" contains blocks 3 and 4. So "3,5"
// and "5,7" are not overlapped.
bool Overlaps(const RangeSet& other) const {
- for (size_t i = 0; i < count; ++i) {
- size_t start = pos[i * 2];
- size_t end = pos[i * 2 + 1];
- for (size_t j = 0; j < other.count; ++j) {
- size_t other_start = other.pos[j * 2];
- size_t other_end = other.pos[j * 2 + 1];
+ for (const auto& range : ranges_) {
+ size_t start = range.first;
+ size_t end = range.second;
+ for (const auto& other_range : other.ranges_) {
+ size_t other_start = other_range.first;
+ size_t other_end = other_range.second;
// [start, end) vs [other_start, other_end)
if (!(other_start >= end || start >= other_end)) {
return true;
@@ -89,7 +107,58 @@ struct RangeSet {
return false;
}
+ // size() gives the number of Range's in this RangeSet.
+ size_t size() const {
+ return ranges_.size();
+ }
+
+ // blocks() gives the number of all blocks in this RangeSet.
+ size_t blocks() const {
+ return blocks_;
+ }
+
+ // We provide const iterators only.
+ std::vector<Range>::const_iterator cbegin() const {
+ return ranges_.cbegin();
+ }
+
+ std::vector<Range>::const_iterator cend() const {
+ return ranges_.cend();
+ }
+
+ // Need to provide begin()/end() since range-based loop expects begin()/end().
+ std::vector<Range>::const_iterator begin() const {
+ return ranges_.cbegin();
+ }
+
+ std::vector<Range>::const_iterator end() const {
+ return ranges_.cend();
+ }
+
+ // Reverse const iterators for MoveRange().
+ std::vector<Range>::const_reverse_iterator crbegin() const {
+ return ranges_.crbegin();
+ }
+
+ std::vector<Range>::const_reverse_iterator crend() const {
+ return ranges_.crend();
+ }
+
+ const Range& operator[](size_t i) const {
+ return ranges_[i];
+ }
+
bool operator==(const RangeSet& other) const {
- return (count == other.count && size == other.size && pos == other.pos);
+ // The orders of Range's matter. "4,1,5,8,10" != "4,8,10,1,5".
+ return (ranges_ == other.ranges_);
}
+
+ bool operator!=(const RangeSet& other) const {
+ return ranges_ != other.ranges_;
+ }
+
+ private:
+ // Actual limit for each value and the total number are both INT_MAX.
+ std::vector<Range> ranges_;
+ size_t blocks_;
};
diff --git a/verifier.cpp b/verifier.cpp
index 23142c120..2ef9c4c37 100644
--- a/verifier.cpp
+++ b/verifier.cpp
@@ -153,6 +153,12 @@ int verify_file(const unsigned char* addr, size_t length, const std::vector<Cert
LOG(INFO) << "comment is " << comment_size << " bytes; signature is " << signature_start
<< " bytes from end";
+ if (signature_start > comment_size) {
+ LOG(ERROR) << "signature start: " << signature_start << " is larger than comment size: "
+ << comment_size;
+ return VERIFY_FAILURE;
+ }
+
if (signature_start <= FOOTER_SIZE) {
LOG(ERROR) << "Signature start is in the footer";
return VERIFY_FAILURE;