getprop("ro.product.device") == "olivelite" || abort("E3004: This package is for \"olivelite\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.1.0.QCPCNXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.2.0.QCPCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.1.0.QCPCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.2.0.QCPCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.1.0.QCPCNXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.2.0.QCPCNXM: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:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:0ba34984d7022974bf34e869078d04f00d5e1dbe") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:0ba34984d7022974bf34e869078d04f00d5e1dbe\" has unexpected contents.");
apply_patch_space(149340160) || 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:3c040cb89cedbf73aa067ea19b182ce7c41e6929",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:51db13473a61335fcb02300ad085976a0f615ed0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:51db13473a61335fcb02300ad085976a0f615ed0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cd5321855ad1dca487dd58b5fa609f0eb833b78d",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5ebac7db1bff68d18a413e9bdbbbabb9189da477") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cd5321855ad1dca487dd58b5fa609f0eb833b78d\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5ebac7db1bff68d18a413e9bdbbbabb9189da477\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a2cacce38e245bec6ca937893fa4c7b7f15fded6",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:382c18d01156886ea305148829247a23fc494e1a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a2cacce38e245bec6ca937893fa4c7b7f15fded6\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:382c18d01156886ea305148829247a23fc494e1a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:ac23094bdd6d61253ca5a49f66756e87a018e8c6",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:5db7259f056c5eed39094f436c73a75828e428f1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:ac23094bdd6d61253ca5a49f66756e87a018e8c6\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:5db7259f056c5eed39094f436c73a75828e428f1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b27d7514aeccb5b979c17a62dcdee9ac13576142",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:98be2e8e5aef9ada48e97cb250e85a1149a36fc7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b27d7514aeccb5b979c17a62dcdee9ac13576142\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:98be2e8e5aef9ada48e97cb250e85a1149a36fc7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:28edaf6d90ad8d003538d7a76953f93ec4cbdf66") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:28edaf6d90ad8d003538d7a76953f93ec4cbdf66\" 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", "74,1,585,759,773,803,810,830,32770,33021,33022,33527,65537,66042,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,262145,262650,294914,295165,295166,295671,295695,310034,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,472686,472690,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,703595,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "c95d6be7b95961620016e57edd1409abbe8626f8" || 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", "74,1,585,759,773,803,810,830,32770,33021,33022,33527,65537,66042,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,262145,262650,294914,295165,295166,295671,295695,310034,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,472686,472690,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,703595,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") && 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", "418,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,967,968,1192,1200,1208,1214,1217,1221,1225,1226,1799,1800,2247,2714,3707,3708,3846,3890,4277,4278,4910,4911,5647,5652,8831,8832,30475,30476,31962,31963,32768,32770,32832,32833,40571,40576,50499,50501,50521,50523,50842,50843,51169,51170,51464,51465,51773,51774,52056,52057,52351,52352,52728,52729,52803,52804,56219,56220,56412,56413,56501,56504,56522,56523,56568,56569,56587,56589,56638,56639,56670,56671,57558,57559,57572,57573,57603,57604,57702,57703,57986,57987,58003,58004,58100,58101,58103,58104,58670,58671,58746,58747,58748,58749,58752,58753,58761,58763,60029,60030,61167,61169,61590,61591,61865,61866,62290,62291,62489,62493,63334,63335,64243,64244,65032,65364,65536,65537,73728,73729,74715,74716,84467,84468,85946,85947,87610,87612,89272,89273,91048,91049,92711,92712,94436,94437,96130,96131,97345,97346,98304,98306,98368,98369,99242,99243,100564,100565,101791,101792,103115,103116,104502,104503,105795,105796,107098,107099,108453,108454,109748,109749,111005,111006,112241,112242,113594,113595,114777,114778,116130,116131,117369,117370,118179,118180,118204,118205,118229,118230,118486,118487,118511,118512,118536,118537,118561,118562,118586,118587,118687,118688,118929,118930,118954,118955,119092,119093,119117,119118,119142,119143,119752,119753,119777,119778,119802,119803,120015,120016,120060,120061,120085,120086,120110,120111,120135,120136,120160,120161,120502,120503,120527,120528,120665,120666,120690,120691,120715,120716,121352,121353,122554,122555,123874,123875,124065,124066,124090,124091,124115,124116,125157,125158,126451,126452,127604,127605,128852,128853,130069,130070,131072,131073,131766,131767,133017,133018,134231,134232,135380,135381,136521,136522,137666,137667,138816,138817,139282,139283,139307,139308,139332,139333,139589,139590,139614,139615,139639,139640,139664,139665,139689,139690,140031,140032,140056,140057,140100,140101,140195,140196,140220,140221,140245,140246,140855,140856,140880,140881,140905,140906,141162,141163,141187,141188,141212,141213,141237,141238,141262,141263,141315,141316,141605,141606,141630,141631,141768,141769,141793,141794,141818,141819,142531,142532,142770,142771,142795,142796,142820,142821,143684,143685,145437,145438,147159,147160,148900,148901,149123,149124,149148,149149,149173,149174,149198,149199,149223,149224,149565,149566,149590,149591,150649,150650,152139,152140,153504,153505,154850,154851,156128,156129,157487,157488,158828,158829,160085,160086,161402,161403,163114,163115,163840,163842,163904,163905,165400,165401,168638,168798,178187,178188,183202,183418,183524,183562,183747,196609,197114,222936,229376,229378,229440,229441,257987,262077,262143,262144") == "179c4f1c56397b951936c14517762bdfe454a984" || 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", "418,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,967,968,1192,1200,1208,1214,1217,1221,1225,1226,1799,1800,2247,2714,3707,3708,3846,3890,4277,4278,4910,4911,5647,5652,8831,8832,30475,30476,31962,31963,32768,32770,32832,32833,40571,40576,50499,50501,50521,50523,50842,50843,51169,51170,51464,51465,51773,51774,52056,52057,52351,52352,52728,52729,52803,52804,56219,56220,56412,56413,56501,56504,56522,56523,56568,56569,56587,56589,56638,56639,56670,56671,57558,57559,57572,57573,57603,57604,57702,57703,57986,57987,58003,58004,58100,58101,58103,58104,58670,58671,58746,58747,58748,58749,58752,58753,58761,58763,60029,60030,61167,61169,61590,61591,61865,61866,62290,62291,62489,62493,63334,63335,64243,64244,65032,65364,65536,65537,73728,73729,74715,74716,84467,84468,85946,85947,87610,87612,89272,89273,91048,91049,92711,92712,94436,94437,96130,96131,97345,97346,98304,98306,98368,98369,99242,99243,100564,100565,101791,101792,103115,103116,104502,104503,105795,105796,107098,107099,108453,108454,109748,109749,111005,111006,112241,112242,113594,113595,114777,114778,116130,116131,117369,117370,118179,118180,118204,118205,118229,118230,118486,118487,118511,118512,118536,118537,118561,118562,118586,118587,118687,118688,118929,118930,118954,118955,119092,119093,119117,119118,119142,119143,119752,119753,119777,119778,119802,119803,120015,120016,120060,120061,120085,120086,120110,120111,120135,120136,120160,120161,120502,120503,120527,120528,120665,120666,120690,120691,120715,120716,121352,121353,122554,122555,123874,123875,124065,124066,124090,124091,124115,124116,125157,125158,126451,126452,127604,127605,128852,128853,130069,130070,131072,131073,131766,131767,133017,133018,134231,134232,135380,135381,136521,136522,137666,137667,138816,138817,139282,139283,139307,139308,139332,139333,139589,139590,139614,139615,139639,139640,139664,139665,139689,139690,140031,140032,140056,140057,140100,140101,140195,140196,140220,140221,140245,140246,140855,140856,140880,140881,140905,140906,141162,141163,141187,141188,141212,141213,141237,141238,141262,141263,141315,141316,141605,141606,141630,141631,141768,141769,141793,141794,141818,141819,142531,142532,142770,142771,142795,142796,142820,142821,143684,143685,145437,145438,147159,147160,148900,148901,149123,149124,149148,149149,149173,149174,149198,149199,149223,149224,149565,149566,149590,149591,150649,150650,152139,152140,153504,153505,154850,154851,156128,156129,157487,157488,158828,158829,160085,160086,161402,161403,163114,163115,163840,163842,163904,163905,165400,165401,168638,168798,178187,178188,183202,183418,183524,183562,183747,196609,197114,222936,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:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:0ba34984d7022974bf34e869078d04f00d5e1dbe",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:0ba34984d7022974bf34e869078d04f00d5e1dbe");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:51db13473a61335fcb02300ad085976a0f615ed0",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:51db13473a61335fcb02300ad085976a0f615ed0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cd5321855ad1dca487dd58b5fa609f0eb833b78d",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5ebac7db1bff68d18a413e9bdbbbabb9189da477",
                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:5ebac7db1bff68d18a413e9bdbbbabb9189da477");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a2cacce38e245bec6ca937893fa4c7b7f15fded6",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:382c18d01156886ea305148829247a23fc494e1a",
                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:382c18d01156886ea305148829247a23fc494e1a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:ac23094bdd6d61253ca5a49f66756e87a018e8c6",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:5db7259f056c5eed39094f436c73a75828e428f1",
                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:5db7259f056c5eed39094f436c73a75828e428f1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779468:b2ff12895d6a883e378a711cfdbc37175a51ce9f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69");
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:b27d7514aeccb5b979c17a62dcdee9ac13576142",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:98be2e8e5aef9ada48e97cb250e85a1149a36fc7",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:98be2e8e5aef9ada48e97cb250e85a1149a36fc7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:28edaf6d90ad8d003538d7a76953f93ec4cbdf66",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:28edaf6d90ad8d003538d7a76953f93ec4cbdf66");
