getprop("ro.product.device") == "andromeda" || abort("E3004: This package is for \"andromeda\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/andromeda/andromeda:9/PKQ1.190321.001/V12.0.1.0.PEMMIXM:user/release-keys");
ui_print("Target: Xiaomi/andromeda/andromeda:9/PKQ1.190321.001/V12.0.3.0.PEMMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/andromeda/andromeda:9/PKQ1.190321.001/V12.0.1.0.PEMMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/andromeda/andromeda:9/PKQ1.190321.001/V12.0.3.0.PEMMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/andromeda/andromeda:9/PKQ1.190321.001/V12.0.1.0.PEMMIXM:user/release-keys or Xiaomi/andromeda/andromeda:9/PKQ1.190321.001/V12.0.3.0.PEMMIXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 5);
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:134217728:ed64951d2381513d7cd4ca69f6193725a1228640:134217728:ff67d97f8df5429f537b977debec7ab11446013a") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:ed64951d2381513d7cd4ca69f6193725a1228640:134217728:ff67d97f8df5429f537b977debec7ab11446013a\" has unexpected contents.");
apply_patch_space(198774784) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "1782,1,239,254,689,8318,12255,13492,17467,19259,19269,19347,19599,20173,32770,32990,48091,51909,66543,68023,92582,92679,92737,93009,93011,93095,93237,94370,94371,95429,98306,98526,98583,98586,117488,118056,118192,118438,118478,118753,163842,164062,202090,203524,203558,203565,203567,203623,206676,206680,206682,206702,214916,223108,229378,229598,279094,283468,294914,295134,321550,321552,321562,321563,322764,322766,322804,324638,330877,330878,330880,331513,331782,331783,331790,331792,331800,331801,331845,331847,332151,332152,332445,334039,334075,334078,335032,335033,335118,335120,335132,335135,335973,335976,335993,335996,336088,336089,336091,336092,336094,336096,336108,336111,337059,337060,339683,339686,339971,340673,340905,340907,341179,341180,341225,341227,341402,341403,341405,341407,341423,341424,341435,341437,341445,341446,341448,341450,341456,341457,342763,342765,345395,345396,346315,346317,348042,348043,349767,349770,350096,350098,350294,350295,353405,353408,354182,357815,357872,357873,357900,357902,358056,358059,358351,358352,363748,363749,367136,367137,369198,369200,369226,373071,373073,373109,373111,373113,373123,373124,373126,373128,373167,373168,373172,373174,373175,373176,373334,373335,381788,384895,384910,384912,384916,384917,384930,384931,384943,384944,384949,384950,384955,384956,384960,384961,384969,384970,384973,384974,384977,384978,384993,384994,384997,384998,385003,385004,385008,385009,385027,385028,385048,385049,385065,385066,385079,385080,385091,385092,385102,385103,385109,385110,385114,385115,385124,385125,385135,385136,385150,385151,385165,385166,385177,385178,385182,385183,385187,385188,385190,385191,385196,385197,385209,385210,385219,385220,385224,385225,385229,385230,385232,385233,385245,385246,385256,385257,385266,385267,385269,385270,385273,385274,385278,385279,385293,385294,385296,385297,385304,385305,385312,385313,385328,385329,385334,385335,385346,385347,385364,385365,385382,385383,385393,385394,385410,385411,385418,385419,385426,385427,385430,385431,385441,385442,385446,385447,385449,385450,385461,385462,385464,385465,385469,385470,385479,385480,385488,385489,385500,385501,385508,385509,385512,385513,385520,385521,385526,385527,385532,385533,385546,385547,385561,385562,385567,385568,385578,385579,385590,385591,385593,385594,385598,385599,385601,385602,385604,385605,385610,385611,385631,385632,385634,385635,385640,385641,385651,385652,385661,385662,385667,385668,385678,385679,385685,385686,385698,385700,385702,385703,385705,385706,385710,385711,385717,385718,385739,385740,385756,385757,385768,385769,385771,385772,385775,385776,385784,385785,385787,385788,385797,385798,385800,385801,385820,385821,385827,385828,385831,385832,385834,385835,385837,385838,385849,385850,385854,385855,385857,385858,385862,385863,385868,385869,385873,385874,385879,385880,385889,385890,385898,385899,385918,385919,385924,385925,385927,385928,385930,385931,385941,385942,385947,385948,385951,385952,385958,385959,385963,385964,385974,385975,385981,385982,385988,385989,385992,385993,385996,385997,386000,386001,386020,386021,386026,386027,386033,386034,386040,386041,386058,386059,386061,386062,386065,386066,386071,386072,386083,386084,386091,386092,386103,386104,386114,386115,386124,386125,386128,386129,386135,386136,386139,386140,386144,386145,386149,386150,386152,386153,386157,386158,386167,386168,386172,386173,386175,386176,386185,386186,386189,386190,386198,386199,386212,386213,386223,386224,386229,386230,386235,386236,386244,386245,386255,386256,386263,386264,386266,386267,386270,386271,386283,386284,386292,386293,386295,386296,386302,386303,386308,386309,386313,386314,386320,386321,386337,386338,386345,386346,386348,386349,386351,386352,386354,386355,386358,386359,386361,386362,386376,386377,386385,386386,386388,386389,386397,386398,386415,386416,386419,386420,386424,386425,386430,386432,386435,386436,386438,386439,386443,386444,386449,386450,386456,386457,386477,386478,386484,386485,386494,386495,386500,386501,386515,386516,386520,386521,386532,386533,386539,386540,386554,386555,386564,386565,386569,386570,386574,386575,386577,386578,386584,386585,386591,386592,386597,386598,386609,386610,386619,386620,386626,386627,386633,386634,386636,386637,386646,386647,386655,386656,386669,386670,386681,386682,386694,386695,386709,386710,386713,386714,386721,386722,386734,386735,386743,386744,386746,386747,386753,386754,386760,386761,386767,386768,386782,386783,386793,386794,386801,386802,386809,386810,386814,386815,386819,386820,386823,386824,386826,386827,386847,386848,386852,386853,386856,386857,386861,386862,386865,386866,386873,386874,386881,386882,386890,386891,386894,386895,386903,386904,386933,386936,386937,386938,386940,386941,386942,386943,386944,386945,386947,386948,386949,386950,386951,386952,386954,386955,386956,386957,386958,386959,386961,386962,386963,386964,386965,386966,386967,386968,386969,386970,386971,386972,386973,386974,386976,386977,386978,386979,386983,386984,386985,386986,386987,386989,387012,387013,387034,387035,387049,387050,387069,387070,387078,387079,387087,387088,387101,387102,387105,387106,387177,387178,387223,387224,387225,387228,387234,387235,387243,387245,387263,387264,388373,388375,388377,388378,388483,388485,388495,388497,388503,388504,388510,388511,388515,388517,388913,388915,389129,389130,390247,390248,394536,394537,396402,396405,396457,396458,397956,397957,399219,399220,400458,401446,402248,402666,402874,403276,403649,403650,404012,404013,404559,406461,408630,408631,413298,413329,413338,413496,413526,413672,413754,413853,413855,413872,413876,413909,413917,420018,421266,421267,421552,421554,421555,421556,421557,421558,421559,421560,421561,421562,421563,421564,421565,421566,421567,421568,421569,421570,421571,421572,421573,421574,421575,421576,421577,421578,421579,421580,421581,421582,421583,421584,421585,421586,421587,421588,421589,421590,421591,421592,421593,421594,421595,421596,421597,421598,421599,421600,421601,421602,421603,421604,421605,421606,421607,421608,421609,421610,421611,421612,421613,421614,421615,421616,421617,421618,421619,421620,421621,421622,421623,421624,421625,421626,421627,421628,421629,421630,421631,421632,421633,421634,421635,421636,421637,421638,421639,421640,421641,421642,421643,421644,421645,421646,421647,421648,421649,421650,421651,421652,421653,421654,421655,421656,421657,421658,421659,421660,421661,421662,421663,421664,421665,421666,421667,421668,421669,421670,421671,421672,421673,421674,421675,421676,421677,421678,421679,421680,421681,421682,421683,421684,421685,421686,421687,421688,421689,421690,421691,421692,421693,421694,421695,421696,421697,421698,421699,421700,421701,421702,421703,421704,421705,421706,421707,421708,421709,421710,421711,421712,421713,421714,421715,421716,421717,421718,421719,421720,421721,421722,421723,421724,421725,421726,421727,421728,421729,421730,421731,421732,421733,421734,421735,421736,421737,421738,421739,421740,421741,421742,421743,421744,421745,421746,421747,421748,421749,421750,421751,421752,421753,421754,421755,421756,421757,421758,421759,421760,421761,421762,421763,421764,421765,421766,421767,421768,421769,421770,421771,421772,421773,421774,421775,421776,421777,421778,421779,421780,421781,421782,421783,421784,421785,421786,421787,421788,421789,421790,421791,421792,421793,421794,421795,421796,421797,421798,421799,421800,421801,421802,421803,421804,421805,421806,421807,421808,421809,421810,421811,421812,421813,421814,421815,421816,421817,421818,421819,421820,421821,421822,421823,421824,421825,421826,421827,421828,421829,421830,421831,421832,421833,421834,421835,421836,421837,421838,421839,421840,421841,421842,421843,421844,421845,421846,421847,421848,421849,421850,421851,421852,421853,421854,421855,421856,421857,421858,421859,421860,421861,421862,421863,421864,421865,421866,421867,421868,421869,421870,421871,421872,421873,421874,421875,421876,421877,421878,421879,421880,421881,421882,421883,421884,421885,421886,421887,421888,421889,421890,421891,421892,421893,421894,421895,421896,421897,421898,421899,421900,421901,421902,421903,421904,421905,421906,421907,421908,421909,421910,421911,421912,421913,421914,421915,421916,421917,421918,421919,421920,421921,421922,421923,421924,421925,421926,421927,421928,421929,421930,421931,421932,421933,421934,421935,421936,421937,421938,421939,421940,421941,421942,421943,421944,421945,421946,421947,421948,421949,421950,421951,421952,421953,421954,421955,421956,421957,421958,421959,421960,421961,421962,421963,421964,421965,421966,421967,421968,421969,421970,421971,421972,421973,421974,421975,421976,421977,421978,421979,421980,421981,421982,421983,421984,421985,421986,421987,421988,421989,421990,421991,421992,421993,421994,421995,421996,421997,421998,424273,424274,425438,425660,425661,425697,427824,427825,429104,429183,429184,429208,429235,429325,429330,430920,430921,430936,430943,431839,431928,431929,431940,432121,432148,432277,444108,444109,448275,448276,449987,449988,451347,451348,453285,453286,453512,453513,462215,462216,462218,462220,462224,462226,462239,462256,462260,462279,462303,462313,462344,462365,462368,462370,462377,462426,462434,462445,462448,462494,462495,462496,462499,462602,464243,464244,465198,466766,466773,467633,467814,476145,477938,477939,481557,481558,483041,483042,485734,485735,485868,485869,487787,487788,487800,487802,490630,490666,490716,490825,500171,501483,501488,501525,501830,501831,502020,502375,502699,503103,503375,503376,505884,505885,513032,513034,513410,513412,513544,513545,513554,513555,513597,513599,523381,523382,523386,523387,524288,530360,535338,535339,535358,537668,537679,537719,537728,537766,537770,537772,537778,538363,538508,538510,538519,538712,538718,540055,540073,540074,542765,542767,542835,542836,542846,542848,542854,542855,542888,542890,542897,542900,542910,542911,543282,543284,543296,543297,543305,543307,543313,543314,543373,543375,543381,543382,543456,543458,543465,543466,550260,550262,550355,550358,550908,550910,550925,550926,551194,551196,551203,551204,551211,551213,551219,551222,551385,551387,551397,551398,560038,560039,561281,561283,561314,561315,561321,561324,561344,561345,561375,561377,561383,561384,561813,561815,561825,561826,573049,573051,577109,577110,577340,577342,577353,577356,579288,579289,580107,580109,580137,580140,580150,580151,582629,582631,582703,582855,582863,582866,582933,582934,582971,585657,589181,589182,589196,589198,589205,589206,591173,591175,591185,591186,605715,605716,627771,627774,627980,627981,630183,630185,630234,630235,639340,639342,639431,639432,641515,641516,641546,641548,641556,641557,643057,643059,644258,644259,644585,644587,644604,644605,660034,660035,666538,666539,669228,669230,669274,669275,670611,670612,682501,682503,682621,682622,682680,682682,682690,682693,683205,683206,683332,683334,683340,683341,683401,683403,683411,683412,683420,683421,683438,683440,683447,683448,683490,683492,683498,683501,684220,684223,685720,685721,692371,692373,692405,692406,692481,692483,692583,692586,693137,693138,693223,693225,693233,699481,699580,699582,699590,701444,704384,705563,705576,705577,705583,705585,705591,705594,705604,706658,709519,709521,709585,709586,710382,710384,710402,710405,710446,712614,726524,726628,726634,726635,726641,726642,731476,731478,731522,731523,737112,737114,737193,737194,741307,741309,741349,741350,741362,741364,741370,741371,741382,741383,744156,744158,744207,744208,744537,744539,744551,744554,744563,744566,745985,745988,746562,746563,746624,746626,746632,752937,752951,752953,753270,753271,757044,757046,757095,764654,764680,766885,766892,766894,766904,766905,768145,768365,768410,768411,768564,768566,768574,769111,776858,776859,791735,791737,797291,797292,797320,797321,797334,797335,797342,797343,797346,797347,797367,797368,797461,797462,797467,797472,797474,797475,797476,797477,797478,797479,797480,797481,797482,797483,797484,797485,797486,797487,797488,797491,797492,797493,798046,798047,798048,798049,798979,798980,798987,798988,799541,799542,799543,799545,811968,811992,811999,812046,812089,812136,812363,812554,812584,812856,819202,819422,841501,841505,848325,848510,848521,848559,848716,848761,848847,848939,849265,849321,849362,849383,849387,849393,849397,849479,849505,849739,849746,849771,849817,849885,849958,850038,850062,850089,850313,850329,850403,850944,851399,851505,851572,851598,851694,851724,852289,852316,852374,852393,852548,852658,859512,884736,884738,903007,917316,917503,917504") == "cc5ee6511197dd403eed2975a2b92124b9f0088d" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "1782,1,239,254,689,8318,12255,13492,17467,19259,19269,19347,19599,20173,32770,32990,48091,51909,66543,68023,92582,92679,92737,93009,93011,93095,93237,94370,94371,95429,98306,98526,98583,98586,117488,118056,118192,118438,118478,118753,163842,164062,202090,203524,203558,203565,203567,203623,206676,206680,206682,206702,214916,223108,229378,229598,279094,283468,294914,295134,321550,321552,321562,321563,322764,322766,322804,324638,330877,330878,330880,331513,331782,331783,331790,331792,331800,331801,331845,331847,332151,332152,332445,334039,334075,334078,335032,335033,335118,335120,335132,335135,335973,335976,335993,335996,336088,336089,336091,336092,336094,336096,336108,336111,337059,337060,339683,339686,339971,340673,340905,340907,341179,341180,341225,341227,341402,341403,341405,341407,341423,341424,341435,341437,341445,341446,341448,341450,341456,341457,342763,342765,345395,345396,346315,346317,348042,348043,349767,349770,350096,350098,350294,350295,353405,353408,354182,357815,357872,357873,357900,357902,358056,358059,358351,358352,363748,363749,367136,367137,369198,369200,369226,373071,373073,373109,373111,373113,373123,373124,373126,373128,373167,373168,373172,373174,373175,373176,373334,373335,381788,384895,384910,384912,384916,384917,384930,384931,384943,384944,384949,384950,384955,384956,384960,384961,384969,384970,384973,384974,384977,384978,384993,384994,384997,384998,385003,385004,385008,385009,385027,385028,385048,385049,385065,385066,385079,385080,385091,385092,385102,385103,385109,385110,385114,385115,385124,385125,385135,385136,385150,385151,385165,385166,385177,385178,385182,385183,385187,385188,385190,385191,385196,385197,385209,385210,385219,385220,385224,385225,385229,385230,385232,385233,385245,385246,385256,385257,385266,385267,385269,385270,385273,385274,385278,385279,385293,385294,385296,385297,385304,385305,385312,385313,385328,385329,385334,385335,385346,385347,385364,385365,385382,385383,385393,385394,385410,385411,385418,385419,385426,385427,385430,385431,385441,385442,385446,385447,385449,385450,385461,385462,385464,385465,385469,385470,385479,385480,385488,385489,385500,385501,385508,385509,385512,385513,385520,385521,385526,385527,385532,385533,385546,385547,385561,385562,385567,385568,385578,385579,385590,385591,385593,385594,385598,385599,385601,385602,385604,385605,385610,385611,385631,385632,385634,385635,385640,385641,385651,385652,385661,385662,385667,385668,385678,385679,385685,385686,385698,385700,385702,385703,385705,385706,385710,385711,385717,385718,385739,385740,385756,385757,385768,385769,385771,385772,385775,385776,385784,385785,385787,385788,385797,385798,385800,385801,385820,385821,385827,385828,385831,385832,385834,385835,385837,385838,385849,385850,385854,385855,385857,385858,385862,385863,385868,385869,385873,385874,385879,385880,385889,385890,385898,385899,385918,385919,385924,385925,385927,385928,385930,385931,385941,385942,385947,385948,385951,385952,385958,385959,385963,385964,385974,385975,385981,385982,385988,385989,385992,385993,385996,385997,386000,386001,386020,386021,386026,386027,386033,386034,386040,386041,386058,386059,386061,386062,386065,386066,386071,386072,386083,386084,386091,386092,386103,386104,386114,386115,386124,386125,386128,386129,386135,386136,386139,386140,386144,386145,386149,386150,386152,386153,386157,386158,386167,386168,386172,386173,386175,386176,386185,386186,386189,386190,386198,386199,386212,386213,386223,386224,386229,386230,386235,386236,386244,386245,386255,386256,386263,386264,386266,386267,386270,386271,386283,386284,386292,386293,386295,386296,386302,386303,386308,386309,386313,386314,386320,386321,386337,386338,386345,386346,386348,386349,386351,386352,386354,386355,386358,386359,386361,386362,386376,386377,386385,386386,386388,386389,386397,386398,386415,386416,386419,386420,386424,386425,386430,386432,386435,386436,386438,386439,386443,386444,386449,386450,386456,386457,386477,386478,386484,386485,386494,386495,386500,386501,386515,386516,386520,386521,386532,386533,386539,386540,386554,386555,386564,386565,386569,386570,386574,386575,386577,386578,386584,386585,386591,386592,386597,386598,386609,386610,386619,386620,386626,386627,386633,386634,386636,386637,386646,386647,386655,386656,386669,386670,386681,386682,386694,386695,386709,386710,386713,386714,386721,386722,386734,386735,386743,386744,386746,386747,386753,386754,386760,386761,386767,386768,386782,386783,386793,386794,386801,386802,386809,386810,386814,386815,386819,386820,386823,386824,386826,386827,386847,386848,386852,386853,386856,386857,386861,386862,386865,386866,386873,386874,386881,386882,386890,386891,386894,386895,386903,386904,386933,386936,386937,386938,386940,386941,386942,386943,386944,386945,386947,386948,386949,386950,386951,386952,386954,386955,386956,386957,386958,386959,386961,386962,386963,386964,386965,386966,386967,386968,386969,386970,386971,386972,386973,386974,386976,386977,386978,386979,386983,386984,386985,386986,386987,386989,387012,387013,387034,387035,387049,387050,387069,387070,387078,387079,387087,387088,387101,387102,387105,387106,387177,387178,387223,387224,387225,387228,387234,387235,387243,387245,387263,387264,388373,388375,388377,388378,388483,388485,388495,388497,388503,388504,388510,388511,388515,388517,388913,388915,389129,389130,390247,390248,394536,394537,396402,396405,396457,396458,397956,397957,399219,399220,400458,401446,402248,402666,402874,403276,403649,403650,404012,404013,404559,406461,408630,408631,413298,413329,413338,413496,413526,413672,413754,413853,413855,413872,413876,413909,413917,420018,421266,421267,421552,421554,421555,421556,421557,421558,421559,421560,421561,421562,421563,421564,421565,421566,421567,421568,421569,421570,421571,421572,421573,421574,421575,421576,421577,421578,421579,421580,421581,421582,421583,421584,421585,421586,421587,421588,421589,421590,421591,421592,421593,421594,421595,421596,421597,421598,421599,421600,421601,421602,421603,421604,421605,421606,421607,421608,421609,421610,421611,421612,421613,421614,421615,421616,421617,421618,421619,421620,421621,421622,421623,421624,421625,421626,421627,421628,421629,421630,421631,421632,421633,421634,421635,421636,421637,421638,421639,421640,421641,421642,421643,421644,421645,421646,421647,421648,421649,421650,421651,421652,421653,421654,421655,421656,421657,421658,421659,421660,421661,421662,421663,421664,421665,421666,421667,421668,421669,421670,421671,421672,421673,421674,421675,421676,421677,421678,421679,421680,421681,421682,421683,421684,421685,421686,421687,421688,421689,421690,421691,421692,421693,421694,421695,421696,421697,421698,421699,421700,421701,421702,421703,421704,421705,421706,421707,421708,421709,421710,421711,421712,421713,421714,421715,421716,421717,421718,421719,421720,421721,421722,421723,421724,421725,421726,421727,421728,421729,421730,421731,421732,421733,421734,421735,421736,421737,421738,421739,421740,421741,421742,421743,421744,421745,421746,421747,421748,421749,421750,421751,421752,421753,421754,421755,421756,421757,421758,421759,421760,421761,421762,421763,421764,421765,421766,421767,421768,421769,421770,421771,421772,421773,421774,421775,421776,421777,421778,421779,421780,421781,421782,421783,421784,421785,421786,421787,421788,421789,421790,421791,421792,421793,421794,421795,421796,421797,421798,421799,421800,421801,421802,421803,421804,421805,421806,421807,421808,421809,421810,421811,421812,421813,421814,421815,421816,421817,421818,421819,421820,421821,421822,421823,421824,421825,421826,421827,421828,421829,421830,421831,421832,421833,421834,421835,421836,421837,421838,421839,421840,421841,421842,421843,421844,421845,421846,421847,421848,421849,421850,421851,421852,421853,421854,421855,421856,421857,421858,421859,421860,421861,421862,421863,421864,421865,421866,421867,421868,421869,421870,421871,421872,421873,421874,421875,421876,421877,421878,421879,421880,421881,421882,421883,421884,421885,421886,421887,421888,421889,421890,421891,421892,421893,421894,421895,421896,421897,421898,421899,421900,421901,421902,421903,421904,421905,421906,421907,421908,421909,421910,421911,421912,421913,421914,421915,421916,421917,421918,421919,421920,421921,421922,421923,421924,421925,421926,421927,421928,421929,421930,421931,421932,421933,421934,421935,421936,421937,421938,421939,421940,421941,421942,421943,421944,421945,421946,421947,421948,421949,421950,421951,421952,421953,421954,421955,421956,421957,421958,421959,421960,421961,421962,421963,421964,421965,421966,421967,421968,421969,421970,421971,421972,421973,421974,421975,421976,421977,421978,421979,421980,421981,421982,421983,421984,421985,421986,421987,421988,421989,421990,421991,421992,421993,421994,421995,421996,421997,421998,424273,424274,425438,425660,425661,425697,427824,427825,429104,429183,429184,429208,429235,429325,429330,430920,430921,430936,430943,431839,431928,431929,431940,432121,432148,432277,444108,444109,448275,448276,449987,449988,451347,451348,453285,453286,453512,453513,462215,462216,462218,462220,462224,462226,462239,462256,462260,462279,462303,462313,462344,462365,462368,462370,462377,462426,462434,462445,462448,462494,462495,462496,462499,462602,464243,464244,465198,466766,466773,467633,467814,476145,477938,477939,481557,481558,483041,483042,485734,485735,485868,485869,487787,487788,487800,487802,490630,490666,490716,490825,500171,501483,501488,501525,501830,501831,502020,502375,502699,503103,503375,503376,505884,505885,513032,513034,513410,513412,513544,513545,513554,513555,513597,513599,523381,523382,523386,523387,524288,530360,535338,535339,535358,537668,537679,537719,537728,537766,537770,537772,537778,538363,538508,538510,538519,538712,538718,540055,540073,540074,542765,542767,542835,542836,542846,542848,542854,542855,542888,542890,542897,542900,542910,542911,543282,543284,543296,543297,543305,543307,543313,543314,543373,543375,543381,543382,543456,543458,543465,543466,550260,550262,550355,550358,550908,550910,550925,550926,551194,551196,551203,551204,551211,551213,551219,551222,551385,551387,551397,551398,560038,560039,561281,561283,561314,561315,561321,561324,561344,561345,561375,561377,561383,561384,561813,561815,561825,561826,573049,573051,577109,577110,577340,577342,577353,577356,579288,579289,580107,580109,580137,580140,580150,580151,582629,582631,582703,582855,582863,582866,582933,582934,582971,585657,589181,589182,589196,589198,589205,589206,591173,591175,591185,591186,605715,605716,627771,627774,627980,627981,630183,630185,630234,630235,639340,639342,639431,639432,641515,641516,641546,641548,641556,641557,643057,643059,644258,644259,644585,644587,644604,644605,660034,660035,666538,666539,669228,669230,669274,669275,670611,670612,682501,682503,682621,682622,682680,682682,682690,682693,683205,683206,683332,683334,683340,683341,683401,683403,683411,683412,683420,683421,683438,683440,683447,683448,683490,683492,683498,683501,684220,684223,685720,685721,692371,692373,692405,692406,692481,692483,692583,692586,693137,693138,693223,693225,693233,699481,699580,699582,699590,701444,704384,705563,705576,705577,705583,705585,705591,705594,705604,706658,709519,709521,709585,709586,710382,710384,710402,710405,710446,712614,726524,726628,726634,726635,726641,726642,731476,731478,731522,731523,737112,737114,737193,737194,741307,741309,741349,741350,741362,741364,741370,741371,741382,741383,744156,744158,744207,744208,744537,744539,744551,744554,744563,744566,745985,745988,746562,746563,746624,746626,746632,752937,752951,752953,753270,753271,757044,757046,757095,764654,764680,766885,766892,766894,766904,766905,768145,768365,768410,768411,768564,768566,768574,769111,776858,776859,791735,791737,797291,797292,797320,797321,797334,797335,797342,797343,797346,797347,797367,797368,797461,797462,797467,797472,797474,797475,797476,797477,797478,797479,797480,797481,797482,797483,797484,797485,797486,797487,797488,797491,797492,797493,798046,798047,798048,798049,798979,798980,798987,798988,799541,799542,799543,799545,811968,811992,811999,812046,812089,812136,812363,812554,812584,812856,819202,819422,841501,841505,848325,848510,848521,848559,848716,848761,848847,848939,849265,849321,849362,849383,849387,849393,849397,849479,849505,849739,849746,849771,849817,849885,849958,850038,850062,850089,850313,850329,850403,850944,851399,851505,851572,851598,851694,851724,852289,852316,852374,852393,852548,852658,859512,884736,884738,903007,917316,917503,917504") && block_image_verify("/dev/block/bootdevice/by-name/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("/dev/block/bootdevice/by-name/vendor", "24,1,106,107,109,120,269,6168,7866,7870,32770,32864,98306,98400,163842,163936,229378,229472,294914,295008,314724,386991,393125,393215,393216") == "a9bc798d41fa42c8d87f4bbe241551add9d2959a" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "24,1,106,107,109,120,269,6168,7866,7870,32770,32864,98306,98400,163842,163936,229378,229472,294914,295008,314724,386991,393125,393215,393216") && block_image_verify("/dev/block/bootdevice/by-name/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;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:134217728:ed64951d2381513d7cd4ca69f6193725a1228640:134217728:ff67d97f8df5429f537b977debec7ab11446013a",
            "-", ff67d97f8df5429f537b977debec7ab11446013a, 134217728,
            ed64951d2381513d7cd4ca69f6193725a1228640, package_extract_file("patch/boot.img.p")) || abort("Failed to apply patch \"patch/boot.img.p \".");

# ---- 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/hypvm.mbn", "/dev/block/bootdevice/by-name/hypbak");
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/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");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
show_progress(0.100000, 2);
