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_global/surya:11/RKQ1.200826.002/V12.5.7.0.RJGMIXM:user/release-keys");
ui_print("Target: POCO/surya_global/surya:11/RKQ1.200826.002/V12.5.8.0.RJGMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/surya_global/surya:11/RKQ1.200826.002/V12.5.7.0.RJGMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/surya_global/surya:11/RKQ1.200826.002/V12.5.8.0.RJGMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/surya_global/surya:11/RKQ1.200826.002/V12.5.7.0.RJGMIXM:user/release-keys or POCO/surya_global/surya:11/RKQ1.200826.002/V12.5.8.0.RJGMIXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f49bc0cdfcb81558eca9a429a8ff0e31c6119b63"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f277a3b0a08e839207111556973a15debbeb1f92")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f49bc0cdfcb81558eca9a429a8ff0e31c6119b63"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f277a3b0a08e839207111556973a15debbeb1f92"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "96,1,33,45,55,57,61,89,90,21343,21344,21374,21375,27540,27541,28956,57977,57988,57989,60146,60147,62970,62971,63715,63716,65276,65277,65469,65470,65536,65553,66707,66708,71077,71078,72195,72196,74214,74215,74696,74697,77860,77861,78457,78458,78645,78646,79348,79349,79565,79567,79706,79710,79718,79719,79732,79736,79740,79741,81148,81154,81187,81188,81195,81201,81202,81203,81210,81216,81217,81218,84712,84716,84756,84757,84828,84830,84923,84927,84932,84933,85071,85072,85104,85110,85111,85112,85234,85240,85241,271515,271521,655367,655377,665814,667829,678359") == "797d32876f5155444abd429251dbb2da77b10572" || 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"), "96,1,33,45,55,57,61,89,90,21343,21344,21374,21375,27540,27541,28956,57977,57988,57989,60146,60147,62970,62971,63715,63716,65276,65277,65469,65470,65536,65553,66707,66708,71077,71078,72195,72196,74214,74215,74696,74697,77860,77861,78457,78458,78645,78646,79348,79349,79565,79567,79706,79710,79718,79719,79732,79736,79740,79741,81148,81154,81187,81188,81195,81201,81202,81203,81210,81216,81217,81218,84712,84716,84756,84757,84828,84830,84923,84927,84932,84933,85071,85072,85104,85110,85111,85112,85234,85240,85241,271515,271521,655367,655377,665814,667829,678359") && 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"), "762,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,39613,39664,39665,39671,39672,39697,39698,39730,39731,39834,39835,40207,40208,40210,40212,40276,40277,40347,40348,40415,40416,40418,40419,40421,40422,40481,40483,40485,40486,40550,40551,40621,40622,40689,40690,40692,40693,40695,40704,40705,40706,40768,40769,40835,40836,40838,40839,40842,40846,40848,40849,40851,40853,40855,40857,40916,40917,40919,40921,40981,40982,40984,40985,41046,41047,41049,41050,41110,41111,41113,41114,41181,41182,41250,41251,41318,41319,41385,41386,41388,41389,41452,41453,41519,41520,41522,41523,41584,41585,41587,41588,41652,41653,41655,41656,41718,41719,41721,41722,41786,41787,41789,41790,41851,41852,41854,41855,41919,41920,41922,41923,41987,41988,41990,41991,42055,42056,42058,42059,42123,42124,42126,42127,42194,42195,42196,42197,42263,42264,42265,42266,42271,42272,42332,42333,42399,42400,42402,42403,42466,42467,42533,42534,42536,42537,42598,42599,42601,42602,42666,42667,42669,42670,42732,42733,42735,42736,42800,42801,42803,42804,42865,42866,42868,42869,42933,42934,42936,42937,43001,43002,43004,43005,43069,43070,43072,43073,43137,43138,43140,43141,43208,43209,43210,43211,43277,43278,43279,43280,43285,43287,43347,43348,43420,43421,43423,43424,43486,43487,43557,43558,43566,43570,43571,43572,43771,43772,43838,43839,43841,43842,43845,43850,45246,45247,45412,45413,45724,45725,45786,45787,45936,45937,46016,46017,46049,46050,46126,46127,46194,46195,46267,46268,46360,46361,46433,46434,46479,46480,46584,46585,46628,46629,46631,46632,46664,46665,46826,46827,46898,46899,46951,46952,47276,47277,47279,47280,47374,47375,47499,47500,47574,47575,47608,47609,47672,47673,47744,47745,48248,48250,48255,48257,48321,48322,48374,48375,48881,48882,49231,49232,49490,49491,51822,51823,51952,51953,52843,52846,52908,52909,53819,53820,54226,54227,54230,54247,54248,54256,54257,54258,54259,54260,54975,54976,55043,55045,55046,55047,55532,55534,55535,55536,55816,55817,55818,55820,55929,55930,55932,55933,55936,55937,55939,55940,56189,56190,56192,56195,56322,56323,56340,56341,56345,56346,56701,56703,56705,56708,56878,56879,56880,56881,58107,58108,58172,58174,58175,58176,58178,58179,58206,58207,59336,59337,59339,59340,59363,59364,59583,59584,59586,59588,59725,59726,59729,59730,60260,60261,60263,60266,60466,60467,60490,60491,60493,60494,60495,60496,61387,61388,61501,61502,61649,61650,61877,61878,61988,61989,62078,62079,64729,64730,65536,65574,67562,67564,67630,67631,68563,68564,68614,68615,78312,78429,79846,79848,83060,83061,87001,87002,87004,87005,93466,93467,98304,98345,98886,98887,101651,101684,102852,102853,103910,105702,105708,109016,109065,109066,109505,109507,110079,110080,110518,110519,110970,110971,113661,113662,116349,116351,116736,116758,117219,117220,117471,117472,123462,123463,123521,123522,123603,123604,124406,125974,129077,129079,131072,131097,133890,133891,133914,133915,139278,139279,139684,139746,147951,147952,150989,150991,151949,151950,151952,151953,152089,152090,156057,156058,157608,157609,157611,157612,157748,157749,162649,162650,162652,162653,162789,162790,163840,163878,168056,168586,170731,170732,171066,171077,171091,171102,171139,171140,171152,171153,175260,175322,175323,175324,177077,177078,179746,179747,180127,180314,181630,181631,187007,187009,188119,188120,191353,191354,193047,193048,196608,196636,202191,202192,206578,206580,206581,206582,208154,208155,208161,208163,208255,208256,210732,210733,210737,210738,210740,210742,218407,218408,218412,218413,218420,218421,224061,224062,224078,224079,224080,224082,224083,224085,224086,224088,224089,224091,224149,224151,224152,224153,224155,224156,224158,224159,224345,224346,225285,225286,225291,225292,226121,226122,226133,226134,227699,227700,229376,229403,235178,235179,240640,240642,240976,240978,242194,242195,242389,242390,245133,245134,245155,245157,245178,245180,245346,245347,246140,246141,248585,248586,254797,254798,254800,254801,254808,254809,255948,255949,255971,255972,256800,256801,256930,256932,257042,257043,257386,257387,260161,260162,261793,261795,262144,262162,265625,265626,266947,266949,266956,266961,266968,266969,266971,266972,267006,267015,269493,269538,269551,269552,269558,273691,274520,278872,278942,278943") == "b8dedbc60fe7a7a427557dd0e26fe47cc59adb5a" || 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"), "762,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,39613,39664,39665,39671,39672,39697,39698,39730,39731,39834,39835,40207,40208,40210,40212,40276,40277,40347,40348,40415,40416,40418,40419,40421,40422,40481,40483,40485,40486,40550,40551,40621,40622,40689,40690,40692,40693,40695,40704,40705,40706,40768,40769,40835,40836,40838,40839,40842,40846,40848,40849,40851,40853,40855,40857,40916,40917,40919,40921,40981,40982,40984,40985,41046,41047,41049,41050,41110,41111,41113,41114,41181,41182,41250,41251,41318,41319,41385,41386,41388,41389,41452,41453,41519,41520,41522,41523,41584,41585,41587,41588,41652,41653,41655,41656,41718,41719,41721,41722,41786,41787,41789,41790,41851,41852,41854,41855,41919,41920,41922,41923,41987,41988,41990,41991,42055,42056,42058,42059,42123,42124,42126,42127,42194,42195,42196,42197,42263,42264,42265,42266,42271,42272,42332,42333,42399,42400,42402,42403,42466,42467,42533,42534,42536,42537,42598,42599,42601,42602,42666,42667,42669,42670,42732,42733,42735,42736,42800,42801,42803,42804,42865,42866,42868,42869,42933,42934,42936,42937,43001,43002,43004,43005,43069,43070,43072,43073,43137,43138,43140,43141,43208,43209,43210,43211,43277,43278,43279,43280,43285,43287,43347,43348,43420,43421,43423,43424,43486,43487,43557,43558,43566,43570,43571,43572,43771,43772,43838,43839,43841,43842,43845,43850,45246,45247,45412,45413,45724,45725,45786,45787,45936,45937,46016,46017,46049,46050,46126,46127,46194,46195,46267,46268,46360,46361,46433,46434,46479,46480,46584,46585,46628,46629,46631,46632,46664,46665,46826,46827,46898,46899,46951,46952,47276,47277,47279,47280,47374,47375,47499,47500,47574,47575,47608,47609,47672,47673,47744,47745,48248,48250,48255,48257,48321,48322,48374,48375,48881,48882,49231,49232,49490,49491,51822,51823,51952,51953,52843,52846,52908,52909,53819,53820,54226,54227,54230,54247,54248,54256,54257,54258,54259,54260,54975,54976,55043,55045,55046,55047,55532,55534,55535,55536,55816,55817,55818,55820,55929,55930,55932,55933,55936,55937,55939,55940,56189,56190,56192,56195,56322,56323,56340,56341,56345,56346,56701,56703,56705,56708,56878,56879,56880,56881,58107,58108,58172,58174,58175,58176,58178,58179,58206,58207,59336,59337,59339,59340,59363,59364,59583,59584,59586,59588,59725,59726,59729,59730,60260,60261,60263,60266,60466,60467,60490,60491,60493,60494,60495,60496,61387,61388,61501,61502,61649,61650,61877,61878,61988,61989,62078,62079,64729,64730,65536,65574,67562,67564,67630,67631,68563,68564,68614,68615,78312,78429,79846,79848,83060,83061,87001,87002,87004,87005,93466,93467,98304,98345,98886,98887,101651,101684,102852,102853,103910,105702,105708,109016,109065,109066,109505,109507,110079,110080,110518,110519,110970,110971,113661,113662,116349,116351,116736,116758,117219,117220,117471,117472,123462,123463,123521,123522,123603,123604,124406,125974,129077,129079,131072,131097,133890,133891,133914,133915,139278,139279,139684,139746,147951,147952,150989,150991,151949,151950,151952,151953,152089,152090,156057,156058,157608,157609,157611,157612,157748,157749,162649,162650,162652,162653,162789,162790,163840,163878,168056,168586,170731,170732,171066,171077,171091,171102,171139,171140,171152,171153,175260,175322,175323,175324,177077,177078,179746,179747,180127,180314,181630,181631,187007,187009,188119,188120,191353,191354,193047,193048,196608,196636,202191,202192,206578,206580,206581,206582,208154,208155,208161,208163,208255,208256,210732,210733,210737,210738,210740,210742,218407,218408,218412,218413,218420,218421,224061,224062,224078,224079,224080,224082,224083,224085,224086,224088,224089,224091,224149,224151,224152,224153,224155,224156,224158,224159,224345,224346,225285,225286,225291,225292,226121,226122,226133,226134,227699,227700,229376,229403,235178,235179,240640,240642,240976,240978,242194,242195,242389,242390,245133,245134,245155,245157,245178,245180,245346,245347,246140,246141,248585,248586,254797,254798,254800,254801,254808,254809,255948,255949,255971,255972,256800,256801,256930,256932,257042,257043,257386,257387,260161,260162,261793,261795,262144,262162,265625,265626,266947,266949,266956,266961,266968,266969,266971,266972,267006,267015,269493,269538,269551,269552,269558,273691,274520,278872,278942,278943") && 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") == "60d263b3906e44b6fefbf534403fea1e1a4e9ca4" || 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"), "274,1,15,3204,3205,6292,6293,6310,6314,6318,6319,11086,11087,11514,11516,13553,13557,13650,13651,14653,14654,16351,16354,16360,16361,16402,16403,24816,24817,32768,32776,34632,34633,35975,35976,36110,36111,36166,36167,37781,37782,38144,38148,38667,38668,38680,38686,38687,38688,40528,40532,40574,40575,41965,41966,51714,51715,55588,55589,55839,55844,55856,55857,55921,55924,56117,56122,56379,56381,59863,59864,65536,65542,69711,69712,79256,79263,80739,80740,86115,86116,89265,89266,98304,98312,98825,98826,98833,98834,98963,98969,98970,98971,98984,98990,98991,98994,98996,98997,106518,106519,107758,107762,108775,108776,112624,112626,126109,126110,126179,126180,128401,128403,131072,131078,148907,148908,150916,150917,158218,158219,163840,163848,164598,164599,168588,168589,168890,168891,168943,168945,168954,168955,169049,169051,169840,169841,169848,169849,169855,169856,174193,174194,174419,174421,174431,174433,174479,174481,174491,174493,174502,174503,176321,176324,179709,179710,179873,179874,179875,179876,179877,179878,179894,179895,179898,179900,179901,179903,179919,179920,179931,179932,179971,179975,179979,179983,179984,179988,179989,180005,180420,180421,180792,180793,182278,182279,183284,183286,185732,185733,196608,196633,196634,196635,203096,203098,204239,204240,213489,213491,215731,215732,215906,215908,215956,215957,216212,216214,225025,225026,228561,228562,228611,228612,229376,229413,230218,230220,230288,230289,230455,230457,231853,231855,232622,232623,239061,239062,243283,243284,245475,245477,247066,247068,257925,257926,262144,262173,283096,283097,283122,283123,283326,283327,283804,283805,284044,284045,284783,284784,285363,285364,285541,285542,286517,286519,286991,286992,287633,287634,290557,290558,291494,291499,293717,293719,294912,294920,297061,297062,304416,309242,309316,309317") == "f02dcc9ce13032c9a2c4ac8b732e12898c5c643a" || 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,3204,3205,6292,6293,6310,6314,6318,6319,11086,11087,11514,11516,13553,13557,13650,13651,14653,14654,16351,16354,16360,16361,16402,16403,24816,24817,32768,32776,34632,34633,35975,35976,36110,36111,36166,36167,37781,37782,38144,38148,38667,38668,38680,38686,38687,38688,40528,40532,40574,40575,41965,41966,51714,51715,55588,55589,55839,55844,55856,55857,55921,55924,56117,56122,56379,56381,59863,59864,65536,65542,69711,69712,79256,79263,80739,80740,86115,86116,89265,89266,98304,98312,98825,98826,98833,98834,98963,98969,98970,98971,98984,98990,98991,98994,98996,98997,106518,106519,107758,107762,108775,108776,112624,112626,126109,126110,126179,126180,128401,128403,131072,131078,148907,148908,150916,150917,158218,158219,163840,163848,164598,164599,168588,168589,168890,168891,168943,168945,168954,168955,169049,169051,169840,169841,169848,169849,169855,169856,174193,174194,174419,174421,174431,174433,174479,174481,174491,174493,174502,174503,176321,176324,179709,179710,179873,179874,179875,179876,179877,179878,179894,179895,179898,179900,179901,179903,179919,179920,179931,179932,179971,179975,179979,179983,179984,179988,179989,180005,180420,180421,180792,180793,182278,182279,183284,183286,185732,185733,196608,196633,196634,196635,203096,203098,204239,204240,213489,213491,215731,215732,215906,215908,215956,215957,216212,216214,225025,225026,228561,228562,228611,228612,229376,229413,230218,230220,230288,230289,230455,230457,231853,231855,232622,232623,239061,239062,243283,243284,245475,245477,247066,247068,257925,257926,262144,262173,283096,283097,283122,283123,283326,283327,283804,283805,284044,284045,284783,284784,285363,285364,285541,285542,286517,286519,286991,286992,287633,287634,290557,290558,291494,291499,293717,293719,294912,294920,297061,297062,304416,309242,309316,309317") && 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/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
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/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
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/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
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/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:f49bc0cdfcb81558eca9a429a8ff0e31c6119b63"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f277a3b0a08e839207111556973a15debbeb1f92"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f277a3b0a08e839207111556973a15debbeb1f92")));

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