Applies ToWindows Server 2008 Service Pack 2 Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 Web Edition Windows Server 2008 Foundation Windows Server 2008 for Itanium-Based Systems Windows Vista Service Pack 2 Windows Vista Ultimate Windows Vista Enterprise Windows Vista Business Windows Vista Home Premium Windows Vista Home Basic Windows Vista Starter

Important This article contains information that shows you how to help lower security settings or how to turn off security features on a computer. You can make these changes to work around a specific problem. Before you make these changes, we recommend that you evaluate the risks that are associated with implementing this workaround in your particular environment. If you implement this workaround, take any appropriate additional steps to help protect the computer.

Summary

This security update resolves multiple vulnerabilities in Microsoft Windows. The vulnerabilities could allow elevation of privilege if an attacker runs a specially crafted application on a domain-joined system. To learn more about the vulnerability, see Microsoft Security Bulletin MS16-101.

More Information

Important

  • All future security and non-security updates for Windows 8.1, and Windows Server 2012 R2 require update 2919355 to be installed. We recommend that you install update 2919355 on your Windows 8.1-based or Windows Server 2012 R2-based computer so that you receive future updates.

  • If you install a language pack after you install this update, you must reinstall this update. Therefore, we recommend that you install any language packs that you need before you install this update. For more information, see Add language packs to Windows.

This security update also fixes the following non-security-related issues:

  • In a Domain-joined Scale Out File Server (SoFS) on a domainless cluster, when an SMB client that is running either Windows 8.1 or Windows Server 2012 R2 connects to a node that is down, authentication fails. When this occurs, you may receive an error message that resembles the following message:

    STATUS_NO_TGT_REPLY

Known issues in this security update

  • Known issue 1The security updates that are provided in MS16-101 and newer updates disable the ability of the Negotiate process to fall back to NTLM when Kerberos authentication fails for password change operations with the STATUS_NO_LOGON_SERVERS (0xc000005e) error code. In this situation, you may receive one of the following error codes.

    Hexadecimal

    Decimal

    Symbolic

    Friendly

    0xc0000388

    1073740920

    STATUS_DOWNGRADE_DETECTED

    The system detected a possible attempt to compromise security. Please make sure that you can contact the server that authenticated you.

    0x4f1

    1265

    ERROR_DOWNGRADE_DETECTED

    The system detected a possible attempt to compromise security. Please make sure that you can contact the server that authenticated you.

    WorkaroundIf password changes that previously succeeded fail after the installation of MS16-101, it's likely that password changes were previously relying on NTLM fallback because Kerberos was failing. In order to change passwords successfully by using Kerberos protocols, follow these steps:

    1. Configure open communication on TCP port 464 between clients that have MS16-101 installed and the domain controller that is servicing password resets. Read-only domain controllers (RODCs) can service self-service password resets if the user is allowed by the RODCs password replication policy. Users who are not allowed by the RODC password policy require network connectivity to a read/write domain controller (RWDC) in the user account domain. Note To check whether TCP port 464 is open, follow these steps:

      1. Create an equivalent display filter for your network monitor parser. For example:

        ipv4.address== <ip address of client> && tcp.port==464

      2. In the results, look for the "TCP:[SynReTransmit" frame.

    2. Make sure that the target Kerberos names are valid. (IP addresses are not valid for the Kerberos protocol. Kerberos supports short names and fully qualified domain names.)

    3. Make sure that service principal names (SPNs) are registered correctly. For more information, see Kerberos and Self-Service Password Reset.

  • Known issue 2We know about an issue in which programmatic password resets of domain user accounts fail and return the STATUS_DOWNGRADE_DETECTED (0x800704F1) error code if the expected failure is one of the following:

    • ERROR_INVALID_PASSWORD

    • ERROR_PWD_TOO_SHORT (rarely returned)

    • STATUS_WRONG_PASSWORD

    • STATUS_PASSWORD_RESTRICTION

    The following table shows the full error mapping.

    Hexadecimal

    Decimal

    Symbolic

    Friendly

    0x56

    86

    ERROR_INVALID_PASSWORD

    The specified network password is not correct.

    0x267

    615

    ERROR_PWD_TOO_SHORT

    The password that was provided is too short to meet the policy of your user account. Please provide a longer password.

    0xc000006a

    -1073741718

    STATUS_WRONG_PASSWORD

    When you try to update a password, this return status indicates that the value that was provided as the current password is incorrect.

    0xc000006c

    -1073741716

    STATUS_PASSWORD_RESTRICTION

    When you try to update a password, this return status indicates that some password update rule was violated. For example, the password may not meet the length criteria.

    0x800704F1

    1265

    STATUS_DOWNGRADE_DETECTED

    The system cannot contact a domain controller to service the authentication request. Please try again later.

    0xc0000388

    -1073740920

    STATUS_DOWNGRADE_DETECTED

    The system cannot contact a domain controller to service the authentication request. Please try again later.

    ResolutionMS16-101 has been re-released to address this issue. Install the latest version of the updates for this bulletin to resolve this issue.

  • Known issue 3We know about an issue in which programmatic resets of local user account password changes may fail and return the STATUS_DOWNGRADE_DETECTED (0x800704F1) error code. The following table shows the full error mapping.

    Hexadecimal

    Decimal

    Symbolic

    Friendly

    0x4f1

    1265

    ERROR_DOWNGRADE_DETECTED

    The system cannot contact a domain controller to service the authentication request. Please try again later.

    ResolutionMS16-101 has been re-released to address this issue. Install the latest version of the updates for this bulletin to resolve this issue.

  • Known issue 4Passwords for disabled and locked-out user accounts cannot be changed using the negotiate package.Password changes for disabled and locked-out accounts will still work when using other methods such as when using an LDAP modify operation directly. For example, the PowerShell cmdlet Set-ADAccountPassword uses an "LDAP Modify" operation to change the password and remains unaffected. WorkaroundThese accounts require an administrator to make password resets. This behavior is by design after you install MS16-101 and later fixes.

  • Known issue 5Applications that use the NetUserChangePassword API and that pass a servername in the domainname parameter will no longer work after MS16-101 and later updates are installed. Microsoft documentation states that providing a remote server name in the domainname parameter of the NetUserChangePassword function is supported. For example, the NetUserChangePassword function MSDN topic states the following:domainname [in]

    A pointer to a constant string that specifies the DNS or NetBIOS name of a remote server or domain on which the function is to execute. If this parameter is NULL, the logon domain of the caller is used. However, this guidance has been superseded by MS16-101, unless the password reset is for a local account on the local computer. Post MS16-101, in order for domain user password changes to work, you must pass a valid DNS Domain Name to the NetUserChangePassword API.

  • Known issue 6After you install this update, you may encounter 0xC0000022 NTLM authentication errors. To resolve this issue, see NTLM authentication fails with 0xC0000022 error for Windows Server 2012, Windows 8.1, and Windows Server 2012 R2 after update is applied.

  • Known issue 7After you install the security updates that are described in MS16-101, remote, programmatic changes of a local user account password, and password changes across untrusted forest fail.This operation fails because the operation relies on NTLM fall-back which is no longer supported for nonlocal accounts after MS16-101 is installed.A registry entry is provided that you can use to disable this change. Warning This workaround may make a computer or a network more vulnerable to attack by malicious users or by malicious software such as viruses. We do not recommend this workaround but are providing this information so that you can implement this workaround at your own discretion. Use this workaround at your own risk. ImportantThis section, method, or task contains steps that tell you how to modify the registry. However, serious problems might occur if you modify the registry incorrectly. Therefore, make sure that you follow these steps carefully. For added protection, back up the registry before you modify it. Then, you can restore the registry if a problem occurs. For more information about how to back up and restore the registry, click the following article number to view the article in the Microsoft Knowledge Base:

    322756How to back up and restore the registry in Windows To disable this change, set the NegoAllowNtlmPwdChangeFallback DWORD entry to use a value of 1 (one).Important Setting the NegoAllowNtlmPwdChangeFallback registry entry to a value of 1 will disable this security fix:

    Registry value

    Description

    0

    Default value. Fallback is prevented.

    1

    Fallback is always allowed. The security fix is turned off. Customers that are having issues with remote local accounts or untrusted forest scenarios can set the registry to this value.

    To add these registry values, follow these steps:

    1. Click Start, click Run, type regedit in the Open box, and then click OK.

    2. Locate and then click the following subkey in the registry:

      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa

    3. On the Edit menu, point to New, and then click DWORD Value.

    4. Type NegoAllowNtlmPwdChangeFallback for the name of the DWORD, and then press ENTER.

    5. Right-click NegoAllowNtlmPwdChangeFallback, and then click Modify.

    6. In the Value data box, type 1 to disable this change, and then click OK.Note To restore the default value, type 0 (zero), and then click OK.

    StatusThe root cause of this issue is understood. This article will be updated with additional details as they become available.

How to obtain and install the update

Method 1: Windows Update

This update is available through Windows Update. When you turn on automatic updating, this update will be downloaded and installed automatically. For more information about how to turn on automatic updating, seeGet security updates automatically.

Method 2: Microsoft Update Catalog

To get the stand-alone package for this update, go to the Microsoft Update Catalog website.

Method 3: Microsoft Download Center

You can obtain the stand-alone update package through the Microsoft Download Center. Follow the installation instructions on the download page to install the update. Click the download link in Microsoft Security Bulletin MS16-101 that corresponds to the version of Windows that you are running.

More Information

How to obtain help and support for this security update

Help for installing updates: Support for Microsoft Update Security solutions for IT professionals: TechNet Security Troubleshooting and Support Help for protecting your Windows-based computer from viruses and malware: Virus Solution and Security Center Local support according to your country: International Support

File Information

File name

SHA1 hash

SHA256 hash

Windows6.0-KB3167679-v2-ia64.msu

F3E96631261EEC8CC532D17116185D82B8C5EC7F

97FEB0CF0AEF4E098689FD05E86E94876C4051943983458F250E114107944DAE

Windows6.0-KB3167679-v2-x86.msu

AF2B19E84D0E58C9EF4243F9BCEE6AF6642737F0

2F97DD85E073A5A9A6F32C6CF7DA98F7CEB6F13BBBFF992E612FCD6DE828CE00

Windows6.0-KB3167679-v2-x64.msu

17FAEE7E981AB717C566360F7B7FE173C201D4DB

9B81F7193CE5D66B9609CA09A690F98AFC96B2A928783788BDBDBC58D41861D4

The English (United States) version of this software update installs files that have the attributes that are listed in the following tables.

Windows Vista and Windows Server 2008 file information

Notes

  • The files that apply to a specific product, milestone (RTM, SPn), and service branch (LDR, GDR) can be identified by examining the file version numbers as shown in the following table:

    Version

    Product

    Milestone

    Service branch

    6.0.600 2.19xxx

    Windows Vista or Windows Server 2008

    SP2

    GDR

    6.0.600 2.23xxx

    Windows Vista or Windows Server 2008

    SP2

    LDR

  • GDR service branches contain only those fixes that are widely released to address widespread, critical issues. LDR service branches contain hotfixes in addition to widely released fixes.

  • The MANIFEST files (.manifest) and MUM files (.mum) that are installed are not listed.

For all supported ia64-based versions

File name

File version

File size

Date

Time

Platform

Adsmsext.dll

6.0.6002.19693

218,624

10-Sep-2016

16:21

IA-64

Adsmsext.dll

6.0.6002.24017

218,624

09-Sep-2016

15:10

IA-64

Advapi32.dll

6.0.6002.19598

1,964,544

06-Feb-2016

01:39

IA-64

Advapi32.dll

6.0.6002.24017

1,963,520

09-Sep-2016

15:10

IA-64

Bcrypt.dll

6.0.6002.19677

583,680

10-Aug-2016

13:07

IA-64

Bcrypt.dll

6.0.6002.24004

584,192

10-Aug-2016

13:07

IA-64

Ksecdd.sys

6.0.6002.19655

1,030,376

11-May-2016

13:10

IA-64

Lsasrv.dll

6.0.6002.19693

3,263,488

10-Sep-2016

16:22

IA-64

Lsasrv.mof

Not applicable

13,780

03-Apr-2009

21:34

Not applicable

Lsass.exe

6.0.6002.18541

17,920

16-Nov-2011

14:10

IA-64

Secur32.dll

6.0.6002.19623

202,752

18-Mar-2016

16:34

IA-64

Ksecdd.sys

6.0.6002.23970

1,030,888

11-May-2016

13:08

IA-64

Lsasrv.dll

6.0.6002.24017

3,268,096

09-Sep-2016

15:11

IA-64

Lsasrv.mof

Not applicable

13,780

07-Mar-2016

23:37

Not applicable

Lsass.exe

6.0.6002.24017

17,920

09-Sep-2016

14:28

IA-64

Secur32.dll

6.0.6002.24017

202,752

09-Sep-2016

15:12

IA-64

Ncrypt.dll

6.0.6002.19678

524,800

10-Aug-2016

16:08

IA-64

Ncrypt.dll

6.0.6002.24017

524,800

09-Sep-2016

15:11

IA-64

Rpcrt4.dll

6.0.6002.19598

3,298,816

06-Feb-2016

01:41

IA-64

Rpcrt4.dll

6.0.6002.24017

3,289,088

09-Sep-2016

15:12

IA-64

Wdigest.dll

6.0.6002.19659

482,816

14-May-2016

15:31

IA-64

Wdigest.dll

6.0.6002.24017

483,328

09-Sep-2016

15:12

IA-64

Msv1_0.dll

6.0.6002.19431

570,880

27-Jun-2015

15:22

IA-64

Msv1_0.dll

6.0.6002.24017

570,368

09-Sep-2016

15:11

IA-64

Schannel.dll

6.0.6002.19678

819,200

10-Aug-2016

16:09

IA-64

Schannel.dll

6.0.6002.24017

821,248

09-Sep-2016

15:12

IA-64

Mrxsmb10.sys

6.0.6002.19431

669,184

27-Jun-2015

14:19

IA-64

Mrxsmb10.sys

6.0.6002.24017

670,208

09-Sep-2016

14:18

IA-64

Mrxsmb20.sys

6.0.6002.19431

270,336

27-Jun-2015

14:19

IA-64

Mrxsmb20.sys

6.0.6002.24017

272,384

09-Sep-2016

14:17

IA-64

Mrxsmb.sys

6.0.6002.19279

323,072

09-Jan-2015

00:12

IA-64

Mrxsmb.sys

6.0.6002.24017

325,632

09-Sep-2016

14:17

IA-64

Bcrypt.dll

6.0.6002.19677

275,968

10-Aug-2016

13:14

x86

Bcrypt.dll

6.0.6002.24004

275,968

09-Sep-2016

13:14

x86

Lsasrv.mof

Not applicable

13,780

08-Mar-2016

00:42

Not applicable

Secur32.dll

6.0.6002.19693

77,312

10-Sep-2016

16:30

x86

Lsasrv.mof

Not applicable

13,780

07-Mar-2016

23:37

Not applicable

Secur32.dll

6.0.6002.24017

77,312

09-Sep-2016

15:17

x86

Rpcrt4.dll

6.0.6002.19598

679,424

06-Feb-2016

02:12

x86

Rpcrt4.dll

6.0.6002.24017

678,912

09-Sep-2016

15:17

x86

Wdigest.dll

6.0.6002.19659

175,616

14-May-2016

15:41

x86

Wdigest.dll

6.0.6002.24017

175,616

09-Sep-2016

15:16

x86

Msv1_0.dll

6.0.6002.19431

218,112

27-Jun-2015

16:02

x86

Msv1_0.dll

6.0.6002.24017

218,112

09-Sep-2016

15:16

x86

Schannel.dll

6.0.6002.19678

284,160

10-Aug-2016

15:44

x86

Schannel.dll

6.0.6002.24017

284,672

09-Sep-2016

15:16

x86

Adsmsext.dll

6.0.6002.19693

75,264

10-Sep-2016

16:27

x86

Adsmsext.dll

6.0.6002.24017

75,264

09-Sep-2016

15:14

x86

Advapi32.dll

6.0.6002.19598

802,304

06-Feb-2016

02:11

x86

Advapi32.dll

6.0.6002.24017

802,816

09-Sep-2016

15:14

x86

Ncrypt.dll

6.0.6002.19678

206,336

10-Aug-2016

15:43

x86

Ncrypt.dll

6.0.6002.24017

205,312

09-Sep-2016

15:16

x86

For all supported x86-based versions

File name

File version

File size

Date

Time

Platform

Adsmsext.dll

6.0.6002.19693

75,264

10-Sep-2016

16:27

x86

Adsmsext.dll

6.0.6002.24017

75,264

09-Sep-2016

15:14

x86

Advapi32.dll

6.0.6002.19598

802,304

06-Feb-2016

02:11

x86

Advapi32.dll

6.0.6002.24017

802,816

09-Sep-2016

15:14

x86

Bcrypt.dll

6.0.6002.19677

274,944

10-Aug-2016

13:13

x86

Bcrypt.dll

6.0.6002.24004

274,944

09-Sep-2016

13:14

x86

Ksecdd.sys

6.0.6002.19655

440,552

11-May-2016

13:09

x86

Lsasrv.dll

6.0.6002.19693

1,261,056

10-Sep-2016

16:28

x86

Lsasrv.mof

Not applicable

13,780

03-Apr-2009

21:30

Not applicable

Lsass.exe

6.0.6002.18541

9,728

16-Nov-2011

14:12

x86

Secur32.dll

6.0.6002.19623

72,704

18-Mar-2016

17:10

x86

Ksecdd.sys

6.0.6002.23970

440,552

11-May-2016

13:07

x86

Lsasrv.dll

6.0.6002.24017

1,263,616

09-Sep-2016

15:16

x86

Lsasrv.mof

Not applicable

13,780

07-Mar-2016

23:37

Not applicable

Lsass.exe

6.0.6002.24017

9,728

09-Sep-2016

14:23

x86

Secur32.dll

6.0.6002.24017

72,704

09-Sep-2016

15:16

x86

Ncrypt.dll

6.0.6002.19678

206,336

10-Aug-2016

15:43

x86

Ncrypt.dll

6.0.6002.24017

205,312

09-Sep-2016

15:16

x86

Rpcrt4.dll

6.0.6002.19598

783,872

06-Feb-2016

02:12

x86

Rpcrt4.dll

6.0.6002.24017

783,872

09-Sep-2016

15:16

x86

Wdigest.dll

6.0.6002.19659

175,616

14-May-2016

15:41

x86

Wdigest.dll

6.0.6002.24017

175,616

09-Sep-2016

15:16

x86

Msv1_0.dll

6.0.6002.19431

218,112

27-Jun-2015

16:02

x86

Msv1_0.dll

6.0.6002.24017

218,112

09-Sep-2016

15:16

x86

Schannel.dll

6.0.6002.19678

284,160

10-Aug-2016

15:44

x86

Schannel.dll

6.0.6002.24017

284,672

09-Sep-2016

15:16

x86

Mrxsmb10.sys

6.0.6002.19431

217,088

27-Jun-2015

14:21

x86

Mrxsmb10.sys

6.0.6002.24017

217,088

09-Sep-2016

14:17

x86

Mrxsmb20.sys

6.0.6002.19431

81,408

27-Jun-2015

14:21

x86

Mrxsmb20.sys

6.0.6002.24017

82,432

09-Sep-2016

14:17

x86

Mrxsmb.sys

6.0.6002.19279

107,008

09-Jan-2015

00:17

x86

Mrxsmb.sys

6.0.6002.24017

107,520

09-Sep-2016

14:17

x86

For all supported x64-based versions

File name

File version

File size

Date

Time

Platform

Adsmsext.dll

6.0.6002.19693

105,472

10-Sep-2016

16:44

x64

Adsmsext.dll

6.0.6002.24017

105,472

09-Sep-2016

15:33

x64

Advapi32.dll

6.0.6002.19598

1,067,008

06-Feb-2016

01:59

x64

Advapi32.dll

6.0.6002.24017

1,067,520

09-Sep-2016

15:33

x64

Bcrypt.dll

6.0.6002.19677

306,688

10-Aug-2016

13:07

x64

Bcrypt.dll

6.0.6002.24004

306,688

10-Aug-2016

13:08

x64

Ksecdd.sys

6.0.6002.19655

516,328

11-May-2016

13:10

x64

Lsasrv.dll

6.0.6002.19693

1,690,624

10-Sep-2016

16:45

x64

Lsasrv.mof

Not applicable

13,780

03-Apr-2009

21:33

Not applicable

Lsass.exe

6.0.6002.18541

11,264

16-Nov-2011

14:34

x64

Secur32.dll

6.0.6002.19623

94,720

18-Mar-2016

18:15

x64

Ksecdd.sys

6.0.6002.23970

517,352

11-May-2016

13:08

x64

Lsasrv.dll

6.0.6002.24017

1,694,208

09-Sep-2016

15:34

x64

Lsasrv.mof

Not applicable

13,780

07-Mar-2016

23:37

Not applicable

Lsass.exe

6.0.6002.24017

11,264

09-Sep-2016

14:46

x64

Secur32.dll

6.0.6002.24017

94,720

09-Sep-2016

15:35

x64

Ncrypt.dll

6.0.6002.19678

258,048

10-Aug-2016

16:12

x64

Ncrypt.dll

6.0.6002.24017

258,048

09-Sep-2016

15:35

x64

Rpcrt4.dll

6.0.6002.19598

1,304,576

06-Feb-2016

02:01

x64

Rpcrt4.dll

6.0.6002.24017

1,308,160

09-Sep-2016

15:35

x64

Wdigest.dll

6.0.6002.19659

205,824

14-May-2016

15:54

x64

Wdigest.dll

6.0.6002.24017

205,824

09-Sep-2016

15:35

x64

Msv1_0.dll

6.0.6002.19431

269,824

27-Jun-2015

15:40

x64

Msv1_0.dll

6.0.6002.24017

269,312

09-Sep-2016

15:35

x64

Schannel.dll

6.0.6002.19678

353,280

10-Aug-2016

16:12

x64

Schannel.dll

6.0.6002.24017

354,304

09-Sep-2016

15:35

x64

Mrxsmb10.sys

6.0.6002.19431

278,016

27-Jun-2015

14:30

x64

Mrxsmb10.sys

6.0.6002.24017

278,528

09-Sep-2016

14:37

x64

Mrxsmb20.sys

6.0.6002.19431

109,056

27-Jun-2015

14:30

x64

Mrxsmb20.sys

6.0.6002.24017

110,080

09-Sep-2016

14:37

x64

Mrxsmb.sys

6.0.6002.19279

136,192

09-Jan-2015

00:28

x64

Mrxsmb.sys

6.0.6002.24017

137,216

09-Sep-2016

14:37

x64

Bcrypt.dll

6.0.6002.19677

275,968

10-Aug-2016

13:14

x86

Bcrypt.dll

6.0.6002.24004

275,968

09-Sep-2016

13:14

x86

Lsasrv.mof

Not applicable

13,780

08-Mar-2016

00:42

Not applicable

Secur32.dll

6.0.6002.19693

77,312

10-Sep-2016

16:30

x86

Lsasrv.mof

Not applicable

13,780

07-Mar-2016

23:37

Not applicable

Secur32.dll

6.0.6002.24017

77,312

09-Sep-2016

15:17

x86

Rpcrt4.dll

6.0.6002.19598

679,424

06-Feb-2016

02:12

x86

Rpcrt4.dll

6.0.6002.24017

678,912

09-Sep-2016

15:17

x86

Wdigest.dll

6.0.6002.19659

175,616

14-May-2016

15:41

x86

Wdigest.dll

6.0.6002.24017

175,616

09-Sep-2016

15:16

x86

Msv1_0.dll

6.0.6002.19431

218,112

27-Jun-2015

16:02

x86

Msv1_0.dll

6.0.6002.24017

218,112

09-Sep-2016

15:16

x86

Schannel.dll

6.0.6002.19678

284,160

10-Aug-2016

15:44

x86

Schannel.dll

6.0.6002.24017

284,672

09-Sep-2016

15:16

x86

Adsmsext.dll

6.0.6002.19693

75,264

10-Sep-2016

16:27

x86

Adsmsext.dll

6.0.6002.24017

75,264

09-Sep-2016

15:14

x86

Advapi32.dll

6.0.6002.19598

802,304

06-Feb-2016

02:11

x86

Advapi32.dll

6.0.6002.24017

802,816

09-Sep-2016

15:14

x86

Ncrypt.dll

6.0.6002.19678

206,336

10-Aug-2016

15:43

x86

Ncrypt.dll

6.0.6002.24017

205,312

09-Sep-2016

15:16

x86

Need more help?

Want more options?

Explore subscription benefits, browse training courses, learn how to secure your device, and more.

Communities help you ask and answer questions, give feedback, and hear from experts with rich knowledge.