From 9e24439c2ff727332e9141f34aceb323c1126a3a Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 12 Mar 2019 09:49:10 +0000 Subject: [PATCH 1/4] Fix a crash that could occur if the RHS of an IN expression is a correlated sub-query that refers to the outer query from within a window frame definition only. FossilOrigin-Name: 0524aaaf45681437c2dca3d31ff26a65bee7bd2074730277c29136635ee0be0f --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/whereexpr.c | 6 ++++++ test/window1.test | 27 +++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 6741ff9409..b6d3c3d0d1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sharmless\sbug\sin\sthe\sMakefile. -D 2019-03-08T20:26:12.981 +C Fix\sa\scrash\sthat\scould\soccur\sif\sthe\sRHS\sof\san\sIN\sexpression\sis\sa\scorrelated\ssub-query\sthat\srefers\sto\sthe\souter\squery\sfrom\swithin\sa\swindow\sframe\sdefinition\sonly. +D 2019-03-12T09:49:10.588 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 236d2739dc3e823c3c909bca2d6cef93009bafbefd7018a8f3281074ecb92954 @@ -603,7 +603,7 @@ F src/walker.c 7607f1a68130c028255d8d56094ea602fc402c79e1e35a46e6282849d90d5fe4 F src/where.c 8a207cb2ca6b99e1edb1e4bbff9b0504385a759cbf66180d1deb34d80ca4b799 F src/whereInt.h 5f14db426ca46a83eabab1ae9aa6d4b8f27504ad35b64c290916289b1ddb2e88 F src/wherecode.c ce7b21e1be2b981d62683fc59c4ca73a04a7ff2f1ebec23d41baf2da2349afd6 -F src/whereexpr.c 36b47f7261d6b6f1a72d774c113b74beddf6745aba1018e64b196e29db233442 +F src/whereexpr.c 90859652920f153d2c03f075488744be2926625ebd36911bcbcb17d0d29c891c F src/window.c df2456386e0b1553a8d1fcf3a0ddc4c058fe2c650ea8c74b6bf8862082ddafc9 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd @@ -1676,7 +1676,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc -F test/window1.test d141eba02ee4d7441dcb45148d776aded21992e8de6ddbbe2aae8151e5fad45e +F test/window1.test 53db04133c48065c7554cb7195b0d23b879feb2dc9dacf0945a259c423687133 F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3143 F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e F test/window3.tcl 577a3b1ff913208e5248c04dab9df17fd760ce159a752789e26d0cb4a5f91823 @@ -1806,7 +1806,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 97bdc090f30610cc5dd29101452d1647550387f9c6f742e50f1e07c3cf68a147 -R e38aa4b66cd269b29252cf26ddab05d5 -U drh -Z 728bf8d37c934f85cf7e41786d45a23f +P 62ac9cb07f5f2d14e716cd0f99f3f2fd34f6c9b4303619be8dfbca2eecf5b727 +R f78918e0b364121e19ff80946d925c4e +U dan +Z 7d7161881019dbf0683fedbc71abbce6 diff --git a/manifest.uuid b/manifest.uuid index 4264dbc68b..c992408a48 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -62ac9cb07f5f2d14e716cd0f99f3f2fd34f6c9b4303619be8dfbca2eecf5b727 \ No newline at end of file +0524aaaf45681437c2dca3d31ff26a65bee7bd2074730277c29136635ee0be0f \ No newline at end of file diff --git a/src/whereexpr.c b/src/whereexpr.c index db0a38d622..961495c584 100644 --- a/src/whereexpr.c +++ b/src/whereexpr.c @@ -1520,6 +1520,12 @@ Bitmask sqlite3WhereExprUsageNN(WhereMaskSet *pMaskSet, Expr *p){ }else if( p->x.pList ){ mask |= sqlite3WhereExprListUsage(pMaskSet, p->x.pList); } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->op==TK_FUNCTION && p->y.pWin ){ + mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pPartition); + mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pOrderBy); + } +#endif return mask; } Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){ diff --git a/test/window1.test b/test/window1.test index b3073985be..0098ca3046 100644 --- a/test/window1.test +++ b/test/window1.test @@ -720,5 +720,32 @@ do_execsql_test 17.3 { ORDER BY 10+sum(a) OVER (ORDER BY a) DESC; } {16 13 11} +#------------------------------------------------------------------------- +# +reset_db +do_execsql_test 18.0 { + CREATE TABLE t1 ( t1_id INTEGER PRIMARY KEY ); + CREATE TABLE t2 ( t2_id INTEGER PRIMARY KEY ); + CREATE TABLE t3 ( t3_id INTEGER PRIMARY KEY ); + + INSERT INTO t1 VALUES(1), (3), (5); + INSERT INTO t2 VALUES (3), (5); + INSERT INTO t3 VALUES(10), (11), (12); +} + +do_execsql_test 18.1 { + SELECT t1.* FROM t1, t2 WHERE + t1_id=t2_id AND t1_id IN ( + SELECT t1_id + row_number() OVER ( ORDER BY t1_id ) FROM t3 + ) +} + +do_execsql_test 18.2 { + SELECT t1.* FROM t1, t2 WHERE + t1_id=t2_id AND t1_id IN ( + SELECT row_number() OVER ( ORDER BY t1_id ) FROM t3 + ) +} {3} + finish_test From 2a934d75d9595a8f56d6510a023c7289734ebae9 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 13 Mar 2019 10:29:16 +0000 Subject: [PATCH 2/4] Detect zero-length free slots on btree pages and report that as corruption. FossilOrigin-Name: c4f0568fde1d4070e7522ec36c0958be7426076002a7fa2da12a46411ab2e92d --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index b6d3c3d0d1..ba23558081 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scrash\sthat\scould\soccur\sif\sthe\sRHS\sof\san\sIN\sexpression\sis\sa\scorrelated\ssub-query\sthat\srefers\sto\sthe\souter\squery\sfrom\swithin\sa\swindow\sframe\sdefinition\sonly. -D 2019-03-12T09:49:10.588 +C Detect\szero-length\sfree\sslots\son\sbtree\spages\sand\sreport\sthat\sas\scorruption. +D 2019-03-13T10:29:16.433 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 236d2739dc3e823c3c909bca2d6cef93009bafbefd7018a8f3281074ecb92954 @@ -456,7 +456,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 51ff9c432f55f7fb8dca32d96707bc191327c1e29b1b83769d3ff6486df3948b +F src/btree.c 4c09765664b0baecce2a35529c86d004fc9a1524c1fa4c94d5b72e04908b43e7 F src/btree.h 63b94fb38ce571c15eb6a3661815561b501d23d5948b2d1e951fbd7a2d04e8d3 F src/btreeInt.h 6111c15868b90669f79081039d19e7ea8674013f907710baa3c814dc3f8bfd3f F src/build.c 3acec29b23948042173301a8befebae01a98344debf66cbd4467c8b9077707b8 @@ -1806,7 +1806,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 62ac9cb07f5f2d14e716cd0f99f3f2fd34f6c9b4303619be8dfbca2eecf5b727 -R f78918e0b364121e19ff80946d925c4e -U dan -Z 7d7161881019dbf0683fedbc71abbce6 +P 0524aaaf45681437c2dca3d31ff26a65bee7bd2074730277c29136635ee0be0f +R 2a0639499790296cac8f1196b2abf969 +U drh +Z 96361658abec8da0d4f99b5cce724c5b diff --git a/manifest.uuid b/manifest.uuid index c992408a48..8b464d94a1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0524aaaf45681437c2dca3d31ff26a65bee7bd2074730277c29136635ee0be0f \ No newline at end of file +c4f0568fde1d4070e7522ec36c0958be7426076002a7fa2da12a46411ab2e92d \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 03451cf309..1103c5d796 100644 --- a/src/btree.c +++ b/src/btree.c @@ -1573,7 +1573,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ } iAddr = pc; pc = get2byte(&aData[pc]); - if( pc Date: Wed, 13 Mar 2019 11:40:30 +0000 Subject: [PATCH 3/4] When deserializing a database (sqlite3_deserialize()), do not attempt to parse the schema before the data is loaded. FossilOrigin-Name: 4e1b005e8b397a22161a6b89cbd3f17bda70a6e0a86d8abdc61856edf2a74da4 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/attach.c | 4 +++- test/corruptL.test | 11 ++++++++--- test/memdb1.test | 16 ++++++++++++++++ 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index ba23558081..90cd7ae319 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Detect\szero-length\sfree\sslots\son\sbtree\spages\sand\sreport\sthat\sas\scorruption. -D 2019-03-13T10:29:16.433 +C When\sdeserializing\sa\sdatabase\s(sqlite3_deserialize()),\sdo\snot\sattempt\sto\sparse\sthe\sschema\sbefore\sthe\sdata\sis\sloaded. +D 2019-03-13T11:40:30.869 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 236d2739dc3e823c3c909bca2d6cef93009bafbefd7018a8f3281074ecb92954 @@ -451,7 +451,7 @@ F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a F src/alter.c cb691d6cd330312b7951c9d3bc0bc29804bbe80beac1cdd137d824b119b6f28a F src/analyze.c 58db66344a5c58dcabb57f26696f6f2993956c830446da40b444051d2fdaf644 -F src/attach.c 3f9b0f6c79500cc40f4e543bc130a0b4ee13f52b45cbb6735608776cbdb79f0e +F src/attach.c 732d45dbf802b79f66503614a23e862887231d4d4937eac7c28a92c6fdb78e1f F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 @@ -758,7 +758,7 @@ F test/corruptH.test 79801d97ec5c2f9f3c87739aa1ec2eb786f96454 F test/corruptI.test a17bbf54fdde78d43cf3cc34b0057719fd4a173a3d824285b67dc5257c064c7b F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4 F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af -F test/corruptL.test 0f64242b83db6d0bd5b6e38c205bf7c2a3bc6c9f80351f49c4dee1639aca60d8 +F test/corruptL.test 2d85d5581f4de7cad3c1ff2016a1880646ef041b3c03e673ee9f1b80376dde8f F test/cost.test 51f4fcaae6e78ad5a57096831259ed6c760e2ac6876836e91c00030fad385b34 F test/count.test cb2e0f934c6eb33670044520748d2ecccd46259c F test/countofview.test e3d4cd6900e4e4f074968ab24b8b87d3671cd624961bef40fd3a6b8f574343cf @@ -1124,7 +1124,7 @@ F test/malloctraceviewer.tcl b7a54595270c1d201abf1c3f3d461f27eaf24cdef623ad08a0f F test/manydb.test 28385ae2087967aa05c38624cec7d96ec74feb3e F test/mem5.test c6460fba403c5703141348cd90de1c294188c68f F test/memdb.test c1f2a343ad14398d5d6debda6ea33e80d0dafcc7 -F test/memdb1.test 0632e6ea56c48e3c6e9b0c73e120310bad8f93762543f809e267888f5a37943f +F test/memdb1.test 86fe8f259c5aa0b3118cf78a5a895882c4f398497ad5ea5d08f6604145eac685 F test/memleak.test 10b9c6c57e19fc68c32941495e9ba1c50123f6e2 F test/memsubsys1.test 9e7555a22173b8f1c96c281ce289b338fcba2abe8b157f8798ca195bbf1d347e F test/memsubsys2.test 3e4a8d0c05fd3e5fa92017c64666730a520c7e08 @@ -1806,7 +1806,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0524aaaf45681437c2dca3d31ff26a65bee7bd2074730277c29136635ee0be0f -R 2a0639499790296cac8f1196b2abf969 -U drh -Z 96361658abec8da0d4f99b5cce724c5b +P c4f0568fde1d4070e7522ec36c0958be7426076002a7fa2da12a46411ab2e92d +R 28c4ad3dde6d7aec82a4c48dd1580e74 +U dan +Z 408d5c8f93fbd7f52078e3dfa65eb9dc diff --git a/manifest.uuid b/manifest.uuid index 8b464d94a1..81fd127c9e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c4f0568fde1d4070e7522ec36c0958be7426076002a7fa2da12a46411ab2e92d \ No newline at end of file +4e1b005e8b397a22161a6b89cbd3f17bda70a6e0a86d8abdc61856edf2a74da4 \ No newline at end of file diff --git a/src/attach.c b/src/attach.c index 224d120b6f..65b98a623f 100644 --- a/src/attach.c +++ b/src/attach.c @@ -234,7 +234,9 @@ static void attachFunc( sqlite3BtreeEnterAll(db); db->init.iDb = 0; db->mDbFlags &= ~(DBFLAG_SchemaKnownOk); - rc = sqlite3Init(db, &zErrDyn); + if( !REOPEN_AS_MEMDB(db) ){ + rc = sqlite3Init(db, &zErrDyn); + } sqlite3BtreeLeaveAll(db); assert( zErrDyn==0 || rc!=SQLITE_OK ); } diff --git a/test/corruptL.test b/test/corruptL.test index 7b84058caa..df87113c71 100644 --- a/test/corruptL.test +++ b/test/corruptL.test @@ -123,15 +123,20 @@ do_test 1.0 { do_catchsql_test 1.1 { PRAGMA cell_size_check = off; DROP INDEX t1x1; -} {1 {no such index: t1x1}} +} {1 {database disk image is malformed}} do_catchsql_test 1.2 { SELECT sum(s+length(b)) FROM t1 WHERE a IN (110,10,150) AND q IS NULL; -} {1 {no such table: t1}} +} {1 {database disk image is malformed}} do_catchsql_test 1.3 { REINDEX t1; -} {1 {unable to identify the object to be reindexed}} +} {1 {database disk image is malformed}} + +do_catchsql_test 1.4 { + PRAGMA integrity_check +} {1 {database disk image is malformed}} + #------------------------------------------------------------------------- reset_db diff --git a/test/memdb1.test b/test/memdb1.test index 3d1a1f9a63..46e0de3edb 100644 --- a/test/memdb1.test +++ b/test/memdb1.test @@ -185,4 +185,20 @@ do_test 620 { lappend rc $msg } {1 {wrong # args: should be "db serialize ?DATABASE?"}} +#------------------------------------------------------------------------- +reset_db +do_execsql_test 700 { + CREATE TABLE t1(a, b); + PRAGMA schema_version = 0; +} +do_test 710 { + set ser [db serialize main] + db close + sqlite3 db + db deserialize main $ser + catchsql { + CREATE VIRTUAL TABLE t1 USING rtree(id, a, b, c, d); + } +} {1 {table t1 already exists}} + finish_test From b65e801e5f2123803ae9604c5cd53df7060b9995 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 13 Mar 2019 13:19:05 +0000 Subject: [PATCH 4/4] New test cases added to test/fuzzdata8.db FossilOrigin-Name: 049e9926202317f58c54b6351ff120fb69bf821f409909b1a1c5e335c0396707 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/fuzzdata8.db | Bin 1040384 -> 1044480 bytes 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 90cd7ae319..6391de1b44 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\sdeserializing\sa\sdatabase\s(sqlite3_deserialize()),\sdo\snot\sattempt\sto\sparse\sthe\sschema\sbefore\sthe\sdata\sis\sloaded. -D 2019-03-13T11:40:30.869 +C New\stest\scases\sadded\sto\stest/fuzzdata8.db +D 2019-03-13T13:19:05.629 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 236d2739dc3e823c3c909bca2d6cef93009bafbefd7018a8f3281074ecb92954 @@ -993,7 +993,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 7b04dfb4e2e28f7174d0b83920ee564ebb5261e23f0b843c383a7868788a300c -F test/fuzzdata8.db 7078218ccbb313302199c83e08df28970685d0b6ad21e2c4d02c4df6453ca3af +F test/fuzzdata8.db 4451d0dd309e51b38e48a768364dab735b5d9c29bbd2bde2e41fc795906a3a76 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1806,7 +1806,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c4f0568fde1d4070e7522ec36c0958be7426076002a7fa2da12a46411ab2e92d -R 28c4ad3dde6d7aec82a4c48dd1580e74 -U dan -Z 408d5c8f93fbd7f52078e3dfa65eb9dc +P 4e1b005e8b397a22161a6b89cbd3f17bda70a6e0a86d8abdc61856edf2a74da4 +R 72bf5085eb8ad2e7341fed5987ec95cf +U drh +Z d6a52f5ceaf622e4596e35b74cc6b2d3 diff --git a/manifest.uuid b/manifest.uuid index 81fd127c9e..d0f5583815 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4e1b005e8b397a22161a6b89cbd3f17bda70a6e0a86d8abdc61856edf2a74da4 \ No newline at end of file +049e9926202317f58c54b6351ff120fb69bf821f409909b1a1c5e335c0396707 \ No newline at end of file diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 2e9ce288114d2ce6d2f14c82c0fc7d461626b02a..34c68b115cfbd687c41f842709dcee2d4cef18ae 100644 GIT binary patch delta 15634 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 F{U3E6O*jAm delta 13900 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