[SERVER-68477] Improve NaN-handling for expireAfterSeconds TTL index parameter Created: 01/Aug/22  Updated: 29/Oct/23  Resolved: 30/Aug/22

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: 5.0.14, 6.0.2, 6.1.0-rc1, 6.2.0-rc0

Type: Bug Priority: Major - P3
Reporter: Dan Larkin-York Assignee: Benety Goh
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Backports
Documented
is documented by DOCS-15586 [Server] Improve NaN-handling for exp... Closed
Problem/Incident
Related
related to SERVER-68522 Prevent 5.0 binary from starting in F... Closed
related to SERVER-69091 Handle additional out-of-bounds expir... Closed
related to SERVER-69402 Update FCV version for ttl_index_opti... Closed
related to SERVER-69783 use integral type for TTL index test ... Closed
related to SERVER-76421 [5.0] ttl_expire_nan_upgrade.js check... Closed
related to SERVER-68487 add BSONElement method to check for N... Closed
is related to SERVER-68359 Prevent TTLMonitor from processing in... Closed
is related to SERVER-68621 Investigate potentially unintended ad... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Backport Requested:
v6.1, v6.0, v5.0
Sprint: Execution Team 2022-08-08, Execution Team 2022-08-22, Execution Team 2022-09-05
Participants:
Case:
Linked BF Score: 54

 Description   

​​

Issue Status as of Nov 15, 2022

ISSUE DESCRIPTION AND IMPACT

In MongoDB 4.4 and earlier, TTL indexes with an expireAfterSeconds value of NaN (not-a-number) were functional as indexes for queries but did not expire any documents. When such a config is in place, the following error is logged by MongoDB 4.2 and 4.4 primary replica set nodes:

2022-08-05T21:00:00.000+0000 E  INDEX    [TTLMonitor] Error processing ttl index: { v: 2, key: { created: 1 }, name: "created_1", ns: "dbname.collname", expireAfterSeconds: nan.0, background: true } -- DurationOverflow: Cannot negate the minimum duration

In MongoDB 5.0.0-5.0.13 and 6.0.0-6.0.1, as part of SERVER-56676, TTL indexes began treating NaN as 0, and the listIndexes command necessary for initial syncs and mongodump backups began returning 0 instead of NaN.

Because of this change in unspecified behavior, when a TTL index with this improper configuration exists, the following can trigger the sudden expiration of TTL-indexed documents in a collection:

  • On MongoDB 4.4, when:
    • upgrading to MongoDB 5.0.0-5.0.13
    • initially syncing from a 5.0.0-5.0.13 or 6.0.0-6.0.1 node
  • On MongoDB 4.2, when initially syncing from a 5.0.0-5.0.13 or 6.0.0-6.0.1 node
  • On MongoDB 5.0.0-5.0.13 or 6.0.0-6.0.1,
    • When restoring from a mongodump of a 4.2 or 4.4 collection that has a TTL configured with expireAfterSeconds: NaN
    • When initially syncing from a version 4.2 or 4.4 node that has a TTL configured with expireAfterSeconds: NaN

Now that this issue is addressed, the following case may still present concern:

  • On MongoDB 4.2 and 4.4, when initially syncing from a 5.0.14+ or 6.0.2+ node that still has a TTL index with an invalid config, a newly synced node will end up with a system-dependent TTL configuration of expireAfterSeconds:<int32_max>. Use the collMod command to set a reasonable value, or remove the TTL index.

WORKAROUNDS AND REMEDIATION

In general, avoid this issue by avoiding expireAfterSeconds: NaN as a configuration and correct this config anywhere it exists.

The following script for the mongosh shell reports any TTL indexes with an expireAfterSeconds: NaN configuration:

Note: Do not use the legacy mongo shell for this operation.

function getNaNIndexes() {
  const nan_idx = [];
 
  const dbs = db.adminCommand({ listDatabases: 1 }).databases;
 
  dbs.forEach((d) => {
    const listCollCursor = db
      .getSiblingDB(d.name)
      .runCommand({ listCollections: 1 }).cursor;
 
    const collDetails = {
      db: listCollCursor.ns.split(".$cmd")[0],
      colls: listCollCursor.firstBatch.map((c) => c.name),
    };
 
    collDetails.colls.forEach((c) =>
      db
        .getSiblingDB(collDetails.db)
        .getCollection(c)
        .getIndexes()
        .forEach((entry) => {
          if (Object.is(entry.expireAfterSeconds, NaN)) {
            nan_idx.push({ ns: `${collDetails.db}.${c}`, index: entry });
          }
        })
    );
  });
 
  return nan_idx;
};
getNaNIndexes();

Once identified, correct any TTL indexes with the expireAfterSeconds: NaN configuration and establish an unambiguous, valid configuration with a specified behavior. The collMod command allows you to modify the expireAfterSeconds value for an existing index.

MongoDB intends to help protect against this behavior change by:

  • In this ticket, SERVER-68477, MongoDB versions 5.0.14+ and 6.0.2+ now render badly configured TTL indexes ineffective, rather than applying a meaning of expireAfterSeconds: 0 to these indexes.
  • Releasing SERVER-68522 in MongoDB 5.0.11. With this fix, MongoDB 5.0.11+ will refuse to start if a TTL index with expireAfterSeconds: NaN exists, to ensure that the normal upgrade path from 4.4 is protected from this unexpected change in behavior. See SERVER-68522 for additional details.

Original description

Currently listIndexes, and subsequently initial sync, do not properly handle NaN values for expireAfterSeconds. This can result in unexpected TTL behavior, especially when upgrading from MongoDB 4.4 to MongoDB 5.0 or when migrating earlier index definitions to MongoDB 5.0 or 6.0.



 Comments   
Comment by Githook User [ 12/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 remove upgrade and downgrade barriers for TTL indexes with NaN expireAfterSeconds

These upgrade/downgrade restrictions were added in commit abdedd367e2f331816354563f8ae95f6bb35c51d
and are no longer necessary.
Branch: v5.0
https://github.com/mongodb/mongo/commit/5368d8dc803d1e6506e26eecacd19d7c917f9488

Comment by Githook User [ 12/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 createIndexes overwrites NaN expireAfterSeconds before starting index build

(cherry picked from commit 58796facf40c99ddf8bb537adf563dc43aa0a863)
Branch: v5.0
https://github.com/mongodb/mongo/commit/b761bb07f67ec61e5ae962ed21fce2304818f1e1

Comment by Githook User [ 12/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTLMonitor fixes NaN expireAfterSeconds on TTL indexes during step up

(cherry picked from commit b8eb75f99a18a8651e2315998cf16f53e48917bb)
(cherry picked from commit aab9685c531bed030dc8bba914d695d7c66fc08b)
Branch: v5.0
https://github.com/mongodb/mongo/commit/615ffd680b4ca995b7e8185900caf0bda8114e4f

Comment by Githook User [ 12/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 remove epoch restriction on ttl indexes

(cherry picked from commit eb2f7f03f8c0522f85a9cae2c61bec4673251103)
(cherry picked from commit 17d15eb7f3d8b044456ea9191d5777af3fbc5651)
Branch: v5.0
https://github.com/mongodb/mongo/commit/6e10f7705e4eff4738291af5a5fc2aa58bca9d5c

Comment by Githook User [ 11/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 listIndexes repairs TTL indexes with NaN expireAfterSeconds

(cherry picked from commit d6528bf96f08b79ca850902b2d1d81264fa7baa1)
Branch: v5.0
https://github.com/mongodb/mongo/commit/2c5fa4b410d0d2b257df2b32f262fa92cf200ea1

Comment by Githook User [ 11/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTL monitor skips indexes with NaN expireAfterSeconds

(cherry-picked from commit 14c07b53186ee88497abd0ba492d2d9157891718)

(cherry picked from commit 7d76329f8915ec80ba07c07e4a0adbc7fd187107)
(cherry picked from commit 0f56fdb4c92f6728a8560469e66f4432fabc468d)
Branch: v5.0
https://github.com/mongodb/mongo/commit/1c970f7c593cfe5ffd3a8ed29cee51ef0a3dffe5

Comment by Githook User [ 11/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add test to check startup warning for TTL indexes with NaN 'expireAfterSeconds'

Startup warning was added in 5.0 incommit abdedd367e2f331816354563f8ae95f6bb35c51d.

(partially cherry-picked from commit abdedd367e2f331816354563f8ae95f6bb35c51d)

(cherry picked from commit 5d21e0115edb120873c8beac2901e03a76ccfc00)
Branch: v5.0
https://github.com/mongodb/mongo/commit/a64f677d8ea94db2147c385829435a3465bff2ae

Comment by Githook User [ 10/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add TTLMonitor::onStepUp()

(cherry picked from commit 3b17e5f7916fdf1a21dd162a079aeb9d06ca9425)
(cherry picked from commit 02a6f50be29f295d36a8c86f1e3f6c21587bb04d)
Branch: v5.0
https://github.com/mongodb/mongo/commit/949beadb40c670e6b7d1ac66dcac17916e51725a

Comment by Githook User [ 10/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 include 'expireAfterSeconds' type information when registering TTL indexes with the TTLCollectionCache

(cherry picked from commit cc3ae631bce7943fbda5182ff3b9d93d1125be40)
Branch: v5.0
https://github.com/mongodb/mongo/commit/ba31c2d4c78fe0f0261b0b82c259e511dce9447c

Comment by Githook User [ 10/Oct/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add unit test for TTLCollectionCache

(cherry picked from commit f32f550aff1def5709ea68f42dc9d4bf9321d5e6)
Branch: v5.0
https://github.com/mongodb/mongo/commit/fbb8779057e34e3a696134f2ff3960f5328c579a

Comment by Githook User [ 10/Oct/22 ]

Author:

{'name': 'Yuhong Zhang', 'email': 'yuhong.zhang@mongodb.com', 'username': 'YuhongZhang98'}

Message: SERVER-64444 SERVER-68477 Add unittests for repairing index specs

(cherry-picked from commit a59e32ba3883e46077a750d1f65f383e35ab3e12)
Branch: v5.0
https://github.com/mongodb/mongo/commit/847494d572092c8409315a94b9f3571cc6bde1a4

Comment by Githook User [ 11/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 createIndexes overwrites NaN expireAfterSeconds before starting index build

(cherry picked from commit 58796facf40c99ddf8bb537adf563dc43aa0a863)
Branch: v6.0
https://github.com/mongodb/mongo/commit/3bf0d522db3017a344e5f093706539e97659897b

Comment by Githook User [ 11/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTLMonitor fixes NaN expireAfterSeconds on TTL indexes during step up

(cherry picked from commit b8eb75f99a18a8651e2315998cf16f53e48917bb)
Branch: v6.0
https://github.com/mongodb/mongo/commit/aab9685c531bed030dc8bba914d695d7c66fc08b

Comment by Githook User [ 11/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 remove epoch restriction on ttl indexes

(cherry picked from commit eb2f7f03f8c0522f85a9cae2c61bec4673251103)
Branch: v6.0
https://github.com/mongodb/mongo/commit/17d15eb7f3d8b044456ea9191d5777af3fbc5651

Comment by Githook User [ 11/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 listIndexes repairs TTL indexes with NaN expireAfterSeconds

(cherry picked from commit d6528bf96f08b79ca850902b2d1d81264fa7baa1)
Branch: v6.0
https://github.com/mongodb/mongo/commit/6a1b08c8108635be9a7624243ca9f4ff191fd48c

Comment by Githook User [ 11/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTL monitor skips indexes with NaN expireAfterSeconds

(cherry-picked from commit 14c07b53186ee88497abd0ba492d2d9157891718)

(cherry picked from commit 7d76329f8915ec80ba07c07e4a0adbc7fd187107)
Branch: v6.0
https://github.com/mongodb/mongo/commit/0f56fdb4c92f6728a8560469e66f4432fabc468d

Comment by Githook User [ 11/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add startup warning for TTL indexes with NaN 'expireAfterSeconds'

(partially cherry-picked from commit abdedd367e2f331816354563f8ae95f6bb35c51d)

(cherry picked from commit 5d21e0115edb120873c8beac2901e03a76ccfc00)
Branch: v6.0
https://github.com/mongodb/mongo/commit/26fc0d8a01086fb47377db6564ea5267cdd00aa6

Comment by Benety Goh [ 10/Sep/22 ]

Author:

{'name': 'Yuhong Zhang', 'email': 'yuhong.zhang@mongodb.com', 'username': 'YuhongZhang98'}

Message: SERVER-64444 SERVER-68477 Add unittests for repairing index specs

(cherry-picked from commit a59e32ba3883e46077a750d1f65f383e35ab3e12)
Branch: v6.0
https://github.com/mongodb/mongo/commit/a02d3716c2872b077d5ce6bab9e84d4d53cda53b

Comment by Githook User [ 10/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add TTLMonitor::onStepUp()

(cherry picked from commit 3b17e5f7916fdf1a21dd162a079aeb9d06ca9425)
Branch: v6.0
https://github.com/mongodb/mongo/commit/02a6f50be29f295d36a8c86f1e3f6c21587bb04d

Comment by Githook User [ 10/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 include 'expireAfterSeconds' type information when registering TTL indexes with the TTLCollectionCache

(cherry picked from commit cc3ae631bce7943fbda5182ff3b9d93d1125be40)
Branch: v6.0
https://github.com/mongodb/mongo/commit/2a53498a27cb9665dd7b50843b0c43c1232f30a6

Comment by Githook User [ 10/Sep/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add unit test for TTLCollectionCache

(cherry picked from commit f32f550aff1def5709ea68f42dc9d4bf9321d5e6)
Branch: v6.0
https://github.com/mongodb/mongo/commit/8c2aec279fb53a23595f5bf659565fbd4d01fc66

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 createIndexes overwrites NaN expireAfterSeconds before starting index build

(cherry picked from commit 58796facf40c99ddf8bb537adf563dc43aa0a863)
Branch: v6.1
https://github.com/mongodb/mongo/commit/eb45396105c9c4fac61ceacbc890336083dcd471

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTLMonitor fixes NaN expireAfterSeconds on TTL indexes during step up

(cherry picked from commit b8eb75f99a18a8651e2315998cf16f53e48917bb)
Branch: v6.1
https://github.com/mongodb/mongo/commit/a29518c420c5167178438b47634c118f6df2c114

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 remove epoch restriction on ttl indexes

(cherry picked from commit eb2f7f03f8c0522f85a9cae2c61bec4673251103)
Branch: v6.1
https://github.com/mongodb/mongo/commit/c72e1a93ceb4dd69d2f11f110b2976355620220f

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 listIndexes repairs TTL indexes with NaN expireAfterSeconds

(cherry picked from commit d6528bf96f08b79ca850902b2d1d81264fa7baa1)
Branch: v6.1
https://github.com/mongodb/mongo/commit/cf72acd7f83576a12abf2928ca53699fdb341e25

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTL monitor skips indexes with NaN expireAfterSeconds

(cherry-picked from commit 14c07b53186ee88497abd0ba492d2d9157891718)

(cherry picked from commit 7d76329f8915ec80ba07c07e4a0adbc7fd187107)
Branch: v6.1
https://github.com/mongodb/mongo/commit/daaff3b1445848a645e2ab883d6836b37ffc8a83

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add startup warning for TTL indexes with NaN 'expireAfterSeconds'

(partially cherry-picked from commit abdedd367e2f331816354563f8ae95f6bb35c51d)

(cherry picked from commit 5d21e0115edb120873c8beac2901e03a76ccfc00)
Branch: v6.1
https://github.com/mongodb/mongo/commit/0c4e155bf4652a629658758e0869b3c22ad597cf

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add TTLMonitor::onStepUp()

(cherry picked from commit 3b17e5f7916fdf1a21dd162a079aeb9d06ca9425)
Branch: v6.1
https://github.com/mongodb/mongo/commit/c91d35a92b173da40b1bb1199a0ce01281fd5f59

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 include 'expireAfterSeconds' type information when registering TTL indexes with the TTLCollectionCache

(cherry picked from commit cc3ae631bce7943fbda5182ff3b9d93d1125be40)
Branch: v6.1
https://github.com/mongodb/mongo/commit/20504d1d1433ce1fc7cb73572dae28f41873c1e3

Comment by Githook User [ 31/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add unit test for TTLCollectionCache

(cherry picked from commit f32f550aff1def5709ea68f42dc9d4bf9321d5e6)
Branch: v6.1
https://github.com/mongodb/mongo/commit/559d9f496e6e3ee5262e64cf3d00f5f741239d4b

Comment by Githook User [ 30/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 createIndexes overwrites NaN expireAfterSeconds before starting index build
Branch: master
https://github.com/mongodb/mongo/commit/58796facf40c99ddf8bb537adf563dc43aa0a863

Comment by Githook User [ 29/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTLMonitor fixes NaN expireAfterSeconds on TTL indexes during step up
Branch: master
https://github.com/mongodb/mongo/commit/b8eb75f99a18a8651e2315998cf16f53e48917bb

Comment by Githook User [ 29/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 remove epoch restriction on ttl indexes
Branch: master
https://github.com/mongodb/mongo/commit/eb2f7f03f8c0522f85a9cae2c61bec4673251103

Comment by Githook User [ 28/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 listIndexes repairs TTL indexes with NaN expireAfterSeconds
Branch: master
https://github.com/mongodb/mongo/commit/d6528bf96f08b79ca850902b2d1d81264fa7baa1

Comment by Githook User [ 27/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 TTL monitor skips indexes with NaN expireAfterSeconds

(cherry-picked from commit 14c07b53186ee88497abd0ba492d2d9157891718)
Branch: master
https://github.com/mongodb/mongo/commit/7d76329f8915ec80ba07c07e4a0adbc7fd187107

Comment by Githook User [ 26/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add startup warning for TTL indexes with NaN 'expireAfterSeconds'

(partially cherry-picked from commit abdedd367e2f331816354563f8ae95f6bb35c51d)
Branch: master
https://github.com/mongodb/mongo/commit/5d21e0115edb120873c8beac2901e03a76ccfc00

Comment by Githook User [ 26/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add TTLMonitor::onStepUp()
Branch: master
https://github.com/mongodb/mongo/commit/3b17e5f7916fdf1a21dd162a079aeb9d06ca9425

Comment by Githook User [ 26/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 include 'expireAfterSeconds' type information when registering TTL indexes with the TTLCollectionCache
Branch: master
https://github.com/mongodb/mongo/commit/cc3ae631bce7943fbda5182ff3b9d93d1125be40

Comment by Githook User [ 25/Aug/22 ]

Author:

{'name': 'Benety Goh', 'email': 'benety@mongodb.com', 'username': 'benety'}

Message: SERVER-68477 add unit test for TTLCollectionCache
Branch: master
https://github.com/mongodb/mongo/commit/f32f550aff1def5709ea68f42dc9d4bf9321d5e6

Generated at Thu Feb 08 06:10:55 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.