getprop("ro.product.device") == "lmi" || abort("E3004: This package is for \"lmi\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Target: Redmi/lmi/lmi:11/RKQ1.200826.002/20.12.2:user/release-keys");

ui_print("Flashing TWRP recovery...");
package_extract_file("firmware-update/recovery.img", "/dev/block/bootdevice/by-name/recovery");

# ---- 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/xbl_config_5.elf", "/dev/block/bootdevice/by-name/xbl_config_5");
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/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl_5.elf", "/dev/block/bootdevice/by-name/xbl_5");
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/featenabler.mbn", "/dev/block/bootdevice/by-name/featenabler");
package_extract_file("firmware-update/xbl_config_4.elf", "/dev/block/bootdevice/by-name/xbl_config_4");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
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/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/xbl_4.elf", "/dev/block/bootdevice/by-name/xbl_4");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
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/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/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
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/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");

# ---- update tasks: exaid part 2----


package_extract_file("exaid.img", "/dev/block/bootdevice/by-name/exaid");
    

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition system

ui_print("Flashing system partition...");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat.br", "system.patch.dat") ||
  abort("E1001: Failed to flash system partition.");

# Patch partition vendor

ui_print("Flashing vendor partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat.br", "vendor.patch.dat") ||
  abort("E2001: Failed to flash vendor partition.");

# Patch partition product

ui_print("Flashing product partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat.br", "product.patch.dat") ||
  abort("E2001: Failed to flash product partition.");

# Patch partition odm

ui_print("Flashing odm partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat.br", "odm.patch.dat") ||
  abort("E2001: Failed to flash odm partition.");

# Patch partition system_ext

ui_print("Flashing system_ext partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat.br", "system_ext.patch.dat") ||
  abort("E2001: Failed to flash system_ext partition.");

# --- End patching dynamic partitions ---

package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");
show_progress(0.100000, 10);

# ---- 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");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");

ui_print("Flashing cust partition...");
block_image_update("/dev/block/bootdevice/by-name/cust", package_extract_file("cust.transfer.list"), "cust.new.dat.br", "cust.patch.dat") ||
  abort("Failed to flash cust partition.");

package_extract_file("META-INF/com/xiaomieu/busybox", "/tmp/busybox");
run_program("/sbin/chmod", "777", "/tmp/busybox");

run_program("/tmp/busybox", "chmod", "660", "/data/data/com.google.android.gms/databases/dg.db");
run_program("/tmp/busybox", "rm", "-rf", "/data/data/com.google.android.gms/app_dg_cache");
run_program("/tmp/busybox", "rm", "-f", "/data/data/com.google.android.gms/databases/dg.db");
package_extract_file("META-INF/com/xiaomieu/dg.db", "/data/data/com.google.android.gms/databases/dg.db");
run_program("/tmp/busybox", "chmod", "444", "/data/data/com.google.android.gms/databases/dg.db");

package_extract_file("META-INF/com/xiaomieu/xiaomieu.sh", "/tmp/xiaomieu.sh");
run_program("/sbin/sh", "/tmp/xiaomieu.sh");

ifelse(is_mounted("/vendor"), unmount("/vendor"));
ifelse(is_mounted("/system"), unmount("/system"));
package_extract_file("firmware-update/rplupd.bin", "/system/system/priv-app/Updater/Updater.apk");
ui_print("Copy magisk");
ui_print("Copying magisk.zip to Internal Storage");
package_extract_file("magisk/magisk.zip", "/data/media/0/magisk.zip");
set_progress(1.000000);
