getprop("ro.product.device") == "citrus" || abort("E3004: This package is for \"citrus\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: POCO/citrus_eea/citrus:11/RKQ1.201004.002/V12.5.4.0.RJFEUXM:user/release-keys");
ui_print("Target: POCO/citrus_eea/citrus:11/RKQ1.201004.002/V12.5.5.0.RJFEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/citrus_eea/citrus:11/RKQ1.201004.002/V12.5.4.0.RJFEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/citrus_eea/citrus:11/RKQ1.201004.002/V12.5.5.0.RJFEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/citrus_eea/citrus:11/RKQ1.201004.002/V12.5.4.0.RJFEUXM:user/release-keys or POCO/citrus_eea/citrus:11/RKQ1.201004.002/V12.5.5.0.RJFEUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:324c7fa9cddf80c76fa1ade9a88d1fb7a28156ac"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:db47c341e1eb03642d6282cccb80afb37068d8a0")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:324c7fa9cddf80c76fa1ade9a88d1fb7a28156ac"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:db47c341e1eb03642d6282cccb80afb37068d8a0"),"\" has unexpected contents."));
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1366,1,33,45,55,75,79,107,108,21363,21364,21394,21395,27559,27560,28974,43326,50492,56687,56694,56695,58037,58038,60195,60196,62748,62749,63491,63492,65022,65023,65213,65214,65536,65553,66457,66458,70811,70812,71926,71927,73924,73925,74405,74406,77556,77557,78135,78136,78323,78324,79028,79029,79245,79247,79408,79412,79420,79421,84299,84300,84312,84316,84320,84321,85741,85747,85780,85781,85787,85793,85794,85795,85800,85806,85807,85808,89304,89308,89348,89349,90330,90331,90981,90982,92913,92916,92924,92925,92947,92948,92952,92953,93388,93389,93563,93564,93595,93601,93602,93603,93723,93729,93730,93731,95065,95066,98033,98034,98304,98323,99063,99067,99105,99106,99120,99126,99127,99128,104856,104860,104926,104927,106015,106019,106040,106041,106689,106690,106794,106809,106814,106817,106818,106854,107140,107141,107157,107158,107289,107290,107292,107293,107295,107296,114587,114591,114617,114618,114747,114751,114757,114758,114891,114895,114902,114903,120186,120190,120259,120260,120288,120289,120327,120333,120334,120335,120583,120584,120617,120623,120624,120625,121100,121104,121120,121121,121673,121679,121680,121681,123551,123555,123600,123601,123605,123611,123612,123613,123644,123650,123651,123652,125342,125346,125370,125371,125395,125396,125398,125399,125400,125401,125402,125403,125433,125434,129374,129378,129415,129416,131072,131089,131198,131202,131220,131221,131250,131251,131256,131262,131263,131264,133069,133073,133115,133116,135649,135650,136765,136767,136768,136769,136803,136807,136824,136825,136830,136831,137281,137285,137687,137688,138378,138382,138398,138399,140514,140518,140546,140547,140558,140559,140842,140846,140856,140857,140894,140895,143593,143594,149712,149716,149803,149804,151018,151019,151163,151164,151329,151333,151360,151361,154634,154635,157906,157910,157935,157936,157955,157956,160363,160364,161014,161018,161074,161075,162868,162872,162910,162911,162952,162958,162964,167336,167357,167358,170682,170683,172782,172786,172817,172818,173949,173955,173978,173979,174156,174157,175475,175481,175503,175504,177453,177457,177487,177488,178182,178183,178844,178848,178870,178871,181072,181076,181108,181109,196608,196625,203878,203879,205746,205747,205922,205923,207672,207676,207844,207845,207937,207938,215284,215286,219494,219495,224680,224684,224755,224756,224808,224809,226507,226508,227421,227425,227450,227451,227464,227465,227468,227474,227479,227480,229376,229395,230868,230869,232517,232521,232568,232569,232600,232601,232603,232607,232608,232609,232653,232661,232662,232663,235483,235489,235534,235535,235566,235572,235573,235574,235616,235622,235623,235624,237946,237947,238960,238964,239003,239004,239086,239090,239095,239096,239107,239113,239114,239115,239682,239686,239701,239702,240925,240929,240955,240956,250327,250404,252319,252320,252346,252347,255282,255286,255452,255453,255532,255533,255541,255547,255548,255549,256838,256842,256864,256865,258538,258542,258559,258560,259616,259617,261252,261256,261284,261285,261292,261298,261299,261300,261305,261309,261314,261315,261319,261320,261335,261341,261342,261343,262144,262161,262343,262347,264095,264096,264120,264126,264127,264128,266544,266545,268868,268872,268943,268944,269292,269296,269309,269310,270654,270660,270679,270680,270689,270695,270696,270697,272144,272148,273585,273586,273610,273611,278442,278443,279478,279479,280603,280604,282255,282259,282342,282343,282379,282383,284897,284901,284915,284916,285413,285417,285425,285426,287072,287073,288414,288415,288421,288428,288441,288442,289052,289053,290053,290069,290592,290593,293865,293866,294912,294931,296693,296698,296699,296700,296701,296702,296703,296704,296705,296706,296707,296708,296709,296710,296711,296712,296713,296714,296715,296716,296717,296718,296719,296720,296721,296722,296723,296724,296725,296726,296727,296728,296729,296730,296731,296732,296733,296734,296735,296736,296737,296738,296739,296740,296741,296742,296743,296744,296745,296746,296747,296748,296749,296750,296751,296752,296753,296754,296755,296756,296757,296758,296759,296760,296761,296762,296763,296764,296765,296766,296767,296768,296769,296770,296771,296772,296773,296774,296775,296776,296777,296778,296779,296780,296781,296782,296783,296784,296785,296786,296787,296788,296789,296790,296791,296792,296793,296794,296795,296796,296797,296798,296799,296800,296801,296802,296803,296804,296805,296806,296807,296808,296809,296810,296811,296812,296813,296814,296815,296816,296817,296818,296819,296820,296821,296822,296823,296824,296825,296826,296827,296828,296829,296830,296831,296832,296833,296834,296835,296836,296837,296838,296839,296840,296841,296842,296843,296844,296845,296846,296847,296848,296849,296850,296851,296852,296853,296854,296855,296856,296857,296858,296859,296860,296861,296862,296863,296864,296865,296866,296867,296868,296869,296870,296871,296872,296873,296874,296875,296876,296877,296878,296879,296880,296881,296882,296883,296884,296885,296886,296887,296888,296889,296890,296891,296892,296893,296894,296895,296896,296897,296898,296899,296900,296901,296902,296903,296904,296905,296906,296907,296908,296909,296910,296911,296912,296913,296914,296915,296916,296917,296918,296919,296920,296921,296922,296923,296924,296925,296926,296927,296928,296929,296930,296931,296932,296933,296934,296935,296936,296937,296938,296939,296940,296941,296942,296943,296944,296945,296946,296947,296948,296949,296950,296951,296952,296953,296954,296955,296956,296957,296958,296959,296960,296961,296962,296963,296964,296965,296966,296967,296968,296969,296970,296971,296972,296973,296974,296975,296976,296977,296978,296979,296980,296981,296982,296983,296984,296985,296986,296987,296988,296989,296990,296991,296992,296993,296994,296995,296996,296997,296998,296999,297000,297001,297002,297003,297004,297005,297006,297007,297008,297009,297010,297011,297012,297013,297014,297015,297016,297017,297018,297019,297020,297021,297022,297023,297024,297025,297026,297027,297028,297029,297030,297031,297032,297033,297034,297035,297036,297037,297038,297039,297040,297041,297042,297043,297044,297045,297046,297047,297048,297049,297050,297051,297052,297053,297054,297055,297056,297057,297058,297059,297060,297061,297062,297063,297064,297065,297066,297067,297068,297069,297070,297071,297072,297073,297074,297075,297076,297077,297078,297079,297080,297081,297082,297083,297084,297085,297086,297087,297088,297089,297090,297091,297092,297093,297094,297095,297096,297097,297098,297099,297100,297101,297102,297103,297104,297105,297106,297107,297108,297109,297110,297111,297112,297113,297114,297115,297116,297117,297118,297119,297120,297121,297122,297123,297124,297125,297126,297127,297128,297129,297130,297131,297132,297133,297134,297135,297136,297137,297138,297139,297140,297141,297143,297148,297149,303049,303050,304389,304390,304394,304395,308727,308728,308874,308875,311660,311661,312302,312306,312326,312327,312652,312653,312655,312677,312689,312690,312697,312698,312732,312733,312738,312739,312764,312765,312848,312849,312857,312858,312921,312922,312925,312930,312931,312932,312933,312934,312935,312936,313859,313860,313867,313868,314421,314422,314423,314427,314428,314429,314430,314431,314432,314433,314434,314435,314436,314437,314438,314439,314440,314441,314443,314444,314445,314448,315692,315694,315834,315835,315839,315841,316099,316100,316102,316104,316647,316648,316663,316664,316681,316682,316828,316829,316837,316839,316841,316842,325865,325866,327680,327697,333817,333818,335802,335803,336433,336436,336442,336443,336448,336449,336454,336505,336510,339845,339850,339857,339871,339877,339887,339888,339893,339894,339899,340012,340024,340025,340029,340073,340082,340084,340090,340091,340096,340097,340102,340157,340162,343946,343951,343958,343970,343975,343983,343984,343989,343990,343995,344112,344117,344118,344122,344168,344189,344200,345302,345303,349972,349973,350099,350100,350226,350227,350261,350262,350585,350586,350934,350935,350951,350952,350958,350959,350965,350966,351270,351271,351435,351436,351441,351442,351443,351444,351445,351446,351447,351448,351449,351450,351452,351453,351454,351455,351456,351457,351458,351459,351460,351461,351462,351463,351464,351465,351466,351467,351468,351469,351470,351471,351472,351473,351474,351475,351476,351477,351478,351479,351480,351481,351482,351483,351484,351485,351488,351489,351490,351491,351492,351493,351494,351495,351496,351497,351498,351499,351501,351502,351503,351504,351635,351636,351663,351664,351685,351686,351693,351694,351713,351714,351756,351757,351809,351810,351878,351879,351933,351934,351935,351936,351937,351938,351939,351940,351942,351943,351944,351945,351946,351947,351948,351949,351950,351951,351952,351953,351954,351955,351956,351957,351958,351959,351960,351961,351962,351963,351964,351965,351966,351967,351968,351969,351970,351971,351972,351973,352069,352070,352071,352072,352073,352074,352075,352076,352077,352078,352079,352080,352081,352082,352084,352085,352086,352087,352088,352089,352090,352091,352092,352093,352094,352095,352096,352097,352098,352099,352100,352101,352102,352103,352104,352105,352106,352107,352108,352109,352110,352111,352112,352113,352114,352115,352116,352117,352118,352119,352120,352121,352122,352123,352124,352125,352126,352127,352128,352129,352130,352131,352153,352154,352324,352325,352402,352403,352438,352439,352450,352451,352494,352496,352607,352608,352651,352652,352668,352669,352680,352681,353041,353042,353312,353313,353562,353563,354494,655373,655377,688129,688145,700142,702236,713364,713515,713516") == "76467fc4b0a2c8e4cd1b390cf9f7b26545cfed98" || 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"), "1366,1,33,45,55,75,79,107,108,21363,21364,21394,21395,27559,27560,28974,43326,50492,56687,56694,56695,58037,58038,60195,60196,62748,62749,63491,63492,65022,65023,65213,65214,65536,65553,66457,66458,70811,70812,71926,71927,73924,73925,74405,74406,77556,77557,78135,78136,78323,78324,79028,79029,79245,79247,79408,79412,79420,79421,84299,84300,84312,84316,84320,84321,85741,85747,85780,85781,85787,85793,85794,85795,85800,85806,85807,85808,89304,89308,89348,89349,90330,90331,90981,90982,92913,92916,92924,92925,92947,92948,92952,92953,93388,93389,93563,93564,93595,93601,93602,93603,93723,93729,93730,93731,95065,95066,98033,98034,98304,98323,99063,99067,99105,99106,99120,99126,99127,99128,104856,104860,104926,104927,106015,106019,106040,106041,106689,106690,106794,106809,106814,106817,106818,106854,107140,107141,107157,107158,107289,107290,107292,107293,107295,107296,114587,114591,114617,114618,114747,114751,114757,114758,114891,114895,114902,114903,120186,120190,120259,120260,120288,120289,120327,120333,120334,120335,120583,120584,120617,120623,120624,120625,121100,121104,121120,121121,121673,121679,121680,121681,123551,123555,123600,123601,123605,123611,123612,123613,123644,123650,123651,123652,125342,125346,125370,125371,125395,125396,125398,125399,125400,125401,125402,125403,125433,125434,129374,129378,129415,129416,131072,131089,131198,131202,131220,131221,131250,131251,131256,131262,131263,131264,133069,133073,133115,133116,135649,135650,136765,136767,136768,136769,136803,136807,136824,136825,136830,136831,137281,137285,137687,137688,138378,138382,138398,138399,140514,140518,140546,140547,140558,140559,140842,140846,140856,140857,140894,140895,143593,143594,149712,149716,149803,149804,151018,151019,151163,151164,151329,151333,151360,151361,154634,154635,157906,157910,157935,157936,157955,157956,160363,160364,161014,161018,161074,161075,162868,162872,162910,162911,162952,162958,162964,167336,167357,167358,170682,170683,172782,172786,172817,172818,173949,173955,173978,173979,174156,174157,175475,175481,175503,175504,177453,177457,177487,177488,178182,178183,178844,178848,178870,178871,181072,181076,181108,181109,196608,196625,203878,203879,205746,205747,205922,205923,207672,207676,207844,207845,207937,207938,215284,215286,219494,219495,224680,224684,224755,224756,224808,224809,226507,226508,227421,227425,227450,227451,227464,227465,227468,227474,227479,227480,229376,229395,230868,230869,232517,232521,232568,232569,232600,232601,232603,232607,232608,232609,232653,232661,232662,232663,235483,235489,235534,235535,235566,235572,235573,235574,235616,235622,235623,235624,237946,237947,238960,238964,239003,239004,239086,239090,239095,239096,239107,239113,239114,239115,239682,239686,239701,239702,240925,240929,240955,240956,250327,250404,252319,252320,252346,252347,255282,255286,255452,255453,255532,255533,255541,255547,255548,255549,256838,256842,256864,256865,258538,258542,258559,258560,259616,259617,261252,261256,261284,261285,261292,261298,261299,261300,261305,261309,261314,261315,261319,261320,261335,261341,261342,261343,262144,262161,262343,262347,264095,264096,264120,264126,264127,264128,266544,266545,268868,268872,268943,268944,269292,269296,269309,269310,270654,270660,270679,270680,270689,270695,270696,270697,272144,272148,273585,273586,273610,273611,278442,278443,279478,279479,280603,280604,282255,282259,282342,282343,282379,282383,284897,284901,284915,284916,285413,285417,285425,285426,287072,287073,288414,288415,288421,288428,288441,288442,289052,289053,290053,290069,290592,290593,293865,293866,294912,294931,296693,296698,296699,296700,296701,296702,296703,296704,296705,296706,296707,296708,296709,296710,296711,296712,296713,296714,296715,296716,296717,296718,296719,296720,296721,296722,296723,296724,296725,296726,296727,296728,296729,296730,296731,296732,296733,296734,296735,296736,296737,296738,296739,296740,296741,296742,296743,296744,296745,296746,296747,296748,296749,296750,296751,296752,296753,296754,296755,296756,296757,296758,296759,296760,296761,296762,296763,296764,296765,296766,296767,296768,296769,296770,296771,296772,296773,296774,296775,296776,296777,296778,296779,296780,296781,296782,296783,296784,296785,296786,296787,296788,296789,296790,296791,296792,296793,296794,296795,296796,296797,296798,296799,296800,296801,296802,296803,296804,296805,296806,296807,296808,296809,296810,296811,296812,296813,296814,296815,296816,296817,296818,296819,296820,296821,296822,296823,296824,296825,296826,296827,296828,296829,296830,296831,296832,296833,296834,296835,296836,296837,296838,296839,296840,296841,296842,296843,296844,296845,296846,296847,296848,296849,296850,296851,296852,296853,296854,296855,296856,296857,296858,296859,296860,296861,296862,296863,296864,296865,296866,296867,296868,296869,296870,296871,296872,296873,296874,296875,296876,296877,296878,296879,296880,296881,296882,296883,296884,296885,296886,296887,296888,296889,296890,296891,296892,296893,296894,296895,296896,296897,296898,296899,296900,296901,296902,296903,296904,296905,296906,296907,296908,296909,296910,296911,296912,296913,296914,296915,296916,296917,296918,296919,296920,296921,296922,296923,296924,296925,296926,296927,296928,296929,296930,296931,296932,296933,296934,296935,296936,296937,296938,296939,296940,296941,296942,296943,296944,296945,296946,296947,296948,296949,296950,296951,296952,296953,296954,296955,296956,296957,296958,296959,296960,296961,296962,296963,296964,296965,296966,296967,296968,296969,296970,296971,296972,296973,296974,296975,296976,296977,296978,296979,296980,296981,296982,296983,296984,296985,296986,296987,296988,296989,296990,296991,296992,296993,296994,296995,296996,296997,296998,296999,297000,297001,297002,297003,297004,297005,297006,297007,297008,297009,297010,297011,297012,297013,297014,297015,297016,297017,297018,297019,297020,297021,297022,297023,297024,297025,297026,297027,297028,297029,297030,297031,297032,297033,297034,297035,297036,297037,297038,297039,297040,297041,297042,297043,297044,297045,297046,297047,297048,297049,297050,297051,297052,297053,297054,297055,297056,297057,297058,297059,297060,297061,297062,297063,297064,297065,297066,297067,297068,297069,297070,297071,297072,297073,297074,297075,297076,297077,297078,297079,297080,297081,297082,297083,297084,297085,297086,297087,297088,297089,297090,297091,297092,297093,297094,297095,297096,297097,297098,297099,297100,297101,297102,297103,297104,297105,297106,297107,297108,297109,297110,297111,297112,297113,297114,297115,297116,297117,297118,297119,297120,297121,297122,297123,297124,297125,297126,297127,297128,297129,297130,297131,297132,297133,297134,297135,297136,297137,297138,297139,297140,297141,297143,297148,297149,303049,303050,304389,304390,304394,304395,308727,308728,308874,308875,311660,311661,312302,312306,312326,312327,312652,312653,312655,312677,312689,312690,312697,312698,312732,312733,312738,312739,312764,312765,312848,312849,312857,312858,312921,312922,312925,312930,312931,312932,312933,312934,312935,312936,313859,313860,313867,313868,314421,314422,314423,314427,314428,314429,314430,314431,314432,314433,314434,314435,314436,314437,314438,314439,314440,314441,314443,314444,314445,314448,315692,315694,315834,315835,315839,315841,316099,316100,316102,316104,316647,316648,316663,316664,316681,316682,316828,316829,316837,316839,316841,316842,325865,325866,327680,327697,333817,333818,335802,335803,336433,336436,336442,336443,336448,336449,336454,336505,336510,339845,339850,339857,339871,339877,339887,339888,339893,339894,339899,340012,340024,340025,340029,340073,340082,340084,340090,340091,340096,340097,340102,340157,340162,343946,343951,343958,343970,343975,343983,343984,343989,343990,343995,344112,344117,344118,344122,344168,344189,344200,345302,345303,349972,349973,350099,350100,350226,350227,350261,350262,350585,350586,350934,350935,350951,350952,350958,350959,350965,350966,351270,351271,351435,351436,351441,351442,351443,351444,351445,351446,351447,351448,351449,351450,351452,351453,351454,351455,351456,351457,351458,351459,351460,351461,351462,351463,351464,351465,351466,351467,351468,351469,351470,351471,351472,351473,351474,351475,351476,351477,351478,351479,351480,351481,351482,351483,351484,351485,351488,351489,351490,351491,351492,351493,351494,351495,351496,351497,351498,351499,351501,351502,351503,351504,351635,351636,351663,351664,351685,351686,351693,351694,351713,351714,351756,351757,351809,351810,351878,351879,351933,351934,351935,351936,351937,351938,351939,351940,351942,351943,351944,351945,351946,351947,351948,351949,351950,351951,351952,351953,351954,351955,351956,351957,351958,351959,351960,351961,351962,351963,351964,351965,351966,351967,351968,351969,351970,351971,351972,351973,352069,352070,352071,352072,352073,352074,352075,352076,352077,352078,352079,352080,352081,352082,352084,352085,352086,352087,352088,352089,352090,352091,352092,352093,352094,352095,352096,352097,352098,352099,352100,352101,352102,352103,352104,352105,352106,352107,352108,352109,352110,352111,352112,352113,352114,352115,352116,352117,352118,352119,352120,352121,352122,352123,352124,352125,352126,352127,352128,352129,352130,352131,352153,352154,352324,352325,352402,352403,352438,352439,352450,352451,352494,352496,352607,352608,352651,352652,352668,352669,352680,352681,353041,353042,353312,353313,353562,353563,354494,655373,655377,688129,688145,700142,702236,713364,713515,713516") && 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"), "600,1,31,41,45,50,51,129,137,143,144,1821,1825,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2590,2594,2598,2599,2622,2623,2659,2663,2713,2714,2873,2874,2877,2883,2884,2891,2904,2905,5243,5244,7780,7781,9148,9149,9849,9851,9852,9853,9855,9858,9859,9860,9862,9864,9865,9866,9868,9870,9871,9872,9874,9876,9877,9878,9881,9883,9884,9885,9888,9890,9893,9895,9903,9905,9908,9910,9913,9915,9916,9917,9922,9923,9925,9927,9928,9929,9931,9933,9934,9935,9937,9939,9940,9941,9943,9945,9946,9947,9972,9973,9977,9978,9984,9985,9988,9989,9990,9991,9994,9995,9996,9997,10000,10001,10002,10003,10008,10009,10012,10013,10014,10015,10018,10019,10020,10021,10025,10026,10030,10031,10034,10036,10039,10041,10045,10046,10051,10052,10053,10054,10057,10058,10059,10060,10063,10064,10065,10066,10069,10070,10071,10072,10075,10076,10077,10078,10081,10082,10083,10084,10088,10089,10379,10380,11407,11412,14504,14505,14659,14660,27218,27219,27508,27510,27583,27584,29398,29399,32768,32800,34050,34051,34685,34687,35328,35329,35861,35862,36394,36395,36398,36399,36841,36842,37748,37749,37757,37758,37853,37854,39780,39782,50759,50760,51025,51026,51030,51032,51049,51050,51085,51086,51095,51096,51097,51098,51148,51149,51155,51156,52572,52573,56649,56650,56652,56654,56718,56719,56789,56790,56857,56858,56860,56861,56863,56864,56923,56925,56927,56928,56992,56993,57063,57064,57131,57132,57134,57135,57137,57140,57141,57143,57145,57146,57152,57153,57155,57156,57159,57160,57171,57173,57175,57176,57182,57183,57185,57186,57189,57190,57192,57193,57196,57199,57201,57202,57204,57206,57209,57211,57213,57214,57222,57223,57225,57226,57236,57237,57239,57240,57242,57243,57246,57247,57258,57260,57262,57263,57269,57270,57272,57273,57275,57276,57278,57279,57281,57292,57352,57353,57355,57356,57366,57367,57433,57434,57511,57512,57522,57523,57589,57590,57666,57667,57746,57747,57823,57824,57900,57901,57977,57978,57988,57989,57992,57993,58056,58057,58132,58133,58143,58144,58210,58211,58287,58288,58360,58361,58363,58364,58376,58381,58382,58383,58387,58388,58390,58391,58394,58395,59935,59936,59971,59973,59978,59980,60106,60107,60156,60159,60435,60436,60437,60438,61727,61728,62861,62862,64097,64098,65317,65318,65536,65574,66046,66047,70267,72288,74982,74983,75506,75521,75822,75823,82699,82700,84104,84166,87942,87943,88424,88425,94587,94589,97427,97428,98304,98344,101413,101414,101416,101417,107661,107662,107668,107670,107677,107678,107819,107820,114100,114102,114181,114182,120267,120268,124734,124735,128826,128827,129989,129990,130911,130996,131072,131096,131393,131394,140211,140212,144640,145828,145833,148295,149521,149522,152482,152484,155201,155202,156045,156052,156416,156417,163840,163869,189530,191976,195342,195344,196183,196184,196608,196637,204147,204148,205778,205779,207174,207236,211195,211196,211340,211341,212505,212506,218126,218127,220729,220731,226048,226049,229376,229400,231001,231002,239549,239550,239556,239558,239565,239566,240013,240014,246599,246600,246604,246605,246612,246613,252253,252254,252270,252271,252272,252274,252275,252277,252278,252280,252281,252283,252284,252285,252341,252343,252344,252345,252347,252348,252350,252351,252537,252538,258046,258047,259102,259103,262144,262166,262792,262793,268026,268028,268362,268364,269721,269722,272382,272383,272865,272866,275313,275314,278758,278759,280900,280901,284073,284074,290224,290225,290229,290230,290237,290238,291767,291768,291790,291791,292514,292516,292648,292649,294149,294155,294156,294157,294912,294928,296776,296777,297121,297122,299098,299099,299188,299190,304589,304590,305246,305248,305249,305251,307753,307755,307763,307765,307781,307782,307816,312044,312051,312062,313010,317972,318049,318050") == "36d8a58d885c4cd615810f807de7bb296fea2fec" || 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"), "600,1,31,41,45,50,51,129,137,143,144,1821,1825,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2590,2594,2598,2599,2622,2623,2659,2663,2713,2714,2873,2874,2877,2883,2884,2891,2904,2905,5243,5244,7780,7781,9148,9149,9849,9851,9852,9853,9855,9858,9859,9860,9862,9864,9865,9866,9868,9870,9871,9872,9874,9876,9877,9878,9881,9883,9884,9885,9888,9890,9893,9895,9903,9905,9908,9910,9913,9915,9916,9917,9922,9923,9925,9927,9928,9929,9931,9933,9934,9935,9937,9939,9940,9941,9943,9945,9946,9947,9972,9973,9977,9978,9984,9985,9988,9989,9990,9991,9994,9995,9996,9997,10000,10001,10002,10003,10008,10009,10012,10013,10014,10015,10018,10019,10020,10021,10025,10026,10030,10031,10034,10036,10039,10041,10045,10046,10051,10052,10053,10054,10057,10058,10059,10060,10063,10064,10065,10066,10069,10070,10071,10072,10075,10076,10077,10078,10081,10082,10083,10084,10088,10089,10379,10380,11407,11412,14504,14505,14659,14660,27218,27219,27508,27510,27583,27584,29398,29399,32768,32800,34050,34051,34685,34687,35328,35329,35861,35862,36394,36395,36398,36399,36841,36842,37748,37749,37757,37758,37853,37854,39780,39782,50759,50760,51025,51026,51030,51032,51049,51050,51085,51086,51095,51096,51097,51098,51148,51149,51155,51156,52572,52573,56649,56650,56652,56654,56718,56719,56789,56790,56857,56858,56860,56861,56863,56864,56923,56925,56927,56928,56992,56993,57063,57064,57131,57132,57134,57135,57137,57140,57141,57143,57145,57146,57152,57153,57155,57156,57159,57160,57171,57173,57175,57176,57182,57183,57185,57186,57189,57190,57192,57193,57196,57199,57201,57202,57204,57206,57209,57211,57213,57214,57222,57223,57225,57226,57236,57237,57239,57240,57242,57243,57246,57247,57258,57260,57262,57263,57269,57270,57272,57273,57275,57276,57278,57279,57281,57292,57352,57353,57355,57356,57366,57367,57433,57434,57511,57512,57522,57523,57589,57590,57666,57667,57746,57747,57823,57824,57900,57901,57977,57978,57988,57989,57992,57993,58056,58057,58132,58133,58143,58144,58210,58211,58287,58288,58360,58361,58363,58364,58376,58381,58382,58383,58387,58388,58390,58391,58394,58395,59935,59936,59971,59973,59978,59980,60106,60107,60156,60159,60435,60436,60437,60438,61727,61728,62861,62862,64097,64098,65317,65318,65536,65574,66046,66047,70267,72288,74982,74983,75506,75521,75822,75823,82699,82700,84104,84166,87942,87943,88424,88425,94587,94589,97427,97428,98304,98344,101413,101414,101416,101417,107661,107662,107668,107670,107677,107678,107819,107820,114100,114102,114181,114182,120267,120268,124734,124735,128826,128827,129989,129990,130911,130996,131072,131096,131393,131394,140211,140212,144640,145828,145833,148295,149521,149522,152482,152484,155201,155202,156045,156052,156416,156417,163840,163869,189530,191976,195342,195344,196183,196184,196608,196637,204147,204148,205778,205779,207174,207236,211195,211196,211340,211341,212505,212506,218126,218127,220729,220731,226048,226049,229376,229400,231001,231002,239549,239550,239556,239558,239565,239566,240013,240014,246599,246600,246604,246605,246612,246613,252253,252254,252270,252271,252272,252274,252275,252277,252278,252280,252281,252283,252284,252285,252341,252343,252344,252345,252347,252348,252350,252351,252537,252538,258046,258047,259102,259103,262144,262166,262792,262793,268026,268028,268362,268364,269721,269722,272382,272383,272865,272866,275313,275314,278758,278759,280900,280901,284073,284074,290224,290225,290229,290230,290237,290238,291767,291768,291790,291791,292514,292516,292648,292649,294149,294155,294156,294157,294912,294928,296776,296777,297121,297122,299098,299099,299188,299190,304589,304590,305246,305248,305249,305251,307753,307755,307763,307765,307781,307782,307816,312044,312051,312062,313010,317972,318049,318050") && 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"), "372,1,16,3205,3206,6293,6294,6310,6314,6318,6319,11086,11087,11514,11516,13553,13557,13650,13651,14653,14654,16351,16354,16360,16361,16402,16403,24816,24817,32768,32777,34633,34634,35976,35977,36111,36112,36167,36168,37782,37783,38145,38149,38668,38669,38681,38687,38688,38689,40529,40533,40575,40576,41966,41967,51715,51716,55589,55590,55840,55845,55857,55858,55922,55925,56118,56123,56380,56382,59864,59865,65536,65543,69713,69714,79258,79265,80741,80742,86117,86118,89267,89268,98304,98313,98828,98829,98834,98835,98963,98969,98970,98971,98983,98989,98990,98991,106449,106450,107705,107709,108771,108772,112620,112622,126105,126106,126175,126176,128397,128399,131072,131079,148904,148905,150913,150914,158215,158216,163840,163849,164596,164597,168581,168582,168883,168884,168936,168938,168947,168948,169042,169044,169833,169834,169841,169842,169848,169849,174186,174187,174412,174414,174424,174426,174472,174474,174484,174486,174495,174496,176314,176315,176316,176319,179704,179705,179875,179876,179877,179878,179880,179881,179898,179899,179902,179904,179905,179907,179923,179924,179937,179938,179977,179981,179985,179989,179990,179994,179995,180011,180426,180427,180798,180799,182284,182285,182374,182376,182378,182379,182381,182382,182384,182385,182387,182388,182390,182391,182393,182394,182405,182406,182410,182411,182416,182417,182422,182423,182427,182428,182433,182434,182463,182464,182484,182485,182491,182492,182512,182513,182529,182530,182534,182535,182552,182553,182558,182559,182578,182579,182593,182594,182598,182599,182618,182619,182625,182626,182646,182647,182662,182663,182667,182668,182670,182671,182673,182674,182676,182677,183251,183253,185699,185700,196608,196629,196630,196631,203059,203061,204202,204203,212403,212405,213455,213457,215697,215698,215872,215876,215924,215925,215940,215941,216181,216185,216436,216437,224997,224998,228533,228534,228583,228584,229376,229385,230162,230166,230234,230235,230265,230266,230402,230406,230414,230415,231803,231807,231842,231843,231983,231989,231990,231991,231995,231996,232112,232116,232117,232118,233519,233523,236289,236290,237022,237023,243461,243462,247683,247684,249211,249212,249748,249752,249773,249774,250437,250441,250457,250458,252031,252035,252060,252061,262144,262147,262896,262897,288042,288043,288068,288069,288272,288273,288750,288751,288990,288991,289729,289730,290309,290310,290487,290488,291463,291465,291937,291938,292579,292580,294912,294915,295511,295512,296449,296452,299786,299787,307139,312008,312084,312085") == "81cf211864d897a70f180d305306f95f2fe0a7a7" || 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"), "372,1,16,3205,3206,6293,6294,6310,6314,6318,6319,11086,11087,11514,11516,13553,13557,13650,13651,14653,14654,16351,16354,16360,16361,16402,16403,24816,24817,32768,32777,34633,34634,35976,35977,36111,36112,36167,36168,37782,37783,38145,38149,38668,38669,38681,38687,38688,38689,40529,40533,40575,40576,41966,41967,51715,51716,55589,55590,55840,55845,55857,55858,55922,55925,56118,56123,56380,56382,59864,59865,65536,65543,69713,69714,79258,79265,80741,80742,86117,86118,89267,89268,98304,98313,98828,98829,98834,98835,98963,98969,98970,98971,98983,98989,98990,98991,106449,106450,107705,107709,108771,108772,112620,112622,126105,126106,126175,126176,128397,128399,131072,131079,148904,148905,150913,150914,158215,158216,163840,163849,164596,164597,168581,168582,168883,168884,168936,168938,168947,168948,169042,169044,169833,169834,169841,169842,169848,169849,174186,174187,174412,174414,174424,174426,174472,174474,174484,174486,174495,174496,176314,176315,176316,176319,179704,179705,179875,179876,179877,179878,179880,179881,179898,179899,179902,179904,179905,179907,179923,179924,179937,179938,179977,179981,179985,179989,179990,179994,179995,180011,180426,180427,180798,180799,182284,182285,182374,182376,182378,182379,182381,182382,182384,182385,182387,182388,182390,182391,182393,182394,182405,182406,182410,182411,182416,182417,182422,182423,182427,182428,182433,182434,182463,182464,182484,182485,182491,182492,182512,182513,182529,182530,182534,182535,182552,182553,182558,182559,182578,182579,182593,182594,182598,182599,182618,182619,182625,182626,182646,182647,182662,182663,182667,182668,182670,182671,182673,182674,182676,182677,183251,183253,185699,185700,196608,196629,196630,196631,203059,203061,204202,204203,212403,212405,213455,213457,215697,215698,215872,215876,215924,215925,215940,215941,216181,216185,216436,216437,224997,224998,228533,228534,228583,228584,229376,229385,230162,230166,230234,230235,230265,230266,230402,230406,230414,230415,231803,231807,231842,231843,231983,231989,231990,231991,231995,231996,232112,232116,232117,232118,233519,233523,236289,236290,237022,237023,243461,243462,247683,247684,249211,249212,249748,249752,249773,249774,250437,250441,250457,250458,252031,252035,252060,252061,262144,262147,262896,262897,288042,288043,288068,288069,288272,288273,288750,288751,288990,288991,289729,289730,290309,290310,290487,290488,291463,291465,291937,291938,292579,292580,294912,294915,295511,295512,296449,296452,299786,299787,307139,312008,312084,312085") && 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("system_ext"), "348,1,31,38,42,46,47,53,59,60,61,75,81,82,83,141,145,150,151,705,707,764,768,783,784,811,817,818,819,1707,1713,1736,1737,1743,1749,1750,1751,1977,1981,1990,1991,2021,2027,2028,2029,2223,2227,2231,2232,2235,2239,2244,2245,2248,2249,2271,2277,2278,2279,2283,2289,2290,2291,2293,2294,2305,2311,2312,2313,2323,2324,2329,2333,2337,2338,2342,2348,2352,2353,2360,2366,2367,2368,2380,2386,2387,2388,2398,2404,2405,2406,2408,2415,2421,2428,2495,2502,2507,2514,2549,2554,2573,2580,2598,2605,2621,2622,2832,2834,2843,2844,2856,2857,2858,2859,2860,2861,2870,2871,2894,2895,2943,2948,2951,2954,2957,2960,2963,2965,2969,2970,2974,2977,2981,2982,3505,3507,3511,3515,3516,3520,3525,3527,3532,3536,3537,3541,3542,3546,3547,3551,3552,3556,3557,3561,3562,3566,3567,3571,3572,3574,3581,3585,3586,3590,3591,3595,3596,3600,3601,3605,3606,3610,3611,3615,3616,3618,3619,3623,3624,3628,3629,3631,3632,3636,3637,3641,3642,3646,3647,3651,3652,3656,3657,3659,3663,3667,3668,3672,3673,3675,3676,3678,3679,3683,3684,3688,3689,3691,3692,3696,3697,3701,3702,3706,3707,3711,3712,3714,3715,3719,3720,3722,3726,3743,3748,3782,3785,3898,6310,6311,7546,7547,8736,8737,9883,9884,11065,11066,11116,11117,11426,11427,16752,16753,16783,16784,16973,16974,17034,17035,17214,17215,17335,17336,17544,17545,22437,22438,22440,22441,22470,22471,22664,22665,22838,22839,22864,22865,22882,22883,22959,22960,22983,22984,23040,23041,23146,23147,28120,28121,28140,28141,28419,28420,28506,28507,28545,28546,28623,28624,28879,28880,32768,32807,37063,37064,44253,44254,45888,45889,45940,45941,46259,46260,48387,48388,54532,54536,56220,56222,56405,56407,56455,56457,58041,58043,65536,65565,66590,66591,66593,66594,66601,66602,66606,66607,66618,66619,66920,66921,66937,66938,66947,66948,68640,68642,73861,73865,74796,74798,74822,98326,98328,118941,119302,121197,121236,121237") == "d8755f16410d9f7eb3bbb15e3ac1b316e0b97cbe" || 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"), "348,1,31,38,42,46,47,53,59,60,61,75,81,82,83,141,145,150,151,705,707,764,768,783,784,811,817,818,819,1707,1713,1736,1737,1743,1749,1750,1751,1977,1981,1990,1991,2021,2027,2028,2029,2223,2227,2231,2232,2235,2239,2244,2245,2248,2249,2271,2277,2278,2279,2283,2289,2290,2291,2293,2294,2305,2311,2312,2313,2323,2324,2329,2333,2337,2338,2342,2348,2352,2353,2360,2366,2367,2368,2380,2386,2387,2388,2398,2404,2405,2406,2408,2415,2421,2428,2495,2502,2507,2514,2549,2554,2573,2580,2598,2605,2621,2622,2832,2834,2843,2844,2856,2857,2858,2859,2860,2861,2870,2871,2894,2895,2943,2948,2951,2954,2957,2960,2963,2965,2969,2970,2974,2977,2981,2982,3505,3507,3511,3515,3516,3520,3525,3527,3532,3536,3537,3541,3542,3546,3547,3551,3552,3556,3557,3561,3562,3566,3567,3571,3572,3574,3581,3585,3586,3590,3591,3595,3596,3600,3601,3605,3606,3610,3611,3615,3616,3618,3619,3623,3624,3628,3629,3631,3632,3636,3637,3641,3642,3646,3647,3651,3652,3656,3657,3659,3663,3667,3668,3672,3673,3675,3676,3678,3679,3683,3684,3688,3689,3691,3692,3696,3697,3701,3702,3706,3707,3711,3712,3714,3715,3719,3720,3722,3726,3743,3748,3782,3785,3898,6310,6311,7546,7547,8736,8737,9883,9884,11065,11066,11116,11117,11426,11427,16752,16753,16783,16784,16973,16974,17034,17035,17214,17215,17335,17336,17544,17545,22437,22438,22440,22441,22470,22471,22664,22665,22838,22839,22864,22865,22882,22883,22959,22960,22983,22984,23040,23041,23146,23147,28120,28121,28140,28141,28419,28420,28506,28507,28545,28546,28623,28624,28879,28880,32768,32807,37063,37064,44253,44254,45888,45889,45940,45941,46259,46260,48387,48388,54532,54536,56220,56222,56405,56407,56455,56457,58041,58043,65536,65565,66590,66591,66593,66594,66601,66602,66606,66607,66618,66619,66920,66921,66937,66938,66947,66948,68640,68642,73861,73865,74796,74798,74822,98326,98328,118941,119302,121197,121236,121237") && 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/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- 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.600000, 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 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",":100663296:324c7fa9cddf80c76fa1ade9a88d1fb7a28156ac"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:db47c341e1eb03642d6282cccb80afb37068d8a0"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:db47c341e1eb03642d6282cccb80afb37068d8a0")));

# ---- 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);
