getprop("ro.product.device") == "sweet" || abort("E3004: This package is for \"sweet\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/sweet_eea2/sweet:11/RKQ1.200826.002/V13.0.2.0.RHGEUXM:user/release-keys");
ui_print("Target: Redmi/sweet_eea2/sweet:11/RKQ1.200826.002/V13.0.3.0.RHGEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/sweet_eea2/sweet:11/RKQ1.200826.002/V13.0.2.0.RHGEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/sweet_eea2/sweet:11/RKQ1.200826.002/V13.0.3.0.RHGEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/sweet_eea2/sweet:11/RKQ1.200826.002/V13.0.2.0.RHGEUXM:user/release-keys or Redmi/sweet_eea2/sweet:11/RKQ1.200826.002/V13.0.3.0.RHGEUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8f8d618f56240e23c69ef99d0aab46f19f45cfc9"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d821a53c425ac8d9b37c4080dd9aa64f1e51910a")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8f8d618f56240e23c69ef99d0aab46f19f45cfc9"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d821a53c425ac8d9b37c4080dd9aa64f1e51910a"),"\" has unexpected contents."));
apply_patch_space(206991360) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "80,1,32770,32982,98306,98518,163842,164054,229378,229590,294914,295126,353475,360448,360462,369125,369126,378638,378639,380855,380856,380862,380864,380958,380959,386518,386519,386523,386524,393216,393230,393299,393300,393402,393403,393532,393533,393541,393542,393742,393743,394004,394005,397005,739270,742457,742518,742524,742525,744786,744787,744792,744793,745442,745443,745445,745446,751128,751130,751368,751369,751428,751429,753664,753707,756249,756251,756284,756285,756294,819202,819414,819423,819428,851969,851982,866139,869124,882897,883078,883079") == "67eba77585f53034aa323c87b006c6a99b20d56b" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "80,1,32770,32982,98306,98518,163842,164054,229378,229590,294914,295126,353475,360448,360462,369125,369126,378638,378639,380855,380856,380862,380864,380958,380959,386518,386519,386523,386524,393216,393230,393299,393300,393402,393403,393532,393533,393541,393542,393742,393743,394004,394005,397005,739270,742457,742518,742524,742525,744786,744787,744792,744793,745442,745443,745445,745446,751128,751130,751368,751369,751428,751429,753664,753707,756249,756251,756284,756285,756294,819202,819414,819423,819428,851969,851982,866139,869124,882897,883078,883079") && block_image_verify(map_partition("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(map_partition("vendor"), "20,1,32770,32860,94553,95200,98306,98396,163842,163932,229378,229468,294914,295004,360462,360468,371097,372284,378186,378274,378275") == "25c63ae60a9f0e6f72b5d3757d6b601404419dab" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "20,1,32770,32860,94553,95200,98306,98396,163842,163932,229378,229468,294914,295004,360462,360468,371097,372284,378186,378274,378275") && block_image_verify(map_partition("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;
if (range_sha1(map_partition("product"), "466,1,110,3393,3394,6568,6569,14041,14042,15250,15254,15347,15348,15407,15410,15416,15417,15459,15460,24260,24261,32768,32770,32864,32870,34869,34870,36264,36265,36702,36703,38181,38182,38544,38548,39067,39068,39080,39084,39088,39089,40929,40933,40975,40976,42366,42367,52275,52276,56325,56326,60331,60332,65536,65542,70179,70180,79724,79731,81207,81208,92214,92215,97373,97374,98304,98306,98400,98406,105417,105418,105487,105489,105532,105533,105543,105545,105834,105836,105845,105847,105856,105858,106628,106629,106636,106637,106766,106772,106773,106774,106787,106793,106794,106795,114321,114322,115557,115561,116574,116575,120461,120462,131072,131078,134159,134160,134230,134231,136493,136495,157282,157283,159341,159342,163840,163842,163936,163942,167462,167463,168632,168633,169244,169245,174045,174046,178691,178693,179197,179198,179205,179206,179212,179213,183550,183551,183776,183778,183788,183790,183836,183838,183848,183850,183859,183860,185677,185678,185681,185685,189652,189653,194583,194584,194696,194698,194707,194708,194821,194822,194831,194832,195291,195292,196608,196614,198370,198371,211732,211734,212143,212144,212154,212155,212823,212824,213987,213988,216549,216553,216624,216625,220246,220247,224946,224947,226579,226580,226584,226585,229376,229378,229472,229478,233809,233813,241029,241034,241053,241057,241076,241080,241099,241103,241122,241126,242624,242625,243199,243203,244223,244224,245365,245366,249173,249174,249178,249179,249202,249204,249205,249206,249238,249239,249250,249251,251169,251170,253482,253483,256733,256734,256767,256768,257284,257285,257454,257455,257456,257457,257459,257460,257476,257477,257480,257482,257483,257485,257502,257503,257516,257517,257556,257560,257564,257568,257569,257573,257574,257590,258005,258006,258377,258378,259863,259864,259953,259955,259958,259959,259962,259963,259966,259967,259970,259971,259974,259975,259978,259979,259993,259994,260000,260001,260007,260008,260014,260015,260021,260022,260028,260029,260042,260046,260075,260076,260097,260098,260105,260106,260127,260128,260145,260146,260152,260153,260171,260172,260179,260180,260199,260200,260215,260216,260221,260222,260242,260243,260250,260251,260272,260273,260290,260291,260297,260298,260301,260302,260305,260306,260309,260310,260313,260314,260317,260318,260339,260340,260343,260344,260348,260349,260923,260925,262144,262157,263269,263270,263345,263346,264775,264776,265385,265386,266852,266853,270701,270702,274581,274583,276432,276434,278241,278242,280154,280155,281797,281798,281936,281938,290874,290876,291926,291928,294168,294169,294343,294347,294395,294396,294411,294412,294652,294656,294907,294908,294912,294914,295008,295014,303684,303685,309064,309068,309120,309121,309149,309150,309287,309291,309299,309300,311416,311417,311616,311620,311660,311661,313061,313065,315831,315832,316678,316679,323326,323327,327680,327683,329390,329391,329927,329931,329952,329953,330617,330621,330637,330638,332333,332337,332362,332363,343189,343190,360448,360449,367322,367323,367514,367515,367818,367819,367990,367991,368968,368969,369551,369552,369728,369729,370704,370706,371178,371179,371820,371821,374697,374698,375650,375653,378987,378988,386602,392731,392819,392820") == "b5d3d802632633f59d9d583ed004a0effde52ca3" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "466,1,110,3393,3394,6568,6569,14041,14042,15250,15254,15347,15348,15407,15410,15416,15417,15459,15460,24260,24261,32768,32770,32864,32870,34869,34870,36264,36265,36702,36703,38181,38182,38544,38548,39067,39068,39080,39084,39088,39089,40929,40933,40975,40976,42366,42367,52275,52276,56325,56326,60331,60332,65536,65542,70179,70180,79724,79731,81207,81208,92214,92215,97373,97374,98304,98306,98400,98406,105417,105418,105487,105489,105532,105533,105543,105545,105834,105836,105845,105847,105856,105858,106628,106629,106636,106637,106766,106772,106773,106774,106787,106793,106794,106795,114321,114322,115557,115561,116574,116575,120461,120462,131072,131078,134159,134160,134230,134231,136493,136495,157282,157283,159341,159342,163840,163842,163936,163942,167462,167463,168632,168633,169244,169245,174045,174046,178691,178693,179197,179198,179205,179206,179212,179213,183550,183551,183776,183778,183788,183790,183836,183838,183848,183850,183859,183860,185677,185678,185681,185685,189652,189653,194583,194584,194696,194698,194707,194708,194821,194822,194831,194832,195291,195292,196608,196614,198370,198371,211732,211734,212143,212144,212154,212155,212823,212824,213987,213988,216549,216553,216624,216625,220246,220247,224946,224947,226579,226580,226584,226585,229376,229378,229472,229478,233809,233813,241029,241034,241053,241057,241076,241080,241099,241103,241122,241126,242624,242625,243199,243203,244223,244224,245365,245366,249173,249174,249178,249179,249202,249204,249205,249206,249238,249239,249250,249251,251169,251170,253482,253483,256733,256734,256767,256768,257284,257285,257454,257455,257456,257457,257459,257460,257476,257477,257480,257482,257483,257485,257502,257503,257516,257517,257556,257560,257564,257568,257569,257573,257574,257590,258005,258006,258377,258378,259863,259864,259953,259955,259958,259959,259962,259963,259966,259967,259970,259971,259974,259975,259978,259979,259993,259994,260000,260001,260007,260008,260014,260015,260021,260022,260028,260029,260042,260046,260075,260076,260097,260098,260105,260106,260127,260128,260145,260146,260152,260153,260171,260172,260179,260180,260199,260200,260215,260216,260221,260222,260242,260243,260250,260251,260272,260273,260290,260291,260297,260298,260301,260302,260305,260306,260309,260310,260313,260314,260317,260318,260339,260340,260343,260344,260348,260349,260923,260925,262144,262157,263269,263270,263345,263346,264775,264776,265385,265386,266852,266853,270701,270702,274581,274583,276432,276434,278241,278242,280154,280155,281797,281798,281936,281938,290874,290876,291926,291928,294168,294169,294343,294347,294395,294396,294411,294412,294652,294656,294907,294908,294912,294914,295008,295014,303684,303685,309064,309068,309120,309121,309149,309150,309287,309291,309299,309300,311416,311417,311616,311620,311660,311661,313061,313065,315831,315832,316678,316679,323326,323327,327680,327683,329390,329391,329927,329931,329952,329953,330617,330621,330637,330638,332333,332337,332362,332363,343189,343190,360448,360449,367322,367323,367514,367515,367818,367819,367990,367991,368968,368969,369551,369552,369728,369729,370704,370706,371178,371179,371820,371821,374697,374698,375650,375653,378987,378988,386602,392731,392819,392820") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "14,1,11,12,13,14,16,24,247,250,251,254,262,279,280") == "e7c4aab821dd2555d00e68c906949c5d06254734" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "14,1,11,12,13,14,16,24,247,250,251,254,262,279,280") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "320,1,62,71,75,79,80,87,93,94,95,111,117,118,119,178,182,187,188,847,849,906,910,926,927,955,961,962,1390,1397,1403,1404,1405,1601,1605,1609,1610,1614,1618,1623,1624,1629,1630,1638,1644,1645,1676,1677,1678,1684,1690,1691,1692,1695,1696,1708,1714,1715,1716,1727,1728,1734,1738,1742,1743,1748,1754,1758,1759,1768,1774,1775,1776,1789,1795,1796,1797,1800,1807,1815,1822,1828,1835,1867,1874,1894,1901,1920,1925,1943,1950,1968,1969,2174,2177,2187,2188,2201,2202,2203,2204,2205,2206,2214,2215,2238,2239,2285,2290,2293,2296,2299,2302,2305,2307,2311,2312,2316,2319,2324,2325,2328,2330,2340,2343,2933,2935,2939,2943,2948,2950,2955,2959,2960,2964,2965,2969,2970,2974,2975,2979,2980,2984,2985,2989,2990,2994,2995,2999,3000,3004,3005,3009,3010,3014,3015,3019,3020,3022,3029,3033,3034,3038,3039,3043,3044,3048,3049,3053,3054,3058,3059,3063,3064,3066,3067,3071,3072,3076,3077,3081,3082,3086,3087,3091,3092,3096,3097,3101,3102,3104,3108,3112,3113,3117,3118,3120,3121,3123,3124,3128,3129,3133,3134,3136,3137,3141,3142,3144,3145,3149,3150,3154,3155,3157,3158,3162,3163,3165,3169,3182,3187,3241,3244,3354,6197,6198,6332,7001,7254,7255,8924,9000,9564,9565,9623,9624,9659,9666,10013,10028,10466,10467,10517,10518,10827,10828,16009,16010,16082,16083,16091,16092,16227,16228,16232,16233,16286,16287,16297,16298,16331,16332,16351,16352,16404,16405,16550,16551,16626,16627,16773,16774,21524,21526,21665,21666,21691,21692,21788,21789,21840,21841,21852,21853,21903,21904,21979,21980,22043,22044,22306,22307,22811,22812,26686,26687,26743,26744,27168,27169,32768,32770,32800,32835,34056,35081,35909,35910,37496,37497,38346,98306,98336,98356,98358,126247,126637,128647,128687,128688") == "e27a841da4187a33e320ec3a4e107f3847b6121f" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "320,1,62,71,75,79,80,87,93,94,95,111,117,118,119,178,182,187,188,847,849,906,910,926,927,955,961,962,1390,1397,1403,1404,1405,1601,1605,1609,1610,1614,1618,1623,1624,1629,1630,1638,1644,1645,1676,1677,1678,1684,1690,1691,1692,1695,1696,1708,1714,1715,1716,1727,1728,1734,1738,1742,1743,1748,1754,1758,1759,1768,1774,1775,1776,1789,1795,1796,1797,1800,1807,1815,1822,1828,1835,1867,1874,1894,1901,1920,1925,1943,1950,1968,1969,2174,2177,2187,2188,2201,2202,2203,2204,2205,2206,2214,2215,2238,2239,2285,2290,2293,2296,2299,2302,2305,2307,2311,2312,2316,2319,2324,2325,2328,2330,2340,2343,2933,2935,2939,2943,2948,2950,2955,2959,2960,2964,2965,2969,2970,2974,2975,2979,2980,2984,2985,2989,2990,2994,2995,2999,3000,3004,3005,3009,3010,3014,3015,3019,3020,3022,3029,3033,3034,3038,3039,3043,3044,3048,3049,3053,3054,3058,3059,3063,3064,3066,3067,3071,3072,3076,3077,3081,3082,3086,3087,3091,3092,3096,3097,3101,3102,3104,3108,3112,3113,3117,3118,3120,3121,3123,3124,3128,3129,3133,3134,3136,3137,3141,3142,3144,3145,3149,3150,3154,3155,3157,3158,3162,3163,3165,3169,3182,3187,3241,3244,3354,6197,6198,6332,7001,7254,7255,8924,9000,9564,9565,9623,9624,9659,9666,10013,10028,10466,10467,10517,10518,10827,10828,16009,16010,16082,16083,16091,16092,16227,16228,16232,16233,16286,16287,16297,16298,16331,16332,16351,16352,16404,16405,16550,16551,16626,16627,16773,16774,21524,21526,21665,21666,21691,21692,21788,21789,21840,21841,21852,21853,21903,21904,21979,21980,22043,22044,22306,22307,22811,22812,26686,26687,26743,26744,27168,27169,32768,32770,32800,32835,34056,35081,35909,35910,37496,37497,38346,98306,98336,98356,98358,126247,126637,128647,128687,128688") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

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


# ---- 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/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/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
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/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
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/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
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/km41.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
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/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
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/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
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/km41.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

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

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:8f8d618f56240e23c69ef99d0aab46f19f45cfc9"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d821a53c425ac8d9b37c4080dd9aa64f1e51910a"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d821a53c425ac8d9b37c4080dd9aa64f1e51910a")));

# ---- 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");
set_progress(1.000000);
