getprop("ro.product.device") == "nitrogen" || abort("E3004: This package is for \"nitrogen\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.4.0.QEDCNXM:user/release-keys");
ui_print("Target: Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.1.0.QEDCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.4.0.QEDCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.1.0.QEDCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.4.0.QEDCNXM:user/release-keys or Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.1.0.QEDCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e",
                      "EMMC:/dev/block/bootdevice/by-name/boot:35513674:972e47bebc29e7e900a5e9436dc5987543b0e773") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e\" or \"EMMC:/dev/block/bootdevice/by-name/boot:35513674:972e47bebc29e7e900a5e9436dc5987543b0e773\" has unexpected contents.");
apply_patch_space(169476096) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:c097607c795dccfec2efca11840c1642cf5c000a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:c097607c795dccfec2efca11840c1642cf5c000a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:c097607c795dccfec2efca11840c1642cf5c000a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:c097607c795dccfec2efca11840c1642cf5c000a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9",
                      "EMMC:/dev/block/bootdevice/by-name/modem:117720576:2b75df1217f64c4e4be9c83b64cfb5f2488e337f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9\" or \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:2b75df1217f64c4e4be9c83b64cfb5f2488e337f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:83605f759683f8d07c791b7bedd2bde9753fba15") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:83605f759683f8d07c791b7bedd2bde9753fba15\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                      "EMMC:/dev/block/bootdevice/by-name/pmic:39896:e05e8df2d891460d29f237576b05066e79532619") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0\" or \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:e05e8df2d891460d29f237576b05066e79532619\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                      "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:e05e8df2d891460d29f237576b05066e79532619") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0\" or \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:e05e8df2d891460d29f237576b05066e79532619\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:21806b06f123a755666cf488bce6551001d3f6a2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:21806b06f123a755666cf488bce6551001d3f6a2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:21806b06f123a755666cf488bce6551001d3f6a2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:21806b06f123a755666cf488bce6551001d3f6a2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:278528:eef708038075c89ef89d1aaf09594568e1420f34") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:eef708038075c89ef89d1aaf09594568e1420f34\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:eef708038075c89ef89d1aaf09594568e1420f34") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:eef708038075c89ef89d1aaf09594568e1420f34\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308",
                      "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308\" or \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/logo:25090048:28876bab3a4a23b357c292fd9dc0f2857a1538d8",
                      "EMMC:/dev/block/bootdevice/by-name/logo:15392768:2d2957f649f12b358e37bb342c22c47ed3d7557e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/logo:25090048:28876bab3a4a23b357c292fd9dc0f2857a1538d8\" or \"EMMC:/dev/block/bootdevice/by-name/logo:15392768:2d2957f649f12b358e37bb342c22c47ed3d7557e\" has unexpected contents.");
apply_patch_space(117720576) || 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", "548,1,587,698,712,721,724,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,3645,3676,3678,3679,3683,3684,3692,3693,3694,3695,8290,8423,8546,8576,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,20324,21794,23616,25000,25567,25569,26940,32770,32959,32960,33466,35050,35059,35208,35216,35228,35234,36280,36314,36323,36329,36337,36343,36392,36400,36414,36420,36613,36623,36647,36653,38777,38800,38811,38817,38826,38832,41644,41674,41679,41685,41765,41772,41903,41911,42317,42334,44331,44361,45028,45052,48958,48964,49151,49159,51339,51371,51410,51416,51502,51510,61034,61048,61061,61067,61083,61107,61732,61750,63284,63323,64091,64106,65537,66043,69100,69127,76092,76190,78058,78066,78108,78115,85499,85580,85658,85664,91163,91171,93957,93977,95863,95879,98306,98495,98496,99002,99569,99592,99644,99651,99659,99666,101775,101783,101831,101837,102379,102398,102429,102435,102676,102688,102689,103324,103328,103353,103393,103399,104619,104645,104765,104773,104863,104870,105145,105156,113327,115954,116025,116033,120549,120629,120640,120646,120784,120792,121495,121513,121527,121533,122326,122344,131073,131579,149412,149418,149443,149449,149456,149466,149484,149490,149895,149902,149929,149935,152135,152183,152454,152466,152628,152639,152640,152913,152915,152929,152930,152980,152982,152991,153022,153029,158294,160496,160918,160932,163143,163160,163538,163548,163842,164031,164032,164538,166879,166886,171166,171186,173459,174651,178557,182726,196609,197115,197404,200565,200566,208293,213746,224666,224667,225040,225041,227411,227412,229376,229378,229567,229568,232981,232982,233334,262145,262651,294914,295103,295104,295610,307632,308739,308740,308980,311745,311746,327681,328187,360449,360955,393217,393723,402678,403258,403269,403693,403694,404359,404371,404430,404453,404732,412384,412478,414213,414228,425985,426491,435551,435555,437015,437019,437669,437697,458753,459259,485680,486041,488843,488846,488857,488923,491521,492027,493261,493265,493953,493986,497493,497496,497562,497564,499827,499835,508796,508829,524289,524795,535771,540117,540589,540629,540667,540703,541174,541213,541251,541287,546502,547396,547397,547753,548210,548221,550742,550790,550801,550807,550884,550891,557057,557563,573208,573274,573435,573445,573454,573460,574118,574137,574194,574201,579648,579659,583091,583120,584414,584457,585518,585548,585559,585565,585587,585593,585604,585610,585882,585895,585902,585912,587143,587169,587608,587621,587719,587728,587752,587759,587767,587773,589293,589311,589403,589411,589825,590331,600771,600796,603208,603263,606723,608293,608301,608307,615949,616035,617757,619864,621065,621093,622593,623099,627282,630424,644947,645057,647666,647712,647732,647738,647767,647773,655316,655322,655361,655867,658259,658265,658735,658746,659563,659583,669334,669340,670526,670536,670543,670549,672550,672592,672656,672663,672664,672671,677421,677466,677535,677633,677639,677645,677700,677707,679632,679660,679678,679684,679824,679834,681105,681133,681903,683074,683222,683229,683237,683243,683258,683264,683292,683299,684622,684648,685211,685233,685254,685260,685270,685276,685285,685291,685412,685418,685433,685439,685448,685454,685480,685486,688129,688635,716540,716546,716559,716565,716578,716584,719701,719707,719763,719769,719791,719797,719817,719823,720090,720298,720299,720507,720897,721403,733851,733857,734597,734615,734622,734628,744388,750160,750628,750644,751314,751332,751362,751368,751374,751380,751663,751674,751677,751683,751707,751714,753665,754171,754576,754587,754593,774155,780254,780261,780301") == "4ffe634e04919b1c4efdcd31780e90fe5f2840e0" || 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", "548,1,587,698,712,721,724,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,3645,3676,3678,3679,3683,3684,3692,3693,3694,3695,8290,8423,8546,8576,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,20324,21794,23616,25000,25567,25569,26940,32770,32959,32960,33466,35050,35059,35208,35216,35228,35234,36280,36314,36323,36329,36337,36343,36392,36400,36414,36420,36613,36623,36647,36653,38777,38800,38811,38817,38826,38832,41644,41674,41679,41685,41765,41772,41903,41911,42317,42334,44331,44361,45028,45052,48958,48964,49151,49159,51339,51371,51410,51416,51502,51510,61034,61048,61061,61067,61083,61107,61732,61750,63284,63323,64091,64106,65537,66043,69100,69127,76092,76190,78058,78066,78108,78115,85499,85580,85658,85664,91163,91171,93957,93977,95863,95879,98306,98495,98496,99002,99569,99592,99644,99651,99659,99666,101775,101783,101831,101837,102379,102398,102429,102435,102676,102688,102689,103324,103328,103353,103393,103399,104619,104645,104765,104773,104863,104870,105145,105156,113327,115954,116025,116033,120549,120629,120640,120646,120784,120792,121495,121513,121527,121533,122326,122344,131073,131579,149412,149418,149443,149449,149456,149466,149484,149490,149895,149902,149929,149935,152135,152183,152454,152466,152628,152639,152640,152913,152915,152929,152930,152980,152982,152991,153022,153029,158294,160496,160918,160932,163143,163160,163538,163548,163842,164031,164032,164538,166879,166886,171166,171186,173459,174651,178557,182726,196609,197115,197404,200565,200566,208293,213746,224666,224667,225040,225041,227411,227412,229376,229378,229567,229568,232981,232982,233334,262145,262651,294914,295103,295104,295610,307632,308739,308740,308980,311745,311746,327681,328187,360449,360955,393217,393723,402678,403258,403269,403693,403694,404359,404371,404430,404453,404732,412384,412478,414213,414228,425985,426491,435551,435555,437015,437019,437669,437697,458753,459259,485680,486041,488843,488846,488857,488923,491521,492027,493261,493265,493953,493986,497493,497496,497562,497564,499827,499835,508796,508829,524289,524795,535771,540117,540589,540629,540667,540703,541174,541213,541251,541287,546502,547396,547397,547753,548210,548221,550742,550790,550801,550807,550884,550891,557057,557563,573208,573274,573435,573445,573454,573460,574118,574137,574194,574201,579648,579659,583091,583120,584414,584457,585518,585548,585559,585565,585587,585593,585604,585610,585882,585895,585902,585912,587143,587169,587608,587621,587719,587728,587752,587759,587767,587773,589293,589311,589403,589411,589825,590331,600771,600796,603208,603263,606723,608293,608301,608307,615949,616035,617757,619864,621065,621093,622593,623099,627282,630424,644947,645057,647666,647712,647732,647738,647767,647773,655316,655322,655361,655867,658259,658265,658735,658746,659563,659583,669334,669340,670526,670536,670543,670549,672550,672592,672656,672663,672664,672671,677421,677466,677535,677633,677639,677645,677700,677707,679632,679660,679678,679684,679824,679834,681105,681133,681903,683074,683222,683229,683237,683243,683258,683264,683292,683299,684622,684648,685211,685233,685254,685260,685270,685276,685285,685291,685412,685418,685433,685439,685448,685454,685480,685486,688129,688635,716540,716546,716559,716565,716578,716584,719701,719707,719763,719769,719791,719797,719817,719823,720090,720298,720299,720507,720897,721403,733851,733857,734597,734615,734622,734628,744388,750160,750628,750644,751314,751332,751362,751368,751374,751380,751663,751674,751677,751683,751707,751714,753665,754171,754576,754587,754593,774155,780254,780261,780301") && 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", "68,1,440,698,706,716,718,725,809,816,1080,1087,1112,1118,1124,1130,2300,2309,3786,3797,13041,17887,32770,32959,32960,33466,41181,49916,49917,52414,52417,58565,65537,66043,74132,74133,78778,78779,78806,78807,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,228562,228611,229378,229567,229568,230074,232479,232485,238007,294912,294914,753664,753665,774155,780254,780261,780605") == "2b9c611efba796e547de6d9f2351d0bf03a163db" || 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", "68,1,440,698,706,716,718,725,809,816,1080,1087,1112,1118,1124,1130,2300,2309,3786,3797,13041,17887,32770,32959,32960,33466,41181,49916,49917,52414,52417,58565,65537,66043,74132,74133,78778,78779,78806,78807,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,228562,228611,229378,229567,229568,230074,232479,232485,238007,294912,294914,753664,753665,774155,780254,780261,780605") && 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 ----


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:c097607c795dccfec2efca11840c1642cf5c000a",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:c097607c795dccfec2efca11840c1642cf5c000a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:2b75df1217f64c4e4be9c83b64cfb5f2488e337f",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:2b75df1217f64c4e4be9c83b64cfb5f2488e337f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:83605f759683f8d07c791b7bedd2bde9753fba15",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:83605f759683f8d07c791b7bedd2bde9753fba15");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:e05e8df2d891460d29f237576b05066e79532619",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:e05e8df2d891460d29f237576b05066e79532619");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                "EMMC:/dev/block/bootdevice/by-name/tz:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:21806b06f123a755666cf488bce6551001d3f6a2",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:21806b06f123a755666cf488bce6551001d3f6a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:eef708038075c89ef89d1aaf09594568e1420f34",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:eef708038075c89ef89d1aaf09594568e1420f34");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:c097607c795dccfec2efca11840c1642cf5c000a",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:c097607c795dccfec2efca11840c1642cf5c000a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:e05e8df2d891460d29f237576b05066e79532619",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:e05e8df2d891460d29f237576b05066e79532619");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:21806b06f123a755666cf488bce6551001d3f6a2",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:21806b06f123a755666cf488bce6551001d3f6a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:eef708038075c89ef89d1aaf09594568e1420f34",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:eef708038075c89ef89d1aaf09594568e1420f34");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e",
                "EMMC:/dev/block/bootdevice/by-name/boot:35513674:972e47bebc29e7e900a5e9436dc5987543b0e773",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:35513674:972e47bebc29e7e900a5e9436dc5987543b0e773");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:c097607c795dccfec2efca11840c1642cf5c000a",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:c097607c795dccfec2efca11840c1642cf5c000a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:2b75df1217f64c4e4be9c83b64cfb5f2488e337f",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:2b75df1217f64c4e4be9c83b64cfb5f2488e337f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:83605f759683f8d07c791b7bedd2bde9753fba15",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:83605f759683f8d07c791b7bedd2bde9753fba15");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:e05e8df2d891460d29f237576b05066e79532619",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:e05e8df2d891460d29f237576b05066e79532619");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                "EMMC:/dev/block/bootdevice/by-name/tz:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:21806b06f123a755666cf488bce6551001d3f6a2",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:21806b06f123a755666cf488bce6551001d3f6a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:eef708038075c89ef89d1aaf09594568e1420f34",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:eef708038075c89ef89d1aaf09594568e1420f34");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:c097607c795dccfec2efca11840c1642cf5c000a",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:c097607c795dccfec2efca11840c1642cf5c000a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224840:1bdc7c8efb4642febb4c12441a73ae340a6bcc9f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:450c9d5fd1086f8c412629901bc16cbe01f1d256");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:a4ceda8e42f0acead84d47cbda7f700b993c720b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:e05e8df2d891460d29f237576b05066e79532619",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:e05e8df2d891460d29f237576b05066e79532619");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:4b844068f893cf992d4de9ae67a10ff557a88ad4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:21806b06f123a755666cf488bce6551001d3f6a2",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:21806b06f123a755666cf488bce6551001d3f6a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:eef708038075c89ef89d1aaf09594568e1420f34",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:eef708038075c89ef89d1aaf09594568e1420f34");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:d6317dd74bfcbec2a06c8dedb494f1faee90c85a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:8b0a288653e7d7ec7067673881aa7aee3ff09b76");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8abf3bd3bbf240ffadf435c6e53e866535dbefb8");
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.");
show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/logo:25090048:28876bab3a4a23b357c292fd9dc0f2857a1538d8",
                "EMMC:/dev/block/bootdevice/by-name/logo:15392768:2d2957f649f12b358e37bb342c22c47ed3d7557e",
                package_extract_file("patch/firmware-update/logo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/logo:15392768:2d2957f649f12b358e37bb342c22c47ed3d7557e");
