getprop("ro.product.device") == "phoenix" || abort("E3004: This package is for \"phoenix\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/phoenix/phoenix:11/RKQ1.200826.002/21.1.13:user/release-keys");
ui_print("Target: Redmi/phoenix/phoenix:11/RKQ1.200826.002/21.1.14:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/phoenix/phoenix:11/RKQ1.200826.002/21.1.13:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/phoenix/phoenix:11/RKQ1.200826.002/21.1.14:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/phoenix/phoenix:11/RKQ1.200826.002/21.1.13:user/release-keys or Redmi/phoenix/phoenix:11/RKQ1.200826.002/21.1.14:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:65d786ae3bc1b083e0a1d011b730a489b1b7520e"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8543a6808f2a65eaf0f65fa667f68f6e60567a36")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:65d786ae3bc1b083e0a1d011b730a489b1b7520e"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8543a6808f2a65eaf0f65fa667f68f6e60567a36"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1150,1,29,39,49,51,55,1988,1989,2034,2035,2059,2060,22425,22426,23144,23145,24131,24132,30295,30296,30445,30446,31387,31388,32768,32783,35668,35669,36507,36508,37861,37862,38297,38298,39536,39537,39786,39787,41207,41208,41302,41303,41499,41500,41724,41725,65536,65549,67377,67378,68551,68553,68912,68914,68929,68930,69094,69096,69106,69107,69134,69136,69142,69143,69628,69630,69648,69649,69658,69660,69665,69666,70927,70931,70967,70968,70974,70976,70981,70982,70987,70989,70994,70995,71976,71977,72627,72628,74559,74560,74561,74562,74570,74571,74593,74594,74598,74599,75034,75035,75046,75048,75053,75054,75259,75261,75271,75272,75275,75276,75296,75298,75303,76561,78658,78660,78691,78692,78700,78702,78707,78708,78715,78717,78722,78723,86201,86202,86937,86939,87006,87007,87009,87011,87016,87017,87146,87148,87156,87157,87290,87292,87301,87302,90304,90305,91764,91766,91833,91834,92085,92086,92156,92158,92165,92166,92391,92393,92402,92403,93858,93860,93887,93888,94712,94714,94739,94740,96799,96801,96829,96830,98304,98319,102014,102016,107526,107527,107532,107534,107539,107540,107883,107885,107886,107887,107897,107899,107904,107905,107919,107921,107946,107947,108575,108577,108594,108595,110424,110426,110467,110468,110624,110626,110632,110633,110822,110823,111234,111236,111251,111252,113891,113892,115355,115357,115386,115387,119206,119208,119235,119236,122291,122293,122325,122326,122349,122350,130879,130880,131072,131085,132618,132619,132621,132622,132628,132629,132635,132636,132642,132643,132649,132650,133101,133103,133201,133202,135064,135065,136816,136818,136858,136859,136897,136901,136908,136909,139432,139433,139725,139727,139769,139770,142992,142993,143167,143168,144304,144308,144333,144334,144485,144486,144824,144825,144962,144964,144981,144982,148115,148116,149685,149687,149713,149714,152800,152802,152832,152833,153040,153042,153050,153051,153390,153394,153410,153411,155698,155702,155750,155751,158416,158418,158459,158460,158493,158495,158500,158501,158504,158508,158514,158515,160979,160980,161042,161044,161051,161052,161096,161098,161103,161104,163840,163855,165741,165745,165789,165790,165816,165818,165823,165824,166073,166077,166089,166090,166109,166111,166116,166117,166160,166162,166167,166168,168529,168530,168846,168848,168889,168890,169006,169008,169015,169016,169085,169087,169093,169094,169345,169347,169358,169359,178794,178795,180549,180551,185342,185343,185354,185356,185361,185362,185874,185876,185893,185894,190957,190961,191044,191045,195343,195344,195345,195421,196608,196621,197403,197405,197498,197499,197507,197509,197514,197515,198141,198143,198160,198161,198895,198897,198916,198917,198928,198930,198935,198936,201800,201802,202323,202324,203286,203287,204831,204833,204860,204861,214898,214899,219913,219915,225350,225351,226241,226243,226271,226272,226341,226343,226350,226351,226356,226358,226370,226371,226386,226388,226393,226394,226796,226798,226804,226805,226829,226831,226836,226837,229376,229391,229392,229394,229444,229445,229448,229450,229455,229456,229786,229788,229802,229803,229970,229974,229985,229986,230012,230016,230022,230023,231482,231484,231513,231514,231520,231521,232359,232362,237083,237085,239898,239899,244521,244522,245537,245538,246642,246643,247859,247861,247975,247978,248002,248003,248005,248006,248007,248008,248009,248010,248040,248041,250168,250170,250186,250187,250582,250584,250593,250594,253402,253403,253760,253761,254280,254281,254463,254481,254552,254553,255374,255383,255713,255714,259008,259009,261592,261593,261603,261608,261609,261610,261611,261612,261613,261614,261615,261616,261617,261618,261619,261621,261634,261635,262144,262157,263829,263830,265761,265763,265870,265872,268465,268466,269099,269100,270717,270720,273690,273691,276101,276102,284754,284755,284974,284975,285202,285203,286809,286810,287106,287107,287256,287257,291385,291386,294912,294927,294928,294929,295970,295971,296689,296690,297028,297030,297058,297059,299866,299867,310351,310352,314163,314164,314366,314367,316424,316425,321484,321486,321609,321610,322193,322194,327680,327693,350212,350213,351001,351002,352576,352577,356029,356030,357139,357140,357142,357143,359457,359458,360448,360461,363376,363377,364041,364042,367684,367685,368893,368894,370446,370447,376941,376942,379226,379227,379230,379231,380860,380861,380862,380863,382078,382079,382768,382769,386720,386721,386744,386745,390480,390481,391367,391368,393216,393229,394772,394773,400117,400118,417629,417630,417781,417782,417783,417784,417922,417923,417924,417925,417926,417927,417928,417929,418079,418080,425984,425997,433105,433106,433791,433792,436883,436884,448113,448114,455274,455275,455747,455748,458752,458765,466385,466386,466796,466797,466820,466821,466833,466834,466841,466842,466882,466883,466905,466906,466972,466975,466977,466978,466981,466982,467042,467043,467046,467051,467052,467053,467054,467055,467056,467057,467851,467852,467858,467859,468412,468416,468417,468418,468419,468420,468421,468422,468423,468424,468425,468426,468427,468428,468429,468430,468431,468434,469892,469894,470033,470034,470037,470039,470297,470298,470300,470302,470846,470847,470862,470863,470877,470878,471196,471197,471343,471344,471353,471355,472671,472672,477612,477614,486479,486480,491520,491533,494360,494361,496447,496448,497064,497065,500720,500721,505966,505967,508203,508204,517874,518379,518451,518732,518761,518763,519681,519682,519694,519695,520430,520431,520435,520436,520541,520542,520556,520557,524288,524301,529755,529756,529798,529799,529812,529813,536081,536082,536494,536495,536685,536686,536714,536715,536739,536740,537070,537071,537360,537368,540546,540547,541127,541131,541761,541762,543307,543308,545134,545135,545433,545434,547001,547002,550555,550556,550714,550715,551558,551559,551909,551910,552801,552802,556442,556443,557056,557069,559114,559115,559170,559171,559231,559232,559522,559523,559627,559628,564279,564280,564341,564342,566384,566385,567113,567124,567855,567856,570821,570822,571655,571656,577167,577168,577363,577369,578925,578926,578929,578931,578932,578933,580533,580630,625514,625515,629755,629758,631346,631347,631568,631569,638234,638247,638252,647443,647651,647684,655360,655378,663801,663802,673415,673417,673675,673678,677628,677629,687875,687877,687884,687888,688128,688199,694796,694797,694801,694802,702312,702313,703861,703862,704507,704508,714345,714346,716811,716812,720896,720929,723755,723756,723780,723781,723793,723855,723856,723857,723858,723859,723860,723861,723862,723891,726794,726795,728574,728575,731734,731748,732137,732138,735184,735185,753664,753762,754583,754584,754693,754694,755097,755098,786432,786462,792331,792332,793612,793614,793779,793780,795671,795672,797140,797142,801071,801072,801825,801826,802311,802313,802340,802341,806182,806183,819200,819215,822764,822766,822882,822883,822958,822959,824758,824759,826372,826374,826421,826422,826439,826441,826446,826447,826762,826764,826776,826777,829057,829058,834109,834110,834129,834131,834136,834137,834148,834150,834155,834156,834937,834939,834954,834955,840550,840551,842549,842551,843301,843303,844310,844312,844324,844325,844329,844330,844415,844416,844468,844469,844471,844473,844476,844477,846878,846880,846896,846897,846901,846903,846908,846909,848615,848616,850591,850593,850638,850639,850700,850702,850708,850709,850713,850715,851968,851980,853685,853686,860908,860910,860996,860997,861075,861077,861183,861184,861188,861190,861195,861196,861255,861257,861264,861265,861560,861562,861573,861574,861588,861590,861595,861596,862003,862005,862017,862018,862155,862157,862165,862166,862745,862746,867731,867733,867821,867822,868627,868629,869830,869831,869996,869998,870005,870006,870011,870013,870018,870019,870031,870033,870038,870039,872137,872139,872178,872180,872519,872520,872525,872526,872546,872547,872647,872648,872689,872691,872700,872702,872813,872815,872816,872818,875452,889324,889507,889508") == "2e368e850eec2384c6bc8eecd15b2ad714679115" || 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"), "1150,1,29,39,49,51,55,1988,1989,2034,2035,2059,2060,22425,22426,23144,23145,24131,24132,30295,30296,30445,30446,31387,31388,32768,32783,35668,35669,36507,36508,37861,37862,38297,38298,39536,39537,39786,39787,41207,41208,41302,41303,41499,41500,41724,41725,65536,65549,67377,67378,68551,68553,68912,68914,68929,68930,69094,69096,69106,69107,69134,69136,69142,69143,69628,69630,69648,69649,69658,69660,69665,69666,70927,70931,70967,70968,70974,70976,70981,70982,70987,70989,70994,70995,71976,71977,72627,72628,74559,74560,74561,74562,74570,74571,74593,74594,74598,74599,75034,75035,75046,75048,75053,75054,75259,75261,75271,75272,75275,75276,75296,75298,75303,76561,78658,78660,78691,78692,78700,78702,78707,78708,78715,78717,78722,78723,86201,86202,86937,86939,87006,87007,87009,87011,87016,87017,87146,87148,87156,87157,87290,87292,87301,87302,90304,90305,91764,91766,91833,91834,92085,92086,92156,92158,92165,92166,92391,92393,92402,92403,93858,93860,93887,93888,94712,94714,94739,94740,96799,96801,96829,96830,98304,98319,102014,102016,107526,107527,107532,107534,107539,107540,107883,107885,107886,107887,107897,107899,107904,107905,107919,107921,107946,107947,108575,108577,108594,108595,110424,110426,110467,110468,110624,110626,110632,110633,110822,110823,111234,111236,111251,111252,113891,113892,115355,115357,115386,115387,119206,119208,119235,119236,122291,122293,122325,122326,122349,122350,130879,130880,131072,131085,132618,132619,132621,132622,132628,132629,132635,132636,132642,132643,132649,132650,133101,133103,133201,133202,135064,135065,136816,136818,136858,136859,136897,136901,136908,136909,139432,139433,139725,139727,139769,139770,142992,142993,143167,143168,144304,144308,144333,144334,144485,144486,144824,144825,144962,144964,144981,144982,148115,148116,149685,149687,149713,149714,152800,152802,152832,152833,153040,153042,153050,153051,153390,153394,153410,153411,155698,155702,155750,155751,158416,158418,158459,158460,158493,158495,158500,158501,158504,158508,158514,158515,160979,160980,161042,161044,161051,161052,161096,161098,161103,161104,163840,163855,165741,165745,165789,165790,165816,165818,165823,165824,166073,166077,166089,166090,166109,166111,166116,166117,166160,166162,166167,166168,168529,168530,168846,168848,168889,168890,169006,169008,169015,169016,169085,169087,169093,169094,169345,169347,169358,169359,178794,178795,180549,180551,185342,185343,185354,185356,185361,185362,185874,185876,185893,185894,190957,190961,191044,191045,195343,195344,195345,195421,196608,196621,197403,197405,197498,197499,197507,197509,197514,197515,198141,198143,198160,198161,198895,198897,198916,198917,198928,198930,198935,198936,201800,201802,202323,202324,203286,203287,204831,204833,204860,204861,214898,214899,219913,219915,225350,225351,226241,226243,226271,226272,226341,226343,226350,226351,226356,226358,226370,226371,226386,226388,226393,226394,226796,226798,226804,226805,226829,226831,226836,226837,229376,229391,229392,229394,229444,229445,229448,229450,229455,229456,229786,229788,229802,229803,229970,229974,229985,229986,230012,230016,230022,230023,231482,231484,231513,231514,231520,231521,232359,232362,237083,237085,239898,239899,244521,244522,245537,245538,246642,246643,247859,247861,247975,247978,248002,248003,248005,248006,248007,248008,248009,248010,248040,248041,250168,250170,250186,250187,250582,250584,250593,250594,253402,253403,253760,253761,254280,254281,254463,254481,254552,254553,255374,255383,255713,255714,259008,259009,261592,261593,261603,261608,261609,261610,261611,261612,261613,261614,261615,261616,261617,261618,261619,261621,261634,261635,262144,262157,263829,263830,265761,265763,265870,265872,268465,268466,269099,269100,270717,270720,273690,273691,276101,276102,284754,284755,284974,284975,285202,285203,286809,286810,287106,287107,287256,287257,291385,291386,294912,294927,294928,294929,295970,295971,296689,296690,297028,297030,297058,297059,299866,299867,310351,310352,314163,314164,314366,314367,316424,316425,321484,321486,321609,321610,322193,322194,327680,327693,350212,350213,351001,351002,352576,352577,356029,356030,357139,357140,357142,357143,359457,359458,360448,360461,363376,363377,364041,364042,367684,367685,368893,368894,370446,370447,376941,376942,379226,379227,379230,379231,380860,380861,380862,380863,382078,382079,382768,382769,386720,386721,386744,386745,390480,390481,391367,391368,393216,393229,394772,394773,400117,400118,417629,417630,417781,417782,417783,417784,417922,417923,417924,417925,417926,417927,417928,417929,418079,418080,425984,425997,433105,433106,433791,433792,436883,436884,448113,448114,455274,455275,455747,455748,458752,458765,466385,466386,466796,466797,466820,466821,466833,466834,466841,466842,466882,466883,466905,466906,466972,466975,466977,466978,466981,466982,467042,467043,467046,467051,467052,467053,467054,467055,467056,467057,467851,467852,467858,467859,468412,468416,468417,468418,468419,468420,468421,468422,468423,468424,468425,468426,468427,468428,468429,468430,468431,468434,469892,469894,470033,470034,470037,470039,470297,470298,470300,470302,470846,470847,470862,470863,470877,470878,471196,471197,471343,471344,471353,471355,472671,472672,477612,477614,486479,486480,491520,491533,494360,494361,496447,496448,497064,497065,500720,500721,505966,505967,508203,508204,517874,518379,518451,518732,518761,518763,519681,519682,519694,519695,520430,520431,520435,520436,520541,520542,520556,520557,524288,524301,529755,529756,529798,529799,529812,529813,536081,536082,536494,536495,536685,536686,536714,536715,536739,536740,537070,537071,537360,537368,540546,540547,541127,541131,541761,541762,543307,543308,545134,545135,545433,545434,547001,547002,550555,550556,550714,550715,551558,551559,551909,551910,552801,552802,556442,556443,557056,557069,559114,559115,559170,559171,559231,559232,559522,559523,559627,559628,564279,564280,564341,564342,566384,566385,567113,567124,567855,567856,570821,570822,571655,571656,577167,577168,577363,577369,578925,578926,578929,578931,578932,578933,580533,580630,625514,625515,629755,629758,631346,631347,631568,631569,638234,638247,638252,647443,647651,647684,655360,655378,663801,663802,673415,673417,673675,673678,677628,677629,687875,687877,687884,687888,688128,688199,694796,694797,694801,694802,702312,702313,703861,703862,704507,704508,714345,714346,716811,716812,720896,720929,723755,723756,723780,723781,723793,723855,723856,723857,723858,723859,723860,723861,723862,723891,726794,726795,728574,728575,731734,731748,732137,732138,735184,735185,753664,753762,754583,754584,754693,754694,755097,755098,786432,786462,792331,792332,793612,793614,793779,793780,795671,795672,797140,797142,801071,801072,801825,801826,802311,802313,802340,802341,806182,806183,819200,819215,822764,822766,822882,822883,822958,822959,824758,824759,826372,826374,826421,826422,826439,826441,826446,826447,826762,826764,826776,826777,829057,829058,834109,834110,834129,834131,834136,834137,834148,834150,834155,834156,834937,834939,834954,834955,840550,840551,842549,842551,843301,843303,844310,844312,844324,844325,844329,844330,844415,844416,844468,844469,844471,844473,844476,844477,846878,846880,846896,846897,846901,846903,846908,846909,848615,848616,850591,850593,850638,850639,850700,850702,850708,850709,850713,850715,851968,851980,853685,853686,860908,860910,860996,860997,861075,861077,861183,861184,861188,861190,861195,861196,861255,861257,861264,861265,861560,861562,861573,861574,861588,861590,861595,861596,862003,862005,862017,862018,862155,862157,862165,862166,862745,862746,867731,867733,867821,867822,868627,868629,869830,869831,869996,869998,870005,870006,870011,870013,870018,870019,870031,870033,870038,870039,872137,872139,872178,872180,872519,872520,872525,872526,872546,872547,872647,872648,872689,872691,872700,872702,872813,872815,872816,872818,875452,889324,889507,889508") && 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"), "424,1,29,39,41,48,49,127,133,141,142,148,150,156,157,162,163,407,409,416,417,419,423,425,426,561,562,565,567,572,573,576,577,586,588,594,595,1258,1309,1412,1413,3833,3834,12429,12430,13354,13356,13357,13358,13360,13363,13364,13365,13367,13369,13370,13371,13373,13375,13376,13377,13379,13381,13382,13383,13385,13387,13388,13389,13391,13393,13398,13400,13403,13405,13408,13410,13418,13420,13423,13425,13426,13427,13429,13431,13432,13433,13436,13438,13439,13440,13442,13444,13445,13446,13448,13450,13451,13452,13454,13456,13457,13458,13460,13462,13463,13464,13473,13474,13493,13494,13495,13496,13500,13501,13502,13503,13506,13507,13508,13509,13512,13513,13514,13515,13518,13519,13520,13521,13525,13526,13527,13528,13531,13532,13533,13534,13538,13539,13543,13544,13548,13549,13553,13554,13558,13559,13560,13561,13570,13571,13572,13573,13576,13577,13578,13579,13582,13583,13584,13585,13588,13589,13590,13591,13593,13595,13887,13888,14003,14004,14925,14930,32768,32795,45053,45055,49942,50498,50499,50637,51107,51108,57676,57677,60135,60136,61436,61437,61439,61440,61492,61493,65536,65556,88711,88712,95760,95761,95866,95867,95868,95869,96367,96369,96374,96376,96382,96384,96389,96391,96450,96452,96672,96675,96786,96787,98304,98326,101940,101941,105170,105172,105201,105203,105691,105692,105774,105775,111644,111645,111649,111651,111668,111669,111704,111705,111714,111715,111717,111718,111768,111769,111772,111773,111833,111834,111840,111841,111866,111867,111904,111905,112008,112009,112047,112048,112262,112263,112296,112297,112311,112312,112430,112431,112433,112435,112499,112500,112570,112571,112638,112639,112641,112642,112644,112654,112713,112714,112716,112718,112778,112779,112781,112782,112843,112844,112846,112847,112910,112911,112913,112914,112980,112981,112983,112984,113048,113049,113121,113122,113191,113192,113194,113195,113256,113257,113259,113260,113320,113321,113323,113324,113385,113386,113388,113389,113449,113450,113452,113453,113514,113515,113517,113518,113520,113521,113580,113581,113583,113585,113645,113646,113648,113649,113710,113711,113713,113714,113776,113777,113779,113780,113843,113844,113846,113847,113912,113913,113982,113983,114052,114053,114055,114056,114118,114119,114121,114122,114186,114187,114189,114190,114254,114255,114257,114258,114322,114323,114325,114326,114390,114391,114393,114394,114458,114459,114461,114462,114544,114545,114556,114557,115022,115024,115069,115070,115184,115185,121542,121543,124583,124584,124585,124586,124635,124636,125059,125060,125116,125117,125433,125434,125435,125436,125465,125467,125472,125474,125634,125644,125700,125701,125704,125705,126058,126059,126191,327696,327700,349417,350474,356031,356113,356114") == "8c84a17b14c7a7d9389ef55a042fb2c0bb519825" || 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"), "424,1,29,39,41,48,49,127,133,141,142,148,150,156,157,162,163,407,409,416,417,419,423,425,426,561,562,565,567,572,573,576,577,586,588,594,595,1258,1309,1412,1413,3833,3834,12429,12430,13354,13356,13357,13358,13360,13363,13364,13365,13367,13369,13370,13371,13373,13375,13376,13377,13379,13381,13382,13383,13385,13387,13388,13389,13391,13393,13398,13400,13403,13405,13408,13410,13418,13420,13423,13425,13426,13427,13429,13431,13432,13433,13436,13438,13439,13440,13442,13444,13445,13446,13448,13450,13451,13452,13454,13456,13457,13458,13460,13462,13463,13464,13473,13474,13493,13494,13495,13496,13500,13501,13502,13503,13506,13507,13508,13509,13512,13513,13514,13515,13518,13519,13520,13521,13525,13526,13527,13528,13531,13532,13533,13534,13538,13539,13543,13544,13548,13549,13553,13554,13558,13559,13560,13561,13570,13571,13572,13573,13576,13577,13578,13579,13582,13583,13584,13585,13588,13589,13590,13591,13593,13595,13887,13888,14003,14004,14925,14930,32768,32795,45053,45055,49942,50498,50499,50637,51107,51108,57676,57677,60135,60136,61436,61437,61439,61440,61492,61493,65536,65556,88711,88712,95760,95761,95866,95867,95868,95869,96367,96369,96374,96376,96382,96384,96389,96391,96450,96452,96672,96675,96786,96787,98304,98326,101940,101941,105170,105172,105201,105203,105691,105692,105774,105775,111644,111645,111649,111651,111668,111669,111704,111705,111714,111715,111717,111718,111768,111769,111772,111773,111833,111834,111840,111841,111866,111867,111904,111905,112008,112009,112047,112048,112262,112263,112296,112297,112311,112312,112430,112431,112433,112435,112499,112500,112570,112571,112638,112639,112641,112642,112644,112654,112713,112714,112716,112718,112778,112779,112781,112782,112843,112844,112846,112847,112910,112911,112913,112914,112980,112981,112983,112984,113048,113049,113121,113122,113191,113192,113194,113195,113256,113257,113259,113260,113320,113321,113323,113324,113385,113386,113388,113389,113449,113450,113452,113453,113514,113515,113517,113518,113520,113521,113580,113581,113583,113585,113645,113646,113648,113649,113710,113711,113713,113714,113776,113777,113779,113780,113843,113844,113846,113847,113912,113913,113982,113983,114052,114053,114055,114056,114118,114119,114121,114122,114186,114187,114189,114190,114254,114255,114257,114258,114322,114323,114325,114326,114390,114391,114393,114394,114458,114459,114461,114462,114544,114545,114556,114557,115022,115024,115069,115070,115184,115185,121542,121543,124583,124584,124585,124586,124635,124636,125059,125060,125116,125117,125433,125434,125435,125436,125465,125467,125472,125474,125634,125644,125700,125701,125704,125705,126058,126059,126191,327696,327700,349417,350474,356031,356113,356114") && 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"), "152,1,25,30,31,33,34,150,152,158,159,171,173,178,179,1018,1019,3021,3023,15288,15289,15341,15342,17151,17153,32095,32096,32110,32111,32556,32557,32768,32785,34006,34007,37940,37941,41798,41799,41802,41804,41967,41968,41970,41971,41977,41979,41997,41998,42000,42001,42039,42041,42052,42053,42061,42064,42479,42480,42851,42852,44337,44338,44427,44429,44431,44432,44434,44435,44437,44438,44440,44441,44443,44444,44446,44447,44457,44458,44460,44461,44463,44464,44466,44467,44469,44470,44472,44473,44483,44484,44504,44505,44511,44512,44532,44533,44549,44550,44554,44555,44572,44573,44578,44579,44598,44599,44613,44614,44618,44619,44638,44639,44645,44646,44666,44667,44682,44683,44687,44688,44690,44691,44693,44694,44696,44697,44699,44700,44702,44703,44705,44706,44708,44709,44711,44712,44714,44715,44717,44718,44728,44730,44734,44736,44741,44742,45379,45381,45536,46261,46285,46286") == "a241f40a6fed6459f86d36291bb2d1871fbce8af" || 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"), "152,1,25,30,31,33,34,150,152,158,159,171,173,178,179,1018,1019,3021,3023,15288,15289,15341,15342,17151,17153,32095,32096,32110,32111,32556,32557,32768,32785,34006,34007,37940,37941,41798,41799,41802,41804,41967,41968,41970,41971,41977,41979,41997,41998,42000,42001,42039,42041,42052,42053,42061,42064,42479,42480,42851,42852,44337,44338,44427,44429,44431,44432,44434,44435,44437,44438,44440,44441,44443,44444,44446,44447,44457,44458,44460,44461,44463,44464,44466,44467,44469,44470,44472,44473,44483,44484,44504,44505,44511,44512,44532,44533,44549,44550,44554,44555,44572,44573,44578,44579,44598,44599,44613,44614,44618,44619,44638,44639,44645,44646,44666,44667,44682,44683,44687,44688,44690,44691,44693,44694,44696,44697,44699,44700,44702,44703,44705,44706,44708,44709,44711,44712,44714,44715,44717,44718,44728,44730,44734,44736,44741,44742,45379,45381,45536,46261,46285,46286") && 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,243,244,246,252,271,272") == "63f03149223ab151fba222955db515bbcadee96e" || 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,243,244,246,252,271,272") && 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"), "262,1,35,42,44,50,51,57,59,64,65,79,81,86,87,145,147,154,155,228,232,238,239,245,247,252,253,447,449,455,456,459,461,468,469,472,473,479,481,486,487,509,511,516,517,1228,1230,1250,1251,1255,1257,1262,1263,1265,1266,1277,1279,1284,1285,1295,1296,1301,1303,1309,1310,1314,1318,1324,1325,1332,1334,1339,1340,1352,1354,1359,1360,1362,1365,1375,1378,1387,1390,1424,1427,1450,1453,1475,1478,1497,1500,1520,1521,1730,1732,1735,1736,1748,1749,1750,1751,1752,1753,1762,1763,1786,1787,1831,1836,1839,1842,1845,1848,1851,1853,1857,1858,1862,1865,1870,1871,1874,1876,1955,1956,1957,1958,1966,1967,2351,2353,2562,2563,2665,2666,2714,2715,5158,5159,6223,6224,8289,8290,8348,8349,8888,8889,8939,8940,9249,9250,14431,14432,14504,14505,14513,14514,14649,14650,14654,14655,14708,14709,14719,14720,14753,14754,14773,14774,14826,14827,14972,14973,15048,15049,15195,15196,19946,19948,20087,20088,20113,20114,20210,20211,20262,20263,20274,20275,20325,20326,20401,20402,20465,20466,20728,20729,21233,21234,25108,25109,25165,25166,25590,25591,32768,32804,33567,33568,35154,35155,40248,40249,41127,41128,41179,41180,41498,41499,43533,43534,56269,56270,65536,65561,65562,65578,71954,71955,79488,79492,86143,86144,86826,86828,86846,86847,86874,86876,86881,86882,86910,86914,86920,86921,87714,87716,87742,87743,87750,87752,87757,87758,88036,88040,88051,88054,88082,88085,88367,89772,89803,89804") == "de444d300a35b0a3dbdbd93e77525d4797374400" || 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"), "262,1,35,42,44,50,51,57,59,64,65,79,81,86,87,145,147,154,155,228,232,238,239,245,247,252,253,447,449,455,456,459,461,468,469,472,473,479,481,486,487,509,511,516,517,1228,1230,1250,1251,1255,1257,1262,1263,1265,1266,1277,1279,1284,1285,1295,1296,1301,1303,1309,1310,1314,1318,1324,1325,1332,1334,1339,1340,1352,1354,1359,1360,1362,1365,1375,1378,1387,1390,1424,1427,1450,1453,1475,1478,1497,1500,1520,1521,1730,1732,1735,1736,1748,1749,1750,1751,1752,1753,1762,1763,1786,1787,1831,1836,1839,1842,1845,1848,1851,1853,1857,1858,1862,1865,1870,1871,1874,1876,1955,1956,1957,1958,1966,1967,2351,2353,2562,2563,2665,2666,2714,2715,5158,5159,6223,6224,8289,8290,8348,8349,8888,8889,8939,8940,9249,9250,14431,14432,14504,14505,14513,14514,14649,14650,14654,14655,14708,14709,14719,14720,14753,14754,14773,14774,14826,14827,14972,14973,15048,15049,15195,15196,19946,19948,20087,20088,20113,20114,20210,20211,20262,20263,20274,20275,20325,20326,20401,20402,20465,20466,20728,20729,21233,21234,25108,25109,25165,25166,25590,25591,32768,32804,33567,33568,35154,35155,40248,40249,41127,41128,41179,41180,41498,41499,43533,43534,56269,56270,65536,65561,65562,65578,71954,71955,79488,79492,86143,86144,86826,86828,86846,86847,86874,86876,86881,86882,86910,86914,86920,86921,87714,87716,87742,87743,87750,87752,87757,87758,88036,88040,88051,88054,88082,88085,88367,89772,89803,89804") && 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 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 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 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:65d786ae3bc1b083e0a1d011b730a489b1b7520e"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8543a6808f2a65eaf0f65fa667f68f6e60567a36"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8543a6808f2a65eaf0f65fa667f68f6e60567a36")));

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