getprop("ro.product.model") == "KNX-PANEL-B" || abort("This package is for \"KNX-PANEL-B\" models; this is a \"" + getprop("ro.product.model") + "\".");
getprop("ro.product.device") == "feller_knx_panel" || abort("E3004: This package is for \"feller_knx_panel\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Target: rockchip/rk3399/rk3399:9/F0-R5.1/174711:userdebug/release-keys");
show_progress(0.550000, 0);
ui_print("Patching system image unconditionally...");
block_image_update("/dev/block/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat.br", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
show_progress(0.100000, 0);
ui_print("Patching vendor image unconditionally...");
block_image_update("/dev/block/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat.br", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 0);
ui_print("Patching oem image unconditionally...");
block_image_update("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat.br", "oem.patch.dat") ||
  abort("E2001: Failed to update oem image.");
show_progress(0.050000, 5);
package_extract_file("boot.img", "/dev/block/by-name/boot");
show_progress(0.200000, 10);
ui_print("Writing trust img...");
package_extract_file("trust.img", "/dev/block/by-name/trust");
ui_print("Writing uboot loader img...");
package_extract_file("uboot.img", "/dev/block/by-name/uboot");
set_progress(1.000000);
