mount("ubifs", "UBI", "system", "/system", "");
ui_print("Source: None");
ui_print("Target: None");
ui_print("Verifying current system...");
show_progress(0.100000, 0);
apply_patch_check("/system/boot/abl.elf", "34cbb6ddf2c5cc29e12c4d2d5f9ad77e412704f5", "26cacba9252bdd7692b94ba8bf27da2e95972e92") || abort("E3005: \"/system/boot/abl.elf\" has unexpected contents.");
apply_patch_check("/system/boot/sign/default/abl/abl.elf", "34cbb6ddf2c5cc29e12c4d2d5f9ad77e412704f5", "26cacba9252bdd7692b94ba8bf27da2e95972e92") || abort("E3005: \"/system/boot/sign/default/abl/abl.elf\" has unexpected contents.");
apply_patch_check("/system/boot/sign_and_encrypt/default/abl/abl.elf", "46f31334fa2358657fcab270c0bc244fdf971c17", "60dc9b950620ca3298faf5b8c06fd361cd5b42c7") || abort("E3005: \"/system/boot/sign_and_encrypt/default/abl/abl.elf\" has unexpected contents.");
apply_patch_check("/system/boot/signed/abl.elf", "34cbb6ddf2c5cc29e12c4d2d5f9ad77e412704f5", "26cacba9252bdd7692b94ba8bf27da2e95972e92") || abort("E3005: \"/system/boot/signed/abl.elf\" has unexpected contents.");
apply_patch_check("/system/boot/signed_encrypted/abl.elf", "46f31334fa2358657fcab270c0bc244fdf971c17", "60dc9b950620ca3298faf5b8c06fd361cd5b42c7") || abort("E3005: \"/system/boot/signed_encrypted/abl.elf\" has unexpected contents.");
apply_patch_check("/system/usr/bin/atfwd_daemon", "d22755ada3874520aeb898b4e5c7922feb0937a4", "b3f9e81e707f9bee1daf6ee0a40c57e57cc36016") || abort("E3005: \"/system/usr/bin/atfwd_daemon\" has unexpected contents.");
apply_patch_check("/system/usr/bin/qmuxbridge", "d97e3080b54efd74977582c2bdec6fac6246f6fe", "eeb140ba852bacc4aaea9612557638426e17f7de") || abort("E3005: \"/system/usr/bin/qmuxbridge\" has unexpected contents.");
apply_patch_check("/system/var/lib/opkg/status", "e1b92193536d639b5385724bbdf90b3e2e8d6d4b", "6d85cd5559eb78d0ce05ad35d70fb8acd5f515af") || abort("E3005: \"/system/var/lib/opkg/status\" has unexpected contents.");
apply_patch_space(151552) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
apply_patch_check("/firmware/image/modem.b21", "5f63805170a2fe80522799780179e600c7872a36", "6aece253e198f46672f10864b9fee3086e6be54e") || abort("E3005: \"/firmware/image/modem.b21\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b01", "7e0f90503f71ca464429d1fc7446c2fabeae59f9", "9b88f5e51af7802a35179d13b32fbed579c14852") || abort("E3005: \"/firmware/image/modem.b01\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b09", "dc9edb07dafd0b546b433a4ea599e4934c78ff67", "7bda2988842c8834bec89c5e7d576cd1eaf359d0") || abort("E3005: \"/firmware/image/modem.b09\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b02", "2ebcdf836db48ad0d98535a2addfb1b3a59cb04d", "7ab89865cf8b43f46b1ff3d71ec102d4f06266b4") || abort("E3005: \"/firmware/image/modem.b02\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b26", "5983959e19224640d490e398ca960906310f3eaf", "6d1beedac905f3146f1ef365097e1c3675b8623a") || abort("E3005: \"/firmware/image/modem.b26\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.mdt", "a68b4d0617cc8a583b512bc89da4f59965395278", "a631f6abc43f1c05fdf5ef73cb3a0d82b1461e57") || abort("E3005: \"/firmware/image/modem.mdt\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b24", "bbbc7d3c66a43c4de835c13837477aa73c2c4925", "bef6f5c6916ad14086ad2fecd087d2ece228fd57") || abort("E3005: \"/firmware/image/modem.b24\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b23", "64cce63b6d9b5a91ada1f81c417e7c79efdbba60", "33bf018c4acc597b2f7676ab1f5ad4dd34151de4") || abort("E3005: \"/firmware/image/modem.b23\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b12", "db364c7bea41b7ab7fac7137a0441f801f758b25", "c7ad136fb0d6b6b85b8164b1778a84d91834d5a8") || abort("E3005: \"/firmware/image/modem.b12\" has unexpected contents.");
apply_patch_check("/firmware/image/modem.b20", "f32b1fe95cbf639201107aff78c412b725045c69", "8134077d29b8033464d2bb6490537757a162b56f") || abort("E3005: \"/firmware/image/modem.b20\" has unexpected contents.");

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

ui_print("Removing unneeded files...");
delete("/system/recovery.img", "/system/etc/version",
       "/system/etc/timestamp",
       "/system/build.prop");
show_progress(0.800000, 0);
ui_print("Patching system files...");
apply_patch("/system/boot/abl.elf", "-",
            34cbb6ddf2c5cc29e12c4d2d5f9ad77e412704f5, 151552,
            26cacba9252bdd7692b94ba8bf27da2e95972e92,
            package_extract_file("patch/system/boot/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to /system/boot/abl.elf");
set_progress(0.151416);
apply_patch("/system/boot/sign/default/abl/abl.elf", "-",
            34cbb6ddf2c5cc29e12c4d2d5f9ad77e412704f5, 151552,
            26cacba9252bdd7692b94ba8bf27da2e95972e92,
            package_extract_file("patch/system/boot/sign/default/abl/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to /system/boot/sign/default/abl/abl.elf");
set_progress(0.302831);
apply_patch("/system/boot/sign_and_encrypt/default/abl/abl.elf",
            "-", 46f31334fa2358657fcab270c0bc244fdf971c17, 151552,
            60dc9b950620ca3298faf5b8c06fd361cd5b42c7,
            package_extract_file("patch/system/boot/sign_and_encrypt/default/abl/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to /system/boot/sign_and_encrypt/default/abl/abl.elf");
set_progress(0.454247);
apply_patch("/system/boot/signed/abl.elf", "-",
            34cbb6ddf2c5cc29e12c4d2d5f9ad77e412704f5, 151552,
            26cacba9252bdd7692b94ba8bf27da2e95972e92,
            package_extract_file("patch/system/boot/signed/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to /system/boot/signed/abl.elf");
set_progress(0.605662);
apply_patch("/system/boot/signed_encrypted/abl.elf", "-",
            46f31334fa2358657fcab270c0bc244fdf971c17, 151552,
            60dc9b950620ca3298faf5b8c06fd361cd5b42c7,
            package_extract_file("patch/system/boot/signed_encrypted/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to /system/boot/signed_encrypted/abl.elf");
set_progress(0.757078);
apply_patch("/system/usr/bin/atfwd_daemon", "-",
            d22755ada3874520aeb898b4e5c7922feb0937a4, 112996,
            b3f9e81e707f9bee1daf6ee0a40c57e57cc36016,
            package_extract_file("patch/system/usr/bin/atfwd_daemon.p")) ||
    abort("E3008: Failed to apply patch to /system/usr/bin/atfwd_daemon");
set_progress(0.869972);
apply_patch("/system/usr/bin/qmuxbridge", "-",
            d97e3080b54efd74977582c2bdec6fac6246f6fe, 34492,
            eeb140ba852bacc4aaea9612557638426e17f7de,
            package_extract_file("patch/system/usr/bin/qmuxbridge.p")) ||
    abort("E3008: Failed to apply patch to /system/usr/bin/qmuxbridge");
set_progress(0.904433);
apply_patch("/system/var/lib/opkg/status", "-",
            e1b92193536d639b5385724bbdf90b3e2e8d6d4b, 95652,
            6d85cd5559eb78d0ce05ad35d70fb8acd5f515af,
            package_extract_file("patch/system/var/lib/opkg/status.p")) ||
    abort("E3008: Failed to apply patch to /system/var/lib/opkg/status");
set_progress(0.999999);
show_progress(0.100000, 10);
ui_print("Unpacking new system files...");
package_extract_dir("system", "/system");
ui_print("Symlinks and permissions...");
set_metadata("/system", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:root_t:s0");
set_metadata("/system/boot", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/abl.elf", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign/default", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign/default/abl", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign/default/abl/abl.elf", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign_and_encrypt", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign_and_encrypt/default", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign_and_encrypt/default/abl", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/sign_and_encrypt/default/abl/abl.elf", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/signed", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/signed/abl.elf", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/signed_encrypted", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/boot/signed_encrypted/abl.elf", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:boot_t:s0");
set_metadata("/system/build.prop", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:leprop_system_data_t:s15:c0.c1023");
set_metadata("/system/etc", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:etc_t:s0");
set_metadata("/system/etc/timestamp", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:etc_t:s0");
set_metadata("/system/etc/version", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:etc_t:s0");
set_metadata("/system/usr", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:usr_t:s0");
set_metadata("/system/usr/bin", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:bin_t:s0");
set_metadata("/system/usr/bin/atfwd_daemon", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:atfwd_exec_t:s0");
set_metadata("/system/usr/bin/qmuxbridge", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:qmuxbridge_exec_t:s0");
set_metadata("/system/var", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:var_t:s0");
set_metadata("/system/var/lib", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:var_lib_t:s0");
set_metadata("/system/var/lib/opkg", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "system_u:object_r:var_lib_t:s0");
set_metadata("/system/var/lib/opkg/status", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "system_u:object_r:var_lib_t:s0");

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

ui_print("Patching firmware images...");
apply_patch("/firmware/image/modem.b21", "-",
            5f63805170a2fe80522799780179e600c7872a36, 6315089,
            6aece253e198f46672f10864b9fee3086e6be54e,
            package_extract_file("patch/firmware-update/modem.b21.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b21");
apply_patch("/firmware/image/modem.b01", "-",
            7e0f90503f71ca464429d1fc7446c2fabeae59f9, 7856,
            9b88f5e51af7802a35179d13b32fbed579c14852,
            package_extract_file("patch/firmware-update/modem.b01.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b01");
apply_patch("/firmware/image/modem.b09", "-",
            dc9edb07dafd0b546b433a4ea599e4934c78ff67, 2396708,
            7bda2988842c8834bec89c5e7d576cd1eaf359d0,
            package_extract_file("patch/firmware-update/modem.b09.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b09");
apply_patch("/firmware/image/modem.b02", "-",
            2ebcdf836db48ad0d98535a2addfb1b3a59cb04d, 10544,
            7ab89865cf8b43f46b1ff3d71ec102d4f06266b4,
            package_extract_file("patch/firmware-update/modem.b02.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b02");
apply_patch("/firmware/image/modem.b26", "-",
            5983959e19224640d490e398ca960906310f3eaf, 110592,
            6d1beedac905f3146f1ef365097e1c3675b8623a,
            package_extract_file("patch/firmware-update/modem.b26.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b26");
apply_patch("/firmware/image/modem.mdt", "-",
            a68b4d0617cc8a583b512bc89da4f59965395278, 8868,
            a631f6abc43f1c05fdf5ef73cb3a0d82b1461e57,
            package_extract_file("patch/firmware-update/modem.mdt.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.mdt");
apply_patch("/firmware/image/modem.b24", "-",
            bbbc7d3c66a43c4de835c13837477aa73c2c4925, 36216896,
            bef6f5c6916ad14086ad2fecd087d2ece228fd57,
            package_extract_file("patch/firmware-update/modem.b24.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b24");
apply_patch("/firmware/image/modem.b23", "-",
            64cce63b6d9b5a91ada1f81c417e7c79efdbba60, 92736,
            33bf018c4acc597b2f7676ab1f5ad4dd34151de4,
            package_extract_file("patch/firmware-update/modem.b23.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b23");
apply_patch("/firmware/image/modem.b12", "-",
            db364c7bea41b7ab7fac7137a0441f801f758b25, 2233456,
            c7ad136fb0d6b6b85b8164b1778a84d91834d5a8,
            package_extract_file("patch/firmware-update/modem.b12.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b12");
apply_patch("/firmware/image/modem.b20", "-",
            f32b1fe95cbf639201107aff78c412b725045c69, 12511228,
            8134077d29b8033464d2bb6490537757a162b56f,
            package_extract_file("patch/firmware-update/modem.b20.p")) ||
    abort("E3008: Failed to apply patch to /firmware/image/modem.b20");
ui_print("Patching remaining system files...");
set_metadata("/system/build.prop", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0);
unmount("/system");
