getprop("ro.product.device") == "px30_evb" || abort("E3004: This package is for \"px30_evb\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/103237:userdebug/test-keys");
ui_print("Target: rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/103809:userdebug/test-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/103237:userdebug/test-keys" ||
    getprop("ro.build.fingerprint") == "rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/103809:userdebug/test-keys" ||
    abort("E3001: Package expects build fingerprint of rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/103237:userdebug/test-keys or rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/103809:userdebug/test-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/by-name/boot:22267904:74d2fa43144d57d1d2f4c54853b8a30274aa9c41:22267904:abb3c3e24d215c26b26d13da0c6c03a85d1afead") || abort("E3005: \"EMMC:/dev/block/by-name/boot:22267904:74d2fa43144d57d1d2f4c54853b8a30274aa9c41:22267904:abb3c3e24d215c26b26d13da0c6c03a85d1afead\" has unexpected contents.");
apply_patch_space(54816768) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/by-name/system", "102,1,203,214,378,6262,6270,7852,7856,7864,7867,7889,7892,7906,7909,7926,7929,11983,11986,11996,12001,12109,12112,32768,32770,48376,48377,88259,88260,98304,98306,108163,108166,109484,109486,110247,110250,110539,110541,114819,114822,115088,115089,115091,115094,115393,115398,115413,115416,129256,129259,129288,129289,129293,129295,129306,129311,129941,129944,129999,130002,130013,130016,130027,130030,130126,130129,130267,130270,130341,130344,130353,130355,130364,130367,130477,130480,130492,130495,130564,130567,131072,131073,139317,163842,164030,175643,176834,178854,178904,188761,188785,192539,192840,229378,229566,294914,295102,383400,387072,390122,390129,393216") == "284dc06b57439cd2192b3892706057552940111e" || block_image_verify("/dev/block/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/by-name/system");
ifelse (block_image_recover("/dev/block/by-name/system", "102,1,203,214,378,6262,6270,7852,7856,7864,7867,7889,7892,7906,7909,7926,7929,11983,11986,11996,12001,12109,12112,32768,32770,48376,48377,88259,88260,98304,98306,108163,108166,109484,109486,110247,110250,110539,110541,114819,114822,115088,115089,115091,115094,115393,115398,115413,115416,129256,129259,129288,129289,129293,129295,129306,129311,129941,129944,129999,130002,130013,130016,130027,130030,130126,130129,130267,130270,130341,130344,130353,130355,130364,130367,130477,130480,130492,130495,130564,130567,131072,131073,139317,163842,164030,175643,176834,178854,178904,188761,188785,192539,192840,229378,229566,294914,295102,383400,387072,390122,390129,393216") && block_image_verify("/dev/block/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/by-name/vendor", "116,1,53,55,96,3079,3086,3087,3088,6628,6629,6894,6900,6982,6992,7279,7284,7520,7553,7659,7660,8863,8864,13771,13772,16098,16099,16145,16146,17231,17350,17356,17366,17375,17376,17852,17884,17963,17964,20353,20360,20435,20445,21034,21039,21253,21282,21372,21373,21758,22824,26088,28058,29370,30099,31220,32770,32817,32818,36913,36958,42106,42107,46911,46912,49132,49133,49188,49189,50200,50297,50304,50315,50325,50326,50786,50787,51017,51046,51081,51082,51248,51249,51254,51255,51453,51454,51656,51657,52049,52050,52394,52395,56951,56952,58528,58529,58946,58947,60820,60821,60822,60823,61218,61219,61519,61520,63355,63356,64458,64460,64462,93356,96760,97524,97531,98304") == "0d4d1a92a420c14bfe2c816da177035a66b4c816" || block_image_verify("/dev/block/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/by-name/vendor");
ifelse (block_image_recover("/dev/block/by-name/vendor", "116,1,53,55,96,3079,3086,3087,3088,6628,6629,6894,6900,6982,6992,7279,7284,7520,7553,7659,7660,8863,8864,13771,13772,16098,16099,16145,16146,17231,17350,17356,17366,17375,17376,17852,17884,17963,17964,20353,20360,20435,20445,21034,21039,21253,21282,21372,21373,21758,22824,26088,28058,29370,30099,31220,32770,32817,32818,36913,36958,42106,42107,46911,46912,49132,49133,49188,49189,50200,50297,50304,50315,50325,50326,50786,50787,51017,51046,51081,51082,51248,51249,51254,51255,51453,51454,51656,51657,52049,52050,52394,52395,56951,56952,58528,58529,58946,58947,60820,60821,60822,60823,61218,61219,61519,61520,63355,63356,64458,64460,64462,93356,96760,97524,97531,98304") && block_image_verify("/dev/block/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;
if (range_sha1("/dev/block/by-name/oem", "18,1,36,37,39,2053,2060,4968,4969,5029,12043,32768,32770,32801,32802,64504,65014,65021,65536") == "a372c6e24086765b1304577782965aff4725aed9" || block_image_verify("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat", "oem.patch.dat")) then
ui_print("Verified oem image...");
else
check_first_block("/dev/block/by-name/oem");
ifelse (block_image_recover("/dev/block/by-name/oem", "18,1,36,37,39,2053,2060,4968,4969,5029,12043,32768,32770,32801,32802,64504,65014,65021,65536") && block_image_verify("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat", "oem.patch.dat"), ui_print("oem recovered successfully."), abort("E2004: oem partition fails to recover"));
endif;

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

ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/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.");
show_progress(0.100000, 0);
block_image_update("/dev/block/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
ui_print("Patching oem image after verification.");
show_progress(0.100000, 0);
block_image_update("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat", "oem.patch.dat") ||
  abort("E2001: Failed to update oem image.");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/by-name/boot:22267904:74d2fa43144d57d1d2f4c54853b8a30274aa9c41:22267904:abb3c3e24d215c26b26d13da0c6c03a85d1afead",
            "-", abb3c3e24d215c26b26d13da0c6c03a85d1afead, 22267904,
            74d2fa43144d57d1d2f4c54853b8a30274aa9c41,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/by-name/boot:22267904:74d2fa43144d57d1d2f4c54853b8a30274aa9c41:22267904:abb3c3e24d215c26b26d13da0c6c03a85d1afead");
ui_print("Writing uboot loader img...");
package_extract_file("uboot.img", "/dev/block/by-name/uboot");
set_progress(1.000000);
