getprop("ro.product.device") == "pine" || abort("E3004: This package is for \"pine\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.4.0.QCMEUXM:user/release-keys");
ui_print("Target: Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.5.0.QCMEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.4.0.QCMEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.5.0.QCMEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.4.0.QCMEUXM:user/release-keys or Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.5.0.QCMEUXM: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:33554432:0aaaef21bfbdd4108a858462d83412a9083c2801",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:94d11025147ef40818c81d238376f0430b3b7b9e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:0aaaef21bfbdd4108a858462d83412a9083c2801\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:94d11025147ef40818c81d238376f0430b3b7b9e\" has unexpected contents.");
apply_patch_space(41660416) || 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/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:975428e3b56cac562f99930b610c9e05e991617c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:975428e3b56cac562f99930b610c9e05e991617c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:975428e3b56cac562f99930b610c9e05e991617c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:975428e3b56cac562f99930b610c9e05e991617c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:07d88f5f5d246755252ea9710d55faeaf1f3766c",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:8edacb57126d17a8750d9073439cc39dcc606b27") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:07d88f5f5d246755252ea9710d55faeaf1f3766c\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:8edacb57126d17a8750d9073439cc39dcc606b27\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:07d88f5f5d246755252ea9710d55faeaf1f3766c",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:8edacb57126d17a8750d9073439cc39dcc606b27") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:07d88f5f5d246755252ea9710d55faeaf1f3766c\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:8edacb57126d17a8750d9073439cc39dcc606b27\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b0a99cc37100459b9b5253c3d0f2c7e0facffe77") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b0a99cc37100459b9b5253c3d0f2c7e0facffe77\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0723b629c06f9c6f132aec3c25769454ee575e90") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0723b629c06f9c6f132aec3c25769454ee575e90\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0723b629c06f9c6f132aec3c25769454ee575e90") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0723b629c06f9c6f132aec3c25769454ee575e90\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:798b85955f4003958a9b92f7112faabd8612370a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:798b85955f4003958a9b92f7112faabd8612370a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:f8976d04d8f6da05a6d7a369156ca0af3b3a981c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:f8976d04d8f6da05a6d7a369156ca0af3b3a981c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:292631cde27afede11a32ca30fea10d113a4c3be",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c51c13b5ea54c4b60ccbba08b7bb56eb94e15732") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:292631cde27afede11a32ca30fea10d113a4c3be\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c51c13b5ea54c4b60ccbba08b7bb56eb94e15732\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:262ea786c6c036eee807fd4755bffeb8515daff5",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:e1c0b077fb881925ef2672abdb3886251e0e4aae") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:262ea786c6c036eee807fd4755bffeb8515daff5\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:e1c0b077fb881925ef2672abdb3886251e0e4aae\" has unexpected contents.");
apply_patch_space(134217728) || 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", "182,1,554,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1719,1725,1748,1881,2038,2516,2539,2541,2542,2545,2546,2554,2555,2556,2557,3447,3615,3869,4153,4523,4644,6416,6438,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,17603,19073,22610,22611,22613,22615,22674,22675,22808,22810,22970,22974,22982,22983,22991,22995,23000,23001,23023,23027,23031,23032,27906,27907,27919,27923,27927,29176,29182,29186,29190,29191,29196,29200,29204,29205,29319,29325,29330,29331,31502,31506,31535,31536,31566,31570,31574,31575,31672,31676,31680,32770,32958,32959,33464,65537,66042,98306,98494,98495,99000,131073,131578,160785,160791,160792,161355,161357,161375,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,267916,267983,294914,295102,295103,295608,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,572804,572834,589825,590330,622593,623098,655361,655866,688129,688634,706658,753664,753665,774003,786268,786431,786432") == "08429f2533f6ea39fc774dc3ec620298b4435bfa" || 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", "182,1,554,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1719,1725,1748,1881,2038,2516,2539,2541,2542,2545,2546,2554,2555,2556,2557,3447,3615,3869,4153,4523,4644,6416,6438,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,17603,19073,22610,22611,22613,22615,22674,22675,22808,22810,22970,22974,22982,22983,22991,22995,23000,23001,23023,23027,23031,23032,27906,27907,27919,27923,27927,29176,29182,29186,29190,29191,29196,29200,29204,29205,29319,29325,29330,29331,31502,31506,31535,31536,31566,31570,31574,31575,31672,31676,31680,32770,32958,32959,33464,65537,66042,98306,98494,98495,99000,131073,131578,160785,160791,160792,161355,161357,161375,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,267916,267983,294914,295102,295103,295608,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,572804,572834,589825,590330,622593,623098,655361,655866,688129,688634,706658,753664,753665,774003,786268,786431,786432") && 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", "172,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,1186,1194,1202,1208,1220,1224,1228,1229,1232,1236,1240,1241,1814,1815,2842,2908,3728,3729,3910,3911,4297,4298,4930,4931,5667,5672,13013,13014,17278,17279,20131,20132,24106,24107,32768,32770,32832,32833,37352,37353,42109,42110,43132,43134,43154,43156,43475,43476,43802,43803,44097,44098,44406,44407,44689,44690,44984,44985,45356,45357,45431,45432,48861,48862,49072,49073,49128,49131,49149,49150,49195,49196,49214,49216,49265,49266,49297,49298,50185,50186,50199,50200,50208,50209,50230,50231,50329,50330,50604,50605,50621,50622,50769,50770,50772,50773,51339,51340,51416,51417,51418,51419,51431,51433,52699,52700,53837,53839,54260,54261,54535,54536,54960,54961,55014,55019,55135,55139,55980,55981,56054,56666,56889,56890,58445,58772,59012,59305,60024,60469,61078,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,209153,209418,216427,229376,229378,229440,229441,257987,262077,262143,262144") == "f0619dc9420866677a1c367e2a7b18327d9fd32b" || 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", "172,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,1186,1194,1202,1208,1220,1224,1228,1229,1232,1236,1240,1241,1814,1815,2842,2908,3728,3729,3910,3911,4297,4298,4930,4931,5667,5672,13013,13014,17278,17279,20131,20132,24106,24107,32768,32770,32832,32833,37352,37353,42109,42110,43132,43134,43154,43156,43475,43476,43802,43803,44097,44098,44406,44407,44689,44690,44984,44985,45356,45357,45431,45432,48861,48862,49072,49073,49128,49131,49149,49150,49195,49196,49214,49216,49265,49266,49297,49298,50185,50186,50199,50200,50208,50209,50230,50231,50329,50330,50604,50605,50621,50622,50769,50770,50772,50773,51339,51340,51416,51417,51418,51419,51431,51433,52699,52700,53837,53839,54260,54261,54535,54536,54960,54961,55014,55019,55135,55139,55980,55981,56054,56666,56889,56890,58445,58772,59012,59305,60024,60469,61078,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,209153,209418,216427,229376,229378,229440,229441,257987,262077,262143,262144") && 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);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:0aaaef21bfbdd4108a858462d83412a9083c2801",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:94d11025147ef40818c81d238376f0430b3b7b9e",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:94d11025147ef40818c81d238376f0430b3b7b9e");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:975428e3b56cac562f99930b610c9e05e991617c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:975428e3b56cac562f99930b610c9e05e991617c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:07d88f5f5d246755252ea9710d55faeaf1f3766c",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:8edacb57126d17a8750d9073439cc39dcc606b27",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:774108:8edacb57126d17a8750d9073439cc39dcc606b27");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b0a99cc37100459b9b5253c3d0f2c7e0facffe77",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b0a99cc37100459b9b5253c3d0f2c7e0facffe77");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0723b629c06f9c6f132aec3c25769454ee575e90",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0723b629c06f9c6f132aec3c25769454ee575e90");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:798b85955f4003958a9b92f7112faabd8612370a",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:798b85955f4003958a9b92f7112faabd8612370a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:f8976d04d8f6da05a6d7a369156ca0af3b3a981c",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:f8976d04d8f6da05a6d7a369156ca0af3b3a981c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:975428e3b56cac562f99930b610c9e05e991617c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:975428e3b56cac562f99930b610c9e05e991617c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:27872e780f3a598f2e7c2a5959c133c9a11198b1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:07d88f5f5d246755252ea9710d55faeaf1f3766c",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:8edacb57126d17a8750d9073439cc39dcc606b27",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:774108:8edacb57126d17a8750d9073439cc39dcc606b27");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0723b629c06f9c6f132aec3c25769454ee575e90",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0723b629c06f9c6f132aec3c25769454ee575e90");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e26ac53108bf6cfa908a88fe75c456a31f7c0ba3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1332b1f2261daa5b0262f11b4e69cd71ac63cb0e");
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...");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:292631cde27afede11a32ca30fea10d113a4c3be",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c51c13b5ea54c4b60ccbba08b7bb56eb94e15732",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c51c13b5ea54c4b60ccbba08b7bb56eb94e15732");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:262ea786c6c036eee807fd4755bffeb8515daff5",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:e1c0b077fb881925ef2672abdb3886251e0e4aae",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:e1c0b077fb881925ef2672abdb3886251e0e4aae");
