getprop("ro.product.device") == "sweet" || abort("E3004: This package is for \"sweet\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.0.5.0.RKFIDXM:user/release-keys");
ui_print("Target: Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.0.6.0.RKFIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.0.5.0.RKFIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.0.6.0.RKFIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.0.5.0.RKFIDXM:user/release-keys or Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.0.6.0.RKFIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9ca9e7ebf6a7b1e9c10c4ee5f6353692d2ccd0f1"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:368b3e81f1a4f59ce4b9309ab5dcf49e4d8d63d2")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9ca9e7ebf6a7b1e9c10c4ee5f6353692d2ccd0f1"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:368b3e81f1a4f59ce4b9309ab5dcf49e4d8d63d2"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1038,1,32,42,52,54,58,86,87,20453,20454,20484,20485,26649,26650,28078,28079,32768,32786,55784,55785,57085,57086,58207,58208,59925,59926,60527,60528,61559,61560,61711,61712,62635,62636,65536,65552,66825,66826,67811,67812,69177,69178,69620,69621,71794,71795,72049,72050,72142,72143,72389,72390,72606,72608,72772,72774,72784,72785,72797,72799,72805,72806,74252,74256,74292,74293,74299,74301,74306,74307,74312,74314,74319,74320,76360,76361,76370,76371,77016,77018,77060,77061,78026,78027,78677,78678,80609,80612,80620,80621,80643,80644,80648,80649,81083,81084,81193,81194,81225,81227,81232,81233,81544,81546,81556,81557,81677,81679,81684,82899,86230,86232,86263,86264,86278,86280,86285,86286,86293,86295,86300,86301,89840,89841,90514,90516,90564,90565,91653,91655,91678,91679,91808,91810,91818,91819,91952,91954,91963,91964,97818,97820,97914,97915,97942,97943,98191,98192,98304,98322,98734,98736,98741,98742,100612,100614,100661,100662,100666,100668,100673,100674,100705,100707,100712,100713,102403,102405,102431,102432,103304,103306,103331,103332,105395,105397,105425,105426,108733,108735,112521,112522,112527,112529,112534,112535,112736,112738,112880,112881,114669,114671,114715,114716,117249,117250,117591,117593,117594,117595,117628,117630,117655,117656,118346,118348,118366,118367,120752,120754,120802,120803,120966,120968,120975,120976,121386,121388,121403,121404,123523,123524,129059,129061,129145,129146,130610,130612,130641,130642,131072,131088,133445,133446,134385,134387,134420,134421,134447,134448,138265,138267,138294,138295,140890,140892,140922,140923,140943,140944,142736,142738,142778,142779,142818,142822,142829,142830,146452,146453,147099,147101,147144,150421,151628,151630,151656,151657,152788,152792,152817,152818,152998,152999,154113,154114,155008,155010,155040,155041,156234,156236,156259,156260,163840,163858,177967,177968,178237,178238,178262,178263,179687,179689,179852,179853,179938,179939,180167,180169,180177,180178,180188,180190,180198,180199,185639,185640,190263,190265,190377,190378,193043,193045,193075,193076,193086,193087,193090,193094,193100,193101,196608,196624,196781,196783,196843,196844,196846,196848,196851,196852,196896,196898,196903,196904,198731,198735,198779,198780,199181,199185,199197,199198,199229,199231,199236,199237,199280,199282,199287,199288,202402,202404,202445,202446,202528,202530,202536,202537,202548,202550,202555,202556,205476,205478,205483,205484,206042,206044,206061,206062,207278,207280,207307,207308,207623,207700,212571,212572,212580,212582,212587,212588,213214,213216,213233,213234,214904,214906,214925,214926,215895,215896,217476,217478,217505,217506,218396,218398,218426,218427,218496,218498,218505,218506,218511,218513,218525,218526,218550,218552,218557,218558,221681,221683,221732,221733,221736,221738,221743,221744,222074,222076,222090,222091,222540,222544,222555,222556,224037,224039,224068,224069,225046,225048,225984,225985,229376,229394,230721,230722,231741,231742,232851,232852,234501,234503,234620,234623,234647,234648,234650,234651,234652,234653,234654,234655,234685,234686,237250,237252,237268,237269,237793,237795,237804,237805,239866,239867,240225,240226,240877,240895,240966,240967,241622,241631,241961,241962,245132,245133,247696,247701,247702,247703,247704,247705,247706,247707,247708,247709,247710,247711,247712,247713,247714,247715,247716,247717,247718,247719,247720,247721,247722,247723,247724,247725,247726,247727,247728,247729,247730,247731,247732,247733,247734,247735,247736,247737,247738,247739,247740,247741,247742,247743,247744,247745,247746,247747,247748,247749,247750,247751,247752,247753,247754,247755,247756,247757,247758,247759,247760,247761,247762,247763,247764,247765,247766,247767,247768,247769,247770,247771,247772,247773,247774,247775,247776,247777,247778,247779,247780,247781,247782,247783,247784,247785,247786,247787,247788,247789,247790,247791,247792,247793,247794,247795,247796,247797,247798,247799,247800,247801,247802,247803,247804,247805,247806,247807,247808,247809,247810,247811,247812,247813,247814,247815,247816,247817,247818,247819,247820,247821,247822,247823,247824,247825,247826,247827,247828,247829,247830,247831,247832,247833,247834,247835,247836,247837,247838,247839,247840,247841,247842,247843,247844,247845,247846,247847,247848,247849,247850,247851,247852,247853,247854,247855,247856,247857,247858,247859,247860,247861,247862,247863,247864,247865,247866,247867,247868,247869,247870,247871,247872,247873,247874,247875,247876,247877,247878,247879,247880,247881,247882,247883,247884,247885,247886,247887,247888,247889,247890,247891,247892,247893,247894,247895,247896,247897,247898,247899,247900,247901,247902,247903,247904,247905,247906,247907,247908,247909,247910,247911,247912,247913,247914,247915,247916,247917,247918,247919,247920,247921,247922,247923,247924,247925,247926,247927,247928,247929,247930,247931,247932,247933,247934,247935,247936,247937,247938,247939,247940,247941,247942,247943,247944,247945,247946,247947,247948,247949,247950,247951,247952,247953,247954,247955,247956,247957,247958,247959,247960,247961,247962,247963,247964,247965,247966,247967,247968,247969,247970,247971,247972,247973,247974,247975,247976,247977,247978,247979,247980,247981,247982,247983,247984,247985,247986,247987,247988,247989,247990,247991,247992,247993,247994,247995,247996,247997,247998,247999,248000,248001,248002,248003,248004,248005,248006,248007,248008,248009,248010,248011,248012,248013,248014,248015,248016,248017,248018,248019,248020,248021,248022,248023,248024,248025,248026,248027,248028,248029,248030,248031,248032,248033,248034,248035,248036,248037,248038,248039,248040,248041,248042,248043,248044,248045,248046,248047,248048,248049,248050,248051,248052,248053,248054,248055,248056,248057,248058,248059,248060,248061,248062,248063,248064,248065,248066,248067,248068,248069,248070,248071,248072,248073,248074,248075,248076,248077,248078,248079,248080,248081,248082,248083,248084,248085,248086,248087,248088,248089,248090,248091,248092,248093,248094,248095,248096,248097,248098,248099,248100,248101,248102,248103,248104,248105,248106,248107,248108,248109,248110,248111,248112,248113,248114,248115,248116,248117,248118,248119,248120,248121,248122,248123,248124,248125,248126,248127,248128,248129,248130,248131,248132,248133,248134,248135,248136,248137,248138,248139,248140,248141,248142,248143,248144,248146,252226,252227,253223,253224,262144,262160,270630,270632,270638,270639,271950,271952,279393,279394,279399,279400,279724,279725,279748,279749,279761,279762,279769,279770,279804,279805,279811,279812,279834,279835,279901,279902,279906,279907,279910,279911,279976,279977,279980,279985,279986,279987,279988,279989,279990,279991,280921,280922,280929,280930,281483,281487,281488,281489,281490,281491,281492,281493,281494,281495,281496,281497,281498,281499,281501,281502,281503,281506,282273,282275,282414,282415,282418,282420,282678,282679,282681,282683,283227,283228,283243,283244,283259,283260,283578,283579,283725,283726,283735,283737,283739,283740,292763,292764,294912,294930,300716,300717,302701,302702,303318,303319,313263,720899,720912,745401,747654,759502,759660,759661") == "d9eacac25969aa890c9249b3678c61ff04bcd56d" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "1038,1,32,42,52,54,58,86,87,20453,20454,20484,20485,26649,26650,28078,28079,32768,32786,55784,55785,57085,57086,58207,58208,59925,59926,60527,60528,61559,61560,61711,61712,62635,62636,65536,65552,66825,66826,67811,67812,69177,69178,69620,69621,71794,71795,72049,72050,72142,72143,72389,72390,72606,72608,72772,72774,72784,72785,72797,72799,72805,72806,74252,74256,74292,74293,74299,74301,74306,74307,74312,74314,74319,74320,76360,76361,76370,76371,77016,77018,77060,77061,78026,78027,78677,78678,80609,80612,80620,80621,80643,80644,80648,80649,81083,81084,81193,81194,81225,81227,81232,81233,81544,81546,81556,81557,81677,81679,81684,82899,86230,86232,86263,86264,86278,86280,86285,86286,86293,86295,86300,86301,89840,89841,90514,90516,90564,90565,91653,91655,91678,91679,91808,91810,91818,91819,91952,91954,91963,91964,97818,97820,97914,97915,97942,97943,98191,98192,98304,98322,98734,98736,98741,98742,100612,100614,100661,100662,100666,100668,100673,100674,100705,100707,100712,100713,102403,102405,102431,102432,103304,103306,103331,103332,105395,105397,105425,105426,108733,108735,112521,112522,112527,112529,112534,112535,112736,112738,112880,112881,114669,114671,114715,114716,117249,117250,117591,117593,117594,117595,117628,117630,117655,117656,118346,118348,118366,118367,120752,120754,120802,120803,120966,120968,120975,120976,121386,121388,121403,121404,123523,123524,129059,129061,129145,129146,130610,130612,130641,130642,131072,131088,133445,133446,134385,134387,134420,134421,134447,134448,138265,138267,138294,138295,140890,140892,140922,140923,140943,140944,142736,142738,142778,142779,142818,142822,142829,142830,146452,146453,147099,147101,147144,150421,151628,151630,151656,151657,152788,152792,152817,152818,152998,152999,154113,154114,155008,155010,155040,155041,156234,156236,156259,156260,163840,163858,177967,177968,178237,178238,178262,178263,179687,179689,179852,179853,179938,179939,180167,180169,180177,180178,180188,180190,180198,180199,185639,185640,190263,190265,190377,190378,193043,193045,193075,193076,193086,193087,193090,193094,193100,193101,196608,196624,196781,196783,196843,196844,196846,196848,196851,196852,196896,196898,196903,196904,198731,198735,198779,198780,199181,199185,199197,199198,199229,199231,199236,199237,199280,199282,199287,199288,202402,202404,202445,202446,202528,202530,202536,202537,202548,202550,202555,202556,205476,205478,205483,205484,206042,206044,206061,206062,207278,207280,207307,207308,207623,207700,212571,212572,212580,212582,212587,212588,213214,213216,213233,213234,214904,214906,214925,214926,215895,215896,217476,217478,217505,217506,218396,218398,218426,218427,218496,218498,218505,218506,218511,218513,218525,218526,218550,218552,218557,218558,221681,221683,221732,221733,221736,221738,221743,221744,222074,222076,222090,222091,222540,222544,222555,222556,224037,224039,224068,224069,225046,225048,225984,225985,229376,229394,230721,230722,231741,231742,232851,232852,234501,234503,234620,234623,234647,234648,234650,234651,234652,234653,234654,234655,234685,234686,237250,237252,237268,237269,237793,237795,237804,237805,239866,239867,240225,240226,240877,240895,240966,240967,241622,241631,241961,241962,245132,245133,247696,247701,247702,247703,247704,247705,247706,247707,247708,247709,247710,247711,247712,247713,247714,247715,247716,247717,247718,247719,247720,247721,247722,247723,247724,247725,247726,247727,247728,247729,247730,247731,247732,247733,247734,247735,247736,247737,247738,247739,247740,247741,247742,247743,247744,247745,247746,247747,247748,247749,247750,247751,247752,247753,247754,247755,247756,247757,247758,247759,247760,247761,247762,247763,247764,247765,247766,247767,247768,247769,247770,247771,247772,247773,247774,247775,247776,247777,247778,247779,247780,247781,247782,247783,247784,247785,247786,247787,247788,247789,247790,247791,247792,247793,247794,247795,247796,247797,247798,247799,247800,247801,247802,247803,247804,247805,247806,247807,247808,247809,247810,247811,247812,247813,247814,247815,247816,247817,247818,247819,247820,247821,247822,247823,247824,247825,247826,247827,247828,247829,247830,247831,247832,247833,247834,247835,247836,247837,247838,247839,247840,247841,247842,247843,247844,247845,247846,247847,247848,247849,247850,247851,247852,247853,247854,247855,247856,247857,247858,247859,247860,247861,247862,247863,247864,247865,247866,247867,247868,247869,247870,247871,247872,247873,247874,247875,247876,247877,247878,247879,247880,247881,247882,247883,247884,247885,247886,247887,247888,247889,247890,247891,247892,247893,247894,247895,247896,247897,247898,247899,247900,247901,247902,247903,247904,247905,247906,247907,247908,247909,247910,247911,247912,247913,247914,247915,247916,247917,247918,247919,247920,247921,247922,247923,247924,247925,247926,247927,247928,247929,247930,247931,247932,247933,247934,247935,247936,247937,247938,247939,247940,247941,247942,247943,247944,247945,247946,247947,247948,247949,247950,247951,247952,247953,247954,247955,247956,247957,247958,247959,247960,247961,247962,247963,247964,247965,247966,247967,247968,247969,247970,247971,247972,247973,247974,247975,247976,247977,247978,247979,247980,247981,247982,247983,247984,247985,247986,247987,247988,247989,247990,247991,247992,247993,247994,247995,247996,247997,247998,247999,248000,248001,248002,248003,248004,248005,248006,248007,248008,248009,248010,248011,248012,248013,248014,248015,248016,248017,248018,248019,248020,248021,248022,248023,248024,248025,248026,248027,248028,248029,248030,248031,248032,248033,248034,248035,248036,248037,248038,248039,248040,248041,248042,248043,248044,248045,248046,248047,248048,248049,248050,248051,248052,248053,248054,248055,248056,248057,248058,248059,248060,248061,248062,248063,248064,248065,248066,248067,248068,248069,248070,248071,248072,248073,248074,248075,248076,248077,248078,248079,248080,248081,248082,248083,248084,248085,248086,248087,248088,248089,248090,248091,248092,248093,248094,248095,248096,248097,248098,248099,248100,248101,248102,248103,248104,248105,248106,248107,248108,248109,248110,248111,248112,248113,248114,248115,248116,248117,248118,248119,248120,248121,248122,248123,248124,248125,248126,248127,248128,248129,248130,248131,248132,248133,248134,248135,248136,248137,248138,248139,248140,248141,248142,248143,248144,248146,252226,252227,253223,253224,262144,262160,270630,270632,270638,270639,271950,271952,279393,279394,279399,279400,279724,279725,279748,279749,279761,279762,279769,279770,279804,279805,279811,279812,279834,279835,279901,279902,279906,279907,279910,279911,279976,279977,279980,279985,279986,279987,279988,279989,279990,279991,280921,280922,280929,280930,281483,281487,281488,281489,281490,281491,281492,281493,281494,281495,281496,281497,281498,281499,281501,281502,281503,281506,282273,282275,282414,282415,282418,282420,282678,282679,282681,282683,283227,283228,283243,283244,283259,283260,283578,283579,283725,283726,283735,283737,283739,283740,292763,292764,294912,294930,300716,300717,302701,302702,303318,303319,313263,720899,720912,745401,747654,759502,759660,759661") && block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1(map_partition("vendor"), "408,1,29,39,41,48,49,127,133,141,142,556,557,801,803,810,811,813,817,819,820,975,976,979,981,987,988,991,992,1001,1003,1009,1010,1840,1841,4353,4354,13046,13047,14041,14043,14044,14045,14047,14050,14051,14052,14054,14056,14057,14058,14060,14062,14063,14064,14066,14068,14069,14070,14072,14074,14075,14076,14078,14080,14085,14087,14090,14092,14095,14097,14105,14107,14110,14112,14113,14114,14116,14118,14119,14120,14123,14125,14126,14127,14129,14131,14132,14133,14135,14137,14138,14139,14141,14143,14144,14145,14147,14149,14150,14151,14160,14161,14180,14181,14182,14183,14187,14188,14189,14190,14193,14194,14195,14196,14199,14200,14201,14202,14205,14206,14207,14208,14212,14213,14214,14215,14218,14219,14220,14221,14225,14226,14230,14231,14235,14236,14240,14241,14245,14246,14247,14248,14257,14258,14259,14260,14263,14264,14265,14266,14269,14270,14271,14272,14275,14276,14277,14278,14280,14282,14574,14575,14690,14691,15592,15597,32768,32795,57036,57037,57665,57667,63131,63132,65536,65556,70182,70183,70204,70205,70307,70308,70309,70310,70808,70810,70815,70817,70823,70825,70830,70832,70891,70893,71113,71114,72344,72346,72375,72377,72867,72868,73087,73088,80116,80117,80121,80123,80140,80141,80176,80177,80186,80187,80189,80190,80240,80241,80244,80245,80306,80307,80313,80314,80339,80340,80374,80375,80481,80482,80526,80527,80660,80664,81133,81134,81163,81164,81178,81179,81293,81294,81296,81298,81362,81363,81433,81434,81501,81502,81504,81505,81507,81517,81576,81577,81579,81581,81642,81643,81645,81646,81706,81707,81709,81710,81773,81774,81776,81777,81844,81845,81847,81848,81915,81916,81985,81986,82054,82055,82126,82127,82129,82130,82195,82196,82198,82199,82263,82264,82266,82267,82331,82332,82334,82335,82402,82403,82405,82406,82473,82474,82476,82477,82541,82542,82544,82545,82609,82610,82612,82613,82677,82678,82681,82682,82746,82747,82749,82750,82815,82816,82818,82819,82821,82822,82885,82886,82888,82889,86721,86722,90812,90813,90976,90977,91280,91281,91342,91343,91492,91493,91572,91573,91605,91606,91682,91683,91750,91751,91825,91826,91918,91919,91991,91992,92037,92038,92142,92143,92186,92187,92189,92190,92222,92223,92270,92271,92448,92449,92520,92521,92573,92574,92898,92899,92901,92902,92996,92997,93121,93122,93196,93197,93230,93231,93294,93295,93366,93367,93447,93448,93449,93450,93873,93875,93880,93882,94203,94217,94550,360456,360468,366444,367556,373383,373469,373470") == "132ca544677e9de4d02d5751b7612b4cfc37bc73" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "408,1,29,39,41,48,49,127,133,141,142,556,557,801,803,810,811,813,817,819,820,975,976,979,981,987,988,991,992,1001,1003,1009,1010,1840,1841,4353,4354,13046,13047,14041,14043,14044,14045,14047,14050,14051,14052,14054,14056,14057,14058,14060,14062,14063,14064,14066,14068,14069,14070,14072,14074,14075,14076,14078,14080,14085,14087,14090,14092,14095,14097,14105,14107,14110,14112,14113,14114,14116,14118,14119,14120,14123,14125,14126,14127,14129,14131,14132,14133,14135,14137,14138,14139,14141,14143,14144,14145,14147,14149,14150,14151,14160,14161,14180,14181,14182,14183,14187,14188,14189,14190,14193,14194,14195,14196,14199,14200,14201,14202,14205,14206,14207,14208,14212,14213,14214,14215,14218,14219,14220,14221,14225,14226,14230,14231,14235,14236,14240,14241,14245,14246,14247,14248,14257,14258,14259,14260,14263,14264,14265,14266,14269,14270,14271,14272,14275,14276,14277,14278,14280,14282,14574,14575,14690,14691,15592,15597,32768,32795,57036,57037,57665,57667,63131,63132,65536,65556,70182,70183,70204,70205,70307,70308,70309,70310,70808,70810,70815,70817,70823,70825,70830,70832,70891,70893,71113,71114,72344,72346,72375,72377,72867,72868,73087,73088,80116,80117,80121,80123,80140,80141,80176,80177,80186,80187,80189,80190,80240,80241,80244,80245,80306,80307,80313,80314,80339,80340,80374,80375,80481,80482,80526,80527,80660,80664,81133,81134,81163,81164,81178,81179,81293,81294,81296,81298,81362,81363,81433,81434,81501,81502,81504,81505,81507,81517,81576,81577,81579,81581,81642,81643,81645,81646,81706,81707,81709,81710,81773,81774,81776,81777,81844,81845,81847,81848,81915,81916,81985,81986,82054,82055,82126,82127,82129,82130,82195,82196,82198,82199,82263,82264,82266,82267,82331,82332,82334,82335,82402,82403,82405,82406,82473,82474,82476,82477,82541,82542,82544,82545,82609,82610,82612,82613,82677,82678,82681,82682,82746,82747,82749,82750,82815,82816,82818,82819,82821,82822,82885,82886,82888,82889,86721,86722,90812,90813,90976,90977,91280,91281,91342,91343,91492,91493,91572,91573,91605,91606,91682,91683,91750,91751,91825,91826,91918,91919,91991,91992,92037,92038,92142,92143,92186,92187,92189,92190,92222,92223,92270,92271,92448,92449,92520,92521,92573,92574,92898,92899,92901,92902,92996,92997,93121,93122,93196,93197,93230,93231,93294,93295,93366,93367,93447,93448,93449,93450,93873,93875,93880,93882,94203,94217,94550,360456,360468,366444,367556,373383,373469,373470") && block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;
if (range_sha1(map_partition("product"), "274,1,15,4076,4077,5751,5753,5830,5831,8690,8691,8697,8698,8741,8742,15740,15741,21679,21680,21720,21721,23943,23944,24619,24621,25589,25590,25952,25954,26475,26476,26488,26490,26496,26497,28337,28339,28383,28384,29774,29775,32768,32776,38084,38085,39167,39168,48091,48092,52693,52695,56431,56432,65536,65542,66289,66290,74597,74604,74668,74674,75743,75750,77322,77323,77328,77329,77457,77459,77464,77465,77477,77479,77484,77485,80425,80426,92702,92703,92758,92759,98304,98312,98313,98314,111776,111777,116483,116484,116486,116487,116492,116493,119463,119464,124822,124823,128771,128773,128781,128783,128791,128793,129573,129574,129581,129582,129588,129589,131072,131078,133924,133925,134158,134160,134170,134172,134218,134220,134230,134232,134241,134242,136060,136061,136064,136067,138088,138089,138518,138519,143177,143178,143383,143384,146434,146435,152484,152485,156035,156036,160367,160368,162032,162033,162038,162039,163840,163848,164619,164620,164748,164749,164750,164751,164752,164753,168464,168465,176568,176569,177143,177145,178167,178168,180446,180447,180491,180492,180569,180571,180572,180573,180635,180637,180645,180646,180647,180648,183655,183656,183659,183660,185828,185829,188405,188406,188569,188570,188571,188572,188574,188575,188589,188590,188593,188595,188596,188598,188616,188617,188628,188629,188667,188669,188680,188681,188689,188692,189107,189108,189479,189480,190965,190966,196608,196634,197378,197379,198846,198849,200794,200795,202839,202840,204704,204706,206542,206544,208216,208217,209274,209275,213953,213954,218699,218700,218703,218704,224781,224782,227308,227311,229261,229263,229376,229414,230953,230956,231948,231950,245396,245397,257453,257454,262144,262170,282983,282984,283433,283441,286513,286514,287032,287033,290742,290745,294079,294080,294912,294919,301423,306201,306275,306276") == "09c501526f1c23b18976aa219462d9099c962e25" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "274,1,15,4076,4077,5751,5753,5830,5831,8690,8691,8697,8698,8741,8742,15740,15741,21679,21680,21720,21721,23943,23944,24619,24621,25589,25590,25952,25954,26475,26476,26488,26490,26496,26497,28337,28339,28383,28384,29774,29775,32768,32776,38084,38085,39167,39168,48091,48092,52693,52695,56431,56432,65536,65542,66289,66290,74597,74604,74668,74674,75743,75750,77322,77323,77328,77329,77457,77459,77464,77465,77477,77479,77484,77485,80425,80426,92702,92703,92758,92759,98304,98312,98313,98314,111776,111777,116483,116484,116486,116487,116492,116493,119463,119464,124822,124823,128771,128773,128781,128783,128791,128793,129573,129574,129581,129582,129588,129589,131072,131078,133924,133925,134158,134160,134170,134172,134218,134220,134230,134232,134241,134242,136060,136061,136064,136067,138088,138089,138518,138519,143177,143178,143383,143384,146434,146435,152484,152485,156035,156036,160367,160368,162032,162033,162038,162039,163840,163848,164619,164620,164748,164749,164750,164751,164752,164753,168464,168465,176568,176569,177143,177145,178167,178168,180446,180447,180491,180492,180569,180571,180572,180573,180635,180637,180645,180646,180647,180648,183655,183656,183659,183660,185828,185829,188405,188406,188569,188570,188571,188572,188574,188575,188589,188590,188593,188595,188596,188598,188616,188617,188628,188629,188667,188669,188680,188681,188689,188692,189107,189108,189479,189480,190965,190966,196608,196634,197378,197379,198846,198849,200794,200795,202839,202840,204704,204706,206542,206544,208216,208217,209274,209275,213953,213954,218699,218700,218703,218704,224781,224782,227308,227311,229261,229263,229376,229414,230953,230956,231948,231950,245396,245397,257453,257454,262144,262170,282983,282984,283433,283441,286513,286514,287032,287033,290742,290745,294079,294080,294912,294919,301423,306201,306275,306276") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "12,1,12,13,14,22,23,245,246,248,254,273,274") == "ce50b6151e4ee12a204ff79e64473d787ed840d7" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "12,1,12,13,14,22,23,245,246,248,254,273,274") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "264,1,36,43,45,51,52,58,60,65,66,80,82,87,88,146,148,155,156,240,244,250,251,655,659,675,676,682,684,689,690,884,886,892,893,896,898,905,906,909,910,916,918,923,924,946,948,953,954,1689,1691,1711,1712,1716,1718,1723,1724,1726,1727,1738,1740,1745,1746,1756,1757,1762,1764,1770,1771,1775,1779,1785,1786,1793,1795,1800,1801,1813,1815,1820,1821,1823,1826,1836,1839,1848,1851,1885,1888,1911,1914,1936,1939,1958,1961,1981,1982,2191,2193,2203,2204,2216,2217,2218,2219,2220,2221,2230,2231,2254,2255,2299,2304,2307,2310,2313,2316,2319,2321,2325,2326,2330,2333,2338,2339,2342,2344,2423,2424,2425,2426,2434,2435,2833,2835,3053,3054,3156,3157,3205,3206,5651,5652,6716,6717,8567,8568,8626,8627,9067,9068,9377,9378,14559,14560,14632,14633,14641,14642,14777,14778,14782,14783,14836,14837,14847,14848,14881,14882,14901,14902,14954,14955,15100,15101,15176,15177,15323,15324,20074,20076,20215,20216,20241,20242,20338,20339,20390,20391,20402,20403,20453,20454,20529,20530,20593,20594,20856,20857,21361,21362,25236,25237,25293,25294,25718,25719,32768,32805,33731,33732,34642,34643,39998,39999,40605,40606,40924,40925,43019,43020,52589,65561,65563,78180,78211,78228,79147,79148,84798,84826,85903,85904,86430,86431,88003,88005,88023,88024,88054,88056,88061,88062,88090,88094,88100,88101,88894,88896,88922,88923,88930,88932,88937,88938,89216,89220,89231,89234,89262,89265,89547,90969,91002,91003") == "710d40ceb2fbf90b60bc296856f040d57697d712" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "264,1,36,43,45,51,52,58,60,65,66,80,82,87,88,146,148,155,156,240,244,250,251,655,659,675,676,682,684,689,690,884,886,892,893,896,898,905,906,909,910,916,918,923,924,946,948,953,954,1689,1691,1711,1712,1716,1718,1723,1724,1726,1727,1738,1740,1745,1746,1756,1757,1762,1764,1770,1771,1775,1779,1785,1786,1793,1795,1800,1801,1813,1815,1820,1821,1823,1826,1836,1839,1848,1851,1885,1888,1911,1914,1936,1939,1958,1961,1981,1982,2191,2193,2203,2204,2216,2217,2218,2219,2220,2221,2230,2231,2254,2255,2299,2304,2307,2310,2313,2316,2319,2321,2325,2326,2330,2333,2338,2339,2342,2344,2423,2424,2425,2426,2434,2435,2833,2835,3053,3054,3156,3157,3205,3206,5651,5652,6716,6717,8567,8568,8626,8627,9067,9068,9377,9378,14559,14560,14632,14633,14641,14642,14777,14778,14782,14783,14836,14837,14847,14848,14881,14882,14901,14902,14954,14955,15100,15101,15176,15177,15323,15324,20074,20076,20215,20216,20241,20242,20338,20339,20390,20391,20402,20403,20453,20454,20529,20530,20593,20594,20856,20857,21361,21362,25236,25237,25293,25294,25718,25719,32768,32805,33731,33732,34642,34643,39998,39999,40605,40606,40924,40925,43019,43020,52589,65561,65563,78180,78211,78228,79147,79148,84798,84826,85903,85904,86430,86431,88003,88005,88023,88024,88054,88056,88061,88062,88090,88094,88100,88101,88894,88896,88922,88923,88930,88932,88937,88938,89216,89220,89231,89234,89262,89265,89547,90969,91002,91003") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

# ---- start making changes here ----


# ---- radio update tasks ----

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9ca9e7ebf6a7b1e9c10c4ee5f6353692d2ccd0f1"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:368b3e81f1a4f59ce4b9309ab5dcf49e4d8d63d2"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:368b3e81f1a4f59ce4b9309ab5dcf49e4d8d63d2")));

# ---- radio update tasks 2 ----

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
