
if get_stage("/dev/block/bootdevice/by-name/misc") == "2/3" then

sleep(20);

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

set_stage("/dev/block/bootdevice/by-name/misc", "3/3");
reboot_now("/dev/block/bootdevice/by-name/misc", "recovery");
else if get_stage("/dev/block/bootdevice/by-name/misc") != "3/3" then

ui_print("Source: Nokia/TA-1025_00WW/PLE:8.0.0/OPR1.170623.026/00WW_5_22C:user/release-keys");
ui_print("Target: Nokia/TA-1025_00WW/PLE:8.1.0/OPR1.170623.026/00WW_5_580:user/release-keys");
ui_print("Verifying current system...");
apply_patch_space(85020672) || abort("E3006: Not enough free space on /cache to apply patches.");

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

ui_print("Patching firmware images...");
ifelse(msm.boot_update("main"), (
package_extract_file("firmware-update/D1C-0-5580-emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/D1C-0-5580-cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/D1C-0-5580-rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/D1C-0-5580-sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/D1C-0-5580-keymaster.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/D1C-0-5580-cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/D1C-0-5580-tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/D1C-0-5580-devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
), "");
msm.boot_update("backup");
msm.boot_update("finalize");
package_extract_file("firmware-update/D1C-0-5580-NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/D1C-0-5580-adspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/D1C-0-5580-sec.dat", "/dev/block/bootdevice/by-name/sec");
package_extract_file("firmware-update/D1C-0-5580-00WW-persist.img", "/dev/block/bootdevice/by-name/persist");
package_extract_file("firmware-update/D1C-0-5580-00WW-mdtp.img", "/dev/block/bootdevice/by-name/mdtp");
package_extract_file("firmware-update/D1C-0-5580-hwcfg.img", "/dev/block/bootdevice/by-name/hwcfg");
package_extract_file("firmware-update/fver", "/dev/block/bootdevice/by-name/systeminfo");
package_extract_file("firmware-update/PLE-00WW-013-cda.img", "/dev/block/bootdevice/by-name/cda");
package_extract_file("firmware-update/D1C-0-5580-NV-default.mbn", "/dev/block/bootdevice/by-name/default_nv");
package_extract_file("recovery.img", "/dev/block/bootdevice/by-name/boot");

set_stage("/dev/block/bootdevice/by-name/misc", "2/3");
reboot_now("/dev/block/bootdevice/by-name/misc", "");
else

if (range_sha1("/dev/block/bootdevice/by-name/system", "428,1,304,305,803,815,32669,32674,32676,32690,32734,32745,32747,32753,32767,32768,32770,33073,33074,33583,65428,65432,65433,65437,65444,65446,65448,65450,65473,65475,65481,65487,65516,65518,65535,65536,65537,66046,98303,98304,98306,98609,98610,101900,113556,113573,131071,131072,131073,131582,161892,161895,161897,161906,162320,162363,163806,163835,163839,163840,163842,164145,164146,164655,196607,196608,196609,197118,211241,211267,211425,211428,212427,212430,213973,213976,225023,225024,226461,226462,226494,226496,226499,226502,228157,228188,228235,228243,228778,228784,229375,229376,229378,229681,229682,230191,262143,262144,262145,262654,279924,279925,279928,279929,279935,279937,280004,280005,280629,280630,283840,283851,284695,284700,284759,284764,284797,284802,294910,294912,294914,295217,295218,295727,327679,327680,327681,328190,329949,360448,360449,360958,370630,370632,370646,370648,370694,370696,370700,370702,370715,370717,370770,370771,370786,370788,370792,370794,370803,370809,370817,370819,372239,372435,393215,393216,393217,393726,394198,425984,425985,426494,457120,457122,458751,458752,458753,459262,485185,485199,485475,485485,487652,487662,491519,491520,491521,492030,503112,503152,508095,508100,516503,516539,517669,517687,518371,518386,521910,521923,521998,522014,522019,522040,522056,522068,524287,524288,524289,524798,527033,527047,529958,529963,531147,531223,537808,537859,557055,557056,557057,557566,561493,561541,564173,564261,568495,568533,568536,568565,573499,574546,574606,574619,578505,578734,579811,579834,579835,579915,589823,589824,589825,590334,618533,622146,622590,622592,622593,623102,655358,655360,655361,655870,688126,688128,688129,688638,720894,720896,720897,721406,721488,753664,753665,754174,785483,785484,785700,785704,785705,785707,786248,786249,786390,786393,786430,786432,786433,786942,811004,811006,811008,811016,813570,813573,813589,813592,813962,813966,816090,816107,816125,816134,816142,816180,816204,816219,816247,816266,816284,816293,816381,816400,816434,816443,816460,816469,816478,816504,816520,816529,816554,816564,816575,816603,816618,816656,816661,816675,816683,816710,816814,816827,816881,816890,816911,816920,816929,816951,816977,816985,817009,817019,817089,817098,817107,817116,817125,817153,817161,817178,817182,817207,819198,819200,819202,819505,819506,820015,851779,851875,851966,851968,851969,852478,852495,884736,884738,885041,885042,885551,907943,909058,917502,917504,917505,918014,918031,950272,950273,950782,950799,983040,983041,983550,1015806,1015808,1015809,1016318,1027425,1027449,1027478,1027495,1036316,1036476,1045205,1045212,1045692,1045697,1045729,1045732,1048574,1048576,1048577,1049086,1054665,1054698,1069638,1069643,1070991,1071007,1071033,1071053,1071062,1071078,1080943,1081058,1081342,1081344,1081345,1081854,1084874,1114112,1114113,1114622,1114634,1146880,1146881,1147390,1147402,1179648,1179649,1180158,1180170,1212416,1212417,1212926,1212927,1232200,1232206,1232489,1232490,1232691,1233565,1233566,1243282,1243289,1253120") == "63514bfab3bf501bdefe275cd7e9a654965ad80a" || 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", "428,1,304,305,803,815,32669,32674,32676,32690,32734,32745,32747,32753,32767,32768,32770,33073,33074,33583,65428,65432,65433,65437,65444,65446,65448,65450,65473,65475,65481,65487,65516,65518,65535,65536,65537,66046,98303,98304,98306,98609,98610,101900,113556,113573,131071,131072,131073,131582,161892,161895,161897,161906,162320,162363,163806,163835,163839,163840,163842,164145,164146,164655,196607,196608,196609,197118,211241,211267,211425,211428,212427,212430,213973,213976,225023,225024,226461,226462,226494,226496,226499,226502,228157,228188,228235,228243,228778,228784,229375,229376,229378,229681,229682,230191,262143,262144,262145,262654,279924,279925,279928,279929,279935,279937,280004,280005,280629,280630,283840,283851,284695,284700,284759,284764,284797,284802,294910,294912,294914,295217,295218,295727,327679,327680,327681,328190,329949,360448,360449,360958,370630,370632,370646,370648,370694,370696,370700,370702,370715,370717,370770,370771,370786,370788,370792,370794,370803,370809,370817,370819,372239,372435,393215,393216,393217,393726,394198,425984,425985,426494,457120,457122,458751,458752,458753,459262,485185,485199,485475,485485,487652,487662,491519,491520,491521,492030,503112,503152,508095,508100,516503,516539,517669,517687,518371,518386,521910,521923,521998,522014,522019,522040,522056,522068,524287,524288,524289,524798,527033,527047,529958,529963,531147,531223,537808,537859,557055,557056,557057,557566,561493,561541,564173,564261,568495,568533,568536,568565,573499,574546,574606,574619,578505,578734,579811,579834,579835,579915,589823,589824,589825,590334,618533,622146,622590,622592,622593,623102,655358,655360,655361,655870,688126,688128,688129,688638,720894,720896,720897,721406,721488,753664,753665,754174,785483,785484,785700,785704,785705,785707,786248,786249,786390,786393,786430,786432,786433,786942,811004,811006,811008,811016,813570,813573,813589,813592,813962,813966,816090,816107,816125,816134,816142,816180,816204,816219,816247,816266,816284,816293,816381,816400,816434,816443,816460,816469,816478,816504,816520,816529,816554,816564,816575,816603,816618,816656,816661,816675,816683,816710,816814,816827,816881,816890,816911,816920,816929,816951,816977,816985,817009,817019,817089,817098,817107,817116,817125,817153,817161,817178,817182,817207,819198,819200,819202,819505,819506,820015,851779,851875,851966,851968,851969,852478,852495,884736,884738,885041,885042,885551,907943,909058,917502,917504,917505,918014,918031,950272,950273,950782,950799,983040,983041,983550,1015806,1015808,1015809,1016318,1027425,1027449,1027478,1027495,1036316,1036476,1045205,1045212,1045692,1045697,1045729,1045732,1048574,1048576,1048577,1049086,1054665,1054698,1069638,1069643,1070991,1071007,1071033,1071053,1071062,1071078,1080943,1081058,1081342,1081344,1081345,1081854,1084874,1114112,1114113,1114622,1114634,1146880,1146881,1147390,1147402,1179648,1179649,1180158,1180170,1212416,1212417,1212926,1212927,1232200,1232206,1232489,1232490,1232691,1233565,1233566,1243282,1243289,1253120") && 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;

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

ui_print("Ignore file diff patch in block incrementalOTA...");
ui_print("Patching system image after verification.");
show_progress(0.900000, 0);
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.");
package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");

set_stage("/dev/block/bootdevice/by-name/misc", "");
endif;
endif;

set_progress(1.000000);
