getprop("ro.product.device") == "Hi3798MV200" || abort("E3004: This package is for \"Hi3798MV200\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: HiSTBAndroid/Hi3798MV200/Hi3798MV200:9/PPR1.180610.011/15:user/release-keys");
ui_print("Target: HiSTBAndroid/Hi3798MV200/Hi3798MV200:9/PPR1.180610.011/jenkin.20200725:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "HiSTBAndroid/Hi3798MV200/Hi3798MV200:9/PPR1.180610.011/15:user/release-keys" ||
    getprop("ro.build.fingerprint") == "HiSTBAndroid/Hi3798MV200/Hi3798MV200:9/PPR1.180610.011/jenkin.20200725:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of HiSTBAndroid/Hi3798MV200/Hi3798MV200:9/PPR1.180610.011/15:user/release-keys or HiSTBAndroid/Hi3798MV200/Hi3798MV200:9/PPR1.180610.011/jenkin.20200725:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/boot:62914560:3831d8fa90cd12cf32755175d9a45164bbe67023:62914560:7acd785e8887406ca4eadce08e52ed7869d06260") || abort("E3005: \"EMMC:/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/boot:62914560:3831d8fa90cd12cf32755175d9a45164bbe67023:62914560:7acd785e8887406ca4eadce08e52ed7869d06260\" has unexpected contents.");
apply_patch_space(62914560) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/system", "108,1,112,119,121,134,296,6840,6847,6849,6850,6858,6863,6865,6866,6868,6869,6870,6871,7110,7114,7274,7275,17629,17630,25771,25772,25903,25905,26281,26283,26292,26293,26296,26297,26428,26429,32307,32308,32327,32328,32332,32333,32373,32374,32768,32770,33479,33482,33931,33932,35417,35418,35459,35460,35831,35832,39142,40586,44030,44498,44884,44885,45929,45930,56982,56983,61159,61160,61528,61529,62883,62884,68125,68126,74580,74581,75064,75065,75224,75225,79793,81255,82632,82633,82890,83204,83776,83777,83781,83782,86561,86562,87357,98306,98410,128746,129653,163842,163946,182191,229376,229378,294912,294914,428312,435102,435199,435200") == "b24a5724235b2690f892afc78aa1948f4afcd908" || block_image_verify("/dev/block/platform/soc/f9830000.himciv200.MMC/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/platform/soc/f9830000.himciv200.MMC/by-name/system");
ifelse (block_image_recover("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/system", "108,1,112,119,121,134,296,6840,6847,6849,6850,6858,6863,6865,6866,6868,6869,6870,6871,7110,7114,7274,7275,17629,17630,25771,25772,25903,25905,26281,26283,26292,26293,26296,26297,26428,26429,32307,32308,32327,32328,32332,32333,32373,32374,32768,32770,33479,33482,33931,33932,35417,35418,35459,35460,35831,35832,39142,40586,44030,44498,44884,44885,45929,45930,56982,56983,61159,61160,61528,61529,62883,62884,68125,68126,74580,74581,75064,75065,75224,75225,79793,81255,82632,82633,82890,83204,83776,83777,83781,83782,86561,86562,87357,98306,98410,128746,129653,163842,163946,182191,229376,229378,294912,294914,428312,435102,435199,435200") && block_image_verify("/dev/block/platform/soc/f9830000.himciv200.MMC/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/platform/soc/f9830000.himciv200.MMC/by-name/vendor", "82,1,27,29,31,34,54,3186,3193,3200,3201,3212,3214,3216,3217,3218,3219,3220,3221,3604,3608,3609,3610,3623,3624,3632,3633,3641,3642,3665,3667,4484,4485,6435,6436,6533,6534,6840,6842,6846,6847,6852,6853,6854,6855,7705,7726,8160,8161,8948,8949,9180,9181,9409,9410,10244,10245,13126,13127,13702,13703,13924,14773,14934,14940,15062,15063,16127,16129,16135,16136,16141,16142,16147,16751,32768,32770,98304,98306,100764,102365,102399,102400") == "1de7796cd3c4415d60cea71c22db11cdf31dc9b7" || block_image_verify("/dev/block/platform/soc/f9830000.himciv200.MMC/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/platform/soc/f9830000.himciv200.MMC/by-name/vendor");
ifelse (block_image_recover("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/vendor", "82,1,27,29,31,34,54,3186,3193,3200,3201,3212,3214,3216,3217,3218,3219,3220,3221,3604,3608,3609,3610,3623,3624,3632,3633,3641,3642,3665,3667,4484,4485,6435,6436,6533,6534,6840,6842,6846,6847,6852,6853,6854,6855,7705,7726,8160,8161,8948,8949,9180,9181,9409,9410,10244,10245,13126,13127,13702,13703,13924,14773,14934,14940,15062,15063,16127,16129,16135,16136,16141,16142,16147,16751,32768,32770,98304,98306,100764,102365,102399,102400") && block_image_verify("/dev/block/platform/soc/f9830000.himciv200.MMC/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 ----

if (get_stage("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/misc") == "" ) then
ui_print("update recovery... stage: 1/2......");
ui_print("update recoverybak and bootargsbak......");
if (get_recovery_state("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/misc") != "b" ) then
ui_print("update recoverybak...");
package_extract_file("recoverybak.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/recoverybak");
ui_print("update bootargsbak...");
package_extract_file("bootargsbak.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/bootargsbak");
set_recovery_state("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/misc", "b");
endif;
ui_print("update recovery(not bak)......");
ui_print("update recovery...");
package_extract_file("recovery.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/recovery");
ui_print("update bootargs...");
package_extract_file("bootargs.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/bootargs");
set_recovery_state("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/misc", "a");
set_stage("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/misc", "2/2");
endif;
if (get_stage("/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/misc") == "2/2" ) then
ui_print("update recovery...stage 2/2......");
ui_print("update fastboot...");
package_extract_file("fastboot.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/fastboot");
package_extract_file("logo.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/logo");
package_extract_file("dtbo.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/dtbo");
package_extract_file("trustedcore.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/trustedcore");
package_extract_file("baseparam.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/baseparam");
package_extract_file("pqparam.img", "/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/pqparam");
endif;
ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/platform/soc/f9830000.himciv200.MMC/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/platform/soc/f9830000.himciv200.MMC/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 boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/boot:62914560:3831d8fa90cd12cf32755175d9a45164bbe67023:62914560:7acd785e8887406ca4eadce08e52ed7869d06260",
            "-", 7acd785e8887406ca4eadce08e52ed7869d06260, 62914560,
            3831d8fa90cd12cf32755175d9a45164bbe67023,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/platform/soc/f9830000.himciv200.MMC/by-name/boot:62914560:3831d8fa90cd12cf32755175d9a45164bbe67023:62914560:7acd785e8887406ca4eadce08e52ed7869d06260");
set_progress(1.000000);
