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/pine:10/QKQ1.191014.001/V11.0.3.0.QCMINXM:user/release-keys");
ui_print("Target: Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.1.0.QCMINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.3.0.QCMINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.1.0.QCMINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.3.0.QCMINXM:user/release-keys or Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.1.0.QCMINXM: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:d9658ff8e72e34f77cf7691c5f9772e77587ed00",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:cc197cb3510347711b28a158fde493b9b612d0ea") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:d9658ff8e72e34f77cf7691c5f9772e77587ed00\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:cc197cb3510347711b28a158fde493b9b612d0ea\" has unexpected contents.");
apply_patch_space(77189120) || 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:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:a0ab649598c14f8aff3916e85bca47063be98da8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:a0ab649598c14f8aff3916e85bca47063be98da8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:a0ab649598c14f8aff3916e85bca47063be98da8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:a0ab649598c14f8aff3916e85bca47063be98da8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:b8ba90887d011b5256067d7ea3e239d30c672d0c",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:fb217324ffdb6c515a0bb36639d98aeca9d2febf") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:b8ba90887d011b5256067d7ea3e239d30c672d0c\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:fb217324ffdb6c515a0bb36639d98aeca9d2febf\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b8ba90887d011b5256067d7ea3e239d30c672d0c",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:fb217324ffdb6c515a0bb36639d98aeca9d2febf") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b8ba90887d011b5256067d7ea3e239d30c672d0c\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:fb217324ffdb6c515a0bb36639d98aeca9d2febf\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:6204c40d28383ba7cf012309cac55991aebaa44a",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:423211a71476a49f15d0eef24f5a335f7c0163ab") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:6204c40d28383ba7cf012309cac55991aebaa44a\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:423211a71476a49f15d0eef24f5a335f7c0163ab\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:57e1f21b35d05746450bd67556e1c9dd52f8e4d7",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:29de3425d38075e0a3e4c34cbab0852203ed95d5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:57e1f21b35d05746450bd67556e1c9dd52f8e4d7\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:29de3425d38075e0a3e4c34cbab0852203ed95d5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:80dac94d9e6283269d517bf78cb178a344f88279",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:32c8f173c8ba8e549da3ceb29dad99f51ed51cad") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:80dac94d9e6283269d517bf78cb178a344f88279\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:32c8f173c8ba8e549da3ceb29dad99f51ed51cad\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:f3552448d34746db1c39032548b0421727295006",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:f3552448d34746db1c39032548b0421727295006\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:f3552448d34746db1c39032548b0421727295006",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:f3552448d34746db1c39032548b0421727295006\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                      "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900\" or \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:bbe45c74bd4b207edd39803d6982f1b875a21d70",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:577cd1e3bfb46467e426bda1dbed98d9290d9dea") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:bbe45c74bd4b207edd39803d6982f1b875a21d70\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:577cd1e3bfb46467e426bda1dbed98d9290d9dea\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fad7c71aca4995442c8feee2812c0729dd90936c",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4da22cba699dc87980db3840f2a4d54eae361f42") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fad7c71aca4995442c8feee2812c0729dd90936c\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4da22cba699dc87980db3840f2a4d54eae361f42\" 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", "270,1,553,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,2062,2168,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,3022,3107,3447,3615,3869,4153,6225,6319,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,22610,22611,22613,22615,22674,22675,22808,22810,22970,22974,22982,22983,22991,22995,23000,23001,23023,23027,23031,23032,27906,27923,27927,32770,32958,32959,33464,52094,52781,52783,52807,65537,66042,79197,79768,82169,82175,98306,98494,98495,99000,131073,131578,156011,156574,156576,156594,160968,160969,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,250887,250931,251620,251712,259131,259158,262145,262650,263072,263076,263087,263124,264575,264579,267889,267893,267929,267931,283478,283500,294914,295102,295103,295608,307148,314446,314706,314707,314784,317804,318078,318209,318359,318492,319309,319439,319589,319722,324852,325745,325746,326523,327681,328186,360449,360954,377276,377289,380983,381030,381044,381051,381072,381083,381084,381086,381093,381094,381098,381099,381103,381104,381111,381114,381140,381141,381148,381149,381152,381154,381163,381165,381178,381179,381194,381195,381252,381254,381257,381258,381299,381301,381324,381327,381336,381337,381351,381354,381387,381389,381400,381401,381422,381424,381430,381432,381769,381771,393217,393722,425985,426490,457323,457340,458753,459258,460683,460690,460733,460767,460802,461116,461129,461131,461132,461305,461318,461319,461334,461335,461352,461389,461391,461573,462222,462380,462409,462411,491521,492026,524289,524794,540931,540961,557057,557562,589825,590330,622593,623098,655361,655866,674984,674994,675000,753664,753665,774003,786268,786431,786432") == "c014ff863210b8aed7a6bbd8f8b283162c4b64e6" || 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", "270,1,553,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,2062,2168,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,3022,3107,3447,3615,3869,4153,6225,6319,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,22610,22611,22613,22615,22674,22675,22808,22810,22970,22974,22982,22983,22991,22995,23000,23001,23023,23027,23031,23032,27906,27923,27927,32770,32958,32959,33464,52094,52781,52783,52807,65537,66042,79197,79768,82169,82175,98306,98494,98495,99000,131073,131578,156011,156574,156576,156594,160968,160969,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,250887,250931,251620,251712,259131,259158,262145,262650,263072,263076,263087,263124,264575,264579,267889,267893,267929,267931,283478,283500,294914,295102,295103,295608,307148,314446,314706,314707,314784,317804,318078,318209,318359,318492,319309,319439,319589,319722,324852,325745,325746,326523,327681,328186,360449,360954,377276,377289,380983,381030,381044,381051,381072,381083,381084,381086,381093,381094,381098,381099,381103,381104,381111,381114,381140,381141,381148,381149,381152,381154,381163,381165,381178,381179,381194,381195,381252,381254,381257,381258,381299,381301,381324,381327,381336,381337,381351,381354,381387,381389,381400,381401,381422,381424,381430,381432,381769,381771,393217,393722,425985,426490,457323,457340,458753,459258,460683,460690,460733,460767,460802,461116,461129,461131,461132,461305,461318,461319,461334,461335,461352,461389,461391,461573,462222,462380,462409,462411,491521,492026,524289,524794,540931,540961,557057,557562,589825,590330,622593,623098,655361,655866,674984,674994,675000,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", "48,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,28448,31300,32770,32832,32833,33338,65537,66042,72144,72753,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,220320,220585,227594,229376,229378,229440,229441,257987,262077,262143,262144") == "b53335f6484ec9997e55a4117f28b573f6385d39" || 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", "48,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,28448,31300,32770,32832,32833,33338,65537,66042,72144,72753,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,220320,220585,227594,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:d9658ff8e72e34f77cf7691c5f9772e77587ed00",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:cc197cb3510347711b28a158fde493b9b612d0ea",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:cc197cb3510347711b28a158fde493b9b612d0ea");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:a0ab649598c14f8aff3916e85bca47063be98da8",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:a0ab649598c14f8aff3916e85bca47063be98da8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:b8ba90887d011b5256067d7ea3e239d30c672d0c",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:fb217324ffdb6c515a0bb36639d98aeca9d2febf",
                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:fb217324ffdb6c515a0bb36639d98aeca9d2febf");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:6204c40d28383ba7cf012309cac55991aebaa44a",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:423211a71476a49f15d0eef24f5a335f7c0163ab",
                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:423211a71476a49f15d0eef24f5a335f7c0163ab");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:57e1f21b35d05746450bd67556e1c9dd52f8e4d7",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:29de3425d38075e0a3e4c34cbab0852203ed95d5",
                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:29de3425d38075e0a3e4c34cbab0852203ed95d5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:80dac94d9e6283269d517bf78cb178a344f88279",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:32c8f173c8ba8e549da3ceb29dad99f51ed51cad",
                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:32c8f173c8ba8e549da3ceb29dad99f51ed51cad");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:f3552448d34746db1c39032548b0421727295006",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991",
                package_extract_file("patch/firmware-update/adspso.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ad96b029c1b236a5e4ff49f286a4ec3e733a057d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:a0ab649598c14f8aff3916e85bca47063be98da8",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:a0ab649598c14f8aff3916e85bca47063be98da8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b8ba90887d011b5256067d7ea3e239d30c672d0c",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:fb217324ffdb6c515a0bb36639d98aeca9d2febf",
                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:fb217324ffdb6c515a0bb36639d98aeca9d2febf");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2a354bd0ae57ee147508b0d197b7109ad085f8a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:f3552448d34746db1c39032548b0421727295006",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:9498e74a5215fd93d994a63a889e1088ccbd4096");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:67a0031da2f3fe588f8b25c7c33e416565efe44a");
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:bbe45c74bd4b207edd39803d6982f1b875a21d70",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:577cd1e3bfb46467e426bda1dbed98d9290d9dea",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:577cd1e3bfb46467e426bda1dbed98d9290d9dea");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fad7c71aca4995442c8feee2812c0729dd90936c",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4da22cba699dc87980db3840f2a4d54eae361f42",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4da22cba699dc87980db3840f2a4d54eae361f42");
