getprop("ro.product.device") == "sl8541e_1h10_go" || abort("E3004: This package is for \"sl8541e_1h10_go\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: SPRD/sl8541e_1h10_gofu_osea/sl8541e_1h10_go:8.1.0/OPM2.171019.012/17111:user/release-keys");
ui_print("Target: SPRD/sl8541e_1h10_gofu_osea/sl8541e_1h10_go:8.1.0/OPM2.171019.012/22322:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "SPRD/sl8541e_1h10_gofu_osea/sl8541e_1h10_go:8.1.0/OPM2.171019.012/17111:user/release-keys" ||
    getprop("ro.build.fingerprint") == "SPRD/sl8541e_1h10_gofu_osea/sl8541e_1h10_go:8.1.0/OPM2.171019.012/22322:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of SPRD/sl8541e_1h10_gofu_osea/sl8541e_1h10_go:8.1.0/OPM2.171019.012/17111:user/release-keys or SPRD/sl8541e_1h10_gofu_osea/sl8541e_1h10_go:8.1.0/OPM2.171019.012/22322:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:a45d1240aa6fefbd00f8870f15219dcd05daac20:36700160:ae8d2a59066fb0876f5035f9ec1522e53c12770a") || abort("E3005: \"EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:a45d1240aa6fefbd00f8870f15219dcd05daac20:36700160:ae8d2a59066fb0876f5035f9ec1522e53c12770a\" has unexpected contents.");
apply_patch_space(36700160) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/system", "122,1,96,97,334,28054,32767,32768,32770,32865,32866,33360,37937,38676,65534,65536,65537,66031,67182,98304,98306,98401,98402,98896,131070,131072,131073,131567,132391,163840,163842,163937,163938,164432,164434,165443,196606,196608,196609,197103,197559,229376,229378,229473,229474,233281,262138,262141,262142,262144,262145,262639,294431,294912,294914,295009,295010,295504,327678,327680,327681,328175,333274,360448,360449,360943,360944,366848,366853,366855,366859,366864,366865,367116,367122,367995,367996,367998,368002,368010,368011,368013,368017,368021,368022,368037,368041,368050,368051,368084,368088,368100,368101,368212,368216,368230,368231,368234,368238,368247,368248,368304,368305,368307,368311,368315,368316,369351,369357,369975,369976,369981,369985,369990,369991,369994,369998,370012,370013,371177,383912,383999,384000") == "4296def5c320926c0cac6ce65041ed88aa91c247" || block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/soc:ap-ahb/20600000.sdio/by-name/system");
ifelse (block_image_recover("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/system", "122,1,96,97,334,28054,32767,32768,32770,32865,32866,33360,37937,38676,65534,65536,65537,66031,67182,98304,98306,98401,98402,98896,131070,131072,131073,131567,132391,163840,163842,163937,163938,164432,164434,165443,196606,196608,196609,197103,197559,229376,229378,229473,229474,233281,262138,262141,262142,262144,262145,262639,294431,294912,294914,295009,295010,295504,327678,327680,327681,328175,333274,360448,360449,360943,360944,366848,366853,366855,366859,366864,366865,367116,367122,367995,367996,367998,368002,368010,368011,368013,368017,368021,368022,368037,368041,368050,368051,368084,368088,368100,368101,368212,368216,368230,368231,368234,368238,368247,368248,368304,368305,368307,368311,368315,368316,369351,369357,369975,369976,369981,369985,369990,369991,369994,369998,370012,370013,371177,383912,383999,384000") && block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/soc:ap-ahb/20600000.sdio/by-name/vendor", "72,1,24,25,81,1234,1235,1241,1242,1244,1247,3757,3758,3846,3847,11463,11464,12045,12090,30419,30420,30439,30440,30452,30453,30519,30520,30575,30576,31677,31679,32768,32770,32793,32794,65536,65537,65932,65933,67112,67117,68020,68021,68028,68029,68102,68103,68694,68695,72892,72894,72902,72903,73044,73045,74795,74797,74799,74800,75037,75038,75125,75126,75242,75244,75563,75564,75565,75566,75568,76770,76799,76800") == "d6d1aab469de367cf42931b02606bb4d03eaa1d4" || block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/soc:ap-ahb/20600000.sdio/by-name/vendor");
ifelse (block_image_recover("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vendor", "72,1,24,25,81,1234,1235,1241,1242,1244,1247,3757,3758,3846,3847,11463,11464,12045,12090,30419,30420,30439,30440,30452,30453,30519,30520,30575,30576,31677,31679,32768,32770,32793,32794,65536,65537,65932,65933,67112,67117,68020,68021,68028,68029,68102,68103,68694,68695,72892,72894,72902,72903,73044,73045,74795,74797,74799,74800,75037,75038,75125,75126,75242,75244,75563,75564,75565,75566,75568,76770,76799,76800") && block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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 ----

package_extract_file("META-INF/com/google/android/nvmerge", "/tmp/nvmerge");
package_extract_file("META-INF/com/google/android/nvmerge.cfg", "/tmp/nvmerge.cfg");
ui_print("Verifying current system...");
ui_print("Patching current system...");
ui_print("write u-boot-spl-16k.bin to partition /spl ....");
package_extract_file("u-boot-spl-16k.bin", "/dev/block/mmcblk0boot0");
ui_print("write u-boot-spl-16k.bin to partition /spl_bk ....");
package_extract_file("u-boot-spl-16k.bin", "/dev/block/mmcblk0boot1");
ui_print("write u-boot.bin to partition /uboot ....");
package_extract_file("u-boot.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/uboot");
ui_print("write u-boot.bin to partition /uboot_bak ....");
package_extract_file("u-boot.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/uboot_bak");
ui_print("write sml.bin to partition /sml ....");
package_extract_file("sml.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/sml");
ui_print("write sml.bin to partition /sml_bak ....");
package_extract_file("sml.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/sml_bak");
ui_print("write tos.bin to partition /tos ....");
package_extract_file("tos.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/trustos");
ui_print("write tos.bin to partition /tos_bak ....");
package_extract_file("tos.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/trustos_bak");
ui_print("write vbmeta.img to partition /vbmeta ....");
package_extract_file("vbmeta.img", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vbmeta");
ui_print("write vbmeta.img to partition /vbmeta_bak ....");
package_extract_file("vbmeta.img", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vbmeta_bak");
ui_print("write ltedsp.bin to partition /ltedsp ....");
package_extract_file("ltedsp.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_ldsp");
ui_print("write ltegdsp.bin to partition /ltegdsp ....");
package_extract_file("ltegdsp.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_gdsp");
ui_print("write ltemodem.bin to partition /ltemodem ....");
package_extract_file("ltemodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_modem");
ui_print("write ltedeltanv.bin to partition /ltedeltanv ....");
package_extract_file("ltedeltanv.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_deltanv");
ui_print("write pmsys.bin to partition /pmsys ....");
package_extract_file("pmsys.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/pm_sys");
ui_print("extract ltenvitem.bin to /tmp ....");
package_extract_file("ltenvitem.bin", "/tmp/ltenvitem.bin");
assert(run_programex("/tmp/nvmerge","/tmp/nvmerge.cfg","/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_fixnv1","/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_fixnv2","/tmp/ltenvitem.bin","0xc8000"));
ui_print("write wcnmodem.bin to partition /wcnmodem ....");
package_extract_file("wcnmodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/wcnmodem");
ui_print("write gnssmodem.bin to partition /gnssmodem ....");
package_extract_file("gnssmodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/gpsgl");
ui_print("write gnssbdmodem.bin to partition /gnssbdmodem ....");
package_extract_file("gnssbdmodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/gpsbd");
ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/soc:ap-ahb/20600000.sdio/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/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:a45d1240aa6fefbd00f8870f15219dcd05daac20:36700160:ae8d2a59066fb0876f5035f9ec1522e53c12770a",
            "-", ae8d2a59066fb0876f5035f9ec1522e53c12770a, 36700160,
            a45d1240aa6fefbd00f8870f15219dcd05daac20,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:a45d1240aa6fefbd00f8870f15219dcd05daac20:36700160:ae8d2a59066fb0876f5035f9ec1522e53c12770a");
set_progress(1.000000);
set_progress(1.000000);
