getprop("ro.product.device") == "onc" || abort("E3004: This package is for \"onc\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.10.0.PFLEUXM:user/release-keys");
ui_print("Target: xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.11.0.PFLEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.10.0.PFLEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.11.0.PFLEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.10.0.PFLEUXM:user/release-keys or xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.11.0.PFLEUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 5);
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:67108864:5cc60fdfd22af3a7c3f94b82104f0b5c784c099c:67108864:d57b8143ef26873cf3c6247cfeb1d79c2935fd0a") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:5cc60fdfd22af3a7c3f94b82104f0b5c784c099c:67108864:d57b8143ef26873cf3c6247cfeb1d79c2935fd0a\" has unexpected contents.");
apply_patch_space(180973568) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "564,1,239,254,528,8325,8327,8329,8330,8331,8332,8334,8338,8339,8962,8967,9021,9022,9563,9564,11318,11319,11320,11321,12625,12626,13945,13947,17071,17072,17766,17767,32265,32266,32768,32990,33508,33509,33535,33536,54275,54276,56261,56262,56289,56290,58191,58192,80854,80855,89572,89573,90696,91086,91088,91181,91208,91213,96864,97363,97384,98225,98230,98243,98257,98617,98649,98819,98848,99085,99168,99476,99503,99521,105573,105608,105612,105699,105702,105705,105725,105770,105806,105957,105965,106115,106286,111097,119294,119295,119441,119443,120542,120544,122070,122073,122468,122469,122475,122477,122628,122629,122650,122652,122661,122664,122675,122676,130868,133192,140812,140815,140825,140826,140828,140830,140836,140837,140876,140878,141787,141788,141790,141792,141806,141807,141956,141958,142455,142458,142516,142519,142548,142551,144813,144814,144816,144818,144826,144827,144872,144874,145281,145284,145353,145354,147293,147295,149204,149205,151593,151594,153615,153618,153640,153641,153644,153646,153659,153660,154740,154742,154778,159035,159322,159325,159696,159699,162282,162424,162426,162760,162762,171177,179826,179827,187562,195754,196154,196155,198783,198786,199222,199223,203197,203200,203277,203278,210220,210221,210571,210778,210786,210957,210959,210964,211007,211010,211040,211041,211043,211045,211063,211066,211078,211081,211184,211185,211190,211192,211203,211204,211335,211337,211428,211885,211897,213156,213306,214163,214619,214620,220016,220017,220021,220023,220040,220043,220328,220331,220346,220347,220371,220373,220406,220409,220590,220593,220607,221249,221251,221253,221280,221283,221322,221325,221345,221348,221374,221377,221387,221390,225081,225082,225240,226450,229376,229598,229858,229861,229875,229878,232311,232312,232320,232322,232791,232792,235429,235430,241612,241615,241664,241666,241670,241673,241779,241782,241918,241921,243025,243026,245048,245050,248846,248847,251957,251958,251968,251970,251979,251982,253321,253322,253324,253326,253416,253419,253841,253844,254242,254243,262052,262053,263463,263466,263868,263870,265989,265990,266197,266199,266278,266283,268199,268200,275365,275366,283416,283417,286214,286215,286224,286226,286235,286236,286416,286418,286732,286735,294912,295134,295149,298239,302882,302884,307487,307488,307628,307630,307739,307742,307831,307832,311500,311502,316182,316183,323855,323856,324632,324635,324989,324990,326104,327938,327976,327979,328133,328134,345385,345386,345850,345853,345863,345864,345866,345868,345886,345887,345889,345891,345906,345909,345962,345963,346002,346004,346257,346260,346272,346275,346650,346653,346655,346656,347062,347065,348018,348019,348021,348023,348036,348037,348665,348667,348936,348939,350758,350761,351002,351005,351029,351032,351170,351173,351186,351187,356406,356407,359380,364677,364680,364682,364724,364727,366451,366452,369096,369097,369110,369112,369129,369132,369210,369213,369260,369263,371534,371535,371672,371674,372334,372337,372406,372407,372409,372411,372433,372436,372902,372905,373500,373835,373837,373839,373849,373866,373887,373888,373891,373893,374041,374059,374061,374063,374073,374075,374076,375101,375102,375177,375179,375220,376746,377418,377540,377580,377583,377588,381387,386710,389655,389807,391867,391917,391923,391984,392018,392481,393445,395438,425129,425159,425477,425520,428123,428416,468801,472927,472928,475321,475905,482844,482874,488436,498690,498750,524298,524299,524300,530360,549416,553232,620319,622797,623049,624385,641982,649211,649212,650175,739698,741101,741114,743046,743047,743865,805820,805930,805936,806140,806166,806192,806227,806349,806390,806394,806758,807015,807044,807054,807178,807272,807352,807503,807521,807557,807566,807689,807715,807923,808039,808172,808177,808588,808755,808818,808824,808898,808910,808990,808997,809015,809066,809124,819202,819422,848832,884736,884738,903007,917316,917503,917504") == "87f123b20821a2a3cce3a124332ed874377e51b9" || block_image_verify("/dev/block/bootdevice/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/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "564,1,239,254,528,8325,8327,8329,8330,8331,8332,8334,8338,8339,8962,8967,9021,9022,9563,9564,11318,11319,11320,11321,12625,12626,13945,13947,17071,17072,17766,17767,32265,32266,32768,32990,33508,33509,33535,33536,54275,54276,56261,56262,56289,56290,58191,58192,80854,80855,89572,89573,90696,91086,91088,91181,91208,91213,96864,97363,97384,98225,98230,98243,98257,98617,98649,98819,98848,99085,99168,99476,99503,99521,105573,105608,105612,105699,105702,105705,105725,105770,105806,105957,105965,106115,106286,111097,119294,119295,119441,119443,120542,120544,122070,122073,122468,122469,122475,122477,122628,122629,122650,122652,122661,122664,122675,122676,130868,133192,140812,140815,140825,140826,140828,140830,140836,140837,140876,140878,141787,141788,141790,141792,141806,141807,141956,141958,142455,142458,142516,142519,142548,142551,144813,144814,144816,144818,144826,144827,144872,144874,145281,145284,145353,145354,147293,147295,149204,149205,151593,151594,153615,153618,153640,153641,153644,153646,153659,153660,154740,154742,154778,159035,159322,159325,159696,159699,162282,162424,162426,162760,162762,171177,179826,179827,187562,195754,196154,196155,198783,198786,199222,199223,203197,203200,203277,203278,210220,210221,210571,210778,210786,210957,210959,210964,211007,211010,211040,211041,211043,211045,211063,211066,211078,211081,211184,211185,211190,211192,211203,211204,211335,211337,211428,211885,211897,213156,213306,214163,214619,214620,220016,220017,220021,220023,220040,220043,220328,220331,220346,220347,220371,220373,220406,220409,220590,220593,220607,221249,221251,221253,221280,221283,221322,221325,221345,221348,221374,221377,221387,221390,225081,225082,225240,226450,229376,229598,229858,229861,229875,229878,232311,232312,232320,232322,232791,232792,235429,235430,241612,241615,241664,241666,241670,241673,241779,241782,241918,241921,243025,243026,245048,245050,248846,248847,251957,251958,251968,251970,251979,251982,253321,253322,253324,253326,253416,253419,253841,253844,254242,254243,262052,262053,263463,263466,263868,263870,265989,265990,266197,266199,266278,266283,268199,268200,275365,275366,283416,283417,286214,286215,286224,286226,286235,286236,286416,286418,286732,286735,294912,295134,295149,298239,302882,302884,307487,307488,307628,307630,307739,307742,307831,307832,311500,311502,316182,316183,323855,323856,324632,324635,324989,324990,326104,327938,327976,327979,328133,328134,345385,345386,345850,345853,345863,345864,345866,345868,345886,345887,345889,345891,345906,345909,345962,345963,346002,346004,346257,346260,346272,346275,346650,346653,346655,346656,347062,347065,348018,348019,348021,348023,348036,348037,348665,348667,348936,348939,350758,350761,351002,351005,351029,351032,351170,351173,351186,351187,356406,356407,359380,364677,364680,364682,364724,364727,366451,366452,369096,369097,369110,369112,369129,369132,369210,369213,369260,369263,371534,371535,371672,371674,372334,372337,372406,372407,372409,372411,372433,372436,372902,372905,373500,373835,373837,373839,373849,373866,373887,373888,373891,373893,374041,374059,374061,374063,374073,374075,374076,375101,375102,375177,375179,375220,376746,377418,377540,377580,377583,377588,381387,386710,389655,389807,391867,391917,391923,391984,392018,392481,393445,395438,425129,425159,425477,425520,428123,428416,468801,472927,472928,475321,475905,482844,482874,488436,498690,498750,524298,524299,524300,530360,549416,553232,620319,622797,623049,624385,641982,649211,649212,650175,739698,741101,741114,743046,743047,743865,805820,805930,805936,806140,806166,806192,806227,806349,806390,806394,806758,807015,807044,807054,807178,807272,807352,807503,807521,807557,807566,807689,807715,807923,808039,808172,808177,808588,808755,808818,808824,808898,808910,808990,808997,809015,809066,809124,819202,819422,848832,884736,884738,903007,917316,917503,917504") && block_image_verify("/dev/block/bootdevice/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/bootdevice/by-name/vendor", "20,1,69,71,73,80,239,4112,32770,32832,98306,98368,141015,163840,163842,229376,229378,257987,262077,262143,262144") == "9d8497a8e01725765d2b25ba514faf255cfe11ff" || block_image_verify("/dev/block/bootdevice/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/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "20,1,69,71,73,80,239,4112,32770,32832,98306,98368,141015,163840,163842,229376,229378,257987,262077,262143,262144") && block_image_verify("/dev/block/bootdevice/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 ----

ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:67108864:5cc60fdfd22af3a7c3f94b82104f0b5c784c099c:67108864:d57b8143ef26873cf3c6247cfeb1d79c2935fd0a",
            "-", d57b8143ef26873cf3c6247cfeb1d79c2935fd0a, 67108864,
            5cc60fdfd22af3a7c3f94b82104f0b5c784c099c, package_extract_file("patch/boot.img.p")) || abort("Failed to apply patch \"patch/boot.img.p \".");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecapp");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/adspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/abootbak");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecappbak");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1bak");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/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.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
show_progress(0.100000, 2);
