getprop("ro.product.device") == "phoenixin" || abort("E3004: This package is for \"phoenixin\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: POCO/phoenixin/phoenixin:11/RKQ1.200826.002/V12.5.2.0.RGHINXM:user/release-keys");
ui_print("Target: POCO/phoenixin/phoenixin:11/RKQ1.200826.002/V12.5.3.0.RGHINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/phoenixin/phoenixin:11/RKQ1.200826.002/V12.5.2.0.RGHINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/phoenixin/phoenixin:11/RKQ1.200826.002/V12.5.3.0.RGHINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/phoenixin/phoenixin:11/RKQ1.200826.002/V12.5.2.0.RGHINXM:user/release-keys or POCO/phoenixin/phoenixin:11/RKQ1.200826.002/V12.5.3.0.RGHINXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:80c6aa845dbe7cf24f9307a334aef77feca8bc66"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d473079ee18201ac5886525ddde2b3ab241a90c4")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:80c6aa845dbe7cf24f9307a334aef77feca8bc66"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d473079ee18201ac5886525ddde2b3ab241a90c4"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "964,1,34,44,54,56,60,88,89,113,114,21371,21372,27536,27537,28965,28966,32768,32788,56672,56673,57975,57976,59096,59097,60827,60828,61663,61664,62871,62872,63023,63024,63948,63949,65536,65554,68331,68332,69317,69318,70683,70684,71133,71134,73303,73304,73565,73566,73658,73659,73909,73910,74126,74128,74266,74270,74278,74279,74291,74295,74299,74300,75736,75742,75776,75777,75783,75789,75790,75791,75796,75802,75803,75804,77902,77903,78527,78531,78571,78572,79537,79538,80188,80189,82120,82123,82131,82132,82154,82155,82159,82160,82593,82594,82718,82719,82750,82756,82757,82758,83069,83073,83081,83082,83202,83208,83209,84576,89164,89168,89207,89208,89222,89228,89229,89230,89236,89242,89243,89244,91294,91295,93234,93238,93288,93289,94377,94381,94402,94403,94532,94536,94542,94543,94676,94680,94687,94688,98304,98324,100562,100566,100658,100659,100686,100687,100935,100936,101006,101010,101015,101016,101241,101245,101252,101253,115647,115648,116709,116713,116817,116818,117368,117374,117375,117376,119129,119133,119176,119177,119181,119187,119188,119189,119220,119226,119227,119228,120918,120922,120946,120947,120971,120972,120974,120975,120976,120977,120978,120979,121009,121010,124335,124339,124370,124371,126430,126434,126460,126461,126490,126491,126496,126502,126503,126504,128090,128094,128138,130256,130607,130609,130610,130611,130644,130648,130665,130666,130671,130672,131072,131090,131140,131144,131546,131547,132237,132241,132257,132258,134249,134253,134293,134294,134455,134459,134463,134464,134875,134879,134892,134893,134930,134931,137629,137630,143748,143752,143839,143840,145054,145055,145199,145200,145365,145369,145396,145397,148199,148200,149133,149137,149168,149169,149195,149196,154085,154089,154115,154116,156568,156569,157220,157224,157254,157255,157280,157281,159074,159078,159116,159117,159158,159164,159170,159171,162816,162817,163468,163474,163514,163515,163536,163537,163840,163860,166818,166819,168859,168863,168892,168893,170021,170027,170050,170051,170228,170229,173947,173948,174744,174745,176687,176691,176736,176737,178653,178657,178687,178688,179025,179026,179202,179206,179221,179222,181189,181193,181221,181222,181232,181238,181242,181243,186745,186746,191262,191266,191375,191376,193088,193089,194121,194125,194150,194151,194165,194166,194169,194175,194180,194181,196608,196626,197863,197867,197925,197926,197928,197932,197933,197934,197978,197986,197987,197988,199852,199858,199899,199900,200301,200307,200317,200318,200349,200355,200356,200357,200400,200406,200407,200408,203204,203205,204221,204225,204272,204273,204355,204359,204363,204364,204375,204381,204382,204383,208174,208180,208181,208182,208748,208752,208767,208768,209991,209995,210021,210022,210336,210337,210338,210414,217878,217879,217887,217893,217894,217895,219119,219123,219145,219146,220816,220820,220837,220838,221892,221893,223478,223482,223510,223511,224401,224405,224431,224432,224439,224445,224446,224447,224452,224456,224461,224462,224466,224467,224491,224497,224498,224499,227747,227751,227799,227800,228148,228152,228164,228165,229376,229396,229612,229618,229640,229641,231119,231123,231139,231140,231150,231151,232213,232217,233320,233321,238152,238153,239188,239189,240316,240317,242005,242009,242092,242093,242129,242133,244672,244676,244690,244691,245219,245223,245230,245231,248028,248029,248383,248384,249036,249054,249125,249126,250173,250174,253466,253467,256042,256047,256048,256049,256050,256051,256052,256053,256054,256055,256056,256057,256058,256059,256060,256061,256062,256063,256064,256065,256066,256067,256068,256069,256070,256071,256072,256073,256074,256075,256076,256077,256078,256079,256080,256081,256082,256083,256084,256085,256086,256087,256088,256089,256090,256091,256092,256093,256094,256095,256096,256097,256098,256099,256100,256101,256102,256103,256104,256105,256106,256107,256108,256109,256110,256111,256112,256113,256114,256115,256116,256117,256118,256119,256120,256121,256122,256123,256124,256125,256126,256127,256128,256129,256130,256131,256132,256133,256134,256135,256136,256137,256138,256139,256140,256141,256142,256143,256144,256145,256146,256147,256148,256149,256150,256151,256152,256153,256154,256155,256156,256157,256158,256159,256160,256161,256162,256163,256164,256165,256166,256167,256168,256169,256170,256171,256172,256173,256174,256175,256176,256177,256178,256179,256180,256181,256182,256183,256184,256185,256186,256187,256188,256189,256190,256191,256192,256193,256194,256195,256196,256197,256198,256199,256200,256201,256202,256203,256204,256205,256206,256207,256208,256209,256210,256211,256212,256213,256214,256215,256216,256217,256218,256219,256220,256221,256222,256223,256224,256225,256226,256227,256228,256229,256230,256231,256232,256233,256234,256235,256236,256237,256238,256239,256240,256241,256242,256243,256244,256245,256246,256247,256248,256249,256250,256251,256252,256253,256254,256255,256256,256257,256258,256259,256260,256261,256262,256263,256264,256265,256266,256267,256268,256269,256270,256271,256272,256273,256274,256275,256276,256277,256278,256279,256280,256281,256282,256283,256284,256285,256286,256287,256288,256289,256290,256291,256292,256293,256294,256295,256296,256297,256298,256299,256300,256301,256302,256303,256304,256305,256306,256307,256308,256309,256310,256311,256312,256313,256314,256315,256316,256317,256318,256319,256320,256321,256322,256323,256324,256325,256326,256327,256328,256329,256330,256331,256332,256333,256334,256335,256336,256337,256338,256339,256340,256341,256342,256343,256344,256345,256346,256347,256348,256349,256350,256351,256352,256353,256354,256355,256356,256357,256358,256359,256360,256361,256362,256363,256364,256365,256366,256367,256368,256369,256370,256371,256372,256373,256374,256375,256376,256377,256378,256379,256380,256381,256382,256383,256384,256385,256386,256387,256388,256389,256390,256391,256392,256393,256394,256395,256396,256397,256398,256399,256400,256401,256402,256403,256404,256405,256406,256407,256408,256409,256410,256411,256412,256413,256414,256415,256416,256417,256418,256419,256420,256421,256422,256423,256424,256425,256426,256427,256428,256429,256430,256431,256432,256433,256434,256435,256436,256437,256438,256439,256440,256441,256442,256443,256444,256445,256446,256447,256448,256449,256450,256451,256452,256453,256454,256455,256456,256457,256458,256459,256460,256461,256462,256463,256464,256465,256466,256467,256468,256469,256470,256471,256472,256473,256474,256475,256476,256477,256478,256479,256480,256481,256482,256483,256484,256485,256486,256487,256488,256489,256490,256492,256498,256499,256817,256818,256820,622598,622610,628771,630676,640671,640807,640808") == "1eb856622df1da2cfad4e7ec0d776cac4c95fe0b" || 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"), "964,1,34,44,54,56,60,88,89,113,114,21371,21372,27536,27537,28965,28966,32768,32788,56672,56673,57975,57976,59096,59097,60827,60828,61663,61664,62871,62872,63023,63024,63948,63949,65536,65554,68331,68332,69317,69318,70683,70684,71133,71134,73303,73304,73565,73566,73658,73659,73909,73910,74126,74128,74266,74270,74278,74279,74291,74295,74299,74300,75736,75742,75776,75777,75783,75789,75790,75791,75796,75802,75803,75804,77902,77903,78527,78531,78571,78572,79537,79538,80188,80189,82120,82123,82131,82132,82154,82155,82159,82160,82593,82594,82718,82719,82750,82756,82757,82758,83069,83073,83081,83082,83202,83208,83209,84576,89164,89168,89207,89208,89222,89228,89229,89230,89236,89242,89243,89244,91294,91295,93234,93238,93288,93289,94377,94381,94402,94403,94532,94536,94542,94543,94676,94680,94687,94688,98304,98324,100562,100566,100658,100659,100686,100687,100935,100936,101006,101010,101015,101016,101241,101245,101252,101253,115647,115648,116709,116713,116817,116818,117368,117374,117375,117376,119129,119133,119176,119177,119181,119187,119188,119189,119220,119226,119227,119228,120918,120922,120946,120947,120971,120972,120974,120975,120976,120977,120978,120979,121009,121010,124335,124339,124370,124371,126430,126434,126460,126461,126490,126491,126496,126502,126503,126504,128090,128094,128138,130256,130607,130609,130610,130611,130644,130648,130665,130666,130671,130672,131072,131090,131140,131144,131546,131547,132237,132241,132257,132258,134249,134253,134293,134294,134455,134459,134463,134464,134875,134879,134892,134893,134930,134931,137629,137630,143748,143752,143839,143840,145054,145055,145199,145200,145365,145369,145396,145397,148199,148200,149133,149137,149168,149169,149195,149196,154085,154089,154115,154116,156568,156569,157220,157224,157254,157255,157280,157281,159074,159078,159116,159117,159158,159164,159170,159171,162816,162817,163468,163474,163514,163515,163536,163537,163840,163860,166818,166819,168859,168863,168892,168893,170021,170027,170050,170051,170228,170229,173947,173948,174744,174745,176687,176691,176736,176737,178653,178657,178687,178688,179025,179026,179202,179206,179221,179222,181189,181193,181221,181222,181232,181238,181242,181243,186745,186746,191262,191266,191375,191376,193088,193089,194121,194125,194150,194151,194165,194166,194169,194175,194180,194181,196608,196626,197863,197867,197925,197926,197928,197932,197933,197934,197978,197986,197987,197988,199852,199858,199899,199900,200301,200307,200317,200318,200349,200355,200356,200357,200400,200406,200407,200408,203204,203205,204221,204225,204272,204273,204355,204359,204363,204364,204375,204381,204382,204383,208174,208180,208181,208182,208748,208752,208767,208768,209991,209995,210021,210022,210336,210337,210338,210414,217878,217879,217887,217893,217894,217895,219119,219123,219145,219146,220816,220820,220837,220838,221892,221893,223478,223482,223510,223511,224401,224405,224431,224432,224439,224445,224446,224447,224452,224456,224461,224462,224466,224467,224491,224497,224498,224499,227747,227751,227799,227800,228148,228152,228164,228165,229376,229396,229612,229618,229640,229641,231119,231123,231139,231140,231150,231151,232213,232217,233320,233321,238152,238153,239188,239189,240316,240317,242005,242009,242092,242093,242129,242133,244672,244676,244690,244691,245219,245223,245230,245231,248028,248029,248383,248384,249036,249054,249125,249126,250173,250174,253466,253467,256042,256047,256048,256049,256050,256051,256052,256053,256054,256055,256056,256057,256058,256059,256060,256061,256062,256063,256064,256065,256066,256067,256068,256069,256070,256071,256072,256073,256074,256075,256076,256077,256078,256079,256080,256081,256082,256083,256084,256085,256086,256087,256088,256089,256090,256091,256092,256093,256094,256095,256096,256097,256098,256099,256100,256101,256102,256103,256104,256105,256106,256107,256108,256109,256110,256111,256112,256113,256114,256115,256116,256117,256118,256119,256120,256121,256122,256123,256124,256125,256126,256127,256128,256129,256130,256131,256132,256133,256134,256135,256136,256137,256138,256139,256140,256141,256142,256143,256144,256145,256146,256147,256148,256149,256150,256151,256152,256153,256154,256155,256156,256157,256158,256159,256160,256161,256162,256163,256164,256165,256166,256167,256168,256169,256170,256171,256172,256173,256174,256175,256176,256177,256178,256179,256180,256181,256182,256183,256184,256185,256186,256187,256188,256189,256190,256191,256192,256193,256194,256195,256196,256197,256198,256199,256200,256201,256202,256203,256204,256205,256206,256207,256208,256209,256210,256211,256212,256213,256214,256215,256216,256217,256218,256219,256220,256221,256222,256223,256224,256225,256226,256227,256228,256229,256230,256231,256232,256233,256234,256235,256236,256237,256238,256239,256240,256241,256242,256243,256244,256245,256246,256247,256248,256249,256250,256251,256252,256253,256254,256255,256256,256257,256258,256259,256260,256261,256262,256263,256264,256265,256266,256267,256268,256269,256270,256271,256272,256273,256274,256275,256276,256277,256278,256279,256280,256281,256282,256283,256284,256285,256286,256287,256288,256289,256290,256291,256292,256293,256294,256295,256296,256297,256298,256299,256300,256301,256302,256303,256304,256305,256306,256307,256308,256309,256310,256311,256312,256313,256314,256315,256316,256317,256318,256319,256320,256321,256322,256323,256324,256325,256326,256327,256328,256329,256330,256331,256332,256333,256334,256335,256336,256337,256338,256339,256340,256341,256342,256343,256344,256345,256346,256347,256348,256349,256350,256351,256352,256353,256354,256355,256356,256357,256358,256359,256360,256361,256362,256363,256364,256365,256366,256367,256368,256369,256370,256371,256372,256373,256374,256375,256376,256377,256378,256379,256380,256381,256382,256383,256384,256385,256386,256387,256388,256389,256390,256391,256392,256393,256394,256395,256396,256397,256398,256399,256400,256401,256402,256403,256404,256405,256406,256407,256408,256409,256410,256411,256412,256413,256414,256415,256416,256417,256418,256419,256420,256421,256422,256423,256424,256425,256426,256427,256428,256429,256430,256431,256432,256433,256434,256435,256436,256437,256438,256439,256440,256441,256442,256443,256444,256445,256446,256447,256448,256449,256450,256451,256452,256453,256454,256455,256456,256457,256458,256459,256460,256461,256462,256463,256464,256465,256466,256467,256468,256469,256470,256471,256472,256473,256474,256475,256476,256477,256478,256479,256480,256481,256482,256483,256484,256485,256486,256487,256488,256489,256490,256492,256498,256499,256817,256818,256820,622598,622610,628771,630676,640671,640807,640808") && 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"), "852,1,27,37,41,46,47,125,133,139,140,1814,1818,2295,2296,2301,2302,2546,2550,2555,2556,2558,2562,2564,2565,2588,2589,2625,2629,2679,2680,2839,2840,2843,2847,2851,2852,2855,2856,2865,2869,2873,2874,3694,3695,6091,6092,14678,14679,15600,15602,15603,15604,15606,15609,15610,15611,15613,15615,15616,15617,15619,15621,15622,15623,15625,15627,15628,15629,15631,15633,15634,15635,15637,15639,15644,15646,15649,15651,15654,15656,15664,15666,15669,15671,15672,15673,15675,15677,15678,15679,15682,15684,15685,15686,15688,15690,15691,15692,15694,15696,15697,15698,15700,15702,15703,15704,15706,15708,15709,15710,15719,15720,15739,15740,15741,15742,15746,15747,15748,15749,15752,15753,15754,15755,15758,15759,15760,15761,15764,15765,15766,15767,15771,15772,15773,15774,15777,15778,15779,15780,15784,15785,15789,15790,15794,15795,15799,15800,15804,15805,15806,15807,15816,15817,15818,15819,15822,15823,15824,15825,15828,15829,15830,15831,15834,15835,15836,15837,15839,15841,16133,16134,16249,16250,17147,17152,21054,21055,32768,32793,47694,47696,49359,49360,49789,49790,56216,56217,58820,58821,65536,65554,66183,66184,69237,69238,69360,69361,69367,69368,69818,69819,75991,75992,80477,80478,82162,82163,82169,82171,84910,84911,95939,95943,97750,97751,98304,98324,102101,102102,104638,104639,111707,111708,111809,111811,112611,112612,113811,113812,118222,118223,120895,120896,122126,122128,122157,122159,122647,122648,122730,122731,128600,128601,128605,128607,128624,128625,128660,128661,128670,128671,128673,128674,128724,128725,128728,128729,128789,128790,128796,128797,128822,128823,128859,128860,128963,128964,128997,128998,129214,129215,129245,129246,129259,129260,129369,129370,129372,129374,129438,129439,129509,129510,129577,129578,129580,129581,129583,129593,129652,129653,129655,129657,129717,129718,129720,129721,129782,129783,129785,129786,129849,129850,129852,129853,129919,129920,129922,129923,129987,129988,130060,130061,130130,130131,130133,130134,130195,130196,130198,130199,130259,130260,130262,130263,130324,130325,130327,130328,130388,130389,130391,130392,130453,130454,130456,130457,130459,130460,130519,130520,130522,130524,130584,130585,130587,130588,130649,130650,130652,130653,130715,130716,130718,130719,130782,130783,130785,130786,130851,130852,130921,130922,130991,130992,130994,130995,131057,131058,131060,131061,131072,131090,131143,131144,131146,131147,131211,131212,131214,131215,131279,131280,131282,131283,131347,131348,131350,131351,131415,131416,131418,131419,131501,131502,131513,131514,131973,131975,132020,132021,132135,132136,138493,138494,141534,141535,141536,141537,141583,141584,142007,142008,142064,142065,142381,142382,142383,142384,142413,142415,142420,142422,142423,142424,142426,142430,142450,142451,142580,142581,142647,142648,142651,142652,143005,143006,143183,143184,143296,143297,143424,143425,143493,143494,143618,143619,143710,143711,144558,144559,144594,144595,144746,144747,144856,144857,144863,144864,145088,145093,145511,145512,145645,145646,145769,145770,146710,146711,146912,146916,147263,147264,147267,147268,148020,148022,148033,148034,148783,148784,148817,148818,148945,148946,148979,148981,149476,149479,150457,150461,150669,150670,150936,150937,151482,151483,151553,151554,151556,151557,151774,151775,151806,151807,151809,151810,152065,152066,152068,152069,152072,152073,152266,152268,152280,152281,152290,152295,152414,152415,152691,152692,152700,152701,152715,152716,152717,152719,152840,152841,152843,152844,152962,152963,153170,153171,153288,153289,153290,153291,153301,153302,153304,153305,153462,153463,153481,153482,153491,153492,153893,153894,154084,154085,154094,154099,154442,154443,154650,154651,154844,154845,155121,155122,155133,155134,155198,155201,155212,155213,155215,155216,155227,155228,155230,155231,155398,155399,155878,155882,155956,155957,156178,156179,156482,156483,156577,156578,156594,156595,156598,156599,156600,156601,156932,156933,157551,157552,157732,157733,158524,158525,158531,158533,158535,158536,158538,158539,158541,158542,158544,158545,158550,158551,159570,159571,159604,159605,159731,159732,159738,159739,159748,159749,160246,160252,161220,161224,161337,161339,161564,161565,163840,163860,164882,164883,165963,165964,166807,168549,173716,173717,173740,173741,176521,176522,177082,177083,180479,180481,183931,183932,187872,187873,187875,187876,194392,194393,196608,196626,199602,199603,199605,199606,199612,199613,201742,201743,203103,203188,205623,205624,207936,210464,210470,213656,214003,214005,214658,214659,215097,215098,217947,217949,220686,220687,220695,220696,221296,221314,221744,221745,227860,227861,227919,227920,228001,228002,228847,230451,233738,233740,236664,236665,241901,241902,242303,242365,250231,250232,253236,253237,253238,253239,253240,253241,254189,254190,254192,254193,254328,254329,258141,258142,259837,259838,259840,259841,259976,259977,262144,262170,264745,264746,264748,264749,264884,264885,269960,270490,272635,272636,272970,272981,272995,273006,273043,273044,273056,273057,277166,277229,286034,286035,290356,290358,291490,291491,294912,294932,296435,296436,302559,302560,311601,311602,311606,311607,311614,311615,317255,317256,317272,317273,317274,317276,317277,317279,317280,317282,317283,317285,317286,317287,317343,317345,317346,317347,317349,317350,317352,317353,317539,317540,318433,318434,318438,318439,319196,319197,320669,320670,327680,327698,328242,328243,333685,333686,333688,333689,333696,333697,335174,335175,336394,336395,339985,339986,345899,345900,345904,345905,345912,345913,347012,347013,347035,347036,347778,347780,347961,347962,348317,348318,353151,353153,357151,357152,357514,357515,357541,357542,360448,360467,360497,365117,366231,372036,372122,372123") == "8cb3c28a6eaadc9da9922604bad32ee8e03ac7f3" || 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"), "852,1,27,37,41,46,47,125,133,139,140,1814,1818,2295,2296,2301,2302,2546,2550,2555,2556,2558,2562,2564,2565,2588,2589,2625,2629,2679,2680,2839,2840,2843,2847,2851,2852,2855,2856,2865,2869,2873,2874,3694,3695,6091,6092,14678,14679,15600,15602,15603,15604,15606,15609,15610,15611,15613,15615,15616,15617,15619,15621,15622,15623,15625,15627,15628,15629,15631,15633,15634,15635,15637,15639,15644,15646,15649,15651,15654,15656,15664,15666,15669,15671,15672,15673,15675,15677,15678,15679,15682,15684,15685,15686,15688,15690,15691,15692,15694,15696,15697,15698,15700,15702,15703,15704,15706,15708,15709,15710,15719,15720,15739,15740,15741,15742,15746,15747,15748,15749,15752,15753,15754,15755,15758,15759,15760,15761,15764,15765,15766,15767,15771,15772,15773,15774,15777,15778,15779,15780,15784,15785,15789,15790,15794,15795,15799,15800,15804,15805,15806,15807,15816,15817,15818,15819,15822,15823,15824,15825,15828,15829,15830,15831,15834,15835,15836,15837,15839,15841,16133,16134,16249,16250,17147,17152,21054,21055,32768,32793,47694,47696,49359,49360,49789,49790,56216,56217,58820,58821,65536,65554,66183,66184,69237,69238,69360,69361,69367,69368,69818,69819,75991,75992,80477,80478,82162,82163,82169,82171,84910,84911,95939,95943,97750,97751,98304,98324,102101,102102,104638,104639,111707,111708,111809,111811,112611,112612,113811,113812,118222,118223,120895,120896,122126,122128,122157,122159,122647,122648,122730,122731,128600,128601,128605,128607,128624,128625,128660,128661,128670,128671,128673,128674,128724,128725,128728,128729,128789,128790,128796,128797,128822,128823,128859,128860,128963,128964,128997,128998,129214,129215,129245,129246,129259,129260,129369,129370,129372,129374,129438,129439,129509,129510,129577,129578,129580,129581,129583,129593,129652,129653,129655,129657,129717,129718,129720,129721,129782,129783,129785,129786,129849,129850,129852,129853,129919,129920,129922,129923,129987,129988,130060,130061,130130,130131,130133,130134,130195,130196,130198,130199,130259,130260,130262,130263,130324,130325,130327,130328,130388,130389,130391,130392,130453,130454,130456,130457,130459,130460,130519,130520,130522,130524,130584,130585,130587,130588,130649,130650,130652,130653,130715,130716,130718,130719,130782,130783,130785,130786,130851,130852,130921,130922,130991,130992,130994,130995,131057,131058,131060,131061,131072,131090,131143,131144,131146,131147,131211,131212,131214,131215,131279,131280,131282,131283,131347,131348,131350,131351,131415,131416,131418,131419,131501,131502,131513,131514,131973,131975,132020,132021,132135,132136,138493,138494,141534,141535,141536,141537,141583,141584,142007,142008,142064,142065,142381,142382,142383,142384,142413,142415,142420,142422,142423,142424,142426,142430,142450,142451,142580,142581,142647,142648,142651,142652,143005,143006,143183,143184,143296,143297,143424,143425,143493,143494,143618,143619,143710,143711,144558,144559,144594,144595,144746,144747,144856,144857,144863,144864,145088,145093,145511,145512,145645,145646,145769,145770,146710,146711,146912,146916,147263,147264,147267,147268,148020,148022,148033,148034,148783,148784,148817,148818,148945,148946,148979,148981,149476,149479,150457,150461,150669,150670,150936,150937,151482,151483,151553,151554,151556,151557,151774,151775,151806,151807,151809,151810,152065,152066,152068,152069,152072,152073,152266,152268,152280,152281,152290,152295,152414,152415,152691,152692,152700,152701,152715,152716,152717,152719,152840,152841,152843,152844,152962,152963,153170,153171,153288,153289,153290,153291,153301,153302,153304,153305,153462,153463,153481,153482,153491,153492,153893,153894,154084,154085,154094,154099,154442,154443,154650,154651,154844,154845,155121,155122,155133,155134,155198,155201,155212,155213,155215,155216,155227,155228,155230,155231,155398,155399,155878,155882,155956,155957,156178,156179,156482,156483,156577,156578,156594,156595,156598,156599,156600,156601,156932,156933,157551,157552,157732,157733,158524,158525,158531,158533,158535,158536,158538,158539,158541,158542,158544,158545,158550,158551,159570,159571,159604,159605,159731,159732,159738,159739,159748,159749,160246,160252,161220,161224,161337,161339,161564,161565,163840,163860,164882,164883,165963,165964,166807,168549,173716,173717,173740,173741,176521,176522,177082,177083,180479,180481,183931,183932,187872,187873,187875,187876,194392,194393,196608,196626,199602,199603,199605,199606,199612,199613,201742,201743,203103,203188,205623,205624,207936,210464,210470,213656,214003,214005,214658,214659,215097,215098,217947,217949,220686,220687,220695,220696,221296,221314,221744,221745,227860,227861,227919,227920,228001,228002,228847,230451,233738,233740,236664,236665,241901,241902,242303,242365,250231,250232,253236,253237,253238,253239,253240,253241,254189,254190,254192,254193,254328,254329,258141,258142,259837,259838,259840,259841,259976,259977,262144,262170,264745,264746,264748,264749,264884,264885,269960,270490,272635,272636,272970,272981,272995,273006,273043,273044,273056,273057,277166,277229,286034,286035,290356,290358,291490,291491,294912,294932,296435,296436,302559,302560,311601,311602,311606,311607,311614,311615,317255,317256,317272,317273,317274,317276,317277,317279,317280,317282,317283,317285,317286,317287,317343,317345,317346,317347,317349,317350,317352,317353,317539,317540,318433,318434,318438,318439,319196,319197,320669,320670,327680,327698,328242,328243,333685,333686,333688,333689,333696,333697,335174,335175,336394,336395,339985,339986,345899,345900,345904,345905,345912,345913,347012,347013,347035,347036,347778,347780,347961,347962,348317,348318,353151,353153,357151,357152,357514,357515,357541,357542,360448,360467,360497,365117,366231,372036,372122,372123") && 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"), "266,1,16,3974,3975,4141,4142,6004,6008,6106,6107,8740,8743,8751,8752,8792,8793,16705,16706,23737,23741,23758,23761,24213,24217,25559,25560,26235,26239,27205,27206,27568,27572,28091,28092,28104,28108,28112,28113,32768,32777,35877,35878,36987,36988,45893,45894,50073,50076,50980,50982,53855,53856,63698,63699,65536,65543,73249,73256,74731,74732,74737,74738,74866,74872,74873,74874,74886,74892,74893,74894,77957,77959,90772,90773,90840,90841,92906,92908,98304,98313,108405,108406,108454,108455,108994,108995,110854,110855,115675,115676,115680,115681,115684,115685,118730,118731,124131,124132,128038,128039,128048,128049,128058,128059,128223,128225,128916,128917,128924,128925,128931,128932,131072,131079,133268,133269,133502,133504,133514,133516,133562,133564,133574,133576,133585,133586,135404,135405,135412,135414,135577,135578,135579,135580,135583,135584,135598,135599,135602,135604,135605,135607,135625,135626,135636,135637,135675,135679,135683,135687,135688,135700,136115,136116,136487,136488,137973,137974,138063,138065,138067,138068,138070,138071,138073,138074,138076,138077,138079,138080,138082,138083,138093,138094,138098,138099,138104,138105,138110,138111,138920,138922,146120,146123,148072,148073,149929,149930,152010,152011,153935,153937,155654,155655,155670,155671,156728,156729,163840,163881,165642,165644,166142,166143,168057,168059,168107,168108,168259,168261,169657,169659,172876,172877,178263,178265,178277,178278,178330,178332,178492,178495,178506,178508,178520,178522,178560,178561,180057,180059,181104,181105,181595,181597,192456,192457,196608,196635,216519,216520,216543,216544,217057,217058,217229,217230,217469,217470,218209,218210,218791,218792,219915,219917,221061,221062,223638,223641,226975,226976,229376,229382,234119,237832,237893,237894") == "f835db2d6976724edd50fe08e8e3c1a22b38c359" || 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"), "266,1,16,3974,3975,4141,4142,6004,6008,6106,6107,8740,8743,8751,8752,8792,8793,16705,16706,23737,23741,23758,23761,24213,24217,25559,25560,26235,26239,27205,27206,27568,27572,28091,28092,28104,28108,28112,28113,32768,32777,35877,35878,36987,36988,45893,45894,50073,50076,50980,50982,53855,53856,63698,63699,65536,65543,73249,73256,74731,74732,74737,74738,74866,74872,74873,74874,74886,74892,74893,74894,77957,77959,90772,90773,90840,90841,92906,92908,98304,98313,108405,108406,108454,108455,108994,108995,110854,110855,115675,115676,115680,115681,115684,115685,118730,118731,124131,124132,128038,128039,128048,128049,128058,128059,128223,128225,128916,128917,128924,128925,128931,128932,131072,131079,133268,133269,133502,133504,133514,133516,133562,133564,133574,133576,133585,133586,135404,135405,135412,135414,135577,135578,135579,135580,135583,135584,135598,135599,135602,135604,135605,135607,135625,135626,135636,135637,135675,135679,135683,135687,135688,135700,136115,136116,136487,136488,137973,137974,138063,138065,138067,138068,138070,138071,138073,138074,138076,138077,138079,138080,138082,138083,138093,138094,138098,138099,138104,138105,138110,138111,138920,138922,146120,146123,148072,148073,149929,149930,152010,152011,153935,153937,155654,155655,155670,155671,156728,156729,163840,163881,165642,165644,166142,166143,168057,168059,168107,168108,168259,168261,169657,169659,172876,172877,178263,178265,178277,178278,178330,178332,178492,178495,178506,178508,178520,178522,178560,178561,180057,180059,181104,181105,181595,181597,192456,192457,196608,196635,216519,216520,216543,216544,217057,217058,217229,217230,217469,217470,218209,218210,218791,218792,219915,219917,221061,221062,223638,223641,226975,226976,229376,229382,234119,237832,237893,237894") && 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,240,242,243,245,251,270,271") == "1e4d83d76b25fdbc86b76b5ac1b62328840141d4" || 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,240,242,243,245,251,270,271") && 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"), "308,1,29,36,40,44,45,51,57,58,59,73,79,80,81,139,143,148,149,233,239,243,244,250,256,257,258,452,456,460,461,464,468,473,474,477,478,484,490,491,492,514,520,521,522,1257,1261,1279,1280,1284,1290,1291,1292,1294,1295,1306,1312,1313,1314,1324,1325,1330,1334,1338,1339,1343,1349,1353,1354,1361,1367,1368,1369,1381,1387,1388,1389,1391,1398,1404,1411,1416,1423,1453,1460,1479,1486,1504,1509,1526,1533,1549,1550,1755,1757,1767,1768,1780,1781,1782,1783,1784,1785,1793,1794,1817,1818,1863,1868,1871,1874,1877,1880,1883,1885,1889,1890,1894,1897,2375,2379,2384,2386,2391,2393,2397,2401,2402,2406,2407,2411,2412,2416,2417,2421,2422,2426,2427,2429,2436,2440,2441,2445,2446,2450,2451,2455,2456,2460,2461,2465,2466,2470,2471,2473,2474,2478,2479,2483,2484,2488,2489,2493,2494,2498,2499,2503,2504,2508,2509,2511,2515,2519,2520,2524,2525,2527,2528,2530,2531,2535,2536,2540,2541,2543,2544,2548,2549,2553,2554,2558,2559,2563,2564,2566,2567,2571,2572,2574,2578,2587,2592,2622,2625,2737,5153,5154,5288,5964,6217,6218,8283,8284,8342,8343,8882,8883,8933,8934,9243,9244,14425,14426,14498,14499,14507,14508,14643,14644,14648,14649,14702,14703,14713,14714,14747,14748,14767,14768,14820,14821,14966,14967,15042,15043,15189,15190,19940,19942,20081,20082,20107,20108,20204,20205,20256,20257,20268,20269,20319,20320,20395,20396,20459,20460,20722,20723,21227,21228,25102,25103,25159,25160,25584,25585,31615,32651,32768,32804,33515,33516,35102,35103,40196,40197,41075,41076,41127,41128,41446,41447,43432,43433,49474,49478,51160,51162,51344,51346,51394,51396,52980,52982,52999,112616,112958,114750,114789,114790") == "23e0d9d2c6d6fc39e214f92a50f03b737c370d1a" || 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"), "308,1,29,36,40,44,45,51,57,58,59,73,79,80,81,139,143,148,149,233,239,243,244,250,256,257,258,452,456,460,461,464,468,473,474,477,478,484,490,491,492,514,520,521,522,1257,1261,1279,1280,1284,1290,1291,1292,1294,1295,1306,1312,1313,1314,1324,1325,1330,1334,1338,1339,1343,1349,1353,1354,1361,1367,1368,1369,1381,1387,1388,1389,1391,1398,1404,1411,1416,1423,1453,1460,1479,1486,1504,1509,1526,1533,1549,1550,1755,1757,1767,1768,1780,1781,1782,1783,1784,1785,1793,1794,1817,1818,1863,1868,1871,1874,1877,1880,1883,1885,1889,1890,1894,1897,2375,2379,2384,2386,2391,2393,2397,2401,2402,2406,2407,2411,2412,2416,2417,2421,2422,2426,2427,2429,2436,2440,2441,2445,2446,2450,2451,2455,2456,2460,2461,2465,2466,2470,2471,2473,2474,2478,2479,2483,2484,2488,2489,2493,2494,2498,2499,2503,2504,2508,2509,2511,2515,2519,2520,2524,2525,2527,2528,2530,2531,2535,2536,2540,2541,2543,2544,2548,2549,2553,2554,2558,2559,2563,2564,2566,2567,2571,2572,2574,2578,2587,2592,2622,2625,2737,5153,5154,5288,5964,6217,6218,8283,8284,8342,8343,8882,8883,8933,8934,9243,9244,14425,14426,14498,14499,14507,14508,14643,14644,14648,14649,14702,14703,14713,14714,14747,14748,14767,14768,14820,14821,14966,14967,15042,15043,15189,15190,19940,19942,20081,20082,20107,20108,20204,20205,20256,20257,20268,20269,20319,20320,20395,20396,20459,20460,20722,20723,21227,21228,25102,25103,25159,25160,25584,25585,31615,32651,32768,32804,33515,33516,35102,35103,40196,40197,41075,41076,41127,41128,41446,41447,43432,43433,49474,49478,51160,51162,51344,51346,51394,51396,52980,52982,52999,112616,112958,114750,114789,114790") && 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/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/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
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 ---


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

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