KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
System : Windows NT SERVER-PC 10.0 build 26200 (Windows 11) AMD64
User : ServerPC ( 0)
PHP Version : 8.2.12
Disable Function : NONE
Directory :  C:/Windows/System32/en-US/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : C:/Windows/System32/en-US/wlancfg.dll.mui
MZ����@���	�!�L�!This program cannot be run in DOS mode.

$�X=��9S��9S��9S������9S���Q��9S�Rich�9S�PEL!�G�!&

0��@ �8.rdata�@@.rsrc� 
@@!�G
lPP!�G$����8.rdata8.rdata$voltmdP�.rdata$zzzdbg �.rsrc$01�3�.rsrc$02 ���D�,"T��cNȬ���CeA�bp�!�G`�0�H�`�x���a�
���
���
���
��*�+(�,@�-X�.p�/��0��7��8��h��i�j��0��H��`��x������������������� ��8��P��h����������������������(��@��X��p���������������������0��H��`��x�����������������	�� 	�8	�P	�h	��	��	��	��	��	� �	�!
�$(
�+@
�-X
�.p
�/�
�0�
�2�
�4�
�8�
�<�=�@0�AH�D`�Ex�J��K��L��M��N��O�R �V8�XP�Yh�Z��[��\����h�������	
	 
	0
	@
	P
	`
	p
	�
	�
	�
	�
	�
	�
	�
	�
			 	0	@	P	`	p	�	�	�	�	�	�	�	�			 	0	@	P	`	p	�	�	�	�	�	�	�	�			 	0	@	P	`	p	�	�	�	�	�	�	�	�			 	0	@	P	`	p	�	�	�	�	�	�	�	�			 	0	@	P	`	p	�	�	�	�	�	�	�	�			 	0	@	P�3��|4��d5��L7���7���Gf'�or�|~$���8�ث��l�\�����������xD�������$��"�(���%���)��8+�L/���/���1��<3��04z��6��L:h��;���>��x?��@��<AB��B��\D�hLx��Lf�HR���S���T��PX��<\��8^���a|�tcV��eB�w���z^�<}���~������D���܃����Ĉ��������r�����*����������ĕ|�@�~���h�(�������Ԡ������`����:����иz�L���������d�,�����L���������N���0�R���n�����������l���4�����������x���h��������������4	:�pS�MUIXML_FORMAT_TRANSFORMXML_WLANREPORT_TRANSFORM����1��8���;q����,�
�r~	IE������MUIen-US	not ready	connectedad hoc network formed
disconnectingdisconnectedassociatingdiscoveringauthenticating
unknown state'Adds a configuration entry to a table.
,Deletes a configuration entry from a table.
 Sets configuration information.
Displays information.
"Saves WLAN profiles to XML files.
Start hosted network.
Stop hosted network.
PA!Refresh hosted network settings.
Commands for IHV logging.
PA Connects to a wireless network.
y
Usage: %1!s! [name=]<string> [[ssid=]<string>] [[interface=]<string>] 

Parameters:

    Tag             Value
    ssid          - SSID of the wireless network.
    name          - Name of the profile to be used in connection attempt.
    interface     - Name of the interface from which connection is attempted.

Remarks:

    Connect to the wireless network given by ssid using the specified 
    profile. Connection is attempted from the specified interface unless 
    there is only one available interface on the system, in which case, 
    the interface parameter can be omitted.

    Parameter profile name is required but ssid is optional. If only one
    SSID exists in the profile, then this SSID is used to connect. If there
    are multiple SSIDs in the profile, then parameter ssid is required.

    Parameter interface is required if there are two or more available 
    interfaces on the system. When interface is specified, it cannot be 
    a wildcard name.

    If the specified interface is already connected to a wireless network,
    this command will first disconnect from the currently connected network,
    then attempt to connect to the new network. However, if these two networks
    are the same this command simply returns success and does nothing.

Examples:

    %1!s! name=Profile1 ssid=SSID1
    %1!s! name=Profile2 ssid=SSID2 interface="Wireless Network Connection"
%Disconnects from a wireless network.

Usage: %1!s! [[interface=]<string>] 

Parameters:

    Tag             Value
    interface     - Name of the interface from which disconnection is
                    attempted.

Remarks:

    Disconnect from the wireless network on the specified interface.

    Parameter interface is required if there are two or more available 
    interfaces on the system. Wildcard characters can be used in the 
    interface name to specify multiple interfaces. 

Examples:

    %1!s! 
    %1!s! interface="Wireless Network Connection"
PASAdd a wireless network into the wireless allowed or
                 blocked list.
�
Usage: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
       [networktype=]infrastructure|adhoc

Parameters:

    Tag             Value
    permission    - Permission type of the filter.
    ssid          - SSID of the wireless network.
    networktype   - Network type of the wireless network.

Remarks:

    Adds a wireless network into the allowed and blocked network list 
    configured on the system.

    Parameter ssid is required if permission is allow or block. If permission
    is denyall then parameter ssid should not be given.

Examples:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
    %1!s! permission=block ssid=ssid2 networktype=adhoc
    %1!s! permission=denyall networktype=adhoc
9Add a WLAN profile to specified interface on the system.
�
Usage: %1!s! [filename=]<string> [[interface=]<string>] [[user=]all|current]

Parameters:

    Tag             Value
    filename      - Name of the profile XML file.
    interface     - Interface name.
    user          - User scope, all users or only current user.

Remarks:

    Add a wireless network profile on an interface for all or current users.

    Parameter filename is required. It is the name of the XML file containing
    the profile data.

    Parameter interface is optional. It is one of the interface name shown 
    by "netsh wlan show interface" command. If interface name is given, 
    the profile will be added to the specified interface, otherwise the 
    profile will be added on all wireless interfaces. 

    Parameter user is optional. It specifies whether this profile is applied
    to all users or current user only. By default it is applied to all users.

Examples:

    %1!s! filename="Profile1.xml" interface="Wireless Network Connection"
    user=current
q
Usage: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
       [networktype=]infrastructure

Parameters:

    Tag             Value
    permission    - Permission type of the filter.
    ssid          - SSID of the wireless network.
    networktype   - Network type of the wireless network.

Remarks:

    Adds a wireless network into the allowed and blocked network list 
    configured on the system.

    Parameter ssid is required if permission is allow or block. If permission
    is denyall then parameter ssid should not be given.

Examples:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
"Starts verbose Wi-Fi IHV logging.
W
Usage: %1!s! 

Remarks:

    Starts verbose Wi-Fi IHV logging.

Examples:

    %1!s! 
!Stops verbose Wi-Fi IHV logging.
V
Usage: %1!s! 

Remarks:

    Stops verbose Wi-Fi IHV logging.

Examples:

    %1!s! 
VRemove a wireless network from the wireless allowed or
                 blocked list.
�
Usage: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
       [networktype=]infrastructure|adhoc

Parameters:

    Tag             Value
    permission    - Permission type of the filter.
    ssid          - SSID of the wireless network.
    networktype   - Network type of the wireless network.

Remarks:

    Removes a wireless network from the allowed and blocked network list 
    configured on the system.

    Parameter ssid is required if permission is allow or block. If permission
    is denyall then parameter ssid should not be given.

Examples:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
    %1!s! permission=block ssid=ssid2 networktype=adhoc
    %1!s! permission=denyall networktype=adhoc
7Delete a WLAN profile from one or multiple interfaces.

Usage: %1!s! [name=]<string> [[interface=]<string>]

Parameters:

    Tag             Value
    name          - Name of the profile to delete.
    interface     - Interface name.

Remarks:

    Remove a wireless network profile from an interface or all interfaces.

    Parameter name is required. It is the name of the profile to be deleted.
    Parameter interface is optional. If it is given then the profile will
    be deleted from specified interface only. If it is omitted then the
    profile will be deleted from all the interfaces that have such a profile.

    Profile name can have wildcard characters and multiple profiles with 
    matching name will be removed.

Examples:

    %1!s! name="Profile 1" interface="Wireless Network Connection"
    %1!s! name="Profile 1" i=*
t
Usage: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
       [networktype=]infrastructure

Parameters:

    Tag             Value
    permission    - Permission type of the filter.
    ssid          - SSID of the wireless network.
    networktype   - Network type of the wireless network.

Remarks:

    Removes a wireless network from the allowed and blocked network list 
    configured on the system.

    Parameter ssid is required if permission is allow or block. If permission
    is denyall then parameter ssid should not be given.

Examples:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
PA(Export specified profiles to XML files.
H
Usage: %1!s! [name=]<string> [folder=]<string> [[interface=]<string>] [key=<string>]

Parameters:

    Tag             Value
    name          - Name of the profile to export.
    folder        - Name of the folder in which the profile XML files 
                    will be saved.
    interface     - Name of the interface which has this profile configured.
    key           - To display the key in plain text, set key=clear.

Remarks:

    Saves the selected profiles into XML files in the specified folder.
    For each exported profile, the output file will be named as 
    "Interface Name-Profile Name.xml".

    Parameters folder, name and interface are all optional. If profile 
    name is given then the specified profile will be saved. Otherwise 
    profiles on any interface will be saved.

    If the folder parameter is provided it must specify an existing folder
    accessible from the local computer. It can either be an absolute path,
    or a relative path to the current working directory. In addition, "."
    refers to the current working directory, and ".." refers to the parent
    directory of the current working directory. The folder name cannot be 
    a UNC (Universal Naming Convention) path. By default profiles will be 
    saved in the current working directory.

    If interface name is given, only the specified profile on the given
    interface will be saved. Otherwise all profiles with the given name
    on the system will be saved.

    If a key in plain text is required and the caller is local administrator,
    output XML file will include the key in plain text.
    Otherwise, the output XML file will include encrypted key. 

Examples:

    %1!s! name="profile 1" folder=c:\profiles
        interface="Wireless Network Connection"
    %1!s! name="profile 2" folder=.
    %1!s! name="profile 3" folder=. key=clear
9Enable or disable auto configuration logic on interface.
PA=
Usage: %1!s! [enabled=]yes|no [interface=]<string>

Parameters:

    Tag           Value
    enabled     - Set auto configuration logic to enabled or disabled.
    interface   - Name of the interface for which the setting has to be
                  changed.

Remarks:

    Enable or disable the auto configuration logic on an interface. If it is,
    disabled then Windows will not connect to any wireless network
    automatically from the specified interface.

    Both parameters are required.

Examples:

    %1!s! enabled=yes interface="Wireless Network Connection"
8Set the preference order of a wireless network profile.
�
Usage: %1!s! [name=]<string> [interface=]<string> [priority=]<integer>

Parameters:

    Tag           Value
    name        - Name of the User profile whose priority is to be changed.
    interface   - Name of the interface which has this profile configured.
    priority    - The new priority of the User profile.

Remarks:

    Set the preference order of a wireless network profile on an interface.
    All three parameters are required.

    Only the order of User profiles can be changed. Group policy profiles
    are read only. Group policy profiles always have higher precedence over
    User profiles.

    Parameter priority specifies the new position of the profile in the
    preferred profile list. If it is 1, the profile will be moved to the
    first position in the User profile list.

Examples:

    %1!s! name="profile1" interface="Wireless Network Connection"
    priority=1
LShow or hide the blocked networks in visible
                 network list.
�
Usage: %1!s! [display=]show|hide

Parameters:

    Tag           Value
    display     - Show or hide blocked networks in the visible network list.

Remarks:

    Specify whether to show or hide blocked networks in the visible network
    list. If disabled then the blocked networks will not be displayed in the 
    visible wireless network list.

    The parameter display is required.

Examples:

    %1!s! display=show 

Enable or disable tracing.
H
Usage: %1!s! [mode=]yes|no|persistent] 

Parameters:

    Tag           Value
    mode        - Enable, make it persistent or disable tracing.

Remarks:

    Enabled or disable tracing, with the option to make tracing persistent.
    If enabled then the trace logs for wireless LAN will be collected and 
    saved to the trace files.

    The parameter mode is required. Under persistent mode the tracing will
    still be effective after system reboot. If mode is set to disable, then
    both persistent and nonpersistent tracing will be stopped.

Examples:

    %1!s! mode=yes 

IAllow or disallow everyone to create all user
                 profiles.
2
Usage: %1!s! [[enabled=]yes|no]

Parameters:

    Tag           Value
    enabled     - Allow or disallow everyone to create all user profiles.

Remarks:

    If enabled is yes then everyone is allowed to create all user profiles.

    The enabled parameter is required.

Examples:

    %1!s! enabled=yes
2Enable or disable MAC randomization on interface.

Usage: %1!s! [enabled=]yes|no [interface=]<string>

Parameters:

    Tag           Value
    enabled     - Set MAC randomization to enabled or disabled.
    interface   - Name of the interface for which the setting has to be
                  changed.

Remarks:

    The command will fail if the interface does not support
    randomization or if randomization was blocked by the 
    system administrator. 

    Both parameters are required.

Examples:

    %1!s! enabled=yes interface="Wireless Network Connection"
TShows whether the auto configuration logic is enabled or
                 disabled.
�
Usage: %1!s!

Remarks:

      Shows the global setting whether auto configuration logic is enabled 
      or not on each interface.

Examples:

      %1!s!
,Shows the blocked network display settings.
�
Usage: %1!s!

Remarks:

      Shows the global setting whether to display the blocked networks in 
      visible network list or not.

Examples:

      %1!s!
<Shows properties of the wireless LAN drivers on the system.
)
Usage: %1!s! [[interface=]<string>] 

Parameters:

    Tag             Value
    interface     - Name of the interface for which to show driver
                    information.

Remarks:

    Shows the 802.11 wireless LAN interface and driver information on the
    system.

Examples:

    %1!s!
,Shows the allowed and blocked network list.
'
Usage: %1!s! [permission=]allow|block

Parameters:

    Tag             Value
    permission    - Select allow or block network list.

Remarks:

    Shows the allowed and blocked network list configured on the system.

Examples:

    %1!s!
    %1!s! permission=allow
    %1!s! permission=block
LShows a list of the wireless LAN interfaces on
                 the system.
�
Usage: %1!s!

Remarks:

   Shows the wireless LAN interfaces configured on the system.
   There are no parameters for this command.

Examples:

   %1!s!
0Shows a list of networks visible on the system.
�
Usage: %1!s! [[interface=]<string>] [[mode=]ssid/bssid]

Parameters:

    Tag             Value
    interface     - Name of the interface which has this profile configured.
    mode          - Get detailed bssid information.

Remarks:

    Shows the networks available to the system.
    Parameter interface and bssid are both optional.

    If interface name is given, only the networks on the given
    interface will be listed. Otherwise, all networks visible to
    the system will be listed.

    If mode=bssid is given then the visible bssids for each ssid
    will also be listed. Otherwise only ssids will be listed.

Examples:

    %1!s! interface="Wireless Network Connection"
    %1!s! mode=Bssid
    %1!s!
3Shows a list of profiles configured on the system.
�
Usage: %1!s! [[name=]<string>] [interface=<string>] [key=<string>]

Parameters:

    Tag             Value
    name          - Name of the profile to display.
    interface     - Name of the interface which has this profile configured.
    key           - To display the key in plain text, set key=clear. 

Remarks:

    Shows the profile data or lists the profiles on the system.
    Parameter name and interface are both optional.

    If profile name is given then the content of the profile will be
    displayed. Otherwise only profile name and description will be listed.

    If interface name is given, only the specified profile on the given
    interface will be listed. Otherwise, all profiles with the given name
    on the system will be listed.

    If key is set to "clear" and the caller is local administrator,
    the key will be shown in plain text.

    Group Policy Profiles are read only. User Profiles are readable and
    writeable, and the preference order can be changed.

Examples:

    %1!s! name="profile 1" interface="Wireless Network Connection"
    %1!s! name="profile 2"
    %1!s! name="profile 3" key=clear
    %1!s!
+Shows the global settings of wireless LAN.
q
Usage: %1!s!

Remarks:

      Shows the global settings for the Wireless AutoConfig service, including
      whether the auto configuration logic is enabled or disabled on each
      interface, and whether to show blocked networks in the visible network 
      list.

      Allow and block filter lists are available by "show filters" command.

Examples:

      %1!s!
;Shows whether wireless LAN tracing is enabled or disabled.
n
Usage: %1!s!

Remarks:

    Shows whether wireless LAN tracing is enabled or disabled.

Examples:

    %1!s!
9Shows complete wireless device and networks information.
�
Usage: %1!s!

Remarks:

    Shows the complete 802.11 wireless interface information, networks, and
    wireless settings on the system, including:
        - Wireless driver information
        - Wireless interface status
        - Wireless configuration settings
        - Wireless network filters
        - Wireless network profiles list and details
        - Visible wireless networks

Examples:

    %1!s!
PShows whether everyone is allowed to create all
                 user profiles.
�
Usage: %1!s!

Remarks:

    Shows the global setting whether creating all user profiles is allowed
    or disallowed for everyone.

Examples:

    %1!s!
IShows whether MAC randomization is enabled or
                 disabled.
�
Usage: %1!s!

Remarks:

      Shows the global setting whether MAC randomization logic is enabled 
      or not on each interface.

Examples:

      %1!s!
.Shows the wireless capabilities of the system
e
Usage: %1!s!

Remarks:

      Shows the wireless capabilities of the system

Examples:

      %1!s!
?Generate a report showing recent wireless session information.
�
Usage: %1!s! [duration=<string>] [log=<string>] [logger=<autologger,...>]

Remarks:

    Generates a report showing recent wireless session information. 
    By default a report will be generated for wireless activity over the
    last three days based on the event log on your system. 

    The duration of the report can be changed by specifying a number of days 
    using the optional duration parameter. 

    You can provide the path to an etl file to use as the source of events 
    instead of the machines event log. 

    You can provide a comma separated list of auto logger services to 
    retrieve logs for as well. WiFiSession and LwtNetLog logs are retrieved 
    by default. 
Examples:

    %1!s! duration="7" log="logpath.etl" logger="name1,name2"
PA�
Usage: %1!s!

Remarks:

      Shows the global settings for the Wireless AutoConfig service, including
      whether the auto configuration logic is enabled or disabled on each
      interface, whether to show blocked networks in the visible network list,
      and whether to only use GP profiles on GP-configured networks.

      Allow and block filter lists are available by "show filters" command.

Examples:

      %1!s!
BShows the only use GP profiles on GP configured networks setting.
�
Usage: %1!s!

Remarks:

              Shows the global setting whether to only use GP profiles on 
              GP configured networks or not.

Examples:

              %1!s!
.Set parameters in a wireless network profile.
�
Usage: %1!s! [name=]<string> [[interface=]<string>] 
       [SSIDname=<string>] [ConnectionType=ESS|IBSS] [autoSwitch=yes|no]
       [ConnectionMode=auto|manual] [nonBroadcast=yes|no] 
       [Randomization=[yes|no|daily]] 
       [authentication=open|shared|WPA|WPA2|WPAPSK|WPA2PSK] 
       [encryption=none|WEP|TKIP|AES] [keyType=networkKey|passphrase] 
       [keyIndex=1-4] [keyMaterial=<string>] [PMKCacheMode=yes|no] 
       [PMKCacheSize=1-255] [PMKCacheTTL=300-86400] [preAuthMode=yes|no] 
       [preAuthThrottle=1-16 [FIPS=yes|no] 
       [useOneX=yes|no] [authMode=machineOrUser|machineOnly|userOnly|guest] 
       [ssoMode=preLogon|postLogon|none] [maxDelay=1-120] 
       [allowDialog=yes|no] [userVLAN=yes|no] 
       [heldPeriod=1-3600] [AuthPeriod=1-3600] [StartPeriod=1-3600] 
       [maxStart=1-100] [maxAuthFailures=1-100] [cacheUserData = yes|no] 
       [cost=default|unrestricted|fixed|variable] 
�
Parameters:

    Tag              Value
    name           - Name of the profile to be modified.
    interface      - Name of the interface on which the profile is set.
    SSIDname       - SSID of the wireless LAN, maximum length is 32. 
    ConnectionType - Specify the network is infrastructure (ESS) or ad-hoc (IBSS). 
    ConnectionMode - Connecting to network automatic or manually. 
                     Must be manual if connection type is IBSS. 
    autoSwitch     - The roaming behavior of an auto-connected network 
                     when a more preferred network is in range. 
    randomization  - Whether MAC address randomization is enabled or disabled. 
    nonBroadcast   - Whether to connect to a hidden network. 
    authentication - The authentication type to be used. 
    encryption     - The encryption method to be used. 
    keyType        - Whether the shared key is a network key or a passphrase. 
    keyIndex       - The key index should be used to encrypt wireless traffic. 
    keyMaterial    - The network key or pasphrase. 
    PMKCacheMode   - Whether PMK caching will be used. Only valid for WPA2 networks. 
    PMKCacheSize   - The number of entries in the PMK cache on the client. 
    PMKCacheTTL    - The length of time in seconds, that a PMK cache will be kept. 
    preAuthMode    - Whether preauthentication will be used. Only valid for WPA2 networks. 
    preAuthThrottle - The number of reauthentication attempts to try on neighboring APs. 
    FIPS           - Enable or Disable FIPS mode. 
    useOneX         - Whether 802.1X authentication is used. 
    authMode       - Type of credentials to be used for authentication.
    ssoMode        - Type of single sign on to be attempted if any.
    maxDelay       - Timeout value to establish single sign on connection.
    allowDialog    - Allow or Disallow a dialog to be shown for preLogon.
    userVLAN       - Specify if the network switches to a different VLAN on user authentication.
    heldPeriod     - The interval time between two attempt authentications, in seconds. 
    AuthPeriod     - The maximum time, in seconds, a client waits for a response from the authenticator. 
    StartPeriod    - The length of time, in seconds, to wait before an EAPOL-Start
    maxStart       - The maximum number of EAPOL-Start messages sent. 
    maxAuthFailures - The maximum number of authentication failures allowed 
                     for a set of credentials. 
    cacheUserData -  Whether the user credentials are cached for subsequent use. 
    cost          -  The cost associated with the profile. 

Remarks:

    Modifies the specified profile. If the interface is specified then 
    only the profile on that interface is modified. 

    The name parameter is required. At least one other parameter besides 
    profile name and interface must also be specified. 

Examples:

    %1!s! name=Profile1 authMode=userOnly ssoMode=preLogon 
    %1!s! name=Profile2 ssoMode=none fips=yes 
PASet hosted network properties.
�
Usage: %1!s! [mode=]allow|disallow [ssid=]<ssid>
                         [key=]<passphrase> [keyUsage=]persistent|temporary

Parameters:

    Tag             Value
    mode            Specifies whether to allow or disallow the hosted network.
    ssid            SSID of the hosted network.
    key             The user security key used by the hosted network.
    keyUsage        Specifies whether the user security key is persistent or 
                    temporary. 

Remarks:

    This command changes the properties of hosted network, including: SSID 
    of the hosted network, allow or disallow the hosted network in the system, 
    and a user security key that is used by the hosted network. 
 

    The user security key should be a string with 8 to 63 ASCII characters, 
    eg. a passphrase, or 64 hexadecimal digits which represent 32 binary 
    bytes. 
 

    If keyUsage is specified as persistent, the security key will be saved 
    and used when the hosted network is started again in future. Otherwise 
    it will be used only when the current or next time the hosted network 
    is started. Once the hosted network is stopped, the temporary security 
    key will be deleted from the system. If keyUsage is not specified, it 
    is persistent by default. 

    This command requires administrator privileges to allow or disallow the 
    hosted network. 

Examples:

    %1!s! mode=allow 
    %1!s! ssid=ssid1 
    %1!s! key=passphrase keyUsage=persistent 
+Show hosted network properties and status.
�
Usage: %1!s! [[setting=]security]

Parameters:

    Tag             Value
    setting         Specifies hosted network settings to display.

Remarks:

    This command shows the properties of the hosted network and its
    status if it has been started.

    If the setting parameter is specified, it will display the security
    algorithms and the key of the hosted network. 

Examples:

    %1!s!
    %1!s! setting=security
Start hosted network.
�
Usage: %1!s! 

Remarks:

    This command requests the WLAN service to start the hosted network.

    This command requires administrator privileges.

Examples:

    %1!s!
Stop hosted network.
w
Usage: %1!s! 

Remarks:

    This command requests the WLAN service to stop the hosted network.

Examples:

    %1!s!
!Refresh hosted network settings.


Usage: %1!s! [data=]key

Parameters:

    Tag             Value
    data            Specifies the hosted network data to refresh.

Remarks:

    This command requests the WLAN service to use a new security key for 
    the hosted network.

Examples:

    %1!s! key
2Shows the allow shared user credentials settings.
�
Usage: %1!s!

Remarks:

      Shows the global setting whether to allow shared user credentials 
      for authenticating to 802.1x networks.

Examples:

      %1!s!
hAllow or disallow the user to use shared user 
                 credentials for network authentication.
A
Usage: %1!s! [allow=]yes|no

Parameters:

    Tag           Value
    allow     - Allow or disallow shared user credentials.

Remarks:

    Specify whether to allow or disallow shared user credentials 
    on the client for network authentication.

    The parameter allow is required.

Examples:

    %1!s! allow=yes 

)Set profile type to alluser or peruser. 
PA@
Usage: %1!s! [name=]<string> [profiletype=]all|current [[interface=]<string>]

Parameters:

    Tag           Value
    name           - Name of the profile to be changed.
    profiletype    - The desired profile type [all-user/per-user]. 
    interface      - Name of the interface on which the profile is set.

Remarks:

    Changes the profile type for the specified profile. If the interface is
    specified, then only the profile on that interface is changed.

    The name and profile type parameters are required. 

Examples:

    %1!s! name=Profile1 profiletype=all
/Export the hosted network profile to XML file.
�
Usage: %1!s!

Remarks:

    This command saves the hosted network client profile to a XML file. 
    It can be added to other windows wireless clients to connect to this 
    hosted network. 

Examples:

    %1!s! 

"Generate WLAN smart trace report.
�
Usage: %1!s!

Remarks:

    This command generates WLAN smart trace report and makes it ready for 
    reporting WLAN issues. 

Examples:

    %1!s! 
Set the block period.
�
Usage: %1!s! [value=]0-60

Parameters:

    Tag           Value
    value - Specifies the length in time, in minutes, during which 
            auto connect attempts to this network will be suspended.

Remarks:

    Modifies the specified timer. The value is specified in minutes. 
    The blocked state is reset upon a manual connection attempt, 
    a session change or a media connect.


Examples:

    %1!s! value=2 
    %1!s! 25 

�Network shell commands need location permission to access WLAN information. Turn on Location services on the Location page in Privacy & security settings.
Here is the URI for the Location page in the Settings app: ms-settings:privacy-location
To open the Location page in the Settings app, run the following command:
start ms-settings:privacy-location

Or, to open the Location page from the Run dialog box, press Windows logo key + R, and then copy and paste the URI above.

6Network shell commands need location permission to access WLAN information. Turn on Location services on the Location page in Privacy & security settings.

Here is the URI for the Location page in the Settings app:
]8;;ms-settings:privacy-location\ms-settings:privacy-location]8;;\
To open the Location page in the Settings app, hold down the Ctrl key and select the link, or run the following command:
start ms-settings:privacy-location

Or, to open the Location page from the Run dialog box, press Windows logo key + R, and then copy and paste the URI above.

$Function %1!s! returns error %2!u!:
1Invalid value "%2!s!" for command option "%1!s!".COne or more parameters for the command are not correct or missing.
JThe value for option "%1!s!" is invalid. It should be 8 to 63 characters.
2Invalid value "%2!s!" for command option "%1!s!".

2There is no such wireless interface on the system.-There is no wireless interface on the system.9The Wireless AutoConfig Service (wlansvc) is not running.HError connecting to Wireless AutoConfig Service (wlansvc): error %1!lu!.PA,
There are %1!d! interfaces on the system: 
*
There is %1!d! interface on the system: 
�
    Name                   : %1!s!
    Description            : %2!s!
    GUID                   : %3!s!
    Physical address       : %4!02x!:%5!02x!:%6!02x!:%7!02x!:%8!02x!:%9!02x!
    Interface type         : Primary
    State                  : %10!s!$    Profile                : %1!s! 
p
    SSID                   : %1!s!
    AP BSSID               : %2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!i
    Network type           : %1!s!
    Radio type             : %2!s!
    Authentication         : %3!s!F
    Cipher                 : %1!s!
    Connection mode        : %2!s!m
    Receive rate (Mbps)    : %1!s!
    Transmit rate (Mbps)   : %2!s!
    Signal                 : %3!d!%% 
ProfileTemporary ProfileDiscovery (secured)Discovery (unsecured)Auto ConnectInvalid%
    Name                   : %1!s!
    Description            : %2!s!
    GUID                   : %3!s!
    Physical address       : %4!02x!:%5!02x!:%6!02x!:%7!02x!:%8!02x!:%9!02x!
    Interface type         : Secondary
    Primary interface      : %10!s!
    State                  : %11!s!  (H2E)         Details            : x    QoS MSCS Configured         : %1!d!
    QoS Map Configured          : %2!d!
    QoS Map Allowed by Policy   : %3!d!
M    Hosted network clients : %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!
M                             %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!
$
    Hosted network status  : %1!s!
*Profile %1!s! is added on interface %2!s!.%Profile format error 0x%1!X!: %2!s! 
1Failed to add the profile. Error %x%1!X!: %2!s! 
�Failed to add profile "%1!s!". A profile with this name already exists in group policy or different user scope and cannot be overwritten.GYou do not have the permission to add profile "%1!s!" for current user.DYou do not have the permission to add profile "%1!s!" for all users.eThe security or connectivity setting in profile "%1!s!" is not supported by wireless adapter "%2!s!".PAFFailed to add the profile on interface "%3!s!". Error 0x%1!X!: %2!s! 
.Profile "%1!s!" is not found on any interface.2Profile "%1!s!" is deleted from interface "%2!s!".lYou do not have sufficient privileges or the profile "%1!s!" on interface "%2!s!" is a group policy profile.:Priority order of profile "%1!s!" is updated successfully.?Priority order for profile "%1!s!" is not changed for "%2!s!". <Profile "%1!s!" does not exist on any available interfaces. PA'Profile preference order starts with 1.BPriority order of Group Policy profile "%1!s!" cannot be changed. PAB
Interface profile "%1!s!" is saved in file "%2!s!" successfully.
.Profile "%1!s!" is not found on any interface.2Profile "%1!s!" is not found on interface "%2!s!"."There is no profile on the system.E
Group policy profile "%1!s!" is saved in file "%2!s!" successfully.
$Specified folder "%1!s!" is invalid.PA+Profile "%1!s!" is not found on the system.4Profile "%1!s!" does not exist on interface "%2!s!"."There is no profile on the system.*The profile is not a wireless LAN profile.n
Profile %2!s! on interface %1!s!: 
======================================================================= 


Profiles on interface %1!s!:
    %1!s! : %2!s!
    <None>
E
Group policy profiles (read only)
---------------------------------

User profiles
-------------

    %1!s!
9The EAP method configured in this profile does not exist.@The EAP method configuration included in the profile is invalid.+The requested operation requires elevation.C
Allow list on the system (user) 
------------------------------- 
C
Block list on the system (user) 
------------------------------- 
    <None>
    SSID: "%1!s!", Type: %2!s!
S
Allow list on the system (group policy) 
--------------------------------------- 
S
Block list on the system (group policy) 
--------------------------------------- 
/
Wireless LAN settings 
--------------------- 
=    Auto configuration logic is enabled on interface "%2!s!"
>    Auto configuration logic is disabled on interface "%2!s!"
8    Show blocked networks in visible network list: %1!s!Yes

No

PA9    Only use GP profiles on GP-configured networks: %1!s!Yes

No

C    Allow shared user credentials for network authentication: %1!s!Yes

No

"    Block period: %1!d! minutes.

#    Block period: Not Configured.

PA7    MAC randomization not available on interface %1!s!
C    MAC randomization disabled by administrator on interface %1!s!
2    MAC randomization disabled on interface %1!s!
1    MAC randomization enabled on interface %1!s!
PA=
Wireless System Capabilities 
---------------------------- 
=    Number of antennas connected to the 802.11 Radio : %1!u!
K    Number of antennas connected to the 802.11 radio (value not available)
=    Function Level Reset                        : Supported

A    Function Level Reset                        : Not supported

(    FLDR support (value not available)

F    Co-existence Support                        : Mutually Exclusive

U    Co-existence Support                        : Wi-Fi performance degraded to 1x1

S    Co-existence Support                        : Wi-Fi performance is maintained

J    Co-existence Support                        : Bluetooth has priority

=    PLDR                                        : Supported

A    PLDR                                        : Not supported

(    PLDR support (value not available)

R    Max number of channels the device can operate on, simultaneously     : %1!u!

[    Max number of channels the device can operate on, simultaneously (value not available)
,    Wireless Capabilities is not available

 
Interface name : %1!s! 
-There are %1!d! networks currently visible. 
�
SSID %1!d! : %2!s!
    Network type            : %3!s!
    Authentication          : %4!s!
    Encryption              : %5!s! 
�    BSSID %1!d!                 : %2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!
         Signal             : %8!d!%%  
         Radio type         : %9!s!
         Band               : %10!s!
         Channel            : %11!d! 
bVisible networks cannot be displayed because auto 
configuration has been %1!s! on the interface.
         Basic rates (Mbps) :         Other rates (Mbps) : %1!s! (H2E Not supported)  (H2E supported)  (H2E Required)  (FT)  (OKC) 
 (FT-Roamed) PA$         MFP Required       : %1!x!
�
SSID %1!d! : %2!s!
    HESSID                  : %3!s!
    Network type            : %4!s!
    Authentication          : %5!s!
    Encryption              : %6!s! 
PA         Dmg Rx rates (Mbps):         Dmg Tx rates (Mbps):
Interface name: %1!s!

<    Driver information for this interface is not available.
&    Driver                    : %1!s!
&    Vendor                    : %1!s!
&    Provider                  : %1!s!
8    Version                   : %1!d!.%2!d!.%3!d!.%4!d!
&    Date                      : %1!s!
,    Files                     : %1!d! total
&    INF file                  : %1!s!
&                                %1!s!
4    Type                      : Legacy Wi-Fi Driver
4    Type                      : Native Wi-Fi Driver
$    IHV service present       : Yes
K    IHV adapter OUI           : [%1!02x! %2!02x! %3!02x!], type: [%4!02x!]
&    IHV extensibility DLL path: %1!s!
(    IHV UI extensibility ClSID: {%1!s!}
(    IHV diagnostics CLSID     : {%1!s!}
    Radio types supported     : %1!s!@    Authentication and cipher supported in infrastructure mode:
/                                %1!-16s! %2!s!
8    Authentication and cipher supported in ad-hoc mode:
PA$    FIPS 140 mode supported   : Yes
#    FIPS 140 mode supported   : No
M    FIPS 140 mode supported   : Yes [Driver indicated hardware is compliant]
T    Wireless Display Supported: %1!s! (Graphics Driver: %2!s!, Wi-Fi Driver: %3!s!)
YesNoPA$    Hosted network supported  : Yes
#    Hosted network supported  : No
.Wireless tracing is not enabled on the system.&Wireless tracing is currently running.&Wireless tracing is currently stopped.&
Trace logs will be stored in "%1!s!".'
Last trace logs are stored in "%1!s!".9Persistent wireless tracing is not enabled on the system.1Persistent wireless tracing is currently running.1Persistent wireless tracing is currently stopped.&    Number of supported bands : %1!d!
PA?                                %1!s! [ %2!d! MHz - %3!d! MHz]
8    802.11w Management Frame Protection supported : Yes
7    802.11w Management Frame Protection supported : No
�

======================================================================= 
======================= SHOW INTERFACE CAPABILITIES =================== 
=======================================================================

>Wireless System Information Summary
(Time: %1!s! %2!s! %3!s!)
PA�

======================================================================= 
============================== SHOW DRIVERS =========================== 
=======================================================================

�

======================================================================= 
============================= SHOW INTERFACES ========================= 
=======================================================================

�

======================================================================= 
============================= SHOW SETTINGS =========================== 
=======================================================================

�

======================================================================= 
============================== SHOW FILTERS =========================== 
=======================================================================

�

======================================================================= 
============================= SHOW PROFILES =========================== 
=======================================================================

�

======================================================================= 
========================== SHOW PROFILES NAMES ======================== 
=======================================================================

�

======================================================================= 
======================= SHOW NETWORKS MODE=BSSID ====================== 
=======================================================================

�

======================================================================= 
=========================== SHOW CREATEALLUSER ======================== 
=======================================================================

�

======================================================================= 
=========================== SHOW HOSTED NETWORK ======================= 
=======================================================================

+
Profile information 
------------------- 
#    Name                   : %1!s!
#    Version                : %1!d!
#    Description            : %1!s!
#    Type                   : %1!s!
Wireless LAN	Wired LANPAUnknown Type    Control options        : 
3        Connection mode    : Connect automatically
.        Connection mode    : Connect manually
N        Network broadcast  : Connect even if this network is not broadcasting
J        AutoSwitch         : Switch to more preferred network if possible
=        AutoSwitch         : Do not switch to other networks
/
Connectivity settings 
--------------------- 
#    Network type           : %1!s!
InfrastructureAdhocAny network typePAUnknown#    Number of SSIDs        : %1!d!
%                             "%1!s!"
Group Policy ProfileCurrent User ProfileAll User Profile    Applied: %1!s!
%    SSID name              : "%1!s!"
%    SSID names             : "%1!s!"
    Radio type             : %1!s!, %1!s!Any Radio TypeFHSSPADSSSIR Baseband802.11a802.11b802.11gUnknownVendor defined(0x%X)     Vendor extension ID       : ,    Vendor extension          : Not present
802.11n802.11ac802.11ad802.11ax802.11be[  ]

0x%1!02X! '
Security settings 
----------------- 
#    Authentication         : %1!s!
#    Cipher                 : %1!s!
OpenSharedWPA-EnterpriseWPA-PersonalWPA-NoneWPA2-Enterprise
WPA2-PersonalUnknownNoneWEPTKIPCCMP	WEP-40bit
WEP-104bit
WPA-Use-GroupUnknown#    Security key           : %1!s!
PresentAbsent#    Key Index              : %1!d!
Vendor definedVendor definedGCMPWPA3-Enterprise 192 Bits
WPA3-PersonalGCMP-256PAGMAC-256OWEWPA3-Enterprise%    802.1X                 : Enabled
#    EAP type               : %1!s!
Z    EAP type               : The EAP method corresponding to this profile does not exist.
!    Credentials configured : Yes
     Credentials configured : No
#    802.1X auth credential : %1!s!
Machine or user credentialMachine credentialUser credentialGuest credential
Not specifiedNo#    Cache user information : %1!s!
Yes
Not specifiedPA#        Type               : %1!s!
#        Max delay (sec)    : %1!d!
	Pre-logon
Post-logon#        Additional dialogs : %1!s!
#        Dialog input (sec) : %1!d!
EnabledDisabledJ        Network broadcast  : Connect only if this network is broadcasting
    Single sign-on settings: 
(    Vendor extension data length: %1!d!
#    Key Content            : %1!s!
PA#    FIPS mode              : %1!s!
Enabled#        User auth VLAN     : %1!s!
EnabledDisabled%        MAC Randomization  : Enabled
&        MAC Randomization  : Disabled
#        MAC Randomization  : Daily
:This filter already exists in the same list on the system.<This filter already exists in the allow list on the system. <This filter already exists in the block list on the system. HWarning: This filter conflicts with group policy. It won't take effect. /The filter is added on the system successfully.PA3The filter is removed from the system successfully.(The filter does not exist on the system.PA
# ----------------------------------------
# Wireless LAN configuration
# ----------------------------------------
pushd %1!s!*

popd
# End of Wireless LAN ConfigurationA

# Allow filter list
# ----------------------------------------
A

# Block filter list
# ----------------------------------------
4
%1!s! %2!s! %3!s!=%4!s! %5!s!="%6!s!" %7!s!="%8!s!"&
%1!s! %2!s! %3!s!=%4!s! %5!s!="%6!s!"PA7Auto configuration has been %1!s! on interface "%2!s!".enableddisabledGYou do not have sufficient privileges or group policy has been applied.:Address randomization has been %1!s! on interface "%2!s!".PAenableddisabledRThe interface cannot support randomization or it was blocked by the administrator.HShowing blocked networks in visible network list has been set to: %1!s!.GYou do not have sufficient privileges or group policy has been applied."Wireless tracing has been started.-Persistent wireless tracing has been enabled."Wireless tracing has been stopped.PA-Persistent wireless tracing has been stopped.$Wireless tracing is already running./Persistent wireless tracing is already running. Wireless tracing is not running.+Persistent wireless tracing is not running.-Wireless tracing is not set up on the system.8Persistent wireless tracing is not set up on the system.6Trace log output path "%1!s!"is not a valid directory.&
Trace logs will be stored in "%1!s!"."
Trace logs are stored in "%1!s!".2
Everyone is allowed to create all user profiles.
6
Not everyone is allowed to create all user profiles.
GYou do not have sufficient privileges or group policy has been applied.PA@There is no profile "%1!s!" assigned to the specified interface..Connection request was completed successfully.-Connection request failed with error 0x%1!X!.EThe network specified by profile "%1!s!" is not available to connect.KThe network specified by profile "%1!s!" is not connectible. 
Reason: %2!s!JUnable to connect. WLAN auto configuration is disabled on adapter "%1!s!"./SSID "%1!s!" does not exist in profile "%2!s!".GDisconnection request was completed successfully for interface "%1!s!".FDisconnection request failed for interface "%1!s!" with error 0x%2!X!.MUnable to disconnect. WLAN auto configuration is disabled on adapter "%1!s!".[Profile "%1!s!" on interface "%2!s!" has been successfully changed to an all user profile.
PA^Profile "%1!s!" on interface "%2!s!" has been successfully changed to a current user profile.
uThe profile "%1!s!" on interface "%2!s!" is a group policy profile.
Group policy profile's type cannot be modified. 
gYou do not have sufficient privileges to change profile type for profile "%1!s!" on interface "%2!s!".
EProfile "%1!s!" on interface "%2!s!" is already an all user profile.
HProfile "%1!s!" on interface "%2!s!" is already a current user profile.
PA<
Profile "%1!s!" on interface "%2!s!" updated successfully.
4
Failed to modify the profile. Error 0x%1!X!: %2!s!
L
You do not have the permission to modify profile "%1!s!" for current user.
I
You do not have the permission to modify profile "%1!s!" for all users.
g
The security or connectivity setting in profile "%1!s!" is not supported by wireless adapter "%2!s!".
K
The oneX setting in profile "%1!s!" on interface "%2!s!" is not enabled. 
n
The IHV setting is enabled  in profile "%1!s!" on interface "%2!s!". Please specify MS authentication type. 
D
The inputed parameter is invalid to the original profile setting. 
E
Failed to set cost for profile "%1!s!" on wireless adapter "%2!s!".
0
Cost setting is not supported in this system.
 /Hosted network mode is allowed in WLAN service.2Hosted network mode is disallowed in WLAN service.tCannot change hosted network mode support in WLAN service.
No sufficient privilege or group policy has been applied.?The SSID of the hosted network has been successfully changed. 
0The hosted network mode has been set to allow. 
3The hosted network mode has been set to disallow. 
5Allow shared user credentials has been set to: %1!s!.GYou do not have sufficient privileges or group policy has been applied.NThe user key passphrase of the hosted network has been successfully changed. 
(Block period is set to be %1!d! minutes.GYou do not have sufficient privileges or group policy has been applied.6    Hosted network mode allowed in WLAN service: Yes

5    Hosted network mode allowed in WLAN service: No

3
Hosted network settings 
----------------------- 
%    SSID name              : "%1!s!"
#    Max number of clients  : %1!d!
/
Hosted network status 
--------------------- 
#    Status                 : %1!s!

Not availableNot startedStartedM    BSSID                  : %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!
#    Radio type             : %1!s!
#    Channel                : %1!d!
#    Number of clients      : %1!d!
PAE        %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!        %7!s!

AuthenticatedInvalidE
Hosted network security settings 
-------------------------------- 
)    System security key    : <Encrypted>
#    System security key    : %1!s!
%    Mode                   : Allowed
(    Mode                   : Disallowed
(    User security key usage: Persistent
'    User security key usage: Temporary
#    User security key      : %1!s!
-    User security key      : <Not specified>
.    Settings               : <Not configured>
#    Band                   : %1!s!
"         Colocated APs:    : %1!d!PAb
            BSSID: %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!,  Band: %7!s!,  Channel: %8!d!�         Bss Load:
             Connected Stations:         %1!d!
             Channel Utilization:        %2!d! (%3!d! %%)
             Medium Available Capacity:  %4!d! (%5!d! us/s)
F
    Band                   : %1!s!
    Channel                : %2!d!�
            MldID : %1!d!, LinkID: %2!d!, BSSID: %3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!:%8!02x!,  Band: %9!s!,  Channel: %10!d!�
        LinkID: %1!d!, Local: %2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!, AP: %8!02x!:%9!02x!:%10!02x!:%11!02x!:%12!02x!:%13!02x!, RSSI: %14!d!, Channel: %15!d!, Band: %16!s!, BW: %17!d!p
    SSID                   : %1!s!
    MLD AP BSSID           : %2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!N         MLD Address        : %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!
N         QoS MSCS Supported    : %1!d!
         QoS Map Supported     : %2!d!
PAAConnection with profile "%1!s!" is not supported by WLAN service.PAHosted network&    Max hosted network clients: %1!d!
,    Max hosted network clients: Not limited
The hosted network started. 
)The hosted network couldn't be started. 
The hosted network stopped. 
?The hosted network couldn't be stopped. Reason code is %1!d!. 
IThe security key of the hosted network has been successfully refreshed. 
OYou must run this command from a command prompt with administrator privilege. 
QProfile to connect to the hosted network is saved successfully in file "%1!s!". 
5The hosted network profile has not been configured. 
EWLAN smart trace logs and report files are now available at "%1!s!".
AWLAN smart trace logs are still useful and available at "%1!s!".
Generating report ... 
Generating logs ... 
done.
failed, error is 0x%1!X!
7There is no smart trace log file to report at "%1!s!".
Querying WLAN Events ...
Querying NCSI Events ...
Querying NDIS Events ...
Querying EAP Events ...
Querying WCM Events ...
Querying Kernel Events ...
Querying System Events ...
Running ipconfig ...
 Running netsh wlan show all ...
Querying Wireless Profiles ...
*Querying System and User Certificates ...
Querying User Info ...
Querying Network Devices ...

Report written to: %1!s!
PA
Cost settings 
------------- 
*    Cost                   : Unrestricted
#    Cost                   : Fixed
&    Cost                   : Variable
%    Cost                   : Unknown
+    Cost                   : Not available
!    Approaching Data Limit : Yes
     Approaching Data Limit : No
!    Over Data Limit        : Yes
     Over Data Limit        : No
!    Congested              : Yes
     Congested              : No
!    Roaming                : Yes
     Roaming                : No
%    Cost Source            : Default
*    Cost Source            : Group Policy
"    Cost Source            : User
&    Cost Source            : Operator
PA
Plan settings 
------------- 
4    Usage in Megabytes                      : %1!d!
:    Usage Sync Time                         : %1!s! %2!s!
4    Data Limit in Megabytes                 : %1!d!
4    Inbound Bandwidth in Kbps               : %1!d!
:    Billing Cycle StartDate                 : %1!s! %2!s!
/    Billing Cycle Duration                  : 
4       Number of years                      : %1!d!
4       Number of months                     : %1!d!
4       Number of days                       : %1!d!
4       Number of hours                      : %1!d!
4       Number of minutes                    : %1!d!
4       Number of seconds                    : %1!d!
4       Number of milliseconds               : %1!d!
2    Billing Cycle Reset                     : Yes
1    Billing Cycle Reset                     : No
4    Maximum Transfer Size in Megabytes      : %1!d!
4    Outbound Bandwidth in Kbps              : %1!d!
PA=
Wireless Device Capabilities 
---------------------------- 
J    WDI Version (Windows)                       : %1!u!.%2!u!.%3!u!.%4!u!
8    Firmware Version                            : %1!S!
<    Station                                     : Supported
@    Station                                     : Not supported
<    Soft AP                                     : Supported
@    Soft AP                                     : Not supported
<    Network monitor mode                        : Supported
@    Network monitor mode                        : Not supported
<    Wi-Fi Direct Device                         : Supported
@    Wi-Fi Direct Device                         : Not supported
<    Wi-Fi Direct GO                             : Supported
@    Wi-Fi Direct GO                             : Not supported
<    Wi-Fi Direct Client                         : Supported
@    Wi-Fi Direct Client                         : Not supported
PA
Supported
Not Supported
Unknown
2    Promiscuous Mode                            : 2    IBSS                                        : 2    Diversity Antenna                           : 2    Action Frame                                : 2    ANQP Service Information Discovery          : 2    DOT11k neighbor report                      : 2    Protected Management Frames                 : 2    P2P Passive listen Availability             : 2    P2P Device Discovery                        : 2    P2P Service Name Discovery                  : 2    P2P Service Info Discovery                  : 2    P2P Background Discovery                    : 2    Host FIPS Mode                              : 2    Instant Connect                             : 2    Dx Standby NLO                              : 2    D0 NLO                                      : 2    Extended Channel Switch Announcement        : 2    Function Level Reset                        : 2    Platform Level Reset                        : 2    MAC Randomization                           : 2    IHV Extensibility Module Configured         : 8    Number of Tx Spatial Streams                : %1!u!
8    Number of Rx Spatial Streams                : %1!u!
8    Number of Concurrent Channels Supported     : %1!u!
8    P2P GO ports count                          : %1!u!
8    P2P Clients Port Count                      : %1!u!
8    P2P Max Mobile AP Clients                   : %1!u!
8    Max ANQP Service Advertisements Supported   : %1!u!
J    WDI Version (IHV)                           : %1!u!.%2!u!.%3!u!.%4!u!
;    Co-existence Support                        : Unknown

;    Co-existence Support                        : Invalid

2    Fast Transition                             : 2    MU-MIMO                                     : 2    Miracast Sink                               : 2    BSS Transition (802.11v)                    : 2    P2P GO on 5 GHz                             : 2    Bus Level Reset                             : 2    ASP 2.0 Service Name Discovery              : 2    ASP 2.0 Service Information Discovery       : 2    IP Docking Capable                          : 2    SAE Authentication                          : 2    FTM as Initiator                            : 2    MBO Support                                 : 2    WPA3 SUITE-B Authentication                 : 2    OWE Authentication                          : 2    SAE Hash-to-Element Authentication          : >    WiFiCx Version (IHV)                        : %1!u!.%2!u!
N    WDI Version (IHV)                           : Wdi Interface Not Supported
Q    WiFiCx Version (IHV)                        : WiFiCx Interface Not Supported
>    WiFiCx Version (Windows)                    : %1!u!.%2!u!
8    Maximum Number of Secondary STAs Supported  : %1!u!
8    Number of MLO Connections Supported         : %1!u!
2    Wpa3-Sae with 384-bit Pmk Supported         : 2    P2P GO on 6 GHz                             : 2    P2P Sae on GO                               : 2    QoS MSCS Supported                          : 2    QoS DSCP to UP Mapping Supported            : 2    Cross Akm/Cipher Roaming                    : 8    Number of Radios                            : %1!u!
PA2    Wi-Fi 7 Enterprise                          : X
    Radio status           : Hardware %1!s!
                             Software %2!s!OnOff	switchingT    Co-existence Support                        : WLAN performance degraded to 1x1

R    Co-existence Support                        : WLAN performance is maintained

=    WFD Device                                  : Supported

A    WFD Device                                  : Not supported

=    WFD GO                                      : Supported

A    WFD GO                                      : Not supported

=    WFD Client                                  : Supported

A    WFD Client                                  : Not supported

3    Type                      : Legacy WLAN Driver
3    Type                      : Native WLAN Driver
S    Wireless Display Supported: %1!s! (Graphics Driver: %2!s!, WLAN Driver: %3!s!)
PA1Unable to create cabinet file. Error code: %1!d!
7Unable to add %1!s! to cabinet file. Error code: %2!d!
Unknown900 MHz2.4 GHz5 GHz6 GHz60 GHz
IHV CustomInvalid (MLD) #    Rssi                   : %1!d!
m         Authentication     : %1!s!
         Encryption         : %2!s!
         akm-cipher pairs   : %3!d! 
a            [ akm = %1!02x!-%2!02x!-%3!02x!:%4!02d!, cipher =  %5!02x!-%6!02x!-%7!02x!:%8!02d! ]
r
    Connected Akm-cipher   : [ akm = %1!02x!-%2!02x!-%3!02x!:%4!02d!, cipher =  %5!02x!-%6!02x!-%7!02x!:%8!02d! ]J    Max Number of Wake on Incoming Action Frame Patterns Supported: %1!u!
7    WiFiCx Framework Type                       : UMDF
7    WiFiCx Framework Type                       : KMDF
�4VS_VERSION_INFO��
��e
��e?�StringFileInfo�040904B0LCompanyNameMicrosoft CorporationTFileDescriptionWlan Netsh Helper DLLn'FileVersion10.0.26100.4768 (WinBuild.160101.0800)8InternalNamewlancfg.dll�.LegalCopyright� Microsoft Corporation. All rights reserved.HOriginalFilenamewlancfg.dll.muij%ProductNameMicrosoft� Windows� Operating SystemDProductVersion10.0.26100.4768DVarFileInfo$Translation	�<?xml version="1.0" encoding="utf-8"?>

<!--
Copyright (c) 2016  Microsoft Corporation

Module Name:

xml-format.xsl

Abstract:

Stylesheet used to format XML

Revision History:

01-19-2016  marcguy      initial version
-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" version="1.0" indent="no" omit-xml-declaration="no"/>
  
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
PA<?xml version="1.0" encoding="utf-8"?>

<!--
Copyright (c) 2014  Microsoft Corporation

Module Name:

wlanreport-stylesheet.xsl

Abstract:

Stylesheet defining how the xml report is
transformed into the html report

Revision History:

09-28-2014  ryanwood      initial version
02-01-2015  ryanwood      add in rendering for custom commands
-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template name="css">
        <style type="text/css">
          body {
          margin: 0;
          padding: 0;
          background-color: #EFEFEF;
          font-family: "segoe ui light", "segoe ui";
          letter-spacing: 0.03em;
          }

          table {
          border-collapse: collapse;
          }

          th {
          border: 1px solid #222;
          text-align: center;
          }

          tr {
          height: 1.5em;
          border: 1px solid #222;
          }

          td {
          border: 1px solid #222;
          }

          #top-btn {
          position: fixed;
          padding: 5px;
          border: 2px solid #333;
          cursor: pointer;
          }
          #top-btn p {
          margin: 0;
          }

          #report-wrapper {
          width: 1000px;
          margin: 0 auto;
          }

          #session-graph-wrapper {
          background-color: #1F1F1F;
          outline: 2px solid #AAA;
          }

          #session-graph {
          cursor: pointer;
          }

          #graph-event-info {
          float: left;
          width: 500px;
          height: 170px;
          color: #DDD;
          padding: 0px 30px 0px 20px;
          }
          #graph-event-info h4 {
          margin: 0px 0px 10px 0px;
          }

          #event-info {
          margin: 0;
          height: 135px overflow: scroll;
          }

          #sysinfo {
          margin: 0px 0px 30px 0px;
          }
          #sysinfo p {
          margin: 0;
          padding: 0;
          }

          #report-info p {
          margin: 0;
          padding: 0;
          }

          #disconnect-status tr {
          border: 1px solid #222;
          }

          #disconnect-status td {
          border: 1px solid #222;
          }

          #disconnect-status .status {
          width: 300px;
          padding-top: 0px;
          }

          #disconnect-reasons .reason {
          width: 800px;
          padding-top: 0;
          }

          .count {
          width: 75px;
          text-align: center;
          }

          .graph-background {
          position: absolute;
          z-index: -1;
          height: 1.5em;
          margin: -1px;
          background-color: rgb(171,168,244);
          }
          .graph-background.success {
          background-color: rgb(108, 216, 108);
          }

          .graph-background.failure {
          background-color: rgb(216, 108, 108);
          }

          .graph-background.warning {
          background-color: rgb(216, 216, 108);
          }

          #session-durations {
          border-left: 1px solid #222;
          overflow: hidden;
          }

          #duration-labels {
          text-align: center;
          }

          #duration-graph {
          height: 550px;
          border: none;
          }
          #duration-graph td {
          width: 80px;
          padding: 0px 2px 0px 2px;
          vertical-align: top;
          position: relative;
          border: none;
          }

          .duration-bar {
          width: 80px;
          position: absolute;
          }

          .bar-label {
          width: 80px;
          position: absolute;
          text-align: center;
          font-weight: bold;
          }

          .bar-background {
          background-color: rgb(171,168,244);
          display: block;
          width: 100%;
          height: 100%;
          outline: 1px solid #222;
          }

          .session {
          background-color: #FFF;
          margin: 0px 0px 20px 0px;
          padding: 10px;
          border: 2px solid #666;
          }
          .session p {
          margin: 0.2em;
          }

          .session table {
          width: 100%;
          }

          .session .event-header {
          width: 75px;
          }

          .session .time-header {
          width: 180px;
          }

          .session .message-header {
          width: auto;
          }

          .successful {
          background-color: #1BEB00;
          }

          .warning {
          background-color: #EBEB00;
          }

          .failed {
          background-color: #F00;
          }

          .info {
          background-color: #E2E2E2;
          }

          .message {
          width: 700px;
          height: 1.5em;
          overflow: hidden;
          white-space: pre;
          text-overflow: ellipsis;
          }
          .message.show {
          height: auto;
          overflow: auto;
          white-space: normal;
          }

          .message .expand-btn {
          cursor: pointer;
          }

          .error {
          background-color: rgb(255,178,178);
          font-weight: bold;
          }

          .ndis.sleep {
          background-color: #AF9AE4;
          }

          .ndis.wake {
          background-color: #E49AEF;
          }

          .wlan {
          background-color: #FFF;
          }
          .wlan.connect {
          background-color: #9AE4A6;
          }

          .wlan.disconnect {
          background-color: #F5BE9C;
          }

          .ncsi.internet {
          background-color: #9CCAF5;
          }

          .ncsi.local {
          background-color: #F1F59C;
          }

          .ncsi.none {
          background-color: #F59C9C;
          }
		  
          .wcm {
          background-color: #F0FFFF;
          }
		  
          .eap {
          background-color: #FFFFF0;
          }
		  
          .glow {
          font-weight: bold;
          outline: 3px solid #000000;
          }
		  
          #commands-output {
          margin: 0px 0px 30px 0px;
          }
          .command-output {
          background-color: #000;
          color: #C0C0C0;
          padding: 5px;
          outline: 5px solid #BBB;
          }
        </style>
    </xsl:template>
    
    <xsl:template name="js">
        var wlanReport = ( function()
        {
            var wlanReport = {},

            pointRadius = 8,
            eventOffset = 50,
            wlanYOffset = 0,
            ncsiYOffset = 100,
            ndisYOffset = 200,
            eventRenderInfo,
            boundRenderInfo,
            wlanBounds = [],
            connectivityBounds = [],
            powerBounds = [],

            bindToggleMessageBtns,
            toggleMessage,
            timeToXCoord,
            findNewestEvent,
            calculateEventCoordinates,
            findwlanBounds,
            findConnectivityBounds,
            findPowerBounds,
            drawEvents,
            drawPoint,
            drawSessionBounds,
            drawBound,
            drawAxis,
            drawEventRegionLabels,
            drawLegend,
            drawLegendLabel,
            drawSessionGraph,
            eventClickHandler,
            eventMouseMoveHandler,
            calculateSessionDuration,
            getSnapshotAtXY,
            getSessionAtXY,
            convertSnapshotTimes,
            convertFileTimeToUnixTime,
            fixCommandOutputFormatting,
			checkForEmptyReport,
            bindTopBtn;

            eventRenderInfo = {
                'Connect':   {'label':'C', 'color':'#9AE4A6'},
                'Disconnect':{'label':'D', 'color':'#F5BE9C'},
                'Sleep':     {'label':'S', 'color':'#AF9AE4'},
                'CS-Sleep':  {'label':'S', 'color':'#AF9AE4'},
                'Wake':      {'label':'W', 'color':'#E49AEF'},
                'CS-Wake':   {'label':'W', 'color':'#E49AEF'},
                'Internet':  {'label':'I', 'color':'#9CCAF5'},
                'Local':     {'label':'L', 'color':'#F1F59C'},
                'None':      {'label':'N', 'color':'#F59C9C'},
                'Error':     {'label':'X', 'color':'#FF0000'}
            };

            boundRenderInfo = {
                'Connected':       {'fill':'rgba(0,210,0,0.3)','stroke':'rgba(0,210,0,0.8)', 'lineWidth':'3'},
                'Power':           {'fill':'rgba(0,0,0,0.95)', 'stroke':'rgba(20,20,20,1.0)','lineWidth':'1'},
                'ConnectedStandby':{'fill':'rgba(0,135,0,0.3)','stroke':'rgba(0,100,0,0.95)','lineWidth':'1'}
            };

            bindToggleMessageBtns = function()
            {
                var divElements,
                    expandBtn,
                    i;

                divElements = document.getElementsByTagName('div');

                for( i = 0; i &lt; divElements.length; i++ ) {
                    if( divElements[i].className === 'message' ) {
                        expandBtn = divElements[i].firstChild;
                        expandBtn.addEventListener('click', toggleMessage(expandBtn), false);
                    }
                }
            };

            toggleMessage = function(btn)
            {
                return function() {
                    var message = btn.parentNode;

                    if(message.className === "message")
                    {
                        message.className = "message show";
                        btn.innerHTML = "[&#8210;]"; //A digit width hyphen. This way the button doesn't shrink (by much)
                    }
                    else
                    {
                        message.className = "message";
                        btn.innerHTML = "[+]";
                    }
                }
            };
            
            // Calculate the X coordinate for the snapshot based on the time it
            // occured relative to the 48 hours displayed on the graph.
            timeToXCoord = function(startTimeStr, snapshotTimeStr, width)
            {
                var twoDaysInMS  = (1000 * 60 * 60 * 24) * 2,
                    startTime    = parseInt(startTimeStr, 10),
                    snapshotTime = parseInt(snapshotTimeStr, 10),
                    endTime = startTime - twoDaysInMS,
                    xPosRatio    = 0;

                xPosRatio = (snapshotTime - startTime) / (endTime - startTime);

                return (width - (xPosRatio * width));
            };

            calculateEventCoordinates = function(canvas)
            {
                var width,
                    height,
                    xOffset  = 10,
                    yOffset  = 0,
                    xPos     = 0,
                    yPos     = 0,
                    lastXPos = [],
                    minXDiff = 2 * pointRadius, //The min difference between points to prevent them from overlapping
                    startTime,
                    i;

                if(snapshots.length === 0) {
                    return;
                }

                width = canvas.width;
                height = canvas.height;

                lastXPos[wlanYOffset] = -1;
                lastXPos[ndisYOffset] = -1;
                lastXPos[ncsiYOffset] = -1;

                startTime = findNewestEvent();

                for(i = 0; i &lt; snapshots.length; i++)
                {
                    if(snapshots[i].type === 'Connect') {
                        yOffset = wlanYOffset;
                    } else if(snapshots[i].type === 'Disconnect') {
                        yOffset = wlanYOffset;
                    } else if(snapshots[i].type === 'Error') {
                        yOffset = wlanYOffset;
                    } else if(snapshots[i].type === 'Wake' || snapshots[i].type === 'CS-Wake') {
                        yOffset = ndisYOffset;
                    } else if(snapshots[i].type === 'Sleep' || snapshots[i].type === 'CS-Sleep') {
                        yOffset = ndisYOffset;
                    } else {
                        yOffset = ncsiYOffset;
                    }

                    xPos = timeToXCoord(startTime, snapshots[i].time, width) - xOffset;
                    if(lastXPos[yOffset] >= 0 &amp;&amp; (lastXPos[yOffset]) - xPos &lt; minXDiff)
                    {
                        // Keep track of the offset we are adding to events to make sure that events
                        // remain in chronological order across their different y-axis channels (wlan,ndis,ncsi)
                        xOffset += (minXDiff - (lastXPos[yOffset] - xPos));
                        xPos = lastXPos[yOffset] - minXDiff;
                    }
                    
                    yPos = eventOffset + yOffset;
                    snapshots[i].x = xPos;
                    snapshots[i].y = yPos;

                    lastXPos[yOffset] = xPos;

                    // If the xPos is greater than the width of the canvas
                    // stop calculating cordinates since they won't fit anyways.
                    if (xPos > width) {
                        snapshots = snapshots.slice(0, i); //Discard the points that don't fit
                        break;
                    }
                }
            };

            // Unfortunatly the newest event is not always the first event in the list,
            // so we have to do a search for the newest event
            findNewestEvent = function()
            {
                var startTime = 0,
                    i;

                for(i = 0; i &lt; snapshots.length; i++) {
                    startTime = Math.max(startTime, snapshots[i].time);
                }

                return startTime;
            };

            drawEvents = function(canvas)
            {
                var graph,
                pointLabel,
                snapshot,
                style,
                i;

                graph = canvas.getContext('2d');

                if(snapshots.length === 0){
                    graph.font = "18px sans-serif";
                    graph.fillStyle = "#EFEFEF";
                    graph.textAlign = "center";
                    graph.fillText("No events from the last 48 hours to display", canvas.width/2, canvas.height/2);
                    return;
                }

                graph.strokeStyle = "#111";
                graph.lineWidth = 1;

                for( i = 0; i &lt; snapshots.length; i++)
                {
                    snapshot = snapshots[i];
                    
                    if(snapshot.error !== "0") {
                      style = eventRenderInfo["Error"];
                    } else {
                      style = eventRenderInfo[snapshot.type];
                    }
                
                    if( style === undefined) {
                        continue;
                    }
                
                    graph.fillStyle = style.color;
                    pointLabel = style.label;

                    drawPoint(graph, snapshot.x, snapshot.y, pointLabel);

                }
            };

            drawPoint = function(graph, x, y, label)
            {
                graph.font = "10px sans-serif";
                graph.textAlign = "center";

                graph.beginPath();
                graph.arc( x, y, pointRadius, 0, 2 * Math.PI, false);
                graph.fill();
                graph.stroke();

                graph.fillStyle = "#222";
                graph.fillText(label, x, y + (pointRadius/2));
            };

            findwlanBounds = function()
            {
                var connectEvent    = null,
                    disconnectEvent = null,
                    isConnected     = false,
                    currentEvent,
                    type,
                    boundType,
                    i;

                // Snapshots only include the state from the last 48 hours.
                // In order to properly draw session bounds we need to know
                // the state from when the 48 hours started. i.e. was a session
                // in progress already when the 48 section began. To fnd this out
                // look to see if the first wlan event is a disconnect or a connect.
                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    if( snapshots[i].type === 'Disconnect' ) {
                        isConnected = true;
                        break;
                    } else if (snapshots[i].type === 'Connect'){
                        isConnected = false;
                        break;
                    }
                }

                // If we start in a connected state draw a bound from the left side
                // of the graph to the first wlan/ndis event
                if( isConnected ) {
                    for(i = snapshots.length - 1; i &gt;= 0; i-- )
                    {
                        type = snapshots[i].type;
                        
                        if(type === 'Wake' || type === 'CS-Wake' )
                        {
                            boundType = type === 'Wake' ? 'Sleep' : 'CS-Sleep';
                            
                            powerBounds.push({'type':boundType, 'sleepEvent':snapshots[i], 'wakeEvent':snapshots[i], 'x':0, 'y':snapshots[i].y,
                                'width':snapshots[i].x, 'height':200});
                                break;
                        }
                        else if(type === 'Disconnect')
                        {
                            wlanBounds.push({'connectEvent':snapshots[i], 'disconnectEvent':snapshots[i], 'x':0, 'y': wlanYOffset + eventOffset,
                                'width':snapshots[i].x, 'height':200});
                                break;
                        }
                    }
                }
                
                // Loop through all of the events finding pairs of events to draw a box between
                // indicating the start and stop of a particular wlan state. Current pairs include
                //
                // Connect->Disconnect/Error/Sleep/CS-Sleep
                // Wake->Disconnect/Error/Sleep/CS-Sleep (if previously connected)
                //
                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    currentEvent = snapshots[i];
                    type = currentEvent.type;

                    if ( type === 'Internet' || type === 'Local' || type == 'None')
                    {
                        continue;
                    }

                    if( type === 'Connect' )
                    {
                        if (connectEvent === null)
                        {
                            connectEvent = snapshots[i];
                        }
                        isConnected = true;
                    }
                    else if( type === 'Disconnect' || type === 'Sleep' || type === 'CS-Sleep')
                    {
                        disconnectEvent = snapshots[i];

                        // If we are stopping the session because of the Sleep, consider the
                        // session to still be connected since we will likely do a fast reconnect
                        // on wake meaning we will not see a new connect event
                        if( type !== 'Sleep' &amp;&amp; type !== 'CS-Sleep')
                        {
                            isConnected = false;
                        }

                        // If we have a connect event and a disconnect event, have the session bounds be a box connecting them
                        if(connectEvent !== null &amp;&amp; disconnectEvent !== null )
                        {
                            wlanBounds.push({'connectEvent':connectEvent, 'disconnectEvent':disconnectEvent, 'x':connectEvent.x, 'y': wlanYOffset + eventOffset,
                                'width':disconnectEvent.x - connectEvent.x, 'height':200});
                        }

                        // If we only have a disconnect event, and it is the first connection event,
                        // Draw a session bounds from the left end of the graph to the disconnect
                        if( connectEvent === null &amp;&amp; wlanBounds.length === 0 )
                        {
                            wlanBounds.push({'connectEvent':null, 'disconnectEvent':disconnectEvent, 'x':0, 'y':wlanYOffset + eventOffset,
                                'width':disconnectEvent.x, 'height':200});
                        }

                        connectEvent = null;
                        disconnectEvent = null;
                    }
                    else if( type === 'Wake' || type === 'CS-Wake' )
                    {
                        if(isConnected &amp;&amp; connectEvent === null)
                        {
                            connectEvent = snapshots[i];
                        }
                    }
                }

                // If there is a current active session with no disconnect draw its bound
                // The bound will be from the connect to beyond the end of the graph
                if( connectEvent !== null &amp;&amp; disconnectEvent === null)
                {
                    wlanBounds.push({'connectEvent':connectEvent, 'disconnectEvent':null, 'x':connectEvent.x, 'y':wlanYOffset + eventOffset,
                        'width':1000, 'height':200});
                }
            };

            findConnectivityBounds = function()
            {
                var connectivityStart    = null,
                    connectivityEnd      = null,
                    isConnectedToNetwork = false,
                    i;

                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    if (snapshots[i].type === 'Connect')
                    {
                        isConnectedToNetwork = true;
                    }
                    else if (snapshots[i].type === 'Disconnect' || snapshots[i].type === 'Sleep' || snapshots[i].type === 'Error')
                    {
                        connectivityEnd = snapshots[i];

                        // Draw the bounds of the last capability from when it
                        // started to when the disconnect event happened
                        if (connectivityStart !== null) {
                            connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':connectivityEnd, 'x':connectivityStart.x, 'y':connectivityStart.y,
                                'width':connectivityEnd.x - connectivityStart.x, 'height':2*pointRadius});
                        }

                        if (snapshots[i].type === 'Disconnect') {
                            isConnectedToNetwork = false;
                        }

                        connectivityStart = null;
                        connectivityEnd = null;
                    }
                    else if(snapshots[i].type === 'Internet' || snapshots[i].type === 'Local' || snapshots[i].type === 'None')
                    {
                        // Don't draw bounds between capability events
                        // that are not part of a session
                        if( !isConnectedToNetwork )
                        {
                            continue;
                        }

                        if( connectivityStart == null )
                        {
                            connectivityStart = snapshots[i];
                        }
                        else
                        {
                            connectivityEnd = snapshots[i];

                            connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':connectivityEnd, 'x':connectivityStart.x, 'y':connectivityStart.y,
                                'width':connectivityEnd.x - connectivityStart.x, 'height':2*pointRadius});

                            connectivityStart = connectivityEnd;
                            connectivityEnd = null;
                        }
                    }
                    else if ( snapshots[i].type === 'Disconnect' &amp;&amp; connectivityStart !== null )
                    {
                        // Do not draw connectivity bounds that span from one session to another.
                        // On disconnect there is an implicit capability None where the current
                        // capability would end.
                        connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':snapshots[i], 'x':connectivityStart.x, 'y':connectivityStart.y,
                            'width':snapshots[i].x - connectivityStart.x, 'height':2*pointRadius});

                        connectivityStart = null;
                        connectivityEnd = null;
                    }
                }

                // If the last connectivity event started a bounds, creat a region
                // from it to the edge of the graph
                if(connectivityStart)
                {
                    connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':null, 'x':connectivityStart.x, 'y':connectivityStart.y,
                        'width':1000, 'height':2*pointRadius});
                }
            };

            findPowerBounds = function()
            {
                var sleepEvent = null,
                    wakeEvent  = null,
                    isConnected = false,
                    boundType = 'Sleep',
                    i;
                
                // Find the initial connected state
                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    if( snapshots[i].type === 'Disconnect' ) {
                        isConnected = true;
                        break;
                    } else if (snapshots[i].type === 'Connect'){
                        isConnected = false;
                        break;
                    }
                }
                
                // Generate power bounds
                for(i = snapshots.length - 1; i &gt;= 0; i--)
                {
                    if(snapshots[i].type === 'CS-Sleep' || snapshots[i].type === 'Sleep')
                    {
                        sleepEvent = snapshots[i];
                    }
                    else if( snapshots[i].type === 'CS-Wake' || snapshots[i].type === 'Wake')
                    {
                        wakeEvent = snapshots[i];

                        // If we have a sleep and a wake, draw a bounds between them
                        if(sleepEvent !== null &amp;&amp; wakeEvent !== null) {
                            
                            // If we are connected to a network and the power event is a connected standby
                            // sleep, draw a light green box for the time asleep signifying that the 
                            // connection is still active
                            if( isConnected &amp;&amp; sleepEvent.type === 'CS-Sleep')
                            {
                                boundType = 'CS-Sleep';
                            }
                            else
                            {
                                boundType = 'Sleep';
                            }
                            
                            powerBounds.push({'type':boundType, 'sleepEvent':sleepEvent, 'wakeEvent':wakeEvent, 'x':sleepEvent.x, 'y':wakeEvent.y,
                                'width':wakeEvent.x - sleepEvent.x, 'height':200});
                        }

                        sleepEvent = null;
                        wakeEvent = null;
                    }
                    else if( snapshots[i].type === 'Connect')
                    {
                        isConnected = true;
                    }
                    else if( snapshots[i].type === 'Disconnect')
                    {
                        isConnected = false;
                    }
                }
            };

            drawSessionBounds = function(canvas)
            {
                var graph,
                    session,
                    i;

                graph = canvas.getContext('2d');

                if(wlanBounds)
                {
                    for(i = wlanBounds.length - 1; i &gt;= 0; i--)
                    {
                        session = wlanBounds[i];
                        drawBound(graph, 'Connect', session.x, session.width);
                    }
                }

                if(powerBounds)
                {
                    for(i = powerBounds.length - 1; i &gt;= 0; i--)
                    {
                        session = powerBounds[i];
                        drawBound(graph, session.type, session.x, session.width);
                    }
                }

                // Draw Internet/Limited connectivity bounds
                graph.fillStyle = "rgba(235,235,0,0.4)";
                graph.strokeStyle = "rgba(30,30,30,0.8)";
                graph.lineWidth = 1;


                if(connectivityBounds)
                {
                    for(i = 0; i &lt; connectivityBounds.length; i++)
                    {
                        session = connectivityBounds[i];
                        if(session.startEvent.type === 'Local')
                        {
                            graph.fillStyle = "rgba(235,235,0,0.4)";
                        }
                        else if(session.startEvent.type === 'None')
                        {
                            graph.fillStyle = "rgba(235,0,0,0.4)";
                        }
                        else
                        {
                            // Don't draw bounds when the capability is internet
                            continue;
                            //graph.fillStyle = "rgba(156,202,245,0.6)";
                        }

                        graph.fillRect( session.x, session.y - pointRadius, session.width, session.height);
                    }
                }
            };

            drawBound = function(graph, type, x, width)
            {
                var style,
                    y      = 50,
                    height = 200;

                if(type === 'Connect' || type === 'Disconnect')
                {
                    style = boundRenderInfo['Connected'];
                }
                else if(type === 'Sleep' || type === 'Wake')
                {
                    style = boundRenderInfo['Power'];
                }
                else if(type === 'CS-Sleep' || type === 'CS-Wake' )
                {
                    style = boundRenderInfo['ConnectedStandby'];
                }
                else
                {
                    style = boundRenderInfo['Connected'];
                }

                graph.fillStyle = style['fill'];
                graph.strokeStyle = style['stroke'];
                graph.lineWidth = style['lineWidth'];

                graph.fillRect(x, y, width, height);
                graph.strokeRect(x, y, width, height);
            }

            drawAxis = function(canvas)
            {
                var graph,
                    width,
                    height,
                    xPadding,
                    yPadding,
                    step,
                    twoDaysInHours = 48,
                    i;

                width = canvas.width;
                height = canvas.height;
                xPadding = 10;
                yPadding = 15;

                graph = canvas.getContext('2d');


                // Separate WLAN/NCSI/NDIS events
                // into their own 'lanes'
                graph.fillStyle = "#141414";
                graph.fillRect(0, 0, width, 100);   //WLAN lane
                graph.fillRect(0, 200, width, 100); //NDIS lane
                
                //Draw a line for each of the 48 hours in 2 days
                graph.strokeStyle = "#333";
                graph.lineWidth = 1;
                graph.font = "12px sans-serif";
                graph.fillStyle = "#555";
                graph.textAlign = "center";

                step = width/twoDaysInHours;

                for( i = 0; i &lt; twoDaysInHours; i++)
                {
                    graph.beginPath();
                    graph.moveTo((step * i), 0);
                    graph.lineTo((step * i), height - yPadding);
                    graph.stroke();
                }

                // Label X axis
                graph.fillText('Oldest', 30, height - 5);
                graph.fillText('Newest', width - 30, height - 5);
            };

            drawEventRegionLabels = function(canvas)
            {
                var graph = canvas.getContext('2d');

                // Label event regions
                graph.font = "12px sans-serif";
                graph.textAlign = "center";
                graph.strokeStyle = "#333";
                graph.lineWidth = 1;

                graph.fillStyle = "#050505";
                //WLAN
                graph.fillRect(0, 0, 40, 20);
                graph.strokeRect(0,0,40,20);
                //NCSI
                graph.fillRect(0, 101, 40, 20);
                graph.strokeRect(0,101,40,20);
                //NDIS
                graph.fillRect(0, 201, 40, 20);
                graph.strokeRect(0,201,40,20);

                graph.fillStyle = "#EEE";
                graph.fillText('WLAN', 20, 15);
                graph.fillText('NCSI', 20, 115);
                graph.fillText('NDIS', 20, 215);
            };

            drawLegend = function()
            {
                var canvas,
                    legend,
                    width,
                    height,
                    x;

                canvas = document.getElementById('graph-legend');
                width = canvas.width;
                height = canvas.height;
                symbolX = 20;
                textX = 40;

                legend = canvas.getContext('2d');

                // Connect
                legend.fillStyle = eventRenderInfo['Connect'].color;
                drawPoint(legend, symbolX, 10, eventRenderInfo['Connect'].label);
                drawLegendLabel(legend, textX, 13, "- Started a connection");

                // Disconnect
                legend.fillStyle = eventRenderInfo['Disconnect'].color;
                drawPoint(legend, symbolX, 30, eventRenderInfo['Disconnect'].label);
                drawLegendLabel(legend, textX, 33, "- Disconnected from a network");

                // Sleep
                legend.fillStyle = eventRenderInfo['Sleep'].color;
                drawPoint(legend, symbolX, 50, eventRenderInfo['Sleep'].label);
                drawLegendLabel(legend, textX, 53, "- Wireless adapter entered a low power state");

                // Wake
                legend.fillStyle = eventRenderInfo['Wake'].color;
                drawPoint(legend, symbolX, 70, eventRenderInfo['Wake'].label);
                drawLegendLabel(legend, textX, 73, "- Wireless adapter entered a working power state");

                // Capability Internet
                legend.fillStyle = eventRenderInfo['Internet'].color;
                drawPoint(legend, symbolX, 90, eventRenderInfo['Internet'].label);
                drawLegendLabel(legend, textX, 93, "- Network is connected to the internet");

                // Capability Local
                legend.fillStyle = eventRenderInfo['Local'].color;
                drawPoint(legend, symbolX, 110, eventRenderInfo['Local'].label);
                drawLegendLabel(legend, textX, 113, "- Network has limited connectivity");

                // Capability None
                legend.fillStyle = eventRenderInfo['None'].color;
                drawPoint(legend, symbolX, 130, eventRenderInfo['None'].label);
                drawLegendLabel(legend, textX, 133, "- Network has no connectivity");

                // Error
                legend.fillStyle = eventRenderInfo['Error'].color;
                drawPoint(legend, symbolX, 150, eventRenderInfo['Error'].label);
                drawLegendLabel(legend, textX, 153, "- Error");
            };

            drawLegendLabel = function(legend, x, y, text)
            {
                legend.font = "14px sans-serif";
                legend.fillStyle = '#DDD';
                legend.textAlign = "left";
                legend.fillText(text, x, y);
            };

            drawSessionGraph = function()
            {
                var canvas,
                    events;

                canvas = document.getElementById('session-graph');

                calculateEventCoordinates(canvas);

                drawAxis(canvas);

                findwlanBounds();
                findConnectivityBounds();
                findPowerBounds();
                drawSessionBounds(canvas);

                drawEvents(canvas);

                drawEventRegionLabels(canvas);

                drawLegend();

                canvas.addEventListener('click', eventClickHandler, false);
                canvas.addEventListener('mousemove', eventMouseMoveHandler, false);
            };

            eventClickHandler = function(e)
            {
                var canvas = document.getElementById('session-graph'),
                    x,
                    y,
                    snapshot,
                    originalClass;

                e = e || window.event;

                if( e.stopPropogation )
                {
                    e.stopPropogation();
                } else {
                    e.cancelBubble = true;
                }

                x = e.offsetX;
                y = e.offsetY;

                snapshot = getSnapshotAtXY(x,y);
                
                // Emphasize the selected event by placing a border
                // around it that dissapears after one second
                if( snapshot !== null)
                {
                    window.location.hash = snapshot.correspondingEvent;
                    evtElement = document.getElementById(snapshot.correspondingEvent).parentNode.parentNode;
                    originalClass = evtElement.className;
                    evtElement.className = evtElement.className + ' glow';

                    setTimeout(function(){
                        evtElement.className = originalClass;
                    }, 1000);
                }
            };

            eventMouseMoveHandler = function(e)
            {
                var summary,
                    x,
                    y,
                    snapshot,
                    session,
                    startEvent = null,
                    endEvent   = null,
                    i;

                e = e || window.event;

                if( e.stopPropogation )
                {
                    e.stopPropogation();
                } else {
                    e.cancelBubble = true;
                }

                x = e.offsetX;
                y = e.offsetY;
                summary = document.getElementById('event-info');

                snapshot = getSnapshotAtXY(x,y);

                summary.innerHTML = "Hover over a session or event to view a summary <br/> Click on an event to jump to it in the session list";
                
                // Handle mouseover on snapshot events
                if(snapshot !== null)
                {
                    if(snapshot.type === 'Connect')
                    {
                        summary.innerHTML = 'Started a connection to a wireless network <br/>' +
                        '<br/>' + snapshot.date + '<br/>' +
                        'Connection mode: ' + snapshot.connectionMode + '<br/>' +
                        'Profile: ' + snapshot.profileName + '<br/>' +
                        'SSID: ' + snapshot.ssid;
                    }
                    else if(snapshot.type === 'Disconnect')
                    {
                        summary.innerHTML = snapshot.disconnectReason + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>' +
                        'Connection mode: ' + snapshot.connectionMode + '<br/>' +
                        'Profile: ' + snapshot.profileName + '<br/>' +
                        'SSID: ' + snapshot.ssid;
                    }
                    else if( snapshot.type === 'Wake' || snapshot.type === 'CS-Wake' ||
                            snapshot.type === 'Sleep' || snapshot.type === 'CS-Sleep' )
                    {
                        summary.innerHTML = snapshot.message + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>';

                    }
                    else if(snapshot.type === 'Internet' || snapshot.type == 'Local' || snapshot.type == 'None')
                    {
                        summary.innerHTML = snapshot.message + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>';

                    }
                    else if( snapshot.type === 'Error' )
                    {
                        var messageCutoffIndex = 0;
                        messageCutoffIndex = snapshot.message.indexOf('br') - 1;
                        summary.innerHTML = snapshot.message.substring(0,messageCutoffIndex) + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>';
                    }

                    return;
                }

                session = getSessionAtXY(x,y);
                
                // Handle mouseover on session bounds
                if( session !== null)
                {
                    startEvent = session.connectEvent;
                    endEvent = session.disconnectEvent;
                    if(startEvent !== null &amp;&amp; endEvent !== null)
                    {
                        summary.innerHTML = 'Session duration: ' + calculateSessionDuration(startEvent.time, endEvent.time) + '<br/>' +
                        'Start time: ' + startEvent.date.toLocaleString() + '<br/>' +
                        'End time: ' + endEvent.date.toLocaleString() + '<br/>' +
                        'Disconnect reason: ' + endEvent.disconnectReason + '<br/>';
                    }
                    else if(startEvent !== null)
                    {
                        summary.innerHTML = 'Session duration: Ongoing' + '<br/>' +
                        'Start time: ' + startEvent.date.toLocaleString() + '<br/>';
                    }
                    else if(endEvent !== null)
                    {
                        summary.innerHTML = 'End time: ' + endEvent.date.toLocaleString() + '<br/>' +
                        'Disconnect reason: ' + endEvent.disconnectReason + '<br/>';
                    }
                }
            };

            calculateSessionDuration = function(start, end )
            {
                var duration = (end - start) / 1000,
                    hours    = parseInt( duration / (60 * 60), 10),
                    minutes  = parseInt((duration / 60) % 60, 10),
                    seconds  = Math.round(duration % 60);

                return (hours + ' hours ' + minutes + ' minutes ' + seconds + ' seconds');
            };

            getSnapshotAtXY = function(x, y)
            {
                var snapshot,
                    i;

                // Check to see if the mouse pointer correspondes to an event
                for(i = 0; i &lt; snapshots.length; i++)
                {
                    snapshot = snapshots[i];
                    if( x &gt;= snapshot.x - pointRadius &amp;&amp; x &lt;= snapshot.x + pointRadius )
                    {
                        if(y &gt;= snapshot.y - pointRadius &amp;&amp; y &lt;= snapshot.y + pointRadius)
                        {
                            return snapshot;
                        }
                    }
                }

                return null;
            };

            getSessionAtXY = function(x, y)
            {
                var session,
                    i;

                // Check to see if the mouse pointer corresponds to a session
                for(i = 0; i &lt; wlanBounds.length; i++)
                {
                    session = wlanBounds[i];
                    if( x &gt;= session.x &amp;&amp; x &lt;= session.x + session.width )
                    {
                        if(y &gt;= session.y &amp;&amp; y &lt;= session.y + session.height)
                        {
                            return session;
                        }
                    }
                }

                return null;
            };

            convertSnapshotTimes = function()
            {
                var i;
                for(i = 0; i &lt; snapshots.length; i++)
                {
                    snapshots[i].time = convertFileTimeToUnixTime(snapshots[i].time);
                    snapshots[i].date = new Date(snapshots[i].time);
                }
            };

            convertFileTimeToUnixTime = function(time)
            {
                var nanoSecondsPerMS   = 10000,
                    yearDifferenceInMS = 11644473600000; //MS between 1601 and 1970

                return (time / nanoSecondsPerMS) - yearDifferenceInMS;
            };
			
            fixCommandOutputFormatting = function()
            {
                var commandTextboxes = document.getElementsByTagName("textarea"),
                    textbox,
                    i;
				
                for(i in commandTextboxes)
                {
                    textbox = commandTextboxes[i];
                    if(textbox.className === "command-output")
                    {
	                    var output = textbox.innerHTML;
	                    output = output.replace(/\n\n\n\n/g, '\n');
	                    textbox.innerHTML = output.trim();
                    }
                }
				
            };
			
            checkForEmptyReport = function()
            {
                var sessionList = document.getElementById('session-list'),
                    eventsSummary;
				
                if(sessionList.innerHTML == '')
                {
                    sessionList.innerHTML = "<h4>No WLAN events were found on this system.</h4>";
                    sessionList.style.margin = "0 0 100px 0";
					
                    eventsSummary =  document.getElementById('events-summary');
                    eventsSummary.parentNode.removeChild(eventsSummary);
                }
            };
			
            bindTopBtn = function()
            {
                var btn           = document.getElementById('top-btn'),
                    reportWrapper = document.getElementById('report-wrapper');

                btn.style.left = (reportWrapper.offsetLeft - btn.clientWidth - 20) + 'px';
                btn.style.top = '30px';

                btn.addEventListener('click', function() {
                    window.scrollTo(0,0);
                    window.history.replaceState({}, '', window.location.href.split('#')[0]);
                }, false);
            };

            wlanReport.initialize = function()
            {
                bindTopBtn();
                bindToggleMessageBtns();
                convertSnapshotTimes();
                drawSessionGraph();
                fixCommandOutputFormatting();
                checkForEmptyReport();
            };

            return wlanReport;
        }());

        window.addEventListener('load', wlanReport.initialize, false);
    </xsl:template>

    <!--Replace gratuitous line breaks in event messages with single <br>'s-->
    <xsl:template name="replace">
        <xsl:param name="message"/>

        <!-- \r\n\r\n sequence -->
        <xsl:variable name="linebreak" select="'&#13;&#10;&#13;&#10;'" />

        <xsl:choose>
            <xsl:when test="contains($message, $linebreak)">
                <xsl:value-of select="substring-before($message, $linebreak)"/>
                    <br/>
				<xsl:call-template name="replace">
                    <xsl:with-param name="message" select="substring-after($message, $linebreak)"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$message"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
	
	<!--Special replace function to properly format the WCM preferred interface list-->
    <xsl:template name="replaceSingleNewlines">
        <xsl:param name="message"/>

        <!-- \r\n sequence -->
        <xsl:variable name="linebreak" select="'&#13;&#10;'" />

        <xsl:choose>
            <xsl:when test="contains($message, $linebreak)">
                <xsl:value-of select="substring-before($message, $linebreak)"/>
                    <br/>
				<xsl:call-template name="replaceSingleNewlines">
                    <xsl:with-param name="message" select="substring-after($message, $linebreak)"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$message"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
	
    <xsl:template match="/WlanReport">
        <html>
        <head>
            <meta charset="utf-8" />
            <meta http-equiv="X-UA-Compatible" content="IE=edge" />
            <title>wlan report</title>
            
            <!-- Include the css into the output file-->
            <xsl:call-template name="css" />
        </head>
        <body>
            <div id="top-btn">
                <p>Top</p>
            </div>
            <div id="report-wrapper">
                <h1>Wlan Report</h1>
                <div id="session-graph-wrapper">
                    <canvas id="session-graph" width="1000" height="315"></canvas>
                    <div id="graph-event-info">
                        <h4>Summary</h4>
                        <p id="event-info">
                            Hover over a session or event to view a summary <br />
                            Click on an event to jump to it in the session list
                        </p>
                    </div>
                    <canvas id="graph-legend" width="400" height="170"></canvas>
                </div>
                <div id="report-info">
                    <h2>Report Info</h2>
                    <p>Report created:<b><xsl:value-of select="ReportInformation/ReportDate" /></b></p>
                    <p>Report duration:<b><xsl:value-of select="ReportInformation/ReportDuration" /> days</b></p>
                </div>
                <div id="sysinfo">
                    <xsl:choose>
                        <xsl:when test="not(SystemInformation/ComputerName = '')">
                            <h2>General System Info</h2>
                            <p>ComputerName: <b><xsl:value-of select="SystemInformation/ComputerName" /></b></p>
                            <p>System Manufacturer:<b><xsl:value-of select="SystemInformation/SystemManufacturer" /></b></p>
                            <p>System Product Name:<b><xsl:value-of select="SystemInformation/SystemProductName" /></b></p>
                            <p>BIOS Date:<b><xsl:value-of select="SystemInformation/BIOSDate" /></b></p>
                            <p>BIOS Version:<b><xsl:value-of select="SystemInformation/BIOSVersion" /></b></p>
                            <p>OS Build:<b><xsl:value-of select="SystemInformation/OSBuild" /></b></p>
                            <p>Machine Id: <b><xsl:value-of select="SystemInformation/MachineId" /></b></p>
                            <p>MDM joined: 
                                <xsl:choose>
                                  <xsl:when test="SystemInformation/MDMRegistered = '1'">
                                      <b>True</b>
                                  </xsl:when>
                                  <xsl:when test="SystemInformation/MDMRegistered = '0'">
                                      <b>False</b>
                                  </xsl:when>
                                  <xsl:otherwise>
                                      <b>Unknown</b>
                                  </xsl:otherwise>
                                </xsl:choose>
                            </p>
							
                            <h2>User Info</h2>
                            <p>Username: <b><xsl:value-of select="UserInformation/Username" /></b></p>
                            <p>User Domain:<b><xsl:value-of select="UserInformation/UserDomain" /></b></p>
                            <p>User DNS Domain:<b><xsl:value-of select="UserInformation/UserDnsDomain" /></b></p>
                        </xsl:when>
                    </xsl:choose>
                    <h2>Network Adapters</h2>
                    <xsl:for-each select="SystemInformation/NetworkAdapters/Adapter">
                        <p>Device: <b><xsl:value-of select="Name" /></b></p>						
                        <p>PNP ID: <b><xsl:value-of select="PnpId" /></b></p>
                        <p>Guid: <b><xsl:value-of select="Guid" /></b></p>
                        <p>Current driver version: <b><xsl:value-of select="DriverVersion" /></b></p>
                        <p>Driver date: <b><xsl:value-of select="DriverDate" /></b></p>
                        <p>DevNode flags: <b><xsl:value-of select="DevNodeFlags" /></b></p>
                        <xsl:choose>
                            <xsl:when test="not(ProblemNumber = '')">
                                <p>Problem number: <b><xsl:value-of select="ProblemNumber" /></b></p>
                            </xsl:when>
                        </xsl:choose>
                        <br />
                    </xsl:for-each>
                </div>
				
                <div id="commands-output">
                    <h2>Script Output</h2>
                    <xsl:for-each select="ScriptOutput/CustomCommand">
                        <h3> Output for <em>'<xsl:value-of select="Command" />'</em></h3>
                        <textarea class="command-output" cols="91" rows="25" readonly="true" spellcheck="false">
                        <xsl:value-of select="Output" />
                        </textarea>
                    </xsl:for-each>
                </div>
              
                <div id="commands-output">
                    <h2>Profile Output</h2>
                    <textarea class="command-output" cols="91" rows="25" readonly="true" spellcheck="false">
                        <xsl:for-each select="Profiles/Interface">
                            <xsl:for-each select="Profile">
                                <xsl:text>&#13;</xsl:text><xsl:comment>Interface: <xsl:value-of select="../@name"/>, Profile: <xsl:value-of select="./@name"/></xsl:comment><xsl:text>&#13;</xsl:text>
                                <xsl:value-of select="." />
                            </xsl:for-each>
                        </xsl:for-each>
                    </textarea>
                </div>
				
                <div id="events-summary">
                    <h2>Summary</h2>
                    <h3>Session Success/Failures</h3>
                    <table id="disconnect-status">
                        <xsl:variable name="max-status-width" select="300" />
                        <tr>
                            <th>Status</th>
                            <th>Count</th>
                        </tr>
                        <tr>
                            <td class="status">
                                <span class="graph-background success">
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('width: ', format-number( (WlanEventsSummary/StatusSummary/Successful div WlanEventsSummary/@total) * $max-status-width, '0.##'), 'px')" />
                                    </xsl:attribute>
                                    &#160;
                                </span>
                                Successes
                            </td>
                            <td class="count">
                                <xsl:value-of select="WlanEventsSummary/StatusSummary/Successful" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="graph-background failure">
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('width: ', format-number( (WlanEventsSummary/StatusSummary/Failed div WlanEventsSummary/@total) * $max-status-width, '0.##'), 'px')" />
                                    </xsl:attribute>
                                    &#160;
                                </span>
                                Failures
                            </td>
                            <td class="count">
                                <xsl:value-of select="WlanEventsSummary/StatusSummary/Failed" />
                            </td>
                        </tr>
                        <tr>
                            <td class="status">
                                <span class="graph-background warning">
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('width: ', format-number( (WlanEventsSummary/StatusSummary/Warning div WlanEventsSummary/@total) * $max-status-width, '0.##'), 'px')" />
                                    </xsl:attribute>
                                    &#160;
                                </span>
                                Warnings
                            </td>
                            <td class="count">
                                <xsl:value-of select="WlanEventsSummary/StatusSummary/Warning" />
                            </td>
                        </tr>
                    </table>

                    <h3>Disconnect Reasons</h3>
                    <table id="disconnect-reasons">
                        <tr>
                            <th>Reason</th>
                            <th>Count</th>
                        </tr>
                        <xsl:variable name="max-reason-width" select="800" />
                        <xsl:for-each select="WlanEventsSummary/DisconnectReasons/Reason">
                            <xsl:sort select="@count" data-type="number" order="descending" />
                            <tr>
                                <td class="reason">
                                    <span class="graph-background">
                                        <xsl:attribute name="style">
                                            <xsl:value-of select="concat('width: ', format-number((@count div ../../@total) * $max-reason-width, '0.##'), 'px')" />
                                        </xsl:attribute>
                                        <xsl:attribute name="class">
                                            graph-background <xsl:value-of select="@type" />
                                        </xsl:attribute>
                                        &#160;
                                    </span>
                                    <xsl:value-of select="@message" />
                                </td>
                                <td class="count">
                                    <xsl:value-of select="@count" />
                                </td>
                            </tr>
                        </xsl:for-each>
                    </table>
                    <h3>Session Durations</h3>
                    <table id="session-durations">
                        <tr id="duration-graph">
                            <!--Find the most frequent duration. This will be the tallest bar others are scaled against-->
                            <xsl:variable name="duration-mode"
                                          select="WlanEventsSummary/SessionDurations/Duration[not(../Duration > .)]" />
                            <xsl:variable name="max-height" select="520" />
                            <xsl:for-each select="WlanEventsSummary/SessionDurations/Duration">

                                <xsl:variable name="bar-height-ratio" select=". div $duration-mode" />

                                <!--Make sure the bar height has a minimum value of 0 -->
                                <xsl:variable name="bar-height">
                                    <xsl:choose>
                                        <xsl:when test="string(number($bar-height-ratio))='NaN'">0</xsl:when>
                                        <xsl:otherwise>
                                            <xsl:value-of select="format-number( $max-height * $bar-height-ratio, '0')" />
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:variable>

                                <td>
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('top: ', 550 - $bar-height, 'px;')" />
                                    </xsl:attribute>
                                    <div class="duration-bar">
                                        <xsl:attribute name="style">
                                            <xsl:value-of select="concat('height: ', $bar-height, 'px;')" />
                                        </xsl:attribute>
                                        <span class="bar-label">
                                            <xsl:attribute name="style">
                                                <xsl:value-of select="concat('bottom: ', $bar-height, 'px;')" />
                                            </xsl:attribute>
                                            <xsl:value-of select="." />
                                        </span>
                                        <span class="bar-background">
                                            &#160;
                                        </span>
                                    </div>
                                </td>
                            </xsl:for-each>
                        </tr>
                        <tr id="duration-labels">
                            <xsl:for-each select="WlanEventsSummary/SessionDurations/Duration">
                                <td>
                                    <xsl:value-of select="@time" /><br />minutes
                                </td>
                            </xsl:for-each>
                        </tr>
                    </table>
                </div>
				
                <h2>Wireless Sessions</h2>
                <div id="session-list">
                    <xsl:for-each select="WlanEvents/WlanSession">
                        <div class="session">
                            <xsl:choose>
                                <xsl:when test="@success != 3">
                                    <!-- 3 is the Id of standalone events not tied to a session. Do not show a summary for these events-->
                                    <p>Interface:<b><xsl:value-of select="@interface" /></b></p>
                                    <p>Interface GUID: <b><xsl:value-of select="@guid" /></b></p>
                                    <p>Connection Mode:<b><xsl:value-of select="@mode" /></b></p>
                                    <p>Profile:<b><xsl:value-of select="@profile" /></b></p>
                                    <p>SSID:<b><xsl:value-of select="@ssid" /></b></p>
                                    <p>BSS Type:<b><xsl:value-of select="@bss" /></b></p>
                                    <p>Session Duration:
                                        <b>
                                            <!-- Initial duration is in seconds. Manipulate it into a readable string -->
                                            <xsl:value-of select="format-number(floor(@duration div (60 * 60)), '0')" /> hours
                                            <xsl:value-of select="format-number(floor((@duration div 60) mod 60), '0')" /> minutes
                                            <xsl:value-of select="format-number(floor(@duration mod 60), '0')" /> seconds
                                        </b>
                                    </p>
                                    <p>Disconnect Reason:<b><xsl:value-of select="@disconnect" /></b></p>
                                </xsl:when>
                            </xsl:choose>
                            <table>
                                <xsl:choose>
                                    <xsl:when test="@success = 0">
                                        <!--Successful session-->
                                        <tr class="successful">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:when>
                                    <xsl:when test="@success = 1">
                                        <!--Warning session-->
                                        <tr class="warning">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:when>
                                    <xsl:when test="@success = 3">
                                        <!--Info session-->
                                        <tr class="info">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <tr class="failed">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:otherwise>
                                </xsl:choose>
                                <xsl:for-each select="WlanEvent">
                                    <tr>
                                        <xsl:attribute name="class">
                                            <xsl:choose>
                                                <xsl:when test="@error > 0">
                                                    error
                                                </xsl:when>
                                                <xsl:otherwise>
                                                    <xsl:value-of select="@type" />
                                                </xsl:otherwise>
                                            </xsl:choose>
                                        </xsl:attribute>
                                        <td>
                                            <xsl:value-of select="EventID" />
                                            <a>
                                                <xsl:attribute name="id">
                                                    <xsl:value-of select="UID" />
                                                </xsl:attribute>
                                            </a>
                                        </td>
                                        <td>
                                            <xsl:value-of select="EventTime" />
                                        </td>
                                        <td>
                                            <div class="message">
                                                <span class="expand-btn">[+]</span>
                                                <span class="message-body">
                                                    <xsl:choose>
                                                        <xsl:when test="EventID = 1020">
                                                            <xsl:call-template name="replaceSingleNewlines">
                                                                <xsl:with-param name="message" select="EventMessage" />
                                                            </xsl:call-template>
                                                        </xsl:when>
                                                        <xsl:otherwise>
                                                            <xsl:call-template name="replace">
                                                                <xsl:with-param name="message" select="EventMessage" />
                                                            </xsl:call-template>
                                                        </xsl:otherwise>
                                                    </xsl:choose>
                                                </span>
                                            </div>
                                        </td>
                                    </tr>
                                </xsl:for-each>
                            </table>
                        </div>
                    </xsl:for-each>
                </div>
            </div>
        
            <!--Write out all of the snapshot information-->
            <script type="text/javascript">
                var snapshots = [
                    <xsl:for-each select="SessionSnapshot/Session">
                        {
                            "type":"<xsl:value-of select="EventType"/>",
                            "error":"<xsl:value-of select="EventError"/>",
                            "time":"<xsl:value-of select="EventTime"/>",
                            "message":"<xsl:call-template name="replace">
                                            <xsl:with-param name="message" select="EventMessage"/>
                                        </xsl:call-template>",
                            "connectionMode":"<xsl:value-of select="EventConnectionMode"/>",
                            "profileName":"<xsl:value-of select="EventProfileName"/>",
                            "ssid":"<xsl:value-of select="EventSSID"/>",
                            "disconnectReason":"<xsl:value-of select="EventDisconnectReason"/>",
                            "correspondingEvent":"<xsl:value-of select="CorrespondingEvent"/>" 
                        },
                    </xsl:for-each>
                ];
            
                <!-- Include the javascript into the output file-->
                <xsl:call-template name="js"/>
            </script>
        </body>
    </html>
  </xsl:template>

</xsl:stylesheet>
PPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPAD

Anon7 - 2021