getprop("ro.product.device") == "davinci" || abort("E3004: This package is for \"davinci\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/davinci/davinci:10/QKQ1.190825.002/V11.0.5.0.QFJMIXM:user/release-keys");
ui_print("Target: Xiaomi/davinci/davinci:10/QKQ1.190825.002/V11.0.6.0.QFJMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/davinci/davinci:10/QKQ1.190825.002/V11.0.5.0.QFJMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/davinci/davinci:10/QKQ1.190825.002/V11.0.6.0.QFJMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/davinci/davinci:10/QKQ1.190825.002/V11.0.5.0.QFJMIXM:user/release-keys or Xiaomi/davinci/davinci:10/QKQ1.190825.002/V11.0.6.0.QFJMIXM: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:134217728:f4861aa402208a553a1a1ece5fac7001e451617f",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:8e268c5e2af7f013566939090f3ea559e666ee69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:f4861aa402208a553a1a1ece5fac7001e451617f\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:8e268c5e2af7f013566939090f3ea559e666ee69\" 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", "496,1,578,728,742,774,781,783,784,1030,1035,1037,1038,1144,1145,1630,1631,2319,2320,2322,2324,2325,2326,2341,2342,2523,2524,3693,3694,3696,3697,3701,3702,3710,3711,3712,3713,9070,9071,9073,9074,9478,9479,9481,9482,10479,10481,16420,16421,16554,16555,19324,19326,25656,25658,32768,32770,32990,32991,34823,34824,34826,34828,34887,34888,35021,35023,35076,35077,35083,35084,35294,35295,35307,35308,35921,35924,35930,35931,35936,35937,36054,36057,37114,37115,39326,39327,39357,39358,39503,39504,39601,41014,42226,42227,42240,42241,42246,42247,42249,42250,44426,44427,44797,44798,44864,44867,44954,44955,45146,45147,47729,47730,47733,47734,48036,48037,51728,51729,51890,51891,52295,52296,52980,52981,52985,52986,53008,53009,54600,54601,54654,54655,54691,54692,59335,59337,63940,63941,64128,64129,65431,65432,65536,65537,66075,66076,66108,66109,66559,66560,67242,67243,68472,68473,68648,68649,71446,71447,73580,73581,74066,74067,79568,79569,81521,81522,81548,81549,81620,81621,81643,81646,84100,84101,85496,85497,85870,85871,86017,86018,86369,86370,98304,98306,98526,98527,100572,100573,100781,100784,100794,100795,103082,103083,103299,103300,103351,103352,103355,103358,103363,103364,105221,105222,105305,105306,105308,105309,105330,105331,105762,105765,106130,106133,106299,106300,107630,107633,107672,107673,109114,109115,109165,109166,109516,109517,109538,109539,109610,109611,110225,110226,113802,113803,113808,113809,113911,113912,115378,115379,116365,116368,116816,116817,116821,116822,116830,116831,116835,116836,116847,116848,116871,116872,118468,118469,118603,118604,118876,118879,118882,118883,119801,119802,120469,120470,120736,120739,122560,122561,122885,122886,125299,125300,125312,125313,125648,125649,127229,127238,127554,127555,127988,127989,128852,128963,129731,129732,131072,131073,132760,132765,132771,132772,133083,133084,133096,133097,133106,133109,133110,133111,133112,133113,133115,133116,133117,133118,133154,133155,133161,133162,133248,133251,133253,133254,134361,134362,134602,134603,134605,134606,134629,134630,134698,134699,134702,134707,134708,134709,134710,134711,134712,134713,135492,135493,135499,135500,135963,135965,136428,136430,136431,136432,136433,136434,136435,136436,136437,136438,136439,136440,136441,136442,136444,136445,136446,136449,137116,137118,137119,137120,137203,137204,137206,137207,137210,137212,137470,137471,137478,137480,137966,137968,138090,138091,138102,138103,138369,138370,138483,138484,138500,138502,138504,138505,147427,147428,155434,155435,157301,157302,157579,157668,158854,159107,160429,163842,164062,164063,164568,175000,175225,175266,175273,177373,179970,180072,180134,180135,181474,181787,183356,196609,197114,200476,200748,200794,200801,203371,206401,206411,207466,207467,217399,224861,225166,225615,225650,225923,225937,225941,225945,225946,225950,225953,225958,225959,225963,225965,225980,225981,225986,229378,229598,229599,230104,262145,262650,294914,295134,295135,295640,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819422,819423,819928,847125,884736,884738,884958,884959,903007,917316,917503,917504") == "52f1c662250900ca03a3bb42d9bc09dadbae66aa" || 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", "496,1,578,728,742,774,781,783,784,1030,1035,1037,1038,1144,1145,1630,1631,2319,2320,2322,2324,2325,2326,2341,2342,2523,2524,3693,3694,3696,3697,3701,3702,3710,3711,3712,3713,9070,9071,9073,9074,9478,9479,9481,9482,10479,10481,16420,16421,16554,16555,19324,19326,25656,25658,32768,32770,32990,32991,34823,34824,34826,34828,34887,34888,35021,35023,35076,35077,35083,35084,35294,35295,35307,35308,35921,35924,35930,35931,35936,35937,36054,36057,37114,37115,39326,39327,39357,39358,39503,39504,39601,41014,42226,42227,42240,42241,42246,42247,42249,42250,44426,44427,44797,44798,44864,44867,44954,44955,45146,45147,47729,47730,47733,47734,48036,48037,51728,51729,51890,51891,52295,52296,52980,52981,52985,52986,53008,53009,54600,54601,54654,54655,54691,54692,59335,59337,63940,63941,64128,64129,65431,65432,65536,65537,66075,66076,66108,66109,66559,66560,67242,67243,68472,68473,68648,68649,71446,71447,73580,73581,74066,74067,79568,79569,81521,81522,81548,81549,81620,81621,81643,81646,84100,84101,85496,85497,85870,85871,86017,86018,86369,86370,98304,98306,98526,98527,100572,100573,100781,100784,100794,100795,103082,103083,103299,103300,103351,103352,103355,103358,103363,103364,105221,105222,105305,105306,105308,105309,105330,105331,105762,105765,106130,106133,106299,106300,107630,107633,107672,107673,109114,109115,109165,109166,109516,109517,109538,109539,109610,109611,110225,110226,113802,113803,113808,113809,113911,113912,115378,115379,116365,116368,116816,116817,116821,116822,116830,116831,116835,116836,116847,116848,116871,116872,118468,118469,118603,118604,118876,118879,118882,118883,119801,119802,120469,120470,120736,120739,122560,122561,122885,122886,125299,125300,125312,125313,125648,125649,127229,127238,127554,127555,127988,127989,128852,128963,129731,129732,131072,131073,132760,132765,132771,132772,133083,133084,133096,133097,133106,133109,133110,133111,133112,133113,133115,133116,133117,133118,133154,133155,133161,133162,133248,133251,133253,133254,134361,134362,134602,134603,134605,134606,134629,134630,134698,134699,134702,134707,134708,134709,134710,134711,134712,134713,135492,135493,135499,135500,135963,135965,136428,136430,136431,136432,136433,136434,136435,136436,136437,136438,136439,136440,136441,136442,136444,136445,136446,136449,137116,137118,137119,137120,137203,137204,137206,137207,137210,137212,137470,137471,137478,137480,137966,137968,138090,138091,138102,138103,138369,138370,138483,138484,138500,138502,138504,138505,147427,147428,155434,155435,157301,157302,157579,157668,158854,159107,160429,163842,164062,164063,164568,175000,175225,175266,175273,177373,179970,180072,180134,180135,181474,181787,183356,196609,197114,200476,200748,200794,200801,203371,206401,206411,207466,207467,217399,224861,225166,225615,225650,225923,225937,225941,225945,225946,225950,225953,225958,225959,225963,225965,225980,225981,225986,229378,229598,229599,230104,262145,262650,294914,295134,295135,295640,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819422,819423,819928,847125,884736,884738,884958,884959,903007,917316,917503,917504") && block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1("/dev/block/bootdevice/by-name/vendor", "114,1,271,602,610,620,621,702,703,2409,2410,2474,2485,2723,2724,2729,2730,2732,2733,3241,3242,3250,3251,3729,3779,3798,4103,4180,4181,4233,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,155858,156000,156043,156105,157259,157614,157626,157827,157955,158694,158695,159672,159673,160507,162054,163840,163842,163936,163937,172163,172164,188358,188568,189459,189460,193204,193226,196608,196609,198570,198571,199521,199561,200458,200459,200481,200482,201165,204059,204063,207386,207403,207405,209347,209348,211860,211862,213721,213722,213814,213815,214008,214024,214463,229378,229472,229473,229978,262145,262650,294914,295008,295009,295514,327681,328186,360449,360954,366089,386991,393125,393215,393216") == "50947b42d5768ced9426d1a168ab46a6cbfe7438" || 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", "114,1,271,602,610,620,621,702,703,2409,2410,2474,2485,2723,2724,2729,2730,2732,2733,3241,3242,3250,3251,3729,3779,3798,4103,4180,4181,4233,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,155858,156000,156043,156105,157259,157614,157626,157827,157955,158694,158695,159672,159673,160507,162054,163840,163842,163936,163937,172163,172164,188358,188568,189459,189460,193204,193226,196608,196609,198570,198571,199521,199561,200458,200459,200481,200482,201165,204059,204063,207386,207403,207405,209347,209348,211860,211862,213721,213722,213814,213815,214008,214024,214463,229378,229472,229473,229978,262145,262650,294914,295008,295009,295514,327681,328186,360449,360954,366089,386991,393125,393215,393216") && block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:134217728:f4861aa402208a553a1a1ece5fac7001e451617f",
                "EMMC:/dev/block/bootdevice/by-name/boot:134217728:8e268c5e2af7f013566939090f3ea559e666ee69",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:134217728:8e268c5e2af7f013566939090f3ea559e666ee69");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

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

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