getprop("ro.product.device") == "surya" || abort("E3004: This package is for \"surya\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: POCO/surya_id/surya:11/RKQ1.200826.002/V12.5.6.0.RJGIDXM:user/release-keys");
ui_print("Target: POCO/surya_id/surya:11/RKQ1.200826.002/V12.5.7.0.RJGIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/surya_id/surya:11/RKQ1.200826.002/V12.5.6.0.RJGIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/surya_id/surya:11/RKQ1.200826.002/V12.5.7.0.RJGIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/surya_id/surya:11/RKQ1.200826.002/V12.5.6.0.RJGIDXM:user/release-keys or POCO/surya_id/surya:11/RKQ1.200826.002/V12.5.7.0.RJGIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:3e501431131055a7cefe07333f25668195740b60"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:0e83c000fd198eb5b28670e97026cab0cb2cb1d5")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:3e501431131055a7cefe07333f25668195740b60"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:0e83c000fd198eb5b28670e97026cab0cb2cb1d5"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "102,1,32,44,54,56,60,88,89,21342,21343,21373,21374,27539,27540,28955,57975,57986,57987,60144,60145,62968,62969,63713,63714,65274,65275,65467,65468,65536,65552,66704,66705,71074,71075,72192,72193,74211,74212,74693,74694,77857,77858,78454,78455,78642,78643,79345,79346,79562,79564,79703,79707,79715,79716,79729,79733,79737,79738,81145,81151,81184,81185,81192,81198,81199,81200,81207,81213,81214,81215,84709,84713,84753,84754,84825,84827,84920,84924,84929,84930,85068,85069,85101,85107,85108,85109,85231,85237,85238,116057,116258,116260,116402,271852,271858,720899,720912,738838,741071,752815,752972,752973") == "0f69540de46dd41e77b66cc2d1377558e1a2fc1d" || 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"), "102,1,32,44,54,56,60,88,89,21342,21343,21373,21374,27539,27540,28955,57975,57986,57987,60144,60145,62968,62969,63713,63714,65274,65275,65467,65468,65536,65552,66704,66705,71074,71075,72192,72193,74211,74212,74693,74694,77857,77858,78454,78455,78642,78643,79345,79346,79562,79564,79703,79707,79715,79716,79729,79733,79737,79738,81145,81151,81184,81185,81192,81198,81199,81200,81207,81213,81214,81215,84709,84713,84753,84754,84825,84827,84920,84924,84929,84930,85068,85069,85101,85107,85108,85109,85231,85237,85238,116057,116258,116260,116402,271852,271858,720899,720912,738838,741071,752815,752972,752973") && 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"), "786,1,34,45,49,54,55,135,143,149,150,156,157,402,406,411,412,415,419,422,425,428,429,434,438,442,443,446,447,1267,1268,1428,1434,3623,3624,12526,12527,12545,12546,13464,13465,13483,13484,13507,13508,13511,13512,13550,13552,13617,13618,13630,13631,13991,13992,14275,14276,15101,15107,22283,22284,22416,22417,22427,22428,29963,29964,30069,30070,30071,30072,30570,30572,30577,30579,30585,30587,30592,30594,30653,30655,32768,32804,33097,33098,33462,33463,33504,33505,33764,33765,33832,33833,38635,38636,39474,39475,39479,39481,39498,39499,39534,39535,39544,39545,39547,39548,39598,39599,39602,39603,39664,39665,39671,39672,39697,39698,39730,39731,39834,39835,40206,40207,40209,40211,40275,40276,40346,40347,40414,40415,40417,40418,40420,40421,40480,40482,40484,40485,40549,40550,40620,40621,40688,40689,40691,40692,40694,40703,40704,40705,40767,40768,40834,40835,40837,40838,40841,40845,40847,40848,40850,40852,40854,40856,40915,40916,40918,40920,40980,40981,40983,40984,41045,41046,41048,41049,41109,41110,41112,41113,41180,41181,41249,41250,41317,41318,41384,41385,41387,41388,41451,41452,41518,41519,41521,41522,41583,41584,41586,41587,41651,41652,41654,41655,41717,41718,41720,41721,41785,41786,41788,41789,41850,41851,41853,41854,41918,41919,41921,41922,41986,41987,41989,41990,42054,42055,42057,42058,42122,42123,42125,42126,42193,42194,42195,42196,42262,42263,42264,42265,42270,42271,42331,42332,42398,42399,42401,42402,42465,42466,42532,42533,42535,42536,42597,42598,42600,42601,42665,42666,42668,42669,42731,42732,42734,42735,42799,42800,42802,42803,42864,42865,42867,42868,42932,42933,42935,42936,43000,43001,43003,43004,43068,43069,43071,43072,43136,43137,43139,43140,43207,43208,43209,43210,43276,43277,43278,43279,43284,43286,43346,43347,43419,43420,43422,43423,43485,43486,43556,43557,43565,43569,43570,43571,43770,43771,43837,43838,43840,43841,43844,43849,45245,45246,45411,45412,45723,45724,45785,45786,45935,45936,46015,46016,46048,46049,46125,46126,46193,46194,46266,46267,46359,46360,46432,46433,46478,46479,46583,46584,46627,46628,46630,46631,46663,46664,46825,46826,46897,46898,46950,46951,47275,47276,47278,47279,47373,47374,47498,47499,47573,47574,47607,47608,47671,47672,47743,47744,48247,48249,48254,48256,48320,48321,48373,48374,48880,48881,49229,49230,49487,49488,51808,51809,51936,51937,52829,52832,52893,52894,53799,53800,54995,54997,54999,55000,55005,55006,55540,55541,55542,55545,55611,55612,55997,55998,56001,56003,56370,56371,56373,56376,58141,58142,58143,58144,58151,58152,58238,58239,58660,58661,58731,58732,58734,58735,58822,58823,59115,59118,59484,59487,59556,59557,59559,59560,61428,61429,61519,61520,61675,61676,61901,61902,62039,62040,62244,62245,62251,62253,62331,62334,62504,62505,62525,62526,62528,62529,63720,63721,64002,64003,64006,64007,64009,64012,64014,64016,64017,64022,64023,64024,64025,64028,64029,64030,64032,64033,64035,64036,64037,64040,64042,64048,64049,64051,64053,64054,64055,64057,64058,64060,64061,64064,64066,64072,64073,64078,64079,64080,64717,64718,65011,65012,65014,65019,65472,65473,65475,65476,65482,65484,65485,65486,65536,65574,66776,66777,67524,67526,67597,67598,67888,67889,68531,68532,78280,78397,79814,79816,83028,83029,86969,86970,86972,86973,93434,93435,98304,98345,98854,98855,101619,101652,102820,102821,103878,105670,105676,108984,109033,109034,109473,109475,110047,110048,110486,110487,110938,110939,113629,113630,116317,116319,116704,116726,117187,117188,117439,117440,123430,123431,123489,123490,123571,123572,124374,125942,129045,129047,131072,131097,133858,133859,133882,133883,139246,139247,139652,139714,147919,147920,150957,150959,151917,151918,151920,151921,152057,152058,156025,156026,157576,157577,157579,157580,157716,157717,162617,162618,162620,162621,162757,162758,163840,163878,168024,168554,170699,170700,171034,171045,171059,171070,171107,171108,171120,171121,175228,175290,175291,175292,177045,177046,179714,179715,180095,180282,181598,181599,186975,186977,188087,188088,191321,191322,193015,193016,196608,196636,202159,202160,206546,206548,206549,206550,208122,208123,208129,208131,208223,208224,210700,210701,210705,210706,210708,210710,218375,218376,218380,218381,218388,218389,224029,224030,224046,224047,224048,224050,224051,224053,224054,224056,224057,224059,224117,224119,224120,224121,224123,224124,224126,224127,224313,224314,225253,225254,225259,225260,226089,226090,226101,226102,227667,227668,229376,229403,235146,235147,240608,240610,240944,240946,242162,242163,242357,242358,245101,245102,245123,245125,245146,245148,245314,245315,246108,246109,248553,248554,254765,254766,254768,254769,254776,254777,255916,255917,255939,255940,256768,256769,256898,256900,257010,257011,257354,257355,260129,260130,261761,261763,262144,262162,265593,265594,266915,266917,266924,266929,266936,266937,266939,266940,266974,266983,269461,269506,269519,269520,269526,273662,274491,278843,278913,278914") == "3478d73f033690c43f2dbd43ed079f9259bb28c1" || 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"), "786,1,34,45,49,54,55,135,143,149,150,156,157,402,406,411,412,415,419,422,425,428,429,434,438,442,443,446,447,1267,1268,1428,1434,3623,3624,12526,12527,12545,12546,13464,13465,13483,13484,13507,13508,13511,13512,13550,13552,13617,13618,13630,13631,13991,13992,14275,14276,15101,15107,22283,22284,22416,22417,22427,22428,29963,29964,30069,30070,30071,30072,30570,30572,30577,30579,30585,30587,30592,30594,30653,30655,32768,32804,33097,33098,33462,33463,33504,33505,33764,33765,33832,33833,38635,38636,39474,39475,39479,39481,39498,39499,39534,39535,39544,39545,39547,39548,39598,39599,39602,39603,39664,39665,39671,39672,39697,39698,39730,39731,39834,39835,40206,40207,40209,40211,40275,40276,40346,40347,40414,40415,40417,40418,40420,40421,40480,40482,40484,40485,40549,40550,40620,40621,40688,40689,40691,40692,40694,40703,40704,40705,40767,40768,40834,40835,40837,40838,40841,40845,40847,40848,40850,40852,40854,40856,40915,40916,40918,40920,40980,40981,40983,40984,41045,41046,41048,41049,41109,41110,41112,41113,41180,41181,41249,41250,41317,41318,41384,41385,41387,41388,41451,41452,41518,41519,41521,41522,41583,41584,41586,41587,41651,41652,41654,41655,41717,41718,41720,41721,41785,41786,41788,41789,41850,41851,41853,41854,41918,41919,41921,41922,41986,41987,41989,41990,42054,42055,42057,42058,42122,42123,42125,42126,42193,42194,42195,42196,42262,42263,42264,42265,42270,42271,42331,42332,42398,42399,42401,42402,42465,42466,42532,42533,42535,42536,42597,42598,42600,42601,42665,42666,42668,42669,42731,42732,42734,42735,42799,42800,42802,42803,42864,42865,42867,42868,42932,42933,42935,42936,43000,43001,43003,43004,43068,43069,43071,43072,43136,43137,43139,43140,43207,43208,43209,43210,43276,43277,43278,43279,43284,43286,43346,43347,43419,43420,43422,43423,43485,43486,43556,43557,43565,43569,43570,43571,43770,43771,43837,43838,43840,43841,43844,43849,45245,45246,45411,45412,45723,45724,45785,45786,45935,45936,46015,46016,46048,46049,46125,46126,46193,46194,46266,46267,46359,46360,46432,46433,46478,46479,46583,46584,46627,46628,46630,46631,46663,46664,46825,46826,46897,46898,46950,46951,47275,47276,47278,47279,47373,47374,47498,47499,47573,47574,47607,47608,47671,47672,47743,47744,48247,48249,48254,48256,48320,48321,48373,48374,48880,48881,49229,49230,49487,49488,51808,51809,51936,51937,52829,52832,52893,52894,53799,53800,54995,54997,54999,55000,55005,55006,55540,55541,55542,55545,55611,55612,55997,55998,56001,56003,56370,56371,56373,56376,58141,58142,58143,58144,58151,58152,58238,58239,58660,58661,58731,58732,58734,58735,58822,58823,59115,59118,59484,59487,59556,59557,59559,59560,61428,61429,61519,61520,61675,61676,61901,61902,62039,62040,62244,62245,62251,62253,62331,62334,62504,62505,62525,62526,62528,62529,63720,63721,64002,64003,64006,64007,64009,64012,64014,64016,64017,64022,64023,64024,64025,64028,64029,64030,64032,64033,64035,64036,64037,64040,64042,64048,64049,64051,64053,64054,64055,64057,64058,64060,64061,64064,64066,64072,64073,64078,64079,64080,64717,64718,65011,65012,65014,65019,65472,65473,65475,65476,65482,65484,65485,65486,65536,65574,66776,66777,67524,67526,67597,67598,67888,67889,68531,68532,78280,78397,79814,79816,83028,83029,86969,86970,86972,86973,93434,93435,98304,98345,98854,98855,101619,101652,102820,102821,103878,105670,105676,108984,109033,109034,109473,109475,110047,110048,110486,110487,110938,110939,113629,113630,116317,116319,116704,116726,117187,117188,117439,117440,123430,123431,123489,123490,123571,123572,124374,125942,129045,129047,131072,131097,133858,133859,133882,133883,139246,139247,139652,139714,147919,147920,150957,150959,151917,151918,151920,151921,152057,152058,156025,156026,157576,157577,157579,157580,157716,157717,162617,162618,162620,162621,162757,162758,163840,163878,168024,168554,170699,170700,171034,171045,171059,171070,171107,171108,171120,171121,175228,175290,175291,175292,177045,177046,179714,179715,180095,180282,181598,181599,186975,186977,188087,188088,191321,191322,193015,193016,196608,196636,202159,202160,206546,206548,206549,206550,208122,208123,208129,208131,208223,208224,210700,210701,210705,210706,210708,210710,218375,218376,218380,218381,218388,218389,224029,224030,224046,224047,224048,224050,224051,224053,224054,224056,224057,224059,224117,224119,224120,224121,224123,224124,224126,224127,224313,224314,225253,225254,225259,225260,226089,226090,226101,226102,227667,227668,229376,229403,235146,235147,240608,240610,240944,240946,242162,242163,242357,242358,245101,245102,245123,245125,245146,245148,245314,245315,246108,246109,248553,248554,254765,254766,254768,254769,254776,254777,255916,255917,255939,255940,256768,256769,256898,256900,257010,257011,257354,257355,260129,260130,261761,261763,262144,262162,265593,265594,266915,266917,266924,266929,266936,266937,266939,266940,266974,266983,269461,269506,269519,269520,269526,273662,274491,278843,278913,278914") && 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("system_ext"), "386,1,30,39,43,47,48,55,61,62,63,79,85,86,87,146,150,155,156,717,719,776,780,795,796,1185,1191,1205,1206,1213,1219,1220,1221,1450,1454,1463,1464,1495,1501,1502,1503,1699,1703,1707,1708,1712,1716,1721,1722,1727,1728,1736,1742,1743,1744,1768,1774,1775,1776,2512,2516,2534,2535,2541,2547,2548,2549,2561,2567,2568,2569,2580,2581,2587,2591,2595,2596,2601,2607,2611,2612,2621,2627,2628,2629,2642,2648,2649,2650,2662,2668,2669,2670,2673,2680,2688,2695,2762,2769,2775,2782,2814,2821,2841,2848,2867,2872,2890,2897,2915,2916,3121,3123,3151,3152,3164,3165,3166,3167,3168,3169,3177,3178,3201,3202,3247,3252,3255,3258,3261,3262,3766,3768,3772,3776,3781,3783,3788,3792,3793,3797,3798,3802,3803,3807,3808,3812,3813,3817,3818,3822,3823,3825,3832,3836,3837,3841,3842,3846,3847,3851,3852,3856,3857,3861,3862,3866,3867,3869,3870,3874,3875,3879,3880,3884,3885,3889,3890,3894,3895,3899,3900,3904,3905,3907,3911,3915,3916,3920,3921,3923,3924,3926,3927,3931,3932,3936,3937,3939,3940,3944,3945,3949,3950,3954,3955,3959,3960,3962,3963,3967,3968,3970,3974,3987,3992,4022,4025,4136,6541,6542,6677,7346,7599,7600,9665,9666,9724,9725,10507,10508,10558,10559,10868,10869,16050,16051,16123,16124,16132,16133,16268,16269,16273,16274,16327,16328,16338,16339,16372,16373,16392,16393,16445,16446,16591,16592,16667,16668,16814,16815,21565,21567,21706,21707,21732,21733,21829,21830,21881,21882,21893,21894,21944,21945,22020,22021,22084,22085,22347,22348,22852,22853,26727,26728,26784,26785,27209,27210,32768,32813,33291,65493,65536,65564,65591,65617,66062,66289,68966,68967,68968,68969,68973,68974,68985,68988,68990,68991,68998,68999,69004,69007,69008,69009,69015,69016,69023,69024,69027,69028,69033,69035,69036,69037,69040,69044,69046,69048,69050,69053,69056,69058,69094,69095,69096,69097,69103,69104,69107,69108,69111,69116,69120,69121,69123,69124,69127,69128,69133,69134,69142,69144,69146,69151,69156,69160,69163,69164,69165,69167,69168,69169,69180,69181,69195,69198,69200,69204,69206,69207,69214,70702,70704,70708,70860,70979,71633,71635,71659,98326,98327,115759,116111,117955,117993,117994") == "9a7d7ff7e4557289c330698cb37a6bef8ce742c6" || 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"), "386,1,30,39,43,47,48,55,61,62,63,79,85,86,87,146,150,155,156,717,719,776,780,795,796,1185,1191,1205,1206,1213,1219,1220,1221,1450,1454,1463,1464,1495,1501,1502,1503,1699,1703,1707,1708,1712,1716,1721,1722,1727,1728,1736,1742,1743,1744,1768,1774,1775,1776,2512,2516,2534,2535,2541,2547,2548,2549,2561,2567,2568,2569,2580,2581,2587,2591,2595,2596,2601,2607,2611,2612,2621,2627,2628,2629,2642,2648,2649,2650,2662,2668,2669,2670,2673,2680,2688,2695,2762,2769,2775,2782,2814,2821,2841,2848,2867,2872,2890,2897,2915,2916,3121,3123,3151,3152,3164,3165,3166,3167,3168,3169,3177,3178,3201,3202,3247,3252,3255,3258,3261,3262,3766,3768,3772,3776,3781,3783,3788,3792,3793,3797,3798,3802,3803,3807,3808,3812,3813,3817,3818,3822,3823,3825,3832,3836,3837,3841,3842,3846,3847,3851,3852,3856,3857,3861,3862,3866,3867,3869,3870,3874,3875,3879,3880,3884,3885,3889,3890,3894,3895,3899,3900,3904,3905,3907,3911,3915,3916,3920,3921,3923,3924,3926,3927,3931,3932,3936,3937,3939,3940,3944,3945,3949,3950,3954,3955,3959,3960,3962,3963,3967,3968,3970,3974,3987,3992,4022,4025,4136,6541,6542,6677,7346,7599,7600,9665,9666,9724,9725,10507,10508,10558,10559,10868,10869,16050,16051,16123,16124,16132,16133,16268,16269,16273,16274,16327,16328,16338,16339,16372,16373,16392,16393,16445,16446,16591,16592,16667,16668,16814,16815,21565,21567,21706,21707,21732,21733,21829,21830,21881,21882,21893,21894,21944,21945,22020,22021,22084,22085,22347,22348,22852,22853,26727,26728,26784,26785,27209,27210,32768,32813,33291,65493,65536,65564,65591,65617,66062,66289,68966,68967,68968,68969,68973,68974,68985,68988,68990,68991,68998,68999,69004,69007,69008,69009,69015,69016,69023,69024,69027,69028,69033,69035,69036,69037,69040,69044,69046,69048,69050,69053,69056,69058,69094,69095,69096,69097,69103,69104,69107,69108,69111,69116,69120,69121,69123,69124,69127,69128,69133,69134,69142,69144,69146,69151,69156,69160,69163,69164,69165,69167,69168,69169,69180,69181,69195,69198,69200,69204,69206,69207,69214,70702,70704,70708,70860,70979,71633,71635,71659,98326,98327,115759,116111,117955,117993,117994") && 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;
if (range_sha1(map_partition("product"), "252,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,18540,18541,28348,28349,29024,29028,29994,29995,30357,30361,30880,30881,30893,30899,30900,30901,32741,32745,32768,32777,32795,32796,34187,34188,43939,43940,47811,47812,48062,48067,48079,48080,48144,48147,48340,48345,48602,48604,52086,52087,61929,61930,65536,65543,71480,71487,72963,72964,72971,72972,73101,73107,73108,73109,73122,73128,73129,73132,73134,73135,80656,80657,81896,81900,82913,82914,86762,86764,98304,98313,100256,100257,100326,100327,102548,102550,123048,123049,125057,125058,131072,131079,131080,131081,138738,138739,142730,142731,143032,143033,143085,143087,143096,143097,143191,143193,143982,143983,143990,143991,143997,143998,148335,148336,148561,148563,148573,148575,148621,148623,148633,148635,148644,148645,150463,150466,153851,153852,154015,154016,154017,154018,154019,154020,154035,154036,154039,154041,154042,154044,154060,154061,154072,154073,154111,154115,154119,154123,154124,154136,154551,154552,154923,154924,156409,156410,156499,156501,156504,156505,156508,156509,157416,157418,163840,163882,163883,163884,175194,175196,176337,176338,185587,185589,187829,187830,188004,188006,188054,188055,188310,188312,188700,188702,190098,190100,190867,190868,196608,196638,197336,197337,201558,201559,203087,203088,203752,203756,203772,203773,205346,205350,205375,205376,216208,216209,229376,229383,241360,241361,241395,241396,241590,241591,242120,242121,242309,242310,243050,243051,243633,243634,243810,243811,244788,244790,245262,245263,245904,245905,248828,248829,249765,249768,253102,253103,260322,264450,264516,264517") == "c68f857b96f88229b19fc6d92463a849cf3b9b6f" || 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"), "252,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,18540,18541,28348,28349,29024,29028,29994,29995,30357,30361,30880,30881,30893,30899,30900,30901,32741,32745,32768,32777,32795,32796,34187,34188,43939,43940,47811,47812,48062,48067,48079,48080,48144,48147,48340,48345,48602,48604,52086,52087,61929,61930,65536,65543,71480,71487,72963,72964,72971,72972,73101,73107,73108,73109,73122,73128,73129,73132,73134,73135,80656,80657,81896,81900,82913,82914,86762,86764,98304,98313,100256,100257,100326,100327,102548,102550,123048,123049,125057,125058,131072,131079,131080,131081,138738,138739,142730,142731,143032,143033,143085,143087,143096,143097,143191,143193,143982,143983,143990,143991,143997,143998,148335,148336,148561,148563,148573,148575,148621,148623,148633,148635,148644,148645,150463,150466,153851,153852,154015,154016,154017,154018,154019,154020,154035,154036,154039,154041,154042,154044,154060,154061,154072,154073,154111,154115,154119,154123,154124,154136,154551,154552,154923,154924,156409,156410,156499,156501,156504,156505,156508,156509,157416,157418,163840,163882,163883,163884,175194,175196,176337,176338,185587,185589,187829,187830,188004,188006,188054,188055,188310,188312,188700,188702,190098,190100,190867,190868,196608,196638,197336,197337,201558,201559,203087,203088,203752,203756,203772,203773,205346,205350,205375,205376,216208,216209,229376,229383,241360,241361,241395,241396,241590,241591,242120,242121,242309,242310,243050,243051,243633,243634,243810,243811,244788,244790,245262,245263,245904,245905,248828,248829,249765,249768,253102,253103,260322,264450,264516,264517") && 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;

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


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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");

# --- Start patching dynamic partitions ---


# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.600000, 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.");

# Update dynamic partition metadata

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

# 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.");

# 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.");

# 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.");

# --- 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:3e501431131055a7cefe07333f25668195740b60"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:0e83c000fd198eb5b28670e97026cab0cb2cb1d5"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:0e83c000fd198eb5b28670e97026cab0cb2cb1d5")));

# ---- 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);
