<?xml version="1.0"?>
<doc>
    <assembly>
        <name>DigitalRuby.IPBanCore</name>
    </assembly>
    <members>
        <member name="T:DigitalRuby.IPBanCore.IBannedIPAddressHandler">
            <summary>
            Handler interface for banned ip addresses
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IBannedIPAddressHandler.HandleBannedIPAddress(System.String,System.String,System.String,System.String,System.String,System.String,DigitalRuby.IPBanCore.IHttpRequestMaker)">
            <summary>
            Handle a banned ip address
            </summary>
            <param name="ipAddress">Banned ip address</param>
            <param name="source">Source</param>
            <param name="userName">User name</param>
            <param name="osName">OS name</param>
            <param name="osVersion">OS version</param>
            <param name="assemblyVersion">Assembly version</param>
            <param name="requestMaker">Request maker if needed, null otherwise</param>
            <returns>Task</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IBannedIPAddressHandler.BaseUrl">
            <summary>
            Base url for any http requests that need to be made
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IBannedIPAddressHandler.PublicAPIKey">
            <summary>
            Public API key
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.DefaultBannedIPAddressHandler">
            <summary>
            Default banned ip address handler
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultBannedIPAddressHandler.BaseUrl">
            <summary>
            Base url
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultBannedIPAddressHandler.HandleBannedIPAddress(System.String,System.String,System.String,System.String,System.String,System.String,DigitalRuby.IPBanCore.IHttpRequestMaker)">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultBannedIPAddressHandler.PublicAPIKey">
            <summary>
            Public API key
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NullBannedIPAddressHandler">
            <summary>
            Null banned ip address handler, does nothing
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NullBannedIPAddressHandler.DigitalRuby#IPBanCore#IBannedIPAddressHandler#BaseUrl">
            <summary>
            Not implemented
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NullBannedIPAddressHandler.DigitalRuby#IPBanCore#IBannedIPAddressHandler#PublicAPIKey">
            <summary>
            Not implemented
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NullBannedIPAddressHandler.DigitalRuby#IPBanCore#IBannedIPAddressHandler#HandleBannedIPAddress(System.String,System.String,System.String,System.String,System.String,System.String,DigitalRuby.IPBanCore.IHttpRequestMaker)">
            <summary>
            Does nothing
            </summary>
            <param name="ipAddress">N/A</param>
            <param name="source">N/A</param>
            <param name="userName">N/A</param>
            <param name="osName">N/A</param>
            <param name="osVersion">N/A</param>
            <param name="assemblyVersion">N/A</param>
            <param name="requestMaker">N/A</param>
            <returns>Completed task</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NullBannedIPAddressHandler.Instance">
            <summary>
            Singleton instance
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IDnsLookup">
            <summary>
            Simple DNS interface to lookup data about ip address or host name
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IDnsLookup.GetHostAddressesAsync(System.String)">
            <summary>
            Get ip addresses from a host name or ip address
            </summary>
            <param name="hostNameOrAddress">Host name or ip address</param>
            <returns>IP addresses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IDnsLookup.GetHostEntryAsync(System.String)">
            <summary>
            Get a host entry
            </summary>
            <param name="hostNameOrAddress">Host name or ip address</param>
            <returns>Host entry</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IDnsLookup.GetHostNameAsync(System.String)">
            <summary>
            Get host name of local machine
            </summary>
            <param name="hostNameOrAddress">Host name or ip address to get host name for or null for local machine host name</param>
            <returns>Host name of local machine</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.DefaultDnsLookup">
            <summary>
            Default implementation of IDnsLookup, uses Dns class
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultDnsLookup.Instance">
            <summary>
            Singleton of DefaultDnsLookup
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultDnsLookup.GetHostAddressesAsync(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultDnsLookup.GetHostEntryAsync(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultDnsLookup.GetHostNameAsync(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultDnsLookup.GetLocalIPAddress">
            <summary>
            Get local ip
            </summary>
            <returns>Local ip</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.TestDnsLookup">
            <summary>
            Test dns lookup for easy use in unit tests
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.TestDnsLookup.Instance">
            <summary>
            Singleton of TestDnsLookup
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.TestDnsLookup.DigitalRuby#IPBanCore#IDnsLookup#GetHostAddressesAsync(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.TestDnsLookup.DigitalRuby#IPBanCore#IDnsLookup#GetHostEntryAsync(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.TestDnsLookup.DigitalRuby#IPBanCore#IDnsLookup#GetHostNameAsync(System.String)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IDnsServerList">
            <summary>
            Get a list of dns servers
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IDnsServerList.ContainsIPAddress(System.Net.IPAddress)">
            <summary>
            Check if an ip address is a dns server
            </summary>
            <param name="ipAddress">IP address</param>
            <returns>True if the ip address is a dns server, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IDnsServerList.ContainsIPAddressRange(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Check if an ip address range contains a dns server
            </summary>
            <param name="range">IP address range</param>
            <returns>True if the ip address range contains a dns server, false otherwise</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IFirewallCreator">
            <summary>
            Allow creating a firewall from config
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IFirewallCreator.CreateFirewall(System.Collections.Generic.IReadOnlyCollection{System.Type},DigitalRuby.IPBanCore.IPBanConfig,DigitalRuby.IPBanCore.IIPBanFirewall)">
            <summary>
            Create a firewall
            </summary>
            <param name="allTypes">All firewall types</param>
            <param name="config">Config</param>
            <param name="previousFirewall">Previous firewall, null if none</param>
            <returns>Newly created firewall</returns>
            <exception cref="T:System.ArgumentException">Bad config</exception>
        </member>
        <member name="T:DigitalRuby.IPBanCore.DefaultFirewallCreator">
            <summary>
            Default firewall loader
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultFirewallCreator.CreateFirewall(System.Collections.Generic.IReadOnlyCollection{System.Type},DigitalRuby.IPBanCore.IPBanConfig,DigitalRuby.IPBanCore.IIPBanFirewall)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IHttpRequestMaker">
            <summary>
            Simple interface that can make http requests
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IHttpRequestMaker.MakeRequestAsync(System.Uri,System.Byte[],System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.Object}},System.String,System.Threading.CancellationToken)">
            <summary>
            Make a GET or POST http request
            </summary>
            <param name="uri">Uri</param>
            <param name="postJson">Optional json to post for a POST request, else GET is used</param>
            <param name="headers">Optional http headers</param>
            <param name="method">Override the method</param>
            <param name="cancelToken">Cancel token</param>
            <returns>Task of response byte[]</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.DefaultHttpRequestMaker">
            <summary>
            Default implementation of IHttpRequestMaker
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultHttpRequestMaker.Instance">
            <summary>
            Singleton of DefaultHttpRequestMaker
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultHttpRequestMaker.DisableLiveRequests">
            <summary>
            Whether live requests should be disabled (unit tests)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultHttpRequestMaker.LiveRequestCount">
            <summary>
            Global counter of live requests made
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.DefaultHttpRequestMaker.LocalRequestCount">
            <summary>
            Global counter of local requests made
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.DefaultHttpRequestMaker.MakeRequestAsync(System.Uri,System.Byte[],System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.Object}},System.String,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPBanFilter">
            <summary>
            Interface for filtering checks
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFilter.Equals(DigitalRuby.IPBanCore.IIPBanFilter)">
            <summary>
            Check if two filters are equal
            </summary>
            <param name="other">Other filter</param>
            <returns>True if both equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFilter.IsFiltered(System.String,System.String@)">
            <summary>
            Check if an entry is filtered
            </summary>
            <param name="entry">Entry</param>
            <param name="reason">Reason</param>
            <returns>True if whitelisted, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFilter.IsFiltered(DigitalRuby.IPBanCore.IPAddressRange,System.String@)">
            <summary>
            Check if an ip address range is filtered. If any ip or range intersects, the range is filtered.
            </summary>
            <param name="range">Range</param>
            <param name="reason">Reason</param>
            <returns>True if range is whitelisted, false otherwise</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanFilter.IPAddressRanges">
            <summary>
            Gets all ip address ranges in the filter
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanFilter.Value">
            <summary>
            Get the original value
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanFilter.Regex">
            <summary>
            Regex for further filtering
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPBanFirewall">
            <summary>
            IPBan firewall interface
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Creates/updates rules to block all the ip addresses, and removes any left-over rules. Exceptions are logged.
            Pass an empty list to remove all blocked ip addresses for the ruleNamePrefix.
            </summary>
            <param name="ruleNamePrefix">Rule name prefix, can be null for the default block rule</param>
            <param name="ipAddresses">IP Addresses</param>
            <param name="allowedPorts">Allowed ports, any port not in this list is blocked</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Same as BlockIPAddresses except this is a delta that only adds / removes the necessary ip, all other ip are left alone.
            </summary>
            <param name="ruleNamePrefix">Rule name prefix, required</param>
            <param name="ipAddresses">IP Addresses (delta)</param>
            <param name="allowedPorts">Allowed ports, any port not in this list is blocked, null to block all ports</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Creates/updates new rule(s) prefixed by ruleNamePrefix with block rules for all ranges specified. Exceptions are logged.
            </summary>
            <param name="ruleNamePrefix">Rule name prefix, required</param>
            <param name="ranges">Ranges to block</param>
            <param name="allowedPorts">Allowed ports, any port not in this list is blocked, null to block all ports</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <summary>
            Creates new rules to allow all the ip addresses on all ports, and removes any left-over rules. Exceptions are logged.
            </summary>
            <param name="ipAddresses">IP Addresses</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Creates/updates rules to allow all the ip addresses, and removes any left-over rules. Exceptions are logged.
            Pass an empty list to remove all allowed ip addresses for the ruleNamePrefix.
            </summary>
            <param name="ruleNamePrefix">Rule name prefix, required</param>
            <param name="ipAddresses">IP Addresses or ranges</param>
            <param name="allowedPorts">Allowed ports, any port not in this list is blocked</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.Query(System.Collections.Generic.IReadOnlyCollection{System.Net.IPEndPoint})">
            <summary>
            Checks if ip addresses are allowed or blocked in the firewall
            </summary>
            <param name="ipAddresses">IP end points (remote ip, local port)</param>
            <returns>List of blocked,allow,ruleName matching ip position in ipAddresses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.GetRuleNames(System.String)">
            <summary>
            Get all rules with the specified rule name prefix
            </summary>
            <param name="ruleNamePrefix">Rule name prefix or null for default</param>
            <returns></returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.DeleteRule(System.String)">
            <summary>
            Delete the rule with the specified name
            </summary>
            <param name="ruleName">Rule name</param>
            <returns>True if success, false if failure</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.EnumerateBannedIPAddresses(System.String)">
            <summary>
            Gets all banned ip addresses from BlockIPAddresses calls using the built in block rule
            </summary>
            <param name="ruleNamePrefix">Rule name prefix or null for all</param>
            <returns>IEnumerable of all ip addresses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.EnumerateAllowedIPAddresses(System.String)">
            <summary>
            Gets all explicitly allowed ip addresses
            </summary>
            <param name="ruleNamePrefix">Rule name prefix or null for all</param>
            <returns>IEnumerable of all ip addresses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.EnumerateIPAddresses(System.String)">
            <summary>
            Gets all ip addresses for a rule prefix
            </summary>
            <param name="ruleNamePrefix">Rule prefix</param>
            <returns>IEnumerable of all ip addreses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.GetPorts(System.String)">
            <summary>
            Get ports for a rule.
            </summary>
            <param name="ruleName">Rule name</param>
            <returns>Ports or null if no rule found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.SendPacketEvents(System.Collections.Generic.IReadOnlyCollection{DigitalRuby.IPBanCore.PacketEvent})">
            <summary>
            Send a packet event. This method should not throw an exception.
            </summary>
            <param name="events">Packet events. This can be cleared by the caller safely after this method is called.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanFirewall.Truncate">
            <summary>
            Remove all rules that IPBan created
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanFirewall.RulePrefix">
            <summary>
            The rule prefix for the firewall
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanFirewall.AllowRulePrefix">
            <summary>
            Allow rule prefix
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanFirewall.BlockRulePrefix">
            <summary>
            Block rule prefix
            </summary>
        </member>
        <member name="E:DigitalRuby.IPBanCore.IIPBanFirewall.PacketEvent">
            <summary>
            Fires when a packet is blocked or allowed. Not all firewall implementations will trigger this event.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.PacketEventDelegate">
            <summary>
            Packet event delegate
            </summary>
            <param name="packets">Packet events</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta">
            <summary>
            Represents an ip address delta operation
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta.#ctor(System.Boolean,System.String)">
            <summary>
            Represents an ip address delta operation
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta.Added">
            <summary>
            True if added, false if removed
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta.IPAddress">
            <summary>
            IPAddress
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta.IsIPV4">
            <summary>
            Whether this is an ipv4 (true) or ipv6 (false)
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanFirewallRule">
            <summary>
            Represents a firewall rule
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallRule.Name">
            <summary>
            Rule name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallRule.Block">
            <summary>
            True to block, false to allow
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallRule.IPAddressRanges">
            <summary>
            IP address ranges to block
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallRule.AllowPortRanges">
            <summary>
            Port ranges to allow
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFirewallRule.PlatformRegex">
            <summary>
            Platform regex
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallRule.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPAddressEventHandler">
            <summary>
            IP address event interface
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPAddressEventHandler.AddIPAddressLogEvents(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressLogEvent})">
            <summary>
            Add ip address events
            </summary>
            <param name="events">IP address events</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IConfigReaderWriter">
            <summary>
            Allow reading and writing of configuration
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IConfigReaderWriter.WriteConfigAsync(System.String)">
            <summary>
            Update config file with new xml
            </summary>
            <param name="xml">New config file xml</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IConfigReaderWriter.ReadConfigAsync">
            <summary>
            Read configuration
            </summary>
            <returns>Task with xml config</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPBanService">
            <summary>
            IPBan service interface
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.RunCycleAsync(System.Threading.CancellationToken)">
            <summary>
            Manually run regular processing - useful if testing
            </summary>
            <param name="cancelToken">Cancel token</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.ResetMachineGuid(System.String)">
            <summary>
            Reset machine guid
            </summary>
            <param name="guid">Guid, or null/empty to make a new one</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.ReplaceUrl(System.String)">
            <summary>
            Replace place-holders in url with values from this service
            </summary>
            <param name="url">Url to replace</param>
            <returns>Replaced url</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.AddUpdater(DigitalRuby.IPBanCore.IUpdater)">
            <summary>
            Add an updater for each cycle
            </summary>
            <param name="updater">Updater</param>
            <returns>True if added, false if null or already in the list</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.TryGetUpdater``1(``0@)">
            <summary>
            Attempt to get an updater of a specific type
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="result">Updater or default(T) if not found</param>
            <returns>True if found, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.RemoveUpdater(DigitalRuby.IPBanCore.IUpdater)">
            <summary>
            Remove an updater
            </summary>
            <param name="updater">Updater</param>
            <returns>True if removed, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanService.AddLogScanner(DigitalRuby.IPBanCore.LogScannerOptions,System.Collections.Generic.ICollection{DigitalRuby.IPBanCore.ILogScanner})">
            <summary>
            Add a log scanner
            </summary>
            <param name="options">Options</param>
            <param name="logs">Logs</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.IsRunning">
            <summary>
            Whether the service is running
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.ManualCycle">
            <summary>
            Whether the cycle runs automatically
            </summary>
        </member>
        <member name="E:DigitalRuby.IPBanCore.IIPBanService.ConfigChanged">
            <summary>
            Config changed event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.DB">
            <summary>
            Direct access to db
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.Whitelist">
            <summary>
            Whitelist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.Blacklist">
            <summary>
            Blacklist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.LocalIPAddressString">
            <summary>
            Local ip address string
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.RemoteIPAddressString">
            <summary>
            Remote ip address string
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.MachineGuid">
            <summary>
            A unique id for this service
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.Version">
            <summary>
            Software version
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.RequestMaker">
            <summary>
            Http request maker
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.Firewall">
            <summary>
            Firewall
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.DnsLookup">
            <summary>
            Dns lookup
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.BannedIPAddressHandler">
            <summary>
            Extra handler for banned ip addresses
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.IPBanDelegate">
            <summary>
            Delegate for extra handling
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.OSName">
            <summary>
            Operating system name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.OSVersion">
            <summary>
            Operating system version
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.MultiThreaded">
            <summary>
            Whether the service is multi-threaded
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.Authorization">
            <summary>
            Authorization
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanService.FirewallTypes">
            <summary>
            Firewall types
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPBanConfig">
            <summary>
            Config store
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IIPBanConfig.Config">
            <summary>
            Config
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPBanDelegate">
            <summary>
            Interface for external communication of ip address ban, unband, config, etc.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanDelegate.Start(DigitalRuby.IPBanCore.IIPBanService)">
            <summary>
            Start - call only once. Dispose to stop.
            </summary>
            <param name="service">The service this delegate is attached to</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanDelegate.RunCycleAsync(System.Threading.CancellationToken)">
            <summary>
            Update, do housekeeping, etc.
            </summary>
            <param name="cancelToken">Cancel token</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanDelegate.IPAddressBanned(System.String,System.String,System.String,System.String,System.String,System.String,System.DateTime,System.Boolean,DigitalRuby.IPBanCore.IPAddressNotificationFlags)">
            <summary>
            Notify when an ip is banned
            </summary>
            <param name="ip">IP address</param>
            <param name="source">Source</param>
            <param name="userName">User name</param>
            <param name="machineGuid">Machine guid</param>
            <param name="osName">OS name</param>
            <param name="osVersion">OS version</param>
            <param name="timestamp">Timestamp</param>
            <param name="banned">True if banned, false if unbanned</param>
            <param name="notificationFlags">Notification flags</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanDelegate.LoginAttemptFailed(System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,System.DateTime,DigitalRuby.IPBanCore.IPAddressNotificationFlags)">
            <summary>
            Notify when a login attempt fails
            </summary>
            <param name="ip">Origin IP Address of the login attempt</param>
            <param name="source">The source of the failed login</param>
            <param name="userName">User name</param>
            <param name="machineGuid">Machine guid</param>
            <param name="osName">OS name</param>
            <param name="osVersion">OS version</param>
            <param name="count">Number of failures</param>
            <param name="timestamp">Timestamp</param>
            <param name="notificationFlags">Notification flags</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanDelegate.LoginAttemptSucceeded(System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,System.DateTime,DigitalRuby.IPBanCore.IPAddressNotificationFlags)">
            <summary>
            Notify when a login attempt succeeds
            </summary>
            <param name="ip">Origin IP Address of the login attempt</param>
            <param name="source">The source of the failed login</param>
            <param name="userName">User name</param>
            <param name="machineGuid">Machine guid</param>
            <param name="osName">OS name</param>
            <param name="osVersion">OS version</param>
            <param name="count">Number of successes</param>
            <param name="timestamp">Timestamp</param>
            <param name="notificationFlags">Notification flags</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPBanDelegate.ProcessPacketEvents(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PacketEvent})">
            <summary>
            Handle packet events
            </summary>
            <param name="events">Packet events</param>
            <returns>Task</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IFirewallTaskRunner">
            <summary>
            Firewall task runner
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IFirewallTaskRunner.RunFirewallTask``1(System.Func{``0,DigitalRuby.IPBanCore.IIPBanFirewall,System.Threading.CancellationToken,System.Threading.Tasks.Task},``0,System.String)">
            <summary>
            Run a task on the firewall queue
            </summary>
            <typeparam name="T">Type of state</typeparam>
            <param name="action">Action to run</param>
            <param name="state">State</param>
            <param name="name">Task name</param>
            <returns>Task</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIsWhitelisted">
            <summary>
            Interface that determines if an ip address is whitelisted
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIsWhitelisted.IsWhitelisted(System.String,System.String@)">
            <summary>
            Determines if an entry is whitelisted
            </summary>
            <param name="entry">Entry - can be ip address, user name, dns entry, etc.</param>
            <param name="reason">Reason</param>
            <returns>True if the entry is whitelisted, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIsWhitelisted.IsWhitelisted(DigitalRuby.IPBanCore.IPAddressRange,System.String@)">
            <summary>
            Determines if an ip address range is whitelisted
            </summary>
            <param name="range">IP address range</param>
            <param name="reason">Reason</param>
            <returns>True if any part of the range is whitelisted, false otherwise</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.ILogScanner">
            <summary>
            Scan logs for failed or success attempts
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.ILogScanner.PathAndMask">
            <summary>
            Path and mask (can be files, db connection string, etc.)
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ILogScanner.MatchesOptions(DigitalRuby.IPBanCore.LogScannerOptions)">
            <summary>
            Check if this scanner matches existing options
            </summary>
            <param name="options">Options</param>
            <returns>True if match, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ILogScanner.Update">
            <summary>
            Perform processing
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.LogScannerOptions">
            <summary>
            Options for log scanning
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.EventHandler">
            <summary>
            Event handler
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.Dns">
            <summary>
            Dns lookup
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.Source">
            <summary>
            Default source
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.PathAndMask">
            <summary>
            Folder and file mask to search
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.RegexFailure">
            <summary>
            Regular expression for failed logins, should at minimum have an ipaddress group, but can also have
            a timestamp group, source group and username group.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.RegexFailureTimestampFormat">
            <summary>
            Optional date/time format if RegexFailure has a timestamp group
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.RegexSuccess">
            <summary>
            Regular expression for successful logins, see RegexFailure for regex group names.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.RegexSuccessTimestampFormat">
            <summary>
            Optional date/time format if RegexSuccess has a timestamp group
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.MinimumTimeBetweenFailedLoginAttempts">
            <summary>
            Override minimum time between failed login attempts
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.MaxFileSizeBytes">
            <summary>
            Max file size for the log file before auto-deleting, default is unlimited
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.PingIntervalMilliseconds">
            <summary>
            Interval to ping the log file, default is 0 which means manual ping is required
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.Encoding">
            <summary>
            Encoding
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.MaxLineLength">
            <summary>
            Max line length or 0 for unlimited - be careful using 0, performance can suffer
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.FailedLoginThreshold">
            <summary>
            Failed login threshold or 0 for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.FailedLogLevel">
            <summary>
            Log level for failed logins
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.SuccessfulLogLevel">
            <summary>
            Log level for successful logins
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.NotificationFlags">
            <summary>
            Notification flags
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogScannerOptions.Description">
            <summary>
            Description
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogScannerOptions.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogScannerOptions.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.PacketEvent">
            <summary>
            Packet event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.Timestamp">
            <summary>
            Timestamp
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.FQDN">
            <summary>
            FQDN of machine sending the event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.LocalIpAddress">
            <summary>
            Source ip address of the packet
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.LocalPort">
            <summary>
            Source port of the packet or 0 if unknown/not applicable
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RemoteISP">
            <summary>
            Remote ISP (if known)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RemoteCountry">
            <summary>
            Remote country (if known)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RemoteRegion">
            <summary>
            Remote region (if known)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RemoteCity">
            <summary>
            Remote city (if known)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RemoteIpAddress">
            <summary>
            Destination ip address of the packet
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RemotePort">
            <summary>
            Destination port of the packet or 0 if unknown/not applicable
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.RuleName">
            <summary>
            Rule name if known, otherwise null
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.Protocol">
            <summary>
            RFC 1700 protocol
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.Allowed">
            <summary>
            Whether the packet was allowed (true) or blocked (false)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.Outbound">
            <summary>
            Whether the packet is outgoing (true) or incoming (false)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.Data">
            <summary>
            Data
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.DataLength">
            <summary>
            Data length
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PacketEvent.Header">
            <summary>
            Header row to match ToString method, including newline character(s).
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PacketEvent.ToString">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanBaseFirewall">
            <summary>
            Base firewall class that all firewall implementations should inherit from to get common default behavior and methods.
            All firewall classes should have a constructor with a single string parameter for the rule prefix.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanBaseFirewall.Disposed">
            <summary>
            IS firewall disposed
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanBaseFirewall.RulePrefix">
            <summary>
            Rule prefix - defaults to 'IPBan_'
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanBaseFirewall.AllowRulePrefix">
            <summary>
            Allow rule prefix
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanBaseFirewall.BlockRulePrefix">
            <summary>
            Block rule prefix
            </summary>
        </member>
        <member name="E:DigitalRuby.IPBanCore.IPBanBaseFirewall.PacketEvent">
            <summary>
            Packet event handler
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.OnDispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.SendPacketEvents(System.Collections.Generic.IReadOnlyCollection{DigitalRuby.IPBanCore.PacketEvent})">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix or null for default</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.#ctor">
            <summary>
            Hide parameterless constructor
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.Finalize">
            <summary>
            Finalizer
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.Dispose">
            <summary>
            Dispose
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.Update(System.Threading.CancellationToken)">
            <summary>
            Update firewall, perform housekeeping, etc.
            </summary>
            <param name="cancelToken">Cancel token</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.ClearPrefixes">
            <summary>
            Clear prefixes - use with caution!
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.Compile">
            <summary>
            Compile into an optimized in memory representation
            </summary>
            <returns>Optimized version</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.Query(System.Collections.Generic.IReadOnlyCollection{System.Net.IPEndPoint})">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBaseFirewall.Truncate">
            <summary>
            Truncate
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanBlockIPAddressesUpdater">
            <summary>
            Block ip addresses for any ban*.txt files
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBlockIPAddressesUpdater.#ctor(DigitalRuby.IPBanCore.IIPAddressEventHandler,System.String)">
            <summary>
            Constructor
            </summary>
            <param name="service">Service</param>
            <param name="textFilePathMask">Path / mask to text file to ban ip addresses from</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBlockIPAddressesUpdater.Dispose">
            <summary>
            Dispose
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanBlockIPAddressesUpdater.Update(System.Threading.CancellationToken)">
            <summary>
            Update - if the text file path exists, all ip addresses from each line will be banned
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanConfig">
            <summary>
            Configuration for ip ban app
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanConfig.TempConfigChanger">
            <summary>
            Allow temporary change of config
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.TempConfigChanger.#ctor(DigitalRuby.IPBanCore.IConfigReaderWriter,System.Func{System.String,System.String})">
            <summary>
            Constructor
            </summary>
            <param name="config">Config</param>
            <param name="modifier">Config modifier</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.TempConfigChanger.#ctor(DigitalRuby.IPBanCore.IConfigReaderWriter,System.Func{System.String,System.String},System.String@)">
            <summary>
            Constructor
            </summary>
            <param name="config">Config</param>
            <param name="modifier">Config modifier</param>
            <param name="modifiedConfig">Receives modified config</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.TempConfigChanger.Dispose">
            <summary>
            Revert config back to original value
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.TempConfigChanger.ModifiedConfig">
            <summary>
            Get the modified config
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanConfig.DefaultFileName">
            <summary>
            Default config file name
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.#cctor">
            <summary>
            Static constructor - migrate config file from DigitalRuby.IPBan.dll.config to ipban.config
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.ToString">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.GetConfig``1(System.String,``0)">
            <summary>
            Get a value from configuration manager app settings
            </summary>
            <typeparam name="T">Type of value to get</typeparam>
            <param name="key">Key</param>
            <param name="defaultValue">Default value if null or not found</param>
            <returns>Value or defaultValue if not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.TryGetConfig``1(System.String,``0@,System.Boolean)">
            <summary>
            Set a field / variable from configuration manager app settings. If null or not found, nothing is changed.
            </summary>
            <typeparam name="T">Type of value to set</typeparam>
            <param name="key">Key</param>
            <param name="value">Value. Can start and end with % to read from env var</param>
            <param name="logMissing">Whether to log missing keys</param>
            <returns>True if config found, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.GetConfig``1(System.String,``0@,System.Nullable{``0},System.Nullable{``0},System.Boolean)">
            <summary>
            Get a value from configuration manager app settings
            </summary>
            <typeparam name="T">Type of value to get</typeparam>
            <param name="key">Key</param>
            <param name="value">Value to set</param>
            <param name="minValue">Min value</param>
            <param name="maxValue">Max value</param>
            <param name="clampSmallTimeSpan">Whether to clamp small timespan to max value</param>
            <returns>Value</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.GetConfigArray``1(System.String,``0[]@,``0[])">
            <summary>
            Set a field / variable from configuration manager app settings. If null or not found, nothing is changed.
            </summary>
            <typeparam name="T">Type of value to set</typeparam>
            <param name="key">Key</param>
            <param name="value">Value</param>
            <param name="defaultValue">Default value if array was empty</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.LoadFromXml(System.String,DigitalRuby.IPBanCore.IDnsLookup,DigitalRuby.IPBanCore.IDnsServerList,DigitalRuby.IPBanCore.IHttpRequestMaker)">
            <summary>
            Load IPBan config from XML
            </summary>
            <param name="xml">XML string</param>
            <param name="dns">Dns lookup for resolving ip addresses, null for default</param>
            <param name="dnsList">Dns server list, null for none</param>
            <param name="httpRequestMaker">Http request maker, null for none</param>
            <returns>IPBanConfig</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.LoadFromXml(System.Xml.XmlDocument,DigitalRuby.IPBanCore.IDnsLookup,DigitalRuby.IPBanCore.IDnsServerList,DigitalRuby.IPBanCore.IHttpRequestMaker)">
            <summary>
            Load IPBan config from XML
            </summary>
            <param name="xml">XML document</param>
            <param name="dns">Dns lookup for resolving ip addresses, null for default</param>
            <param name="dnsList">Dns server list, null for none</param>
            <param name="httpRequestMaker">Http request maker, null for none</param>
            <returns>IPBanConfig</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.UserNameWhitelistedRegex(System.String)">
            <summary>
            Check if a user name fails the user name whitelist regex. If the regex is empty, method returns false.
            </summary>
            <param name="userName">User name</param>
            <returns>True if passed the regex, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.IsUserNameWithinMaximumEditDistanceOfUserNameWhitelist(System.String,System.Boolean@)">
            <summary>
            Checks if a user name is within the maximum edit distance for the user name whitelist.
            If the user name whitelist is empty, this method returns true.
            </summary>
            <param name="userName">User name</param>
            <param name="hasUserNameWhitelist">Whether a user name whitelist is defined</param>
            <returns>True if within max edit distance of any whitelisted user name, false otherwise.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.WindowsEventViewerGetGroupsMatchingKeywords(System.UInt64)">
            <summary>
            Return all the groups that match the specified keywords (Windows only)
            </summary>
            <param name="keywords">Keywords</param>
            <returns>Groups that match</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.GetConfigAppSetting(System.Xml.XmlDocument,System.String)">
            <summary>
            Get an app setting, decoding the XML value
            </summary>
            <param name="doc">XML config</param>
            <param name="key">App setting key to look for</param>
            <returns>The config value or null if not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.ChangeConfigAppSetting(System.Xml.XmlDocument,System.String,System.String)">
            <summary>
            Change an app setting, XML encoding the value
            </summary>
            <param name="doc">XML config</param>
            <param name="key">App setting key to look for</param>
            <param name="newValue">Replacement value</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.ChangeConfigAppSettingAndGetXml(System.String,System.String,System.String)">
            <summary>
            Change an app setting, XML encoding the value
            </summary>
            <param name="xml">XML config</param>
            <param name="key">App setting key to look for</param>
            <param name="newValue">Replacement value</param>
            <returns>New XML config</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.ChangeConfigEventViewer(System.String,System.Boolean,System.Boolean,System.String[])">
            <summary>
            Change event viewer settings in config
            </summary>
            <param name="config">Config xml</param>
            <param name="failedLogin">True for failed login section, false for successful login section</param>
            <param name="delete">True to delete, false to insert</param>
            <param name="groups">Groups to add, minues the Group container element</param>
            <returns>New config</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.MergeXml(System.String,System.String)">
            <summary>
            Merge two configurations
            </summary>
            <param name="xmlBase">Base configuration</param>
            <param name="xmlOverride">Override configuration</param>
            <returns>Merged configuration</returns>
            <exception cref="T:System.ArgumentException">Base xml is null or white space</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.ParseFirewallUriRules(System.String,DigitalRuby.IPBanCore.IIPBanFirewall,DigitalRuby.IPBanCore.IFirewallTaskRunner,DigitalRuby.IPBanCore.IIsWhitelisted,DigitalRuby.IPBanCore.IHttpRequestMaker)">
            <summary>
            Parse firewall uri rules
            </summary>
            <param name="text">Text</param>
            <param name="firewall">Firewall</param>
            <param name="firewallTaskRunner">Firewall task runner</param>
            <param name="whitelistChecker">Whitelist checker</param>
            <param name="requestMaker">Request maker</param>
            <returns>Parsed rules</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.ValidateFirewallUriRules(System.String)">
            <summary>
            Validate firewall uri rules
            </summary>
            <param name="firewallUriRules">Firewall uri rules</param>
            <returns>Null if validated, otherwise an error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.IsWhitelisted(System.String,System.String@)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfig.IsWhitelisted(DigitalRuby.IPBanCore.IPAddressRange,System.String@)">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.Xml">
            <summary>
            Raw xml
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.AppSettings">
            <summary>
            All app settings key/values
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.IPThreatApiKey">
            <summary>
            Api key from https://ipthreat.net, if any
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.FailedLoginAttemptsBeforeBan">
            <summary>
            Number of failed login attempts before a ban is initiated
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.BanTimes">
            <summary>
            Length of time to ban an ip address, each unban and reban moves to the next TimeSpan in the array, until the last which then
            drops the ip address out of the ban list and starts over at the first TimeSpan in the array.
            This array will always have at least one value.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ResetFailedLoginCountForUnbannedIPAddresses">
            <summary>
            Whether to reset failed login count to 0 when an ip address is unbanned and using multiple BanTimes
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ExpireTime">
            <summary>
            The duration after the last failed login attempt that the count is reset back to 0.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.CycleTime">
            <summary>
            Interval of time to do house-keeping chores like un-banning ip addresses
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.MinimumTimeBetweenFailedLoginAttempts">
            <summary>
            The minimum time between failed login attempts to increment the ban counter
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.MinimumTimeBetweenSuccessfulLoginAttempts">
            <summary>
            The minimum time between successful login attempts to increment the success counter
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.FirewallRulePrefix">
            <summary>
            Rule prefix for firewall
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.WindowsEventViewerExpressionsToBlock">
            <summary>
            Event viewer expressions to block (Windows only)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.WindowsEventViewerExpressionsToNotify">
            <summary>
            Event viewer expressions to notify for successful logins (Windows only)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.LogFilesToParse">
            <summary>
            Log files to parse
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ClearBannedIPAddressesOnRestart">
            <summary>
            True to clear and unban ip addresses upon restart, false otherwise
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ClearFailedLoginsOnSuccessfulLogin">
            <summary>
            Whether to clear failed logins when an ip has a successful login (default false)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ProcessInternalIPAddresses">
            <summary>
            Whether to process internal ip addresses (default false)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.WhitelistFilter">
            <summary>
            Whitelist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.BlacklistFilter">
            <summary>
            Blacklist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.TruncateUserNameChars">
            <summary>
            Characters to truncate user names at, empty for no truncation
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.UserNameWhitelist">
            <summary>
            White list user names. Any user name found not in the list is banned, unless the list is empty, in which case no checking is done.
            If not empty, Any user name within 'UserNameWhitelistMinimumEditDistance' in the config is also not banned.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.UserNameWhitelistRegex">
            <summary>
            User name whitelist regex, or empty if not set.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.FailedLoginAttemptsBeforeBanUserNameWhitelist">
            <summary>
            Number of failed logins before banning a user name in the user name whitelist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ProcessToRunOnBan">
            <summary>
            Process to run on ban. See ReplaceUrl in IPBanService.cs for place-holders.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ProcessToRunOnSuccessfulLogin">
            <summary>
            Process to run on successful login. See ReplaceUrl in IPBanService.cs for place-holders.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ProcessToRunOnUnban">
            <summary>
            Process to run on unban. See ReplaceUrl in IPBanService.cs for place-holders.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.UseDefaultBannedIPAddressHandler">
            <summary>
            Whether to use the default banned ip address handler
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.ExtraRules">
            <summary>
            List of extra block rules to create
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.FirewallUriRules">
            <summary>
            Config entry for firewall uri rules, one per line. Format is RulePrefix,Interval(DD:HH:MM:SS),Uri[NEWLINE]
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.GetUrlUpdate">
            <summary>
            A url to get when the service updates, empty for none. See ReplaceUrl of IPBanService for place-holders.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.GetUrlUpdateSha256">
            <summary>
            Expected SHA-256 hash (hex, case-insensitive) of the binary returned by GetUrlUpdate.
            If empty, the auto-update download is fetched but NOT executed — this is the safe default
            and protects against a malicious/MITMed update server. Operators must explicitly set this
            hash to opt in to automated update execution.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.GetUrlStart">
            <summary>
            A url to get when the service starts, empty for none. See ReplaceUrl of IPBanService for place-holders.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.GetUrlStop">
            <summary>
            A url to get when the service stops, empty for none. See ReplaceUrl of IPBanService for place-holders.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfig.GetUrlConfig">
            <summary>
            A url to get for a config file update, empty for none. See ReplaceUrl of IPBanService for place-holders.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanConfigReaderWriter">
            <summary>
            Read/write config safely
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.ConfigLocker">
            <summary>
            Config locker, useful when multiple threads have spawned test services and need to sync
            But still works great for the normal usage of a single thread and process
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.ReadConfigAsync(System.Boolean)">
            <summary>
            Read config
            </summary>
            <param name="acquireLock">Whether to acquire an exclusive lock, this should always be true unless special locking patterns are used</param>
            <returns>Task with config string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.WriteConfigAsync(System.String)">
            <summary>
            Write config
            </summary>
            <param name="config">Config string to write</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.CheckForConfigChangeAsync(System.Boolean)">
            <summary>
            Check for config change
            </summary>
            <param name="forceReload">Whether to force a reload</param>
            <returns>Task of config string, will be a null string if no change</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.Enabled">
            <summary>
            Whether the reader/writer is enabled
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.Path">
            <summary>
            If UseFile, the path to the config file
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.UseFile">
            <summary>
            Whether to use the path (file) for config. If false, a string in memory is used.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanConfigReaderWriter.GlobalConfigString">
            <summary>
            Only use if UseFile is false, mainly for testing to force different from local config string for first entry
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.EventViewerExpression">
            <summary>
            Info about a single Windows event viewer lookup
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpression.RegexObject">
            <summary>
            The regex, created from Regex property
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpression.XPath">
            <summary>
            Xpath to find
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpression.Regex">
            <summary>
            Regex string
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpression.XPathIsOptional">
            <summary>
            Whether the xpath is optional
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpression.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpression.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.EventViewerExpressionGroup">
            <summary>
            A single Windows event viewer group
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.Source">
            <summary>
            The event viewer source
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.KeywordsULONG">
            <summary>
            Keywords as a ULONG
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.MinimumWindowsMajorVersion">
            <summary>
            Minimum Windows major version - see https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx?f=255&amp;MSPPError=-2147217396
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.MinimumWindowsMinorVersion">
            <summary>
            Minimum Windows minor version - see https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx?f=255&amp;MSPPError=-2147217396
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.NotifyOnly">
            <summary>
            Set automatically, determines whether this expression is failed login (false) or successful login (true)
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.EventViewerExpressionGroup.keywords">
            <summary>
            Keywords backing variable, private
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.Keywords">
            <summary>
            Keywords as HEX string
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpressionGroup.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpressionGroup.GetHashCode">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpressionGroup.AppendQueryString(System.Text.StringBuilder,System.Int32)">
            <summary>
            Append event viewer query to string builder
            </summary>
            <param name="builder">String builder</param>
            <param name="id">Id</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpressionGroup.SetExpressionsFromExpressionsText">
            <summary>
            Use ExpressionsText to set the event viewer expressions
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.Path">
            <summary>
            Path to the event viewer entry, i.e. Application or Security
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.Expressions">
            <summary>
            Event viewer expressions
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.ExpressionsText">
            <summary>
            If using plain text expressions, this will be set and needs conversion. Leave null if you are using Expressions directly.
            The format is xpath (//*), newline, and then regex, newline, repeated.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.FailedLoginThreshold">
            <summary>
            Override failed login threshold or 0 for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.MinimumTimeBetweenLoginAttempts">
            <summary>
            Override minimum time between logins
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.MinimumTimeBetweenLoginAttemptsTimeSpan">
            <summary>
            MinimumTimeBetweenLoginAttempts TimeSpan value, or null if none.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.LogLevel">
            <summary>
            Log level for event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.NotificationFlags">
            <summary>
            Notification flags
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressionGroup.Description">
            <summary>
            Description
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.EventViewerExpressions">
            <summary>
            Base class for event viewer expressions
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.EventViewerExpressions.Groups">
            <summary>
            Event viewer groups
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpressions.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.EventViewerExpressions.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.EventViewerExpressionsToBlock">
            <summary>
            List of Windows event viewer groups for failed login attempts
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.EventViewerExpressionsToNotify">
            <summary>
            List of Windows event viewer groups for success login attempts
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanDB">
            <summary>
            IPBan local storage for ip addresses
            </summary>
            <remarks>
            Constructor
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.#ctor(System.String)">
            <summary>
            IPBan local storage for ip addresses
            </summary>
            <remarks>
            Constructor
            </remarks>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanDB.IPAddressState">
            <summary>
            State of ip addresses
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanDB.IPAddressState.Active">
            <summary>
            Active and in firewall
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanDB.IPAddressState.AddPending">
            <summary>
            Pending add to firewall
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanDB.IPAddressState.RemovePending">
            <summary>
            Pending remove from firewall
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanDB.IPAddressState.FailedLogin">
            <summary>
            Failed login only, no ban yet
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanDB.IPAddressState.RemovePendingBecomeFailedLogin">
            <summary>
            Remove from firewall is pending, but ip address should stay in database as a failed login
            This is used for tiered ban times where ip addresses can be banned for longer and longer times
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry">
            <summary>
            An ip address entry in the database
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.IPAddress">
            <summary>
            IP address
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.UserName">
            <summary>
            User name if known
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.Source">
            <summary>
            Source if known
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.LastFailedLogin">
            <summary>
            Last failed login
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.FailedLoginCount">
            <summary>
            Failed login count
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.BanStartDate">
            <summary>
            Ban start date, null if not banned
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.BanEndDate">
            <summary>
            Ban end date, null if not banned
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry.State">
            <summary>
            IP address state
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanDB.FileName">
            <summary>
            IPBan database file name, not including directory
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.ParseIPAddressEntry(Microsoft.Data.Sqlite.SqliteDataReader)">
            <summary>
            Parses a DB record.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.OnInitialize">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.Truncate(System.Boolean,System.Boolean)">
            <summary>
            Delete all data from the database but keep the database file
            </summary>
            <param name="confirm">Pass true to actually truncate</param>
            <param name="onlyBans">Delete only bans (true) or everything (false)</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.GetIPAddressCount">
            <summary>
            Get the count of all ip addresses in the database
            </summary>
            <returns>IP address count</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.GetBannedIPAddressCount">
            <summary>
            Get the count of all banned ip addresses in the database
            </summary>
            <returns>Banned ip address count</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.IncrementFailedLoginCount(System.String,System.String,System.String,System.DateTime,System.Int32,System.Object)">
            <summary>
            Increment the failed login count for an ip address
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="userName">User name</param>
            <param name="source">Source</param>
            <param name="dateTime">DateTime to set for failed login</param>
            <param name="increment">Amount to increment</param>
            <param name="transaction">Transaction</param>
            <returns>New failed login count</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.TryGetIPAddress(System.String,DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry@,System.Object)">
            <summary>
            Get ip address entry from the database
            </summary>
            <param name="ipAddress">IP address to lookup</param>
            <param name="entry">IP address entry or default if not found</param>
            <param name="transaction">Transaction</param>
            <returns>True if ip address found, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.SetBanDates(System.String,System.DateTime,System.DateTime,System.DateTime,System.Object)">
            <summary>
            Set ban date for an ip address. If the ip address exists, the ban date will be set only if the existing ban date is expired.
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="banStartDate">Ban start date</param>
            <param name="banEndDate">Ban end date</param>
            <param name="now">Current date/time</param>
            <param name="transaction">Transaction</param>
            <returns>True if ban date set, false if it was already set or ip address is not in the database</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.TryGetBanDates(System.String,System.Collections.Generic.KeyValuePair{System.Nullable{System.DateTime},System.Nullable{System.DateTime}}@,System.Object)">
            <summary>
            Get the ban date and ban end date for an ip address
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="banDates">Ban dates, default if not found</param>
            <param name="transaction">Transaction</param>
            <returns>Ban date. Key and/or value will ber null if not banned or not in the database</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.SetBannedIPAddresses(System.Collections.Generic.IEnumerable{System.Tuple{System.String,System.DateTime,System.DateTime}},System.DateTime,System.Object)">
            <summary>
            Set banned ip addresses. If the ip address is not in the database, it will be added,
            otherwise it will be updated with the ban date if the existing ban date is expired.
            </summary>
            <param name="ipAddresses">IP addresses, ban date and ban end dates to set as banned</param>
            <param name="now">Current date/time</param>
            <param name="transaction">Transaction</param>
            <returns>Count of newly banned ip addresses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.TryGetIPAddressState(System.String,System.Nullable{DigitalRuby.IPBanCore.IPBanDB.IPAddressState}@,System.Object)">
            <summary>
            Get an ip address state
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="state">Receives ip address state or default if not found</param>
            <param name="transaction">Transaction</param>
            <returns>True if ip address found, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.SetIPAddressesState(System.Collections.Generic.IEnumerable{System.String},DigitalRuby.IPBanCore.IPBanDB.IPAddressState,System.Object)">
            <summary>
            Set state of ip addresses
            </summary>
            <param name="ipAddresses">IP addresses to set state for. Pass null to set the entire database.</param>
            <param name="state">State to set</param>
            <param name="transaction">Transaction</param>
            <returns>Number of rows affected</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.EnumerateIPAddressesDeltaAndUpdateState(System.Boolean,System.DateTime,System.Boolean,System.Object)">
            <summary>
            Enumerate any pending add or remove operations. When enumeration is complete, any returned ip addresses are either deleted (remove state), set to active (add state)
            or set to failed login state (ban expired set as failed login).
            </summary>
            <param name="commit">Whether to commit changes (alter states and delete pending removals) when enumeration is complete</param>
            <param name="now">Current date/time</param>
            <param name="resetFailedLoginCount">Whether to reset failed login count to 0 for un-banned ip addresses</param>
            <param name="transaction">Transaction</param>
            <returns></returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.DeleteIPAddress(System.String,System.Object)">
            <summary>
            Delete an ip address from the database
            </summary>
            <param name="ipAddress">IP address to delete</param>
            <param name="transaction">Transaction</param>
            <returns>True if deleted, false if not exists</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.EnumerateIPAddresses(System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.Object)">
            <summary>
            Get all ip addresses
            </summary>
            <param name="failLoginCutOff">Fail login cut off, only return entries with last failed login before this timestamp, null to not query this</param>
            <param name="banCutOff">Ban cut off date, only return entries with ban end date less than or equal to this, null to not query this</param>
            <param name="transaction">Transaction</param>
            <returns>IP addresses that match the query</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.EnumerateBannedIPAddresses">
            <summary>
            Get all banned ip addresses
            </summary>
            <returns>IP addresses with non-null ban dates</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.DeleteIPAddresses(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Delete ip addresses from the database
            </summary>
            <param name="ipAddresses">IP addresses to delete</param>
            <returns>Number of deleted ip addresses</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.DeleteIPAddresses(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Delete all ip addresses in the specified range
            </summary>
            <param name="range">Range</param>
            <returns>List of deleted ip</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDB.DeletePendingRemoveIPAddresses">
            <summary>
            Delete ip addresses that are pending deletion from the database
            </summary>
            <returns>Number of rows modified</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanDnsServerList">
            <summary>
            Maintains a list of dns servers
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDnsServerList.#ctor">
            <summary>
            Constructor
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDnsServerList.Update(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDnsServerList.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDnsServerList.ContainsIPAddress(System.Net.IPAddress)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanDnsServerList.ContainsIPAddressRange(DigitalRuby.IPBanCore.IPAddressRange)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanFilter">
            <summary>
            Parse and create a filter for ips, user names, ip list from urls, regex, etc.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.ItemDelimiter">
            <summary>
            Delimiter for each item in a filter string
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.ItemDelimiterString">
            <summary>
            Delimiter for each item in a filter string
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.ItemPiecesDelimiter">
            <summary>
            Item pieces delimiter |
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.ItemPiecesDelimiterString">
            <summary>
            Item pieces delimiter |
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.SubEntryDelimiter">
            <summary>
            Used if multiple ips in one entry (rare)
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.SubEntryDelimiterString">
            <summary>
            Used if multiple ips in one entry (rare)
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanFilter.itemPiecesDelimiterLegacy">
            <summary>
            Legacy item pieces delimiter ?
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFilter.#ctor(System.String,System.String,DigitalRuby.IPBanCore.IHttpRequestMaker,DigitalRuby.IPBanCore.IDnsLookup,DigitalRuby.IPBanCore.IDnsServerList,DigitalRuby.IPBanCore.IIPBanFilter)">
            <summary>
            Constructor
            </summary>
            <param name="value">String value to parse</param>
            <param name="regexValue">Regex value to parse</param>
            <param name="httpRequestMaker">Http request maker in case urls are present in the value</param>
            <param name="dns">Dns lookup in case dns entries are present in the value</param>
            <param name="dnsList">Dns servers, these are never filtered</param>
            <param name="counterFilter">Filter to check first and return false if contains</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFilter.Equals(DigitalRuby.IPBanCore.IIPBanFilter)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFilter.IsFiltered(System.String,System.String@)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFilter.IsFiltered(DigitalRuby.IPBanCore.IPAddressRange,System.String@)">
            <inheritdoc/>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFilter.GetEntryWithoutComment(System.String)">
            <summary>
            Get entry without comment
            </summary>
            <param name="entry">Entry</param>
            <returns>Entry without comment</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFilter.SplitEntry(System.String)">
            <summary>
            Split entry on new delimiter. If it doesn't exist, legacy delimiter is used.
            </summary>
            <param name="entry">Entry</param>
            <returns>Pieces (always at least 3 items)</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFilter.IPAddressRanges">
            <summary>
            Get all ip address ranges in the filter
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFilter.Value">
            <summary>
            Get the original value
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanFilter.Regex">
            <summary>
            Get the regex filter
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanFirewallExtensions">
            <summary>
            Firewall extension methods
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallExtensions.IsIPAddressAllowed(DigitalRuby.IPBanCore.IIPBanFirewall,System.String,System.String@,System.Int32)">
            <summary>
            Check if ip address is allowed. Only use from tests.
            </summary>
            <param name="firewall">Firewall</param>
            <param name="ipAddress">IP addresses</param>
            <param name="ruleName">Rule name</param>
            <param name="port">Port</param>
            <returns>True if allowed, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallExtensions.IsIPAddressBlocked(DigitalRuby.IPBanCore.IIPBanFirewall,System.String,System.Int32)">
            <summary>
            Check if ip is blocked. Only use from tests.
            </summary>
            <param name="firewall">Firewall</param>
            <param name="ipAddress">IP</param>
            <param name="port">Port</param>
            <returns>True if blocked, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallExtensions.IsIPAddressBlocked(DigitalRuby.IPBanCore.IIPBanFirewall,System.String,System.String@,System.Int32)">
            <summary>
            Check if ip is blocked. Only use from tests.
            </summary>
            <param name="firewall">Firewall</param>
            <param name="ipAddress">IP</param>
            <param name="ruleName">Found rule name</param>
            <param name="port">Port</param>
            <returns>True if blocked, false otherwise</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanFirewallUtility">
            <summary>
            Utility methods for working with firewall data
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.CreateFirewall(System.Collections.Generic.IReadOnlyCollection{System.Type},System.String,DigitalRuby.IPBanCore.IIPBanFirewall)">
            <summary>
            Create a firewall
            </summary>
            <param name="allTypes">Firewall types</param>
            <param name="rulePrefix">Rule prefix or null for default</param>
            <param name="previousFirewall">Current firewall</param>
            <returns>Firewall</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.InvertPortRanges(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange})">
            <summary>
            Invert port ranges. For example, if just port 80 was open, inverting it would get you 0-79, 81-65535.
            </summary>
            <param name="portRanges">Port ranges</param>
            <returns>Inverted port ranges</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.MergePortRanges(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange})">
            <summary>
            Merge port ranges
            </summary>
            <param name="portRanges">Port ranges</param>
            <returns>Distinct port ranges</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.GetPortRangeStringBlock(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange})">
            <summary>
            Get a port range of block ports given a set of allowed port ranges
            </summary>
            <param name="allowPortRanges">Port ranges to allow, all other ports are blocked</param>
            <returns>Port range string to block (i.e. 0-79,81-442,444-65535) - null if none to block.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.GetPortRangeStringAllow(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange})">
            <summary>
            Get a port range of allow ports. Overlaps are thrown out.
            </summary>
            <param name="allowPortRanges">Port ranges to allow</param>
            <returns>Port range string to allow (i.e. 80,443,1000-10010) - null if none to allow.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.GetPortRangeString(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange})">
            <summary>
            Get port range string without modifying the ranges
            </summary>
            <param name="portRanges">Port ranges</param>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.GetPortRangesForRule(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Boolean)">
            <summary>
            Get port ranges that will be applicable to a block or allow rule
            </summary>
            <param name="portRanges">Port ranges</param>
            <param name="block">True if block, false if allow</param>
            <returns>Port ranges for rule, will never be null</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.FilterRanges(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange})">
            <summary>
            Filter ip address ranges from ranges using filter
            </summary>
            <param name="ranges">Ip address ranges to filter</param>
            <param name="filter">Ip address ranges to filter out of ranges, null for no filtering</param>
            <returns>Filtered ip address ranges in sorted order</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.LinuxRestartRsyslog">
            <summary>
            Restart rsys log on Linux
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanFirewallUtility.RunProcess(System.String,System.Object,System.Object,System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Execute a firewall process
            </summary>
            <param name="program">Program</param>
            <param name="input">Input file or Stream to read and pipe to std in (null to not do this)</param>
            <param name="output">Dump std out to this file or Stream (null to not do this)</param>
            <param name="args">Args</param>
            <returns>Exit code</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanIPThreatUploader">
            <summary>
            Sync failed logins to ipthreat api
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="service">Service</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanIPThreatUploader.#ctor(DigitalRuby.IPBanCore.IPBanService)">
            <summary>
            Sync failed logins to ipthreat api
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="service">Service</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanIPThreatUploader.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanIPThreatUploader.Update(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanIPThreatUploader.AddIPAddressLogEvents(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressLogEvent})">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLogFileScanner">
            <summary>
            Log file scanner that looks for failed and successful logins
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.Source">
            <summary>
            The source of the failed login
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.FailedLoginThreshold">
            <summary>
            Failed login threshold or 0 for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.FailedLoginMinimumTimespan">
            <summary>
            Failed login minimum timespan
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.FailedLogLevel">
            <summary>
            Failed login log level
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.SuccessfulLogLevel">
            <summary>
            Successful login log level
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.NotificationFlags">
            <summary>
            Notification flags
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileScanner.Description">
            <summary>
            Description
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogFileScanner.#ctor(DigitalRuby.IPBanCore.LogScannerOptions)">
            <summary>
            Create a log file scanner
            </summary>
            <param name="options">Options</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogFileScanner.MatchesOptions(DigitalRuby.IPBanCore.LogScannerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogFileScanner.OnProcessText(System.String)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLogFileTester">
            <summary>
            Test log files
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogFileTester.RunLogFileTest(System.String,System.String,System.String,System.String,System.String)">
            <summary>
            Test a log file
            </summary>
            <param name="fileName">Log file</param>
            <param name="regexFailure">Failure regex</param>
            <param name="regexFailureTimestampFormat">Failure timestamp format</param>
            <param name="regexSuccess">Success regex</param>
            <param name="regexSuccessTimestampFormat">Success timestamp format</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLogFileToParse">
            <summary>
            Log file to parse data
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.Source">
            <summary>
            Source
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.PathAndMask">
            <summary>
            Path and mask, one per line
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.FailedLoginRegex">
            <summary>
            Failed login regex
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.FailedLoginRegexTimestampFormat">
            <summary>
            Failed login timestamp format
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.FailedLoginLogLevel">
            <summary>
            Failed login log level
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.MinimumTimeBetweenFailedLoginAttempts">
            <summary>
            Override minimum time between failed login attempts
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.SuccessfulLoginRegex">
            <summary>
            Successful login regex
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.SuccessfulLoginRegexTimestampFormat">
            <summary>
            Successful login timestamp format
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.SuccessfulLoginLogLevel">
            <summary>
            Successful login log level
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.PlatformRegex">
            <summary>
            Platform regex, i.e. Windows, Linux, etc.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.PingInterval">
            <summary>
            How often in milliseconds to ping the file
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.MaxFileSize">
            <summary>
            Max file size in bytes
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.FailedLoginThreshold">
            <summary>
            Override failed login threshold or 0 for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.NotificationFlags">
            <summary>
            Flags
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.Description">
            <summary>
            Description
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogFileToParse.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogFileToParse.PathsAndMasks">
            <summary>
            Get an array of each individual path/mask, converted to normalized glob syntax
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLogFilesToParse">
            <summary>
            Log files to parse
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLogFilesToParse.LogFiles">
            <summary>
            Log files
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLogManager">
            <summary>
            Responsible for managing and parsing logs for failed and successful logins
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLogManager.LogFilesToParse">
            <summary>
            Log files to parse
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogManager.#ctor(DigitalRuby.IPBanCore.IIPBanService)">
            <summary>
            Constructor
            </summary>
            <param name="service">Service</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogManager.Update(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLogManager.Dispose">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanMemoryFirewall">
            <summary>
            In memory firewall that persists rules to disk. This is not meant to be used directly but rather to be used inside of other firewall implementations.
            This class is thread safe.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRuleRanges">
            <summary>
            Memory firewall rule ranges interface
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRuleRanges.IPV4Strings">
            <summary>
            IPV4 ranges
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRuleRanges.IPV6Strings">
            <summary>
            IPV6 ranges
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRuleRanges.PortRangeStrings">
            <summary>
            Port ranges, empty for none
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRuleRanges.Block">
            <summary>
            True to block, false to allow
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRuleRanges.GetCount">
            <summary>
            Get count of entries
            </summary>
            <returns>Count</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRule">
            <summary>
            Memory firewall rule interface
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRule.IPV4">
            <summary>
            IPV4 set
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRule.IPV6">
            <summary>
            IPV6 set
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRule.Block">
            <summary>
            True to block, false to allow
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IMemoryFirewallRule.GetCount">
            <summary>
            Get count of entries
            </summary>
            <returns>Count</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.MemoryFirewallRuleRanges.GetCount">
            <summary>
            Get count of entries
            </summary>
            <returns>Count</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.RuleRanges">
            <summary>
            Get all the rules with ranges
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanMemoryFirewall.RuleSets">
            <summary>
            Get all the rules with sets
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.OnDispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.Update(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.Compile">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressAllowed(System.String,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressAllowed(System.Net.IPAddress,System.String@,System.Int32)">
            <summary>
            Check if ip is allowed
            </summary>
            <param name="ipAddressObj">IP address</param>
            <param name="ruleName">Receives rule name if found</param>
            <param name="port">Port</param>
            <returns>True if ip is allowed</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressBlocked(System.String,System.Int32)">
            <summary>
            Check if ip is blocked
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="port">Port</param>
            <returns>True if ip is blocked</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressBlocked(System.Net.IPAddress,System.String@,System.Boolean@,System.Int32)">
            <summary>
            Check if ip is blocked
            </summary>
            <param name="ipAddressObj">IP address</param>
            <param name="ruleName">Receive rule name if found</param>
            <param name="allowed">True if ip is in allow rule</param>
            <param name="port">Port</param>
            <returns>True if ip is blocked</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressBlocked(System.String,System.String@,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressAllowedInternal(System.Net.IPAddress,System.String@,System.Int32)">
            <summary>
            Check if ip is allowed
            </summary>
            <param name="ipAddressObj">IP address</param>
            <param name="ruleName">Receives rule name if found</param>
            <param name="port">Port</param>
            <returns>True if ip is allowed</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.GetCount(System.String)">
            <summary>
            Get count of entries for a rule
            </summary>
            <param name="ruleName">Rule name</param>
            <returns>Count for that rule or 0 if no entries or rule not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.IsIPAddressBlockedInternal(System.Net.IPAddress,System.String@,System.Boolean@,System.Int32)">
            <summary>
            Check if ip is blocked
            </summary>
            <param name="ipAddressObj">IP address</param>
            <param name="ruleName">Receive rule name if found</param>
            <param name="allowed">True if ip is in allow rule</param>
            <param name="port">Port</param>
            <returns>True if ip is blocked</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.Truncate">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMemoryFirewall.Merge(DigitalRuby.IPBanCore.IPBanMemoryFirewall)">
            <summary>
            Merge another memory firewall into this one
            </summary>
            <param name="mem">Memory firewall to merge</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanNullFirewall">
            <summary>
            This firewall implementation does nothing, so is great for performance testing
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.#ctor(System.String)">
            <summary>
            This firewall implementation does nothing, so is great for performance testing
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.Truncate">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanNullFirewall.Compile">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanRegexMacros">
            <summary>
            Internal class for regex macro expansion
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexMacros.GeneratePyNamedGroup">
            <remarks>
            Pattern:<br/>
            <code>\\(\\?P\\&lt;([A-Za-z_]\\w*)\\&gt;</code><br/>
            Options:<br/>
            <code>RegexOptions.Compiled | RegexOptions.CultureInvariant</code><br/>
            Explanation:<br/>
            <code>
            ○ Match the string "(?P&lt;".<br/>
            ○ 1st capture group.<br/>
                ○ Match a character in the set [A-Z_a-z].<br/>
                ○ Match a word character atomically any number of times.<br/>
            ○ Match '&gt;'.<br/>
            </code>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexMacros.GeneratePyNamedBackRef">
            <remarks>
            Pattern:<br/>
            <code>\\(\\?P=(?&lt;n&gt;[A-Za-z_]\\w*)\\)</code><br/>
            Options:<br/>
            <code>RegexOptions.Compiled | RegexOptions.CultureInvariant</code><br/>
            Explanation:<br/>
            <code>
            ○ Match the string "(?P=".<br/>
            ○ "n" capture group.<br/>
                ○ Match a character in the set [A-Z_a-z].<br/>
                ○ Match a word character atomically any number of times.<br/>
            ○ Match ')'.<br/>
            </code>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexMacros.GenerateInlineFlags">
            <remarks>
            Pattern:<br/>
            <code>\\(\\?(?&lt;f&gt;[a-zA-Z\\-]+)\\)</code><br/>
            Options:<br/>
            <code>RegexOptions.Compiled | RegexOptions.CultureInvariant</code><br/>
            Explanation:<br/>
            <code>
            ○ Match the string "(?".<br/>
            ○ "f" capture group.<br/>
                ○ Match a character in the set [\-A-Za-z] atomically at least once.<br/>
            ○ Match ')'.<br/>
            </code>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexMacros.Expand(System.String)">
            <summary>
            Expand macros: &lt;HOST&gt;, &lt;IP&gt;, &lt;IPV4&gt;, &lt;IPV6&gt;, &lt;FQDN&gt;, &lt;USER&gt;, %(__prefix_line)s
            + normalize Python-style named groups/backrefs to .NET.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanRegexParser">
            <summary>
            Extract things out of text using regex
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanRegexParser.truncateUserNameCharsArray">
            <summary>
            Allow truncating user names at any of these chars or empty array for no truncation
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanRegexParser.TruncateUserNameChars">
            <summary>
            Truncate user name chars value
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexParser.ParseRegex(System.String,System.Boolean)">
            <summary>
            Get a regex from text
            </summary>
            <param name="text">Text</param>
            <param name="multiline">Whether to use multi-line regex, default is false which is single line</param>
            <returns>Regex or null if text is null or whitespace</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexParser.CleanMultilineString(System.String)">
            <summary>
            Clean a multi-line string to make it more readable
            </summary>
            <param name="text">Multi-line string</param>
            <returns>Cleaned multi-line string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexParser.GetIPAddressEventsFromRegex(System.Text.RegularExpressions.Regex,System.String,System.String,DigitalRuby.IPBanCore.IPAddressEventType,System.String,DigitalRuby.IPBanCore.IDnsLookup)">
            <summary>
            Get an ip address and user name out of text using regex. Regex may contain groups named source_[sourcename] to override the source.
            </summary>
            <param name="regex">Regex</param>
            <param name="text">Text</param>
            <param name="timestampFormat">Timestamp format</param>
            <param name="eventType">Event type</param>
            <param name="info">Info</param>
            <param name="dns">Dns lookup to resolve ip addresses</param>
            <returns>Set of matches from text</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanRegexParser.ValidateRegex(System.String,System.Text.RegularExpressions.RegexOptions,System.Boolean)">
            <summary>
            Validate a regex - returns an error otherwise empty string if success
            </summary>
            <param name="regex">Regex to validate, can be null or empty</param>
            <param name="options">Regex options</param>
            <param name="throwException">True to throw the exception instead of returning the string, false otherwise</param>
            <returns>Null if success, otherwise an error string indicating the problem</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanService">
            <summary>
            Base ipban service class. Configuration, firewall and many other properties will
            not be initialized until the first RunCycle is called.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.#ctor">
            <summary>
            Constructor
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.CreateService``1">
            <summary>
            Create an IPBanService by searching all types in all assemblies
            </summary>
            <returns>IPBanService (if not found an exception is thrown)</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.RunCycleAsync(System.Threading.CancellationToken)">
            <summary>
            Manually run one cycle. This is called automatically, unless ManualCycle is true.
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.ResetMachineGuid(System.String)">
            <summary>
            Reset machine guid
            </summary>
            <param name="guid">Guid</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.AddIPAddressLogEvents(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressLogEvent})">
            <summary>
            Add an ip address log event
            </summary>
            <param name="events">IP address events</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.WriteConfigAsync(System.String)">
            <summary>
            Write a new config file. Virtual so tests can intercept the call without touching
            the on-disk config.
            </summary>
            <param name="xml">Xml of the new config file</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.ReadConfigAsync">
            <summary>
            Read configuration
            </summary>
            <returns>Configuration xml</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.ReadOverrideConfigAsync">
            <summary>
            Read override configuration
            </summary>
            <returns>Configuration override xml</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.Dispose">
            <summary>
            Stop the service, dispose of all resources
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.RunAsync(System.Threading.CancellationToken)">
            <summary>
            Initialize and start the service
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.Stop">
            <summary>
            Calls Dispose
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.WaitAsync(System.Int32)">
            <summary>
            Wait for service to stop
            </summary>
            <param name="timeoutMilliseconds">Timeout in milliseconds</param>
            <returns>True if service stopped, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.ReplaceUrl(System.String)">
            <summary>
            Replace place-holders in url with values from this service
            </summary>
            <param name="url">Url to replace</param>
            <returns>Replaced url</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.DB">
            <summary>
            Direct access to the database
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.FailedLoginAttempts">
            <summary>
            Get a list of ip address and failed login attempts
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.AddUpdater(DigitalRuby.IPBanCore.IUpdater)">
            <summary>
            Add an updater for each cycle
            </summary>
            <param name="updater">Updater</param>
            <returns>True if added, false if null or already in the list</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.TryGetUpdater``1(``0@)">
            <summary>
            Attempt to get an updater of a specific type
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="result">Updater or default(T) if not found</param>
            <returns>True if found, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.RemoveUpdater(DigitalRuby.IPBanCore.IUpdater)">
            <summary>
            Remove an updater
            </summary>
            <param name="updater">Updater</param>
            <returns>True if removed, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.RunFirewallTask``1(System.Func{``0,DigitalRuby.IPBanCore.IIPBanFirewall,System.Threading.CancellationToken,System.Threading.Tasks.Task},``0,System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.CreateAndStartIPBanTestService``1(System.String,System.String,System.String,System.Func{System.String,System.String},System.Boolean)">
            <summary>
            Create a test IPBanService
            </summary>
            <param name="directory">Root directory</param>
            <param name="configFileName">Config file name</param>
            <param name="defaultBannedIPAddressHandlerUrl">Url for banned ip handling or null to not handle banned ip</param>
            <param name="configFileModifier">Change config file (param are file text, returns new file text)</param>
            <param name="cleanup">Whether to cleanup files first before starting the service</param>
            <returns>Service</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.CleanupIPBanTestFiles">
            <summary>
            Cleanup test files
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.DisposeIPBanTestService(DigitalRuby.IPBanCore.IPBanService)">
            <summary>
            Dispose of an IPBanService created with CreateAndStartIPBanTestService
            </summary>
            <param name="service">Service to dispose</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.IsWhitelisted(System.String,System.String@)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.IsWhitelisted(DigitalRuby.IPBanCore.IPAddressRange,System.String@)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.AddLogScanner(DigitalRuby.IPBanCore.LogScannerOptions,System.Collections.Generic.ICollection{DigitalRuby.IPBanCore.ILogScanner})">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.GotStartUrl">
            <summary>
            Whether start url has been gotten
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.IPBanAssembly">
            <summary>
            IPBan Assembly
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.ConfigFilePath">
            <summary>
            Config file path
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.RequestMaker">
            <summary>
            Http request maker, defaults to DefaultHttpRequestMaker
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.Firewall">
            <summary>
            The firewall implementation - this will auto-detect if not set
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.DnsLookup">
            <summary>
            The dns implementation - defaults to DefaultDnsLookup
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.DnsList">
            <summary>
            The dns server list implementation - defaults to IPBanDnsServerList
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.IPThreatUploader">
            <summary>
            If an api key is specified in the IPThreatApiKey app setting
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.BannedIPAddressHandler">
            <summary>
            Extra handler for banned ip addresses (optional)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.FirewallCreator">
            <summary>
            Firewall creator
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.Config">
            <summary>
            Configuration
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.Whitelist">
            <summary>
            Whitelist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.Blacklist">
            <summary>
            Blacklist
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.ProcessExecutor">
            <summary>
            Execute process for ip address events
            </summary>
        </member>
        <member name="E:DigitalRuby.IPBanCore.IPBanService.ConfigChanged">
            <summary>
            Config changed event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.ConfigReaderWriter">
            <summary>
            Config reader/writer
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.ConfigOverrideReaderWriter">
            <summary>
            Config override reader/writer
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.Version">
            <summary>
            Version of the software
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.LocalIPAddressString">
            <summary>
            Local ip address
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.RemoteIPAddressString">
            <summary>
            Remote ip address
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.OtherIPAddressesString">
            <summary>
            Other ip addresses, comma separated
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.MachineGuid">
            <summary>
            Machine guid, null/empty for none
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.DatabasePath">
            <summary>
            Override the sqlite database path, leave null for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.IPBanDelegate">
            <summary>
            External delegate to allow external config, whitelist, blacklist, etc.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.MultiThreaded">
            <summary>
            Whether delegate callbacks and other tasks are multithreaded. Default is true. Set to false if unit or integration testing.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.ManualCycle">
            <summary>
            True if the cycle is manual, in which case RunCycle must be called periodically, otherwise if false RunCycle is called automatically.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.OSName">
            <summary>
            The operating system name. If null, it is auto-detected.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.OSVersion">
            <summary>
            The operating system version. If null, it is auto-detected.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.AppName">
            <summary>
            App name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.AssemblyVersion">
            <summary>
            Assembly version
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.EventViewer">
            <summary>
            Event viewer (null if not on Windows)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.UseWindowsEventViewer">
            <summary>
            Whether to link up to the Windows event viewer on Start
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.FirewallTypes">
            <summary>
            Firewall types, by default there are two:<br/>
            - Windows: Windows Firewall<br/>
            - Linux: FirewallD; NfTables; IPTables<br/>
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.CancelToken">
            <summary>
            Cancel token
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.UtcNow">
            <summary>
            Allows changing the current date time to facilitate testing of behavior over elapsed times. Set to default(DateTime) to revert to DateTime.UtcNow.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.IsRunning">
            <summary>
            Whether the service is currently running
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.Authorization">
            <summary>
            Authorization header for requests
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.BlockIPAddressesFileName">
            <summary>
            File name to write ip addresses to (one per line) to block the ip addresses in the file. Can comma separate each line and the second line will be a source of the ban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.UnblockIPAddressesFileName">
            <summary>
            File name to write ip addresses to (one per line) to unblock the ip addresses in the file
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanService.PendingLogEvents">
            <summary>
            Pending log events
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.LoadFirewall(DigitalRuby.IPBanCore.IPBanConfig)">
            <summary>
            Load firewall
            </summary>
            <param name="oldConfig">Old config</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.OnFirewallCreated">
            <summary>
            Fires when firewall is created. Firewall property.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.OnFirewallDisposing">
            <summary>
            Fires when firewall is about to be disposed. Firewall property.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.OnUpdate(System.Threading.CancellationToken)">
            <summary>
            OnUpdate
            </summary>
            <param name="cancelToken">Cancel token</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.LaunchUpdateBinary(System.String,System.String)">
            <summary>
            Launch the verified update binary. Virtual so tests can intercept the actual
            process launch without having to spawn a real subprocess on the host.
            </summary>
            <param name="tempFile">Path to the (already-written, hash-verified) update binary.</param>
            <param name="args">Command-line arguments to pass to the binary.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.GetUrl(DigitalRuby.IPBanCore.IPBanService.UrlType,System.Threading.CancellationToken)">
            <summary>
            Get url from config
            </summary>
            <param name="urlType">Type of url</param>
            <param name="cancelToken">Cancel token</param>
            <returns>Task of whether url get succeeded</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.ProcessPendingFailedLogins(System.Threading.CancellationToken)">
            <summary>
            Process all pending failed logins
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanService.ProcessPendingSuccessfulLogins(System.Threading.CancellationToken)">
            <summary>
            Process all pending successful logins
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanService.UrlType">
            <summary>
            Url type
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanService.UrlType.Start">
            <summary>
            Start
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanService.UrlType.Update">
            <summary>
            Update
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanService.UrlType.Stop">
            <summary>
            Stop
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanService.UrlType.Config">
            <summary>
            Config
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanService.UrlType.Connect">
            <summary>
            Connect
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanServiceRunner">
            <summary>
            IPBan service runner, assists with starting the service and make sure it runs
            properly if under a Windows service, systemd, etc.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.#ctor(System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task},System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task})">
            <summary>
            Constructor
            </summary>
            <param name="onRun">Action to execute for run</param>
            <param name="onStop">Action to execute on stop</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.RunAsync">
            <summary>
            Run the service
            </summary>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.SetupHostService(Microsoft.Extensions.Hosting.IHostBuilder)">
            <summary>
            Setup a host builder with Windows service, systemd or console lifetime as appropriate
            </summary>
            <param name="hostBuilder">Host builder</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.MainService(System.String[],System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task},System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task})">
            <summary>
            Run service helper method
            </summary>
            <param name="args">Args</param>
            <param name="onRun">Run</param>
            <param name="onStop">Stop</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.StartAsync(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.StopAsync(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.Shutdown">
            <summary>
            Shutdown the service
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanServiceRunner.ExecuteAsync(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IUpdater">
            <summary>
            Allows updating periodically
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IUpdater.Update(System.Threading.CancellationToken)">
            <summary>
            Update
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressEventType">
            <summary>
            IP address event types
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressEventType.None">
            <summary>
            No event
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressEventType.SuccessfulLogin">
            <summary>
            Successful login
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressEventType.Blocked">
            <summary>
            Blocked / banned ip address
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressEventType.Unblocked">
            <summary>
            Unblocked ip address
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressEventType.FailedLogin">
            <summary>
            Failed login
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressNotificationFlags">
            <summary>
            IP address notification flags
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.None">
            <summary>
            No event
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.SuccessfulLogin">
            <summary>
            Successful login
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.BlockedIPAddress">
            <summary>
            Blocked / banned ip address
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.UnblockedIPAddress">
            <summary>
            Unblocked ip address
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.FailedLogin">
            <summary>
            Failed login of matched user name
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.WhoIs">
            <summary>
            Notify whois for domains
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.DailyReport">
            <summary>
            Send daily report of all ip addresses
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.WeeklyReport">
            <summary>
            Send weekly report of all ip addresses
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.MonthlyReport">
            <summary>
            Send monthly report of all ip addresses
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.SuccessfulWebAdminLogin">
            <summary>
            Successful login to web admin
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPAddressNotificationFlags.All">
            <summary>
            All flags
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanUnblockIPAddressesUpdater">
            <summary>
            Unban ip addresses for any unban*.txt files
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUnblockIPAddressesUpdater.#ctor(DigitalRuby.IPBanCore.IIPAddressEventHandler,System.String)">
            <summary>
            Constructor
            </summary>
            <param name="service">Service</param>
            <param name="textFilePathMask">Path to text file / mask to unban ip addresses from</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUnblockIPAddressesUpdater.Dispose">
            <summary>
            Dispose
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUnblockIPAddressesUpdater.Update(System.Threading.CancellationToken)">
            <summary>
            Update - if the text file path exists, all ip addresses from each line will be unbanned
            </summary>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUnblockIPAddressesUpdater.UnblockIPAddresses(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Unblock ip addresses
            </summary>
            <param name="ipAddresses">IP addresses to unban</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanUriFirewallRule">
            <summary>
            Create a block firewall rule from ip addresses from a uri
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanUriFirewallRule.RulePrefix">
            <summary>
            Rule prefix
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanUriFirewallRule.Interval">
            <summary>
            Interval
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanUriFirewallRule.Uri">
            <summary>
            Uri
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanUriFirewallRule.MaxCount">
            <summary>
            Max count of ips that can be returned
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.#ctor(DigitalRuby.IPBanCore.IIPBanFirewall,DigitalRuby.IPBanCore.IFirewallTaskRunner,DigitalRuby.IPBanCore.IIsWhitelisted,DigitalRuby.IPBanCore.IHttpRequestMaker,System.String,System.TimeSpan,System.Uri,System.Int32)">
            <summary>
            Constructor
            </summary>
            <param name="firewall">Firewall</param>
            <param name="firewallTaskRunner">The firewall task runner (must not be null)</param>
            <param name="whitelistChecker">Whitelist checker (can be null)</param>
            <param name="httpRequestMaker">Http request maker for http uris (must not be null)</param>
            <param name="rulePrefix">Firewall rule prefix</param>
            <param name="interval">Interval to check uri for changes</param>
            <param name="uri">Uri, can be either file or http(s).</param>
            <param name="maxCount">Max count of ips that can come from the rule or less than or equal to 0 for infinite.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.Dispose">
            <summary>
            Cleanup all resources
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.ToString">
            <summary>
            Convert to a string
            </summary>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.GetHashCode">
            <summary>
            Get hash code for this uri firewall rule
            </summary>
            <returns>Hash code</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.Equals(System.Object)">
            <summary>
            Check if equal to another object
            </summary>
            <param name="obj">Other object</param>
            <returns>True if equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.Update(System.Threading.CancellationToken)">
            <summary>
            Update the updater
            </summary>
            <param name="cancelToken">Cancel token</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanUriFirewallRule.DeleteRule">
            <summary>
            Delete firewall rules that may have been created by this rule
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.ActionLockerAsync">
            <summary>
            Simple way to lock an Action or Func in an async lock
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ActionLockerAsync.LockActionAsync(System.Func{System.Threading.Tasks.Task},System.Threading.CancellationToken)">
            <summary>
            Lock an action around async acquisition of the lock
            </summary>
            <param name="action">Action to execute in a lock</param>
            <param name="cancelToken">Cancel token for acquiring the lock</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ActionLockerAsync.LockFunctionAsync``1(System.Func{System.Threading.Tasks.Task{``0}},System.Threading.CancellationToken)">
            <summary>
            Lock a func around async acquisition of the lock
            </summary>
            <param name="func">Func to execute in a lock</param>
            <param name="cancelToken">Cancel token for acquiring the lock</param>
            <returns>Task</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.AsyncQueue`1">
            <summary>
            An async, non-blocking queue. This class is thread safe.
            </summary>
            <typeparam name="T">Type of object in the queue</typeparam>
        </member>
        <member name="P:DigitalRuby.IPBanCore.AsyncQueue`1.IsDisposed">
            <summary>
            Whether <see cref="M:DigitalRuby.IPBanCore.AsyncQueue`1.Dispose"/> has been called. Public for testability.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncQueue`1.Dispose">
            <summary>
            Dispose. Idempotent and safe to call concurrently with Enqueue/Dequeue —
            post-dispose Enqueue calls become no-ops, post-dispose Dequeue returns (false, default).
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncQueue`1.EnqueueAsync(`0)">
            <summary>
            Add an item to the queue, causing TryDequeueAsync to return an item.
            No-op after Dispose.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncQueue`1.EnqueueRangeAsync(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Add many items to the queue, causing TryDequeueAsync to return for each item.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncQueue`1.TryDequeueAsync(System.Threading.CancellationToken)">
            <summary>
            Attempt to dequeue an item asynchronously
            </summary>
            <param name="cancellationToken"></param>
            <returns>Key value pair, key is true if item was dequeued, false otherwise. Value is the item or default(T) if not success</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncQueue`1.TryDequeueAsync(System.TimeSpan,System.Threading.CancellationToken)">
            <summary>
            Attempt to dequeue an item asynchronously
            </summary>
            <param name="timeout">Timeout, Timeout.InfiniteTimeSpan for none</param>
            <param name="cancellationToken"></param>
            <returns>Key value pair, key is true if item was dequeued, false otherwise. Value is the item or default(T) if not success</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.AsyncReaderWriterLock">
            <summary>
            Async compatible reader / writer lock based on https://stackoverflow.com/a/64757462/66372<br/>
            it doesn't have a lot of protection, so keep its usage simple i.e. blocks where try/finally can be used and no recursion can happen<br/>
            How it works:<br/>
             - in general, a reader/writer lock allows any amount of readers to enter the lock while only a single writer can do so. While the writer holds the lock, no reader can hold the lock<br/>
             - 2 semaphores + a count of readers in the lock are used to provide the above guarantees<br/>
             - to guarantee no new readers or writers can enter the lock while a writer is active, a write semaphore is used<br/>
               - both readers and writers acquire this semaphore first when trying to take the lock<br/>
               - readers release the semaphore just after acquiring the read lock, so more readers can enter the lock (so technically acquiring of readers locks do not happens in parallel)<br/>
             - to guarantee the writer does not enter the lock while there are still readers in the lock, a read semaphore is used<br/>
               - both the writer and the first reader acquire this semaphore when trying to take the lock. They do it *after* they hold the write semaphore<br/>
               - the last active reader holding the lock, releases the read semaphore. Note it does not need to be the reader that acquired it first.<br/>
               - to track a reader acquiring/releasing a lock is the first/last one, a reader count is tracked when acquiring/releasing the read lock.<br/>
             - cancellation tokens are supported so that readers/writers can abort while waiting for an active writer to finish its job.<br/>
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncReaderWriterLock.AcquireWriterLockAsync(System.Nullable{System.TimeSpan},System.Threading.CancellationToken)">
            <summary>
            Acquire writer lock
            </summary>
            <param name="timeout">Timeout</param>
            <param name="cancelToken">Cancel token</param>
            <returns>Task of disposable to dispose of the lock</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncReaderWriterLock.ReleaseWriterLock">
            <summary>
            Release writer lock
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncReaderWriterLock.AcquireReaderLockAsync(System.Nullable{System.TimeSpan},System.Threading.CancellationToken)">
            <summary>
            Acquire reader lock
            </summary>
            <param name="timeout">Timeout (null for infinite)</param>
            <param name="cancelToken">Cancel token</param>
            <returns>Task of disposable to dispose of the lock</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncReaderWriterLock.ReleaseReaderLock">
            <summary>
            Release reader lock
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.AsyncReaderWriterLock.Dispose">
            <summary>
            Dispose of all resources. Idempotent — safe to call multiple times. The Interlocked
            gate prevents a second call from re-disposing already-disposed semaphores, and the
            per-semaphore try/catch tolerates races with in-flight Wait/Release operations.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.BinaryExtensionMethods">
            <summary>
            BinaryWriter and BinaryReader extension methods
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.BinaryExtensionMethods.Write7BitEncodedInt32(System.IO.BinaryWriter,System.Int32)">
            <summary>
            Write 7 bit encoded int
            </summary>
            <param name="writer">BinaryWriter</param>
            <param name="value">Value</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.BinaryExtensionMethods.Read7BitEncodedInt32(System.IO.BinaryReader)">
            <summary>
            Read 7 bit encoded int
            </summary>
            <param name="reader">BinaryReader</param>
            <returns>Value</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.BinaryExtensionMethods.Write7BitEncodedInt64(System.IO.BinaryWriter,System.Int64)">
            <summary>
            Write 7 bit encoded long
            </summary>
            <param name="writer">BinaryWriter</param>
            <param name="value">Value</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.BinaryExtensionMethods.Read7BitEncodedInt64(System.IO.BinaryReader)">
            <summary>
            Read 7 bit encoded long
            </summary>
            <param name="reader">BinaryReader</param>
            <returns>Value</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.ByteArrayKey">
            <summary>
            Allows using byte array as a key
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="bytes">Bytes</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ByteArrayKey.#ctor(System.Byte[])">
            <summary>
            Allows using byte array as a key
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="bytes">Bytes</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.ByteArrayKey.Bytes">
            <summary>
            Bytes
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ByteArrayKey.Equals(System.Object)">
            <summary>
            Check if equal to other byte array key
            </summary>
            <param name="obj">Other byte array key</param>
            <returns>True if equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ByteArrayKey.op_Equality(DigitalRuby.IPBanCore.ByteArrayKey,DigitalRuby.IPBanCore.ByteArrayKey)">
            <summary>
            Equals
            </summary>
            <param name="r1">Bytes1</param>
            <param name="r2">Bytes2</param>
            <returns>True if equal</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ByteArrayKey.op_Inequality(DigitalRuby.IPBanCore.ByteArrayKey,DigitalRuby.IPBanCore.ByteArrayKey)">
            <summary>
            Not equals
            </summary>
            <param name="r1">Bytes1</param>
            <param name="r2">Bytes2</param>
            <returns>True if not equal</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ByteArrayKey.GetHashCode">
            <summary>
            Get hash code for the bytes
            </summary>
            <returns>Hash code</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.Core.Utility.CommandLineProcessor">
            <summary>
            Processor for command line
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Core.Utility.CommandLineProcessor.ProcessAsync(System.String[])">
            <summary>
            Processes the command line.
            </summary>
            <param name="args">Args</param>
            <returns>Exit code task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Core.Utility.CommandLineProcessor.AppendIpsUnique(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanDB.IPAddressEntry})">
            <summary>
            Appends the IPs to a file, avoiding duplicates (case-insensitive exact matches).
            Creates the file if it does not exist. Returns the number of IPs appended.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Core.Utility.CommandLineProcessor.AppendLinesUnique(System.String,System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Appends lines to a file, avoiding duplicates (case-insensitive exact matches).
            Creates the file if it does not exist. Returns the number of lines appended.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.DateTimeOffsetJsonConverter">
            <summary>
            DateTimeOffset converter
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.DateTimeOffsetJsonConverter.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.DateTimeOffsetJsonConverter.Write(System.Text.Json.Utf8JsonWriter,System.DateTimeOffset,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.ExtensionMethods">
            <summary>
            Extension methods for IPBan
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.ExtensionMethods.Utf8EncodingNoPrefix">
            <summary>
            UTF8 encoder without prefix bytes
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ThrowIfNull``1(``0,System.String,System.String)">
            <summary>
            Throw ArgumentNullException if obj is null
            </summary>
            <param name="obj">Object</param>
            <param name="name">Parameter name</param>
            <param name="message">Message</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ThrowArgumentExceptionIfNull``1(``0,System.String,System.String)">
            <summary>
            Throw ArgumentException if obj is null
            </summary>
            <param name="obj">Object</param>
            <param name="name">Parameter name</param>
            <param name="message">Message</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ThrowIfNullOrWhiteSpace(System.String,System.String,System.String)">
            <summary>
            Throw ArgumentNullException if obj is null or white space
            </summary>
            <param name="obj">Object</param>
            <param name="name">Parameter name</param>
            <param name="message">Message</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToStringInvariant(System.Object,System.String)">
            <summary>
            Convert an object to string using invariant culture
            </summary>
            <param name="obj">Object</param>
            <param name="defaultValue">Default value if null</param>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToStringUTF8(System.Byte[])">
            <summary>
            Convert utf-8 bytes to string
            </summary>
            <param name="bytes">Bytes</param>
            <returns>Utf-8 decoded string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToStringXml(System.Object)">
            <summary>
            Convert an object to an xml fragment
            </summary>
            <param name="obj">Object</param>
            <returns>Xml fragment or null if obj is null</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToStringIso8601(System.DateTime)">
            <summary>
            Convert DateTime to Iso8601 string with Z suffix
            </summary>
            <param name="dt">DateTime</param>
            <returns>Iso 8601 string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.UrlEncode(System.String)">
            <summary>
            Url encode a string
            </summary>
            <param name="text">String to url encode</param>
            <returns>Url encoded string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToLongInvariant(System.String)">
            <summary>
            Attempt to parse a long
            </summary>
            <param name="text">Text</param>
            <returns>Parsed long or 0 if failure</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUnsecureString(System.Security.SecureString)">
            <summary>
            Covnert a secure string to a non-secure string
            </summary>
            <param name="s">SecureString</param>
            <returns>Non-secure string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUnsecureBytes(System.Security.SecureString)">
            <summary>
            Convert a secure string to non-secure binary data using utf-8 encoding
            </summary>
            <param name="s">SecureString</param>
            <returns>Binary data</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToSecureString(System.String)">
            <summary>
            Convert a string to a secure string
            </summary>
            <param name="unsecure">Plain text string</param>
            <returns>SecureString</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToBytesUTF8(System.String)">
            <summary>
            Get utf-8 bytes from a string
            </summary>
            <param name="s">String</param>
            <returns>UTF8 bytes or null if s is null</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToSHA256String(System.String)">
            <summary>
            Get a sha256 hex string from a string
            </summary>
            <param name="s">String</param>
            <returns>Sha-256 hex string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToHexString(System.Byte[])">
            <summary>
            Convert bytes to hex string
            </summary>
            <param name="bytes">Bytes</param>
            <returns>Hex string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToBytesFromHex(System.String)">
            <summary>
            Convert hex string to bytes
            </summary>
            <param name="s">String in hex format</param>
            <returns>Bytes</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToHttpHeaderString(System.Object)">
            <summary>
            Convert an object to an http header value string
            </summary>
            <param name="obj">Object</param>
            <returns>Http header value string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToDateTimeUnixMilliseconds(System.Double)">
            <summary>
            Get a UTC date time from a unix epoch in milliseconds
            </summary>
            <param name="unixTimeStampMilliseconds">Unix epoch in milliseconds</param>
            <returns>UTC DateTime</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToDateTimeUnixMilliseconds(System.Int64)">
            <summary>
            Get a UTC date time from a unix epoch in milliseconds
            </summary>
            <param name="unixTimeStampMilliseconds">Unix epoch in milliseconds</param>
            <returns>UTC DateTime</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUnixMilliseconds(System.DateTime)">
            <summary>
            Get a unix timestamp in milliseconds from a DateTime - the DateTime will be converted to universal time before conversion if needed.
            </summary>
            <param name="dt">DateTime</param>
            <returns>Unix timestamp in milliseconds</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUnixMillisecondsLong(System.DateTime)">
            <summary>
            Get a unix timestamp in milliseconds from a DateTime - the DateTime will be converted to universal time before conversion if needed.
            </summary>
            <param name="dt">DateTime</param>
            <returns>Unix timestamp in milliseconds</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Clean(System.Net.IPAddress,System.Boolean)">
            <summary>
            Clean ip address - remove scope and convert to ipv4 if ipv6 mapped to ipv4
            </summary>
            <param name="ip">IP address</param>
            <param name="ownsIP">Whether this ip is owned by the caller</param>
            <returns>Cleaned ip address</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.EqualsWithMapToIPv6(System.Net.IPAddress,System.Net.IPAddress)">
            <summary>
            Check if two ip are equal, using MapToIPv6 if needed
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="other">Other ip address</param>
            <returns>True if ip are equal or equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.IsLocalHost(System.Net.IPAddress)">
            <summary>
            Gets whether the ip address is local host
            </summary>
            <param name="ip">IP address</param>
            <returns>True if localhost, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUInt32(System.Net.IPAddress,System.Boolean)">
            <summary>
            Get a UInt32 from an ipv4 address. By default, the UInt32 will be in the byte order of the CPU.
            </summary>
            <param name="ip">IPV4 address</param>
            <param name="swap">Whether to make the uint in the byte order of the cpu (true and default) or network host order (false)</param>
            <returns>UInt32</returns>
            <exception cref="T:System.InvalidOperationException">Not an ipv4 address</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUInt128(System.Net.IPAddress,System.Boolean)">
            <summary>
            Get a UInt128 from an ipv6 address. By default, the UInt128 will be in the byte order of the CPU.
            </summary>
            <param name="ip">IPV6 address</param>
            <param name="swap">Whether to make the byte order of the cpu (true and default) or network host order (false)</param>
            <returns>UInt128</returns>
            <exception cref="T:System.InvalidOperationException">Not an ipv6 address</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToUInt128Raw(System.Net.IPAddress)">
            <summary>
            Get a UInt128 from an ipv6 address. The UInt128 will use the raw bytes from the ip address as is.
            </summary>
            <param name="ip">IPV6 address</param>
            <returns>UInt128</returns>
            <exception cref="T:System.InvalidOperationException">Not an ipv6 address</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.TryIncrement(System.Net.IPAddress,System.Net.IPAddress@)">
            <summary>
            Increment an ip address
            </summary>
            <param name="ipAddress">Ip address to increment</param>
            <param name="result">Incremented ip address or null if failure</param>
            <returns>True if incremented, false if ip address was at max value</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.TryDecrement(System.Net.IPAddress,System.Net.IPAddress@)">
            <summary>
            Decrement an ip address
            </summary>
            <param name="ipAddress">Ip address to decrement</param>
            <param name="result">Decremented ip address or null if failure</param>
            <returns>True if decremented, false if ip address was at min value</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.CompareTo(System.Net.IPAddress,System.Net.IPAddress)">
            <summary>
            Compare two ip address for sort order
            </summary>
            <param name="ip1">First ip address</param>
            <param name="ip2">Second ip address</param>
            <returns>CompareTo result (negative less than, 0 equal, 1 greater than)</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.TryNormalizeIPAddress(System.String,System.String@)">
            <summary>
            Get a firewall ip address, clean and normalize
            </summary>
            <param name="ipAddress">IP address string</param>
            <param name="normalizedIP">The normalized ip string, ready to go in the firewall or null if invalid ip address</param>
            <returns>True if ip address can go in the firewall, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToIPAddress(System.String)">
            <summary>
            Get an ip address from a string.
            </summary>
            <param name="value">String</param>
            <returns>IPAddress or null if failure</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToIPAddress(System.UInt32,System.Boolean)">
            <summary>
            Get an ip address from a UInt32. By default, the value is assumed to be in the byte order of the CPU.
            </summary>
            <param name="value">UInt32</param>
            <param name="swap">Whether to swap to network host order if needed</param>
            <returns>IPAddress</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToIPAddress(DigitalRuby.IPBanCore.UInt128)">
            <summary>
            Get an ip address from a UInt128. The UInt128 is assumed to be in the byte order of the CPU.
            </summary>
            <param name="value">UInt128</param>
            <returns>IPAddress</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToIPAddressRaw(DigitalRuby.IPBanCore.UInt128)">
            <summary>
            Get an ip address from a UInt128. The UInt128 raw bytes are used as is.
            </summary>
            <param name="value">UInt128</param>
            <returns>IPAddress</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ToArray(System.IO.UnmanagedMemoryStream)">
            <summary>
            Convert UnmanagedMemoryStream to a byte array
            </summary>
            <param name="stream">UnmanagedMemoryStream</param>
            <returns>Byte array</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetString(System.Text.Json.JsonElement,System.String,System.String)">
            <summary>
            Attempt to get string
            </summary>
            <param name="elem">Element</param>
            <param name="name">Property name</param>
            <param name="defaultValue">Default if not found</param>
            <returns>String or null if not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetInt32(System.Text.Json.JsonElement,System.String,System.Int32)">
            <summary>
            Attempt to get int32
            </summary>
            <param name="elem">Element</param>
            <param name="name">Property name</param>
            <param name="defaultValue">Default value if not found</param>
            <returns>Int32</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetInt64(System.Text.Json.JsonElement,System.String,System.Int64)">
            <summary>
            Attempt to get int64
            </summary>
            <param name="elem">Element</param>
            <param name="name">Property name</param>
            <param name="defaultValue">Default value if not found</param>
            <returns>Int64</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetDateTime(System.Text.Json.JsonElement,System.String,System.DateTime)">
            <summary>
            Get datetime 
            </summary>
            <param name="elem">Element</param>
            <param name="name">Property name</param>
            <param name="defaultValue">Default value</param>
            <returns>DateTime or defaultValue if not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetBool(System.Text.Json.JsonElement,System.String,System.Boolean)">
            <summary>
            Get bool
            </summary>
            <param name="elem">Element</param>
            <param name="name">Property name</param>
            <param name="defaultValue">Default value if not found</param>
            <returns>Bool value or defaultValue if not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ParseTimeSpan(System.String)">
            <summary>
            Parse text into Timespan
            </summary>
            <param name="text">Text</param>
            <returns>TimeSpan or null if failure</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.ParseInt(System.String)">
            <summary>
            Parse text into an int
            </summary>
            <param name="text">Text</param>
            <returns>int or null if failure</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.SmallestTimeSpan(System.Nullable{System.TimeSpan},System.Nullable{System.TimeSpan},System.TimeSpan)">
            <summary>
            Get smallest timespan
            </summary>
            <param name="t1">First TimeSpan</param>
            <param name="t2">Second TimeSpan</param>
            <param name="defaultValue">Default if both t1 and t2 are null</param>
            <returns>Smallest TimeSpan or defaultValue if both t1 and t2 are null</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Clamp(System.TimeSpan,System.TimeSpan,System.TimeSpan)">
            <summary>
            Clamp a timespan, if out of bounds it will be clamped. If timespan is less than 1 second, it will be set to timeMax.
            </summary>
            <param name="value">Value to clamp</param>
            <param name="timeMin">Min value</param>
            <param name="timeMax">Max value</param>
            <returns>Clamped value or value if not clamped</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Clamp``1(``0,``0,``0,System.Boolean)">
            <summary>
            Generic clamp method. If clampTimeSpanToMax and typeof(T) is TimeSpan, any value less than 1 second will become max.
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="val">Value</param>
            <param name="min">Min value</param>
            <param name="max">Max value</param>
            <param name="clampSmallTimeSpanToMax">Whether to clamp small timespan to max value.</param>
            <returns>Clamped value</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.DeserializeJson``1(System.String)">
            <summary>
            Deserialize an object from string json
            </summary>
            <param name="json">Json</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.DeserializeJson``1(System.Byte[])">
            <summary>
            Deserialize an object from byte[] json
            </summary>
            <param name="json">Json</param>
            <returns>Object or default of T if exception</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.SerializeJson(System.Object)">
            <summary>
            Serialize an object to utf8 json
            </summary>
            <param name="obj">Object</param>
            <returns>String json</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.SerializeUtf8Json(System.Object)">
            <summary>
            Serialize an object to utf8 json
            </summary>
            <param name="obj">Object</param>
            <returns>Utf8 json</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.SerializeUtf8Json(System.Object,System.IO.Stream)">
            <summary>
            Serialize an object to utf8 json
            </summary>
            <param name="obj">Object</param>
            <param name="stream">Stream</param>
            <returns>Utf8 json</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetLockedEnumerator``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Get an enumerator that locks an object until enumeration is complete
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="obj">Object to lock during enumeration</param>
            <returns>Enumerator with lock, must Dispose to release lock</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.getuid">
            <summary>
            Get user id on Linux
            </summary>
            <returns>Uid</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.RequireAdministrator">
            <summary>
            Throw an exception if the process is not running as administrator (Windows) or root (Linux).
            </summary>
            <exception cref="T:System.InvalidOperationException">Application is not run as administrator</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.FileDeleteWithRetry(System.String,System.Int32,System.Int32)">
            <summary>
            Delete a file with retry
            </summary>
            <param name="path">Path to delete</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.FileCopyWithRetry(System.String,System.String,System.Int32,System.Int32)">
            <summary>
            Copy a file with retry
            </summary>
            <param name="sourceFile">Source file to move</param>
            <param name="destFile">Destination file to move to</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.FileMoveWithRetry(System.String,System.String,System.Int32,System.Int32)">
            <summary>
            Move a file with retry
            </summary>
            <param name="sourceFile">Source file to move</param>
            <param name="destFile">Destination file to move to</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.DirectoryMoveWithRetry(System.String,System.String,System.Int32,System.Int32)">
            <summary>
            Move a directory recursively with retry. Does nothing if sourceDir does not exist.
            </summary>
            <param name="sourceDir">Source directory</param>
            <param name="destDir">Destination directory</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.DirectoryDeleteWithRetry(System.String,System.Int32,System.Int32)">
            <summary>
            Delete directory recursively with retry for each file. Does nothing if dir does not exist.
            </summary>
            <param name="dir">Directory to delete</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.FileWriteAllTextWithRetry(System.String,System.String,System.Int32,System.Int32)">
            <summary>
            Write all file text with retry
            </summary>
            <param name="fileName">File name</param>
            <param name="text">Text</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.FileWriteAllTextWithRetryAsync(System.String,System.String,System.Int32,System.Int32)">
            <summary>
            Write all file text with retry
            </summary>
            <param name="fileName">File name</param>
            <param name="text">Text</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Retry(System.Action,System.Int32,System.Int32,System.Func{System.Exception,System.Boolean})">
            <summary>
            Attempt an action with retry and delay between failures. Throws an exception if all retry fails.
            </summary>
            <param name="action">Action</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
            <param name="exceptionRetry">Optional func to determine if exception should be retried</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.RetryAsync(System.Func{System.Threading.Tasks.Task},System.Int32,System.Int32,System.Func{System.Exception,System.Boolean})">
            <summary>
            Attempt an action with retry and delay between failures. Throws an exception if all retry fails.
            </summary>
            <param name="action">Action</param>
            <param name="millisecondsBetweenRetry">Milliseconds between each retry</param>
            <param name="retryCount">Retry count</param>
            <param name="exceptionRetry">Optional func to determine if exception should be retried</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.IsAnonymousType(System.Type)">
            <summary>
            Check if type is an anonymous type
            </summary>
            <param name="type">Type</param>
            <returns>True if anonymous type, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Sync(System.Threading.Tasks.Task)">
            <summary>
            Make a task execute synchronously
            </summary>
            <param name="task">Task</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Sync``1(System.Threading.Tasks.Task{``0})">
            <summary>
            Make a task execute synchronously
            </summary>
            <param name="task">Task</param>
            <returns>Result</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Sync(System.Threading.Tasks.ValueTask)">
            <summary>
            Make a task execute synchronously
            </summary>
            <param name="task">Task</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Sync``1(System.Threading.Tasks.ValueTask{``0})">
            <summary>
            Make a task execute synchronously
            </summary>
            <param name="task">Task</param>
            <returns>Result</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.WhenAll(System.Collections.Generic.IEnumerable{System.Threading.Tasks.ValueTask})">
            <summary>
            Wait for value tasks to complete
            </summary>
            <param name="tasks">Value tasks</param>
            <returns>Task that finishes when all value tasks have finished</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.WhenAll``1(System.Collections.Generic.IEnumerable{System.Threading.Tasks.ValueTask{``0}})">
            <summary>
            Wait for value tasks to complete
            </summary>
            <typeparam name="T">Type of value task</typeparam>
            <param name="tasks">Value tasks</param>
            <returns>Task that finishes when all value tasks have finished</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.AsTask(System.Threading.WaitHandle)">
            <summary>
            Async wait
            </summary>
            <param name="handle">Handle</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.AsTask(System.Threading.WaitHandle,System.TimeSpan)">
            <summary>
            Async wait
            </summary>
            <param name="handle">Handle</param>
            <param name="timeout">Timeout</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.RemoveDatabaseFiles(System.String)">
            <summary>
            Cleanup database files
            </summary>
            <param name="folder">Folder</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.RemoveScopeId(System.Net.IPAddress,System.Boolean)">
            <summary>
            Remove the scope id from the ip address if there is a scope id
            </summary>
            <param name="ipAddress">IP address to remove scope id from</param>
            <param name="ownsIP">Whether this ip is owned by the caller</param>
            <returns>This ip address if no scope id removed, otherwise a new ip address with scope removed if ownsIP is false, or the same ip
            with scope removed if ownsIP is true</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.MapToIPv4IfIPv6(System.Net.IPAddress)">
            <summary>
            Map ip address to ipv4 if it is an ipv6 address mapped to ipv4
            </summary>
            <param name="ip">IP address</param>
            <returns>IP address mapped to ipv4 if mapped to ipv4 in ipv6 format</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.RemoveInternalRanges(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Remove internal ip address ranges from the specified range
            </summary>
            <param name="range">IP address range</param>
            <returns>IP address ranges without any internal ip address ranges, will just contain range if no internal ip
            addresses are in range</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Combine(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange})">
            <summary>
            Combine IPAddressRange instances that are consecutive, ranges are assumed to be unqiue and sorted
            </summary>
            <param name="ranges">Ranges</param>
            <returns>Combined ranges</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.Invert(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Boolean)">
            <summary>
            Invert ip address ranges, the result is ranges that are every other ip address range except the provided ranges.
            Ranges must be sorted with duplicates removed
            </summary>
            <param name="ranges">Ranges</param>
            <param name="removeInternal">Whether to remove internal ranges</param>
            <returns>Inverted ip address ranges, in sorted order and combined where needed</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.NormalizeForQuery(System.String)">
            <summary>
            Normalize string for query
            </summary>
            <param name="s">String</param>
            <returns>Normalized string</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.GetEntriesMatchingPrefix``1(System.Collections.Generic.SortedList{System.String,``0},System.String)">
            <summary>
            Get all entries from sorted list that match a prefix
            </summary>
            <typeparam name="TValue">Type of value</typeparam>
            <param name="sortedList">Sorted list</param>
            <param name="prefix">Prefix to query, does not need to be normalized</param>
            <returns>All matching entries</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ExtensionMethods.PrettyPrint(System.Xml.XmlDocument)">
            <summary>
            Pretty print xml
            </summary>
            <param name="doc">Xml doc</param>
            <returns>Pretty printed xml</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IOUtility">
            <summary>
            IO utilities
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IOUtility.GetLines(System.String,System.Int32)">
            <summary>
            Get lines from file or url.
            </summary>
            <param name="fileNameOrUrl">File name or url</param>
            <param name="maxBytes">Max bytes or less than 1 for no limit</param>
            <returns>Lines or empty array if more than maxBytes returned and maxBytes &gt; 0</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IIPAddressProcessExecutor">
            <summary>
            Execute process for ip addresses
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IIPAddressProcessExecutor.Execute(System.String,System.Collections.Generic.IReadOnlyCollection{DigitalRuby.IPBanCore.IPAddressLogEvent},System.String,System.Action{System.Action})">
            <summary>
            Execute a process in background against ip addresses
            </summary>
            <param name="programToRun">Program to run</param>
            <param name="ipAddresses">IP addresses, should be a non-shared collection</param>
            <param name="appName">App name</param>
            <param name="taskRunner">Task runner</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressProcessExecutor">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressProcessExecutor.TokenizeArguments(System.String)">
            <summary>
            Tokenize an argument template into individual argv tokens, respecting double-quoted spans.
            We tokenize the *template* (config-supplied) once, then replace placeholders inside each
            token. This means an attacker-controlled username embedded as ###USERNAME### becomes a
            single argv entry no matter what characters it contains — it can never inject extra args.
            Public for testability; this is a pure function.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressProcessExecutor.CleanLogData(System.String)">
            <summary>
            Sanitize log data so embedded quotes / newlines can't disrupt downstream consumers.
            Public for testability — pure function.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressProcessExecutor.BuildStartInfo(System.String,System.String[],DigitalRuby.IPBanCore.IPAddressLogEvent,System.String)">
            <summary>
            Build a <see cref="T:System.Diagnostics.ProcessStartInfo"/> for the given IP/template combo.
            Each pre-tokenized argument template element becomes one entry in <c>ArgumentList</c> after
            placeholder substitution, so attacker-controlled values cannot inject extra argv slots.
            Public for testability; this is a pure function.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressProcessExecutor.Execute(System.String,System.Collections.Generic.IReadOnlyCollection{DigitalRuby.IPBanCore.IPAddressLogEvent},System.String,System.Action{System.Action})">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressProcessExecutor.TestIPAddressProcessExecutor">
            <summary>
            For testing only
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressProcessExecutor.TestIPAddressProcessExecutor.Ran">
            <summary>
            Whether the process was run
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressProcessExecutor.TestIPAddressProcessExecutor.Execute(System.String,System.Collections.Generic.IReadOnlyCollection{DigitalRuby.IPBanCore.IPAddressLogEvent},System.String,System.Action{System.Action})">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressRange">
            <summary>
            Represents a consecutive range of ip addresses
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressRange.IPAddressRangeJsonConverter">
            <summary>
            Converter for System.Text.Json to serialize IPAddressRange as a string (CIDR or Range)
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.IPAddressRangeJsonConverter.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.IPAddressRangeJsonConverter.Write(System.Text.Json.Utf8JsonWriter,DigitalRuby.IPBanCore.IPAddressRange,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.Bits.GetBitMaskLength(System.Byte[])">
            <summary>
            Counts the number of leading 1's in a bitmask.
            Returns null if value is invalid as a bitmask.
            </summary>
            <param name="bytes"></param>
            <returns></returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.Begin">
            <summary>
            Begin ip address
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.End">
            <summary>
            End ip address
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.Single">
            <summary>
            Gets whether this is a single ip address
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.#ctor">
            <summary>
            Creates an empty range object, equivalent to "0.0.0.0/0".
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.#ctor(System.Net.IPAddress,System.Boolean)">
            <summary>
            Creates a new range with the same start/end address (range of one)
            </summary>
            <param name="singleAddress">Single ip address</param>
            <param name="ownsIP">Whether this instance owns the ip object</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.#ctor(System.Net.IPAddress,System.Net.IPAddress,System.Boolean)">
            <summary>
            Create a new range from a begin and end address.
            Throws an exception if Begin comes after End, or the
            addresses are not in the same family.
            </summary>
            <param name="begin">Start ip address</param>
            <param name="end">End ip address</param>
            <param name="ownsIP">Whether this instance owns the start and end ip objects</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.#ctor(System.Net.IPAddress,System.Int32)">
            <summary>
            Creates a range from a base address and mask bits.
            This can also be used with <see cref="M:DigitalRuby.IPBanCore.IPAddressRange.SubnetMaskLength(System.Net.IPAddress)"/> to create a
            range based on a subnet mask.
            </summary>
            <param name="baseAddress"></param>
            <param name="maskLength"></param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.Contains(System.Net.IPAddress,System.Boolean)">
            <summary>
            Check if this ip address range contains an ip address
            </summary>
            <param name="ipAddress">The ip address to check for</param>
            <param name="clean">Whether to clean the ip address first before the check</param>
            <returns>True if ipaddress is in this range, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.Contains(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Check if an ip range is contained in this ip range
            </summary>
            <param name="range">IP range</param>
            <returns>True if range is contained in this ip range, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.Chomp(DigitalRuby.IPBanCore.IPAddressRange,DigitalRuby.IPBanCore.IPAddressRange@,DigitalRuby.IPBanCore.IPAddressRange@)">
            <summary>
            Computes difference of this ip address range with another range if range intersects this ip address range.
            </summary>
            <param name="range">IP address range to compute difference with</param>
            <param name="left">The resulting difference (inclusive) from the left part of the difference or null if no left part remaining</param>
            <param name="right">The resulting difference (inclusive) from the right part of the difference or null if no right part remaining</param>
            <returns>True if a chomp was performed, false otherwise</returns>
            <remarks>
            - If this range does not intersect the passed range, then left and right will be null, false is returned<br/>
            []<br/>
            - If the passed range is entirely contained in this range with room on both ends, then left and right will be the remaining ranges, true is returned<br/>
            [LEFT-RANGE XXXXXXXXXX RIGHT-RANGE]<br/>
            - If the passed range overlaps only the left part of this range, left will be null, right will be the remaining range, true is returned<br/>
            [XXXXXXXXXX RIGHT_RANGE]<br/>
            - If the passed range overlaps only the right part of this range, right will be null, left will be the remaining range, true is returned<br/>
            [LEFT-RANGE XXXXXXXXXX]<br/>
            - If the passed range exactly equals this range, left and right will be null, true is returned
            [XXXXXXXXXX]
            </remarks>
            <exception cref="T:System.InvalidOperationException">This address family not equal to range address family</exception>
            <exception cref="T:System.ApplicationException">Something went wrong processing the chomp</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.TryCombine(DigitalRuby.IPBanCore.IPAddressRange,DigitalRuby.IPBanCore.IPAddressRange@)">
            <summary>
            Attempt to combine this ip address range with another ip address range if they intersect.
            </summary>
            <param name="range">Other ip address range</param>
            <param name="combinedRange">Received combined range</param>
            <returns>True if this ip address range intersects the other range, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.Parse(System.String,System.Boolean)">
            <summary>
            Parse ip address
            </summary>
            <param name="ipRangeString">IP range string</param>
            <param name="throwException">True to throw exception if failure, false to return null</param>
            <returns>IPAddress range or null if failure and throwException is false</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.TryParse(System.String,DigitalRuby.IPBanCore.IPAddressRange@)">
            <summary>
            Try to parse an ip range string
            </summary>
            <param name="ipRangeString">IP range string</param>
            <param name="ipRange">Parsed ip range or null if failure to parse</param>
            <returns>True if ip range string is parsed successfully, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.TryCreateFromIPAddresses(System.Net.IPAddress[])">
            <summary>
            Return a combined ip address range of all ip addresses if all ip addresses are consecutive
            </summary>
            <param name="ips">IP addresses</param>
            <returns>IPAddressRange or null if ip addresses are not consecutive</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.TryCreateFromIPAddressRanges(DigitalRuby.IPBanCore.IPAddressRange[])">
            <summary>
            Return a combined ip address range of all ranges if all ranges are consecutive
            </summary>
            <param name="ranges">IP address ranges</param>
            <returns>IPAddressRange or null if ip address ranges are not consecutive</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.op_Implicit(DigitalRuby.IPBanCore.IPAddressRange)~System.String">
            <summary>
            Convert ip address range to string implicit
            </summary>
            <param name="range">Ip address range</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.op_Implicit(System.String)~DigitalRuby.IPBanCore.IPAddressRange">
            <summary>
            Convert ip address range to string implicit
            </summary>
            <param name="s">Ip address range string or null if failure to parse</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.op_Implicit(System.Net.IPAddress)~DigitalRuby.IPBanCore.IPAddressRange">
            <summary>
            Convert ip address range to string implicit
            </summary>
            <param name="ip">Ip address string or null if ip is null</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.SubnetMaskLength(System.Net.IPAddress)">
            <summary>
            Takes a subnetmask (eg, "255.255.254.0") and returns the CIDR bit length of that
            address. Throws an exception if the passed address is not valid as a subnet mask.
            </summary>
            <param name="subnetMask">The subnet mask to use</param>
            <returns></returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.GetEnumerator">
            <summary>
            Enumerate all ip addresses in this ip address range
            </summary>
            <returns>Enumerator of all ip addresses in this ip address range</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#IEnumerable#GetEnumerator">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.ToString(System.Char)">
            <summary>
            Returns the range in the format "begin-end", or as a single address if End is the same as Begin.
            </summary>
            <param name="separator">Separator</param>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.ToString">
            <summary>
            Returns the range as a string
            </summary>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.Equals(System.Object)">
            <summary>
            Check if this ip address range equals another object
            </summary>
            <param name="obj">Other object</param>
            <returns>True if equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.GetHashCode">
            <summary>
            Get a hash code for this ip address range
            </summary>
            <returns>Hash code</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.GetPrefixLength(System.Boolean)">
            <summary>
            Get prefix / cidr mask length
            </summary>
            <param name="throwException">True to throw exception if not a cidr subnet, false to return -1</param>
            <returns>Prefix / cidr mask length or -1 if not a cidr subnet and throwException is false</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.GetCount">
            <summary>
            Get the number of ip addresses in this range
            </summary>
            <returns>Number of ips in this range</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.ToCidrString(System.Boolean)">
            <summary>
            Returns a Cidr String if this matches exactly a Cidr subnet, otherwise a range string.
            </summary>
            <param name="displaySingleSubnet">Whether to display the cidr string even if this is a single ip address.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
            <summary>
            Constructor from enumerable of string ips
            </summary>
            <param name="items">String ips</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.AsEnumerable">
            <summary>
            Returns the input typed as IEnumerable&lt;IPAddress&gt;
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IReadOnlyDictionary{System#String,System#String}#Keys">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IReadOnlyDictionary{System#String,System#String}#Values">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IReadOnlyCollection{System#Collections#Generic#KeyValuePair{System#String,System#String}}#Count">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IReadOnlyDictionary{System#String,System#String}#Item(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IReadOnlyDictionary{System#String,System#String}#ContainsKey(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IReadOnlyDictionary{System#String,System#String}#TryGetValue(System.String,System.String@)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.System#Collections#Generic#IEnumerable{System#Collections#Generic#KeyValuePair{System#String,System#String}}#GetEnumerator">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressRange.CompareTo(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Compare to another ip address range
            </summary>
            <param name="other">Other ip address range</param>
            <returns>CompareTo result</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPV4Range">
            <summary>
            Range of ipv4 addresses
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPV4Range.Begin">
            <summary>
            Begin ip
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPV4Range.End">
            <summary>
            End ip
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.GetHashCode">
            <summary>
            Get hash code
            </summary>
            <returns>Hash code</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.Equals(System.Object)">
            <summary>
            Check for equality
            </summary>
            <param name="obj">Object</param>
            <returns>True if equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.op_Equality(DigitalRuby.IPBanCore.IPV4Range,DigitalRuby.IPBanCore.IPV4Range)">
            <summary>
            Equals
            </summary>
            <param name="r1">Range1</param>
            <param name="r2">Range2</param>
            <returns>True if equal</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.op_Inequality(DigitalRuby.IPBanCore.IPV4Range,DigitalRuby.IPBanCore.IPV4Range)">
            <summary>
            Not equals
            </summary>
            <param name="r1">Range1</param>
            <param name="r2">Range2</param>
            <returns>True if not equal</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.#ctor(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Constructor
            </summary>
            <param name="range">IPAddressRange</param>
            <exception cref="T:System.InvalidOperationException">Invalid address family</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.#ctor(System.UInt32)">
            <summary>
            Constructor
            </summary>
            <param name="single">Single value for both begin and end</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.#ctor(System.UInt32,System.UInt32)">
            <summary>
            Constructor
            </summary>
            <param name="begin">Begin</param>
            <param name="end">End</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.ToIPAddressRange">
            <summary>
            Convert to an ip address range
            </summary>
            <returns>IPAddressRange</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV4Range.CompareTo(DigitalRuby.IPBanCore.IPV4Range)">
            <summary>
            IComparer against another IPV4Range
            </summary>
            <param name="other">Other range</param>
            <returns></returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPV6Range">
            <summary>
            Range of ipv6 addresses
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPV6Range.Begin">
            <summary>
            Begin ip address
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPV6Range.End">
            <summary>
            End ip address
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.GetHashCode">
            <summary>
            Get hash code
            </summary>
            <returns>Hash code</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.Equals(System.Object)">
            <summary>
            Check for equality
            </summary>
            <param name="obj">Object</param>
            <returns>True if equal, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.op_Equality(DigitalRuby.IPBanCore.IPV6Range,DigitalRuby.IPBanCore.IPV6Range)">
            <summary>
            Equals
            </summary>
            <param name="r1">Range1</param>
            <param name="r2">Range2</param>
            <returns>True if equal</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.op_Inequality(DigitalRuby.IPBanCore.IPV6Range,DigitalRuby.IPBanCore.IPV6Range)">
            <summary>
            Not equals
            </summary>
            <param name="r1">Range1</param>
            <param name="r2">Range2</param>
            <returns>True if not equal</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.#ctor(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Constructor
            </summary>
            <param name="range">IPAddressRange</param>
            <exception cref="T:System.InvalidOperationException">Invalid address family</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.#ctor(DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Constructor
            </summary>
            <param name="single">Single value for both begin and end</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.#ctor(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Constructor
            </summary>
            <param name="begin">Begin</param>
            <param name="end">End</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.ToIPAddressRange">
            <summary>
            Conver to an ip address range
            </summary>
            <returns>IPAddressRange</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPV6Range.CompareTo(DigitalRuby.IPBanCore.IPV6Range)">
            <summary>
            IComparer against another IPV4Range
            </summary>
            <param name="other">Other range</param>
            <returns></returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.JsonGuidConverter">
            <summary>
            More compact guids for system.text.json
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonGuidConverter.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonGuidConverter.Write(System.Text.Json.Utf8JsonWriter,System.Guid,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.JsonSerializationHelper">
            <summary>
            Json serialization helper -- will serialize public fields.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.Deserialize``1(System.String)">
            <summary>
            Deserialize
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="json">Json text</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.Serialize``1(``0)">
            <summary>
            Serialize
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="obj">Object</param>
            <returns>Json text</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.Deserialize``1(System.IO.Stream)">
            <summary>
            Deserialize from stream
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="stream">Stream</param>
            <returns>Object</returns>
            <exception cref="T:System.ArgumentNullException">Stream is null</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.Deserialize(System.IO.Stream,System.Type)">
            <summary>
            Deserialize from stream
            </summary>
            <param name="stream">Stream</param>
            <param name="type">Type</param>
            <returns>Object</returns>
            <exception cref="T:System.ArgumentNullException">Stream is null</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.Serialize``1(``0,System.IO.Stream)">
            <summary>
            Serialize
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="obj">Object</param>
            <param name="stream">Stream</param>
            <exception cref="T:System.ArgumentNullException">Stream is null</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.DeserializeAsync``1(System.IO.Stream,System.Threading.CancellationToken)">
            <summary>
            Deserialize async
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="stream">Stream</param>
            <param name="cancel">Cancel token</param>
            <returns></returns>
            <exception cref="T:System.ArgumentNullException">Stream is null</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.SerializeAsync``1(``0,System.IO.Stream,System.Threading.CancellationToken)">
            <summary>
            Serialize 
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="obj">Object</param>
            <param name="stream">Stream</param>
            <param name="cancel">Cancel token</param>
            <returns>Task</returns>
            <exception cref="T:System.ArgumentNullException">Stream is null</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.DeserializeFromFile``1(System.String)">
            <summary>
            Deserialize from file
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="path">File path</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.DeserializeFromFile(System.String,System.Type)">
            <summary>
            Deserialize from file
            </summary>
            <param name="path">File path</param>
            <param name="type">Type</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.SerializeToFile``1(``0,System.String)">
            <summary>
            Serialize to file
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="obj">Object</param>
            <param name="path">Path</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.DeserializeFromFileAsync``1(System.String,System.Threading.CancellationToken)">
            <summary>
            Deserialize from file async
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="path">Path</param>
            <param name="cancel">Cancel token</param>
            <returns>Object</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.SerializeToFileAsync``1(``0,System.String,System.Threading.CancellationToken)">
            <summary>
            Serialize to file async
            </summary>
            <typeparam name="T">Type</typeparam>
            <param name="obj">Object</param>
            <param name="path">Path</param>
            <param name="cancel">Cancel token</param>
            <returns></returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonSerializationHelper.Canonicalize(System.String)">
            <summary>
            Normalize json by sorting object properties and removing whitespace.
            </summary>
            <param name="json">JSON</param>
            <returns>JSON</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.LevenshteinUnsafe">
            <summary>
            Measures the difference between two strings.
            Uses the Levenshtein string difference algorithm.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LevenshteinUnsafe.MaxInputLength">
            <summary>
            Maximum input length accepted for either string. Inputs longer than this are rejected
            to prevent unbounded stackalloc / CPU consumption on attacker-controlled values.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LevenshteinUnsafe.StackAllocThreshold">
            <summary>
            Threshold (in elements) below which we use stackalloc; at or above this we fall back
            to a heap-allocated buffer so we never blow the stack.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LevenshteinUnsafe.Distance(System.String,System.String)">
            <summary>
            Compares the two values to find the minimum Levenshtein distance.
            Thread safe.
            </summary>
            <returns>Difference. 0 complete match. -1 if either value1 or value2 is null, -2 if either value is too large.</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.LocalizedDisplayNameAttribute">
            <summary>
            Apply a localized display name to an object
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="resourceId">Resource id</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LocalizedDisplayNameAttribute.#ctor(System.String)">
            <summary>
            Apply a localized display name to an object
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="resourceId">Resource id</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.LockedEnumerable`1">
            <summary>
            Allows locking a collection during enumeration
            </summary>
            <typeparam name="T">Type of object being enumerated</typeparam>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LockedEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Constructor
            </summary>
            <param name="obj">Enumerable</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LockedEnumerable`1.System#Collections#Generic#IEnumerator{T}#Current">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.LockedEnumerable`1.Current">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LockedEnumerable`1.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LockedEnumerable`1.MoveNext">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LockedEnumerable`1.Reset">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.LogFileScanner">
            <summary>
            Scans a file periodically looking for patterns.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile">
            <summary>
            Represents a watched file from a log file scanner
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="fileName">File name</param>
            <param name="lastPosition">Last position scanned</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.#ctor(System.String,System.Int64)">
            <summary>
            Represents a watched file from a log file scanner
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="fileName">File name</param>
            <param name="lastPosition">Last position scanned</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.GetHashCode">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.FileName">
            <summary>
            File name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.LastPosition">
            <summary>
            Last scanned position
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.LastLength">
            <summary>
            Last file length
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogFileScanner.WatchedFile.IsBinaryFile">
            <summary>
            True if this is a binary file
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.#ctor(System.String,System.Int64,System.Int32,System.Text.Encoding,System.UInt16,System.Boolean,System.Action{System.String})">
            <summary>
            Create a log file scanner
            </summary>
            <param name="pathAndMask">File path and mask with glob syntax (i.e. /var/log/auth*.log)</param>
            <param name="maxFileSizeBytes">Max size of file (in bytes) before it is deleted or 0 for unlimited</param>
            <param name="fileProcessingIntervalMilliseconds">How often to process files, in milliseconds, less than 1 for manual processing, in which case <see cref="M:DigitalRuby.IPBanCore.LogFileScanner.Update"/> must be called as needed.</param>
            <param name="encoding">Encoding or null for utf-8. The encoding must either be single or variable byte, like ASCII, Ansi, utf-8, etc. UTF-16 and the like are not supported.</param>
            <param name="maxLineLength">Maximum line length before considering the file a binary file and failing</param>
            <param name="startAtBeginning">Whether to start scanning at beginning of file (true) or end (false)</param>
            <param name="processText">Callback for each line of text (can be null)</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.Dispose">
            <summary>
            Cleanup all resources
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.ToString">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.MatchesOptions(DigitalRuby.IPBanCore.LogScannerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.GetFiles(System.String,System.Boolean)">
            <summary>
            Get all files from a path and mask
            </summary>
            <param name="pathAndMask">Path and mask, this uses glob syntax. This should use forward slash only for dir separators</param>
            <param name="startAtBeginning">Whether to start reading at beginning of files (true) or end (false)</param>
            <returns>Found files</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.Update">
            <summary>
            Process the files, this is normally done on a timer, but if you have passed a 0 second
            processing interval to the constructor, you must call this manually
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogFileScanner.PathAndMask">
            <summary>
            The path and mask to scan
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.LogFileScanner.ProcessText">
            <summary>
            Handler to process text. As lines of log file are read, they are concatenated into a blob of text that always end in a newline.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.OnProcessText(System.String)">
            <summary>
            Process text. Text will always end in a newline.
            </summary>
            <param name="text">Text to process</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.NormalizeGlob(System.String,System.String@,System.String@)">
            <summary>
            Normalize a glob. This gets everything with the * character and after escaped properly.
            </summary>
            <param name="glob">Glob</param>
            <param name="dirPortion">Directory portion</param>
            <param name="globPortion">Glob portion</param>
            <returns>Normalized glob</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.LogFileScanner.Replay(System.String,System.String,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Replay a file being written to simulate regular logging
            </summary>
            <param name="sourceFile">Source file</param>
            <param name="destFile">Dest file</param>
            <param name="delay">Delay in ms before starting replay</param>
            <param name="cancelToken">Cancel token</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.LogLevel">
            <summary>
            Log levels
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Trace">
            <summary>
            Trace / Diagnostic
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Diagnostic">
            <summary>
            Trace / Diagnostic
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Debug">
            <summary>
            Debug
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Information">
            <summary>
            Information / Info
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Info">
            <summary>
            Information / Info
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Warning">
            <summary>
            Warning / Warn
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Warn">
            <summary>
            Warning / Warn
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Error">
            <summary>
            Error / Exception
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Exception">
            <summary>
            Error / Exception
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Critical">
            <summary>
            Critical / Fatal
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Fatal">
            <summary>
            Critical / Fatal
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.Off">
            <summary>
            Off / None
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.LogLevel.None">
            <summary>
            Off / None
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.Logger">
            <summary>
            IPBan logger. Will never throw exceptions.
            Currently the IPBan logger uses NLog internally, so make sure it is setup in your app.config file or nlog.config file.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.Logger.ConfigPath">
            <summary>
            Config file path
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.ResetConfigFile">
            <summary>
            Reset config file
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.WriteLogLevels(DigitalRuby.IPBanCore.LogLevel)">
            <summary>
            Log current log levels
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.GetNLogLevel(DigitalRuby.IPBanCore.LogLevel)">
            <summary>
            Map IPBan log level to NLog log level
            </summary>
            <param name="logLevel">IPBan log level</param>
            <returns>NLog log level</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.GetNLogLevel(Microsoft.Extensions.Logging.LogLevel)">
            <summary>
            Map Microsoft log level to NLog log level
            </summary>
            <param name="logLevel">Microsoft log level</param>
            <returns>NLog log level</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Fatal(System.String,System.Object[])">
            <summary>
            Log a fatal
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Fatal(System.Exception)">
            <summary>
            Log a fatal
            </summary>
            <param name="ex">Error</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Fatal(System.String,System.Exception)">
            <summary>
            Log a fatal
            </summary>
            <param name="text">Text</param>
            <param name="ex">Error</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Fatal(System.Exception,System.String,System.Object[])">
            <summary>
            Log a fatal
            </summary>
            <param name="ex">Error</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Fatal(System.Exception,System.DateTime,System.String,System.Object[])">
            <summary>
            Log a fatal
            </summary>
            <param name="ex">Error</param>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Critical(System.String,System.Object[])">
            <summary>
            Log a critical
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Critical(System.Exception)">
            <summary>
            Log a critical
            </summary>
            <param name="ex">Error</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Critical(System.String,System.Exception)">
            <summary>
            Log a critical
            </summary>
            <param name="text">Text</param>
            <param name="ex">Error</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Critical(System.Exception,System.String,System.Object[])">
            <summary>
            Log a critical
            </summary>
            <param name="ex">Error</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Critical(System.Exception,System.DateTime,System.String,System.Object[])">
            <summary>
            Log a critical
            </summary>
            <param name="ex">Error</param>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Error(System.String,System.Object[])">
            <summary>
            Log an error
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Error(System.Exception)">
            <summary>
            Log an error
            </summary>
            <param name="ex">Error</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Error(System.String,System.Exception)">
            <summary>
            Log an error
            </summary>
            <param name="text">Text</param>
            <param name="ex">Error</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Error(System.Exception,System.String,System.Object[])">
            <summary>
            Log an error
            </summary>
            <param name="ex">Error</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Error(System.Exception,System.DateTime,System.String,System.Object[])">
            <summary>
            Log an error
            </summary>
            <param name="ex">Error</param>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Warn(System.String,System.Object[])">
            <summary>
            Log a warn
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Warn(System.DateTime,System.String,System.Object[])">
            <summary>
            Log a warn
            </summary>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Info(System.String,System.Object[])">
            <summary>
            Log an info
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Info(System.DateTime,System.String,System.Object[])">
            <summary>
            Log an info
            </summary>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Debug(System.String,System.Object[])">
            <summary>
            Log a debug
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Debug(System.DateTime,System.String,System.Object[])">
            <summary>
            Log a debug
            </summary>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Trace(System.String,System.Object[])">
            <summary>
            Log a trace
            </summary>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Trace(System.DateTime,System.String,System.Object[])">
            <summary>
            Log a trace
            </summary>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Log(DigitalRuby.IPBanCore.LogLevel,System.String,System.Object[])">
            <summary>
            Write to the log
            </summary>
            <param name="level">Log level</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.Logger.Log(DigitalRuby.IPBanCore.LogLevel,System.DateTime,System.String,System.Object[])">
            <summary>
            Write to the log
            </summary>
            <param name="level">Log level</param>
            <param name="ts">Timestamp</param>
            <param name="text">Text with format</param>
            <param name="args">Format args</param>
        </member>
        <member name="E:DigitalRuby.IPBanCore.Logger.OnLog">
            <summary>
            OnLog event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.Logger.Instance">
            <summary>
            Internal access to the logger
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPAddressLogEvent">
            <summary>
            Information about an ip address from a log entry
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressLogEvent.#ctor(System.String,System.String,System.String,System.Int32,DigitalRuby.IPBanCore.IPAddressEventType,System.DateTime,System.Boolean,System.String,System.Int32,DigitalRuby.IPBanCore.LogLevel,System.String,DigitalRuby.IPBanCore.IPAddressNotificationFlags,System.Nullable{System.TimeSpan},System.Boolean)">
            <summary>
            Constructor
            </summary>
            <param name="ipAddress">IP address</param>
            <param name="userName">User name</param>
            <param name="source">Source</param>
            <param name="count">How many messages were aggregated, 1 for no aggregation</param>
            <param name="type">Event type</param>
            <param name="timestamp">Timestamp of the event, default for current timestamp</param>
            <param name="external">Whether this log came from an external source</param>
            <param name="extraInfo">Extra info, if any</param>
            <param name="failedLoginThreshold">Failed login threshold or 0 for default</param>
            <param name="logLevel">Log level when the event is logged</param>
            <param name="logData">Log data, if any</param>
            <param name="notificationFlags">Notification flags</param>
            <param name="minimumTimeBetweenLogins">Minimum time between logins</param>
            <param name="isTest">True for a test event, false for a live event</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPAddressLogEvent.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.IPAddress">
            <summary>
            IP address
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.UserName">
            <summary>
            User name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.Source">
            <summary>
            Source
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.Count">
            <summary>
            How many messages were aggregated, 1 for no aggregation. Can be set to 0 if count is unknown or from an external source.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.External">
            <summary>
            Whether this event was from an external source
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.ExtraInfo">
            <summary>
            Extra info from the event, if any
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.Timestamp">
            <summary>
            Timestamp of the event
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.Type">
            <summary>
            Event flag
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.FailedLoginThreshold">
            <summary>
            Failed login threshold or 0 for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.MinimumTimeBetweenLogins">
            <summary>
            Minimum time between logins or null for default
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.LogLevel">
            <summary>
            Log level
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.LogData">
            <summary>
            Log data, if any
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.NotificationFlags">
            <summary>
            Notification flags
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPAddressLogEvent.IsTest">
            <summary>
            Whether this is a test event
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetworkUtility">
            <summary>
            Network utility methods
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.FirstIPV4">
            <summary>
            First ipv4
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.LastIPV4">
            <summary>
            Last ipv4
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.InternalRangesIPV4">
            <summary>
            IPV4 internal ranges
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.PublicRangesIPV4">
            <summary>
            Public ranges ipv4
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.FirstIPV6">
            <summary>
            First iPV6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.LastIPV6">
            <summary>
            Last IPV6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.InternalRangesIPV6">
            <summary>
            Internal IPV6 ranges
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.PublicRangesIPV6">
            <summary>
            Public ranges ipv6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetworkUtility.PublicRangesAll">
            <summary>
            All public ranges as comma separated string
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetworkUtility.IsInternal(System.Net.IPAddress)">
            <summary>
            An extension method to determine if an IP address is internal, as specified in RFC1918
            </summary>
            <param name="ip">The IP address that will be tested</param>
            <returns>Returns true if the IP is internal or null, false if it is external</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetworkUtility.GetLocalDnsServers">
            <summary>
            Get the local configured dns servers for this machine from all network interfaces
            </summary>
            <returns>All dns servers for this local machine</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetworkUtility.GetMacAddress">
            <summary>
            Get computer mac address in hex.
            </summary>
            <returns>Mac address or empty string if no network adapter found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetworkUtility.GetIPAddressesByPriority">
            <summary>
            Get all ips of local machine, in priority order.
            On Windows, priority is first attempted to be read using the 'Interface Metric' from adapter properties.
             If this is not able to read, then the routing table priority is used.
            On Linux, priority is currently ignored.
            </summary>
            <returns>All ips of local machine (key) and priority (value). Higher priority are sorted first.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetworkUtility.TryGetInterfaceMetric(System.String,System.Boolean,System.Int32@)">
            <summary>
            Attempt to retrieve the interface metric from an adapter id. Currently only works on Windows.
            </summary>
            <param name="adapterId">Adapter id</param>
            <param name="ipv4">Is this an ipv4 or ipv6 adapter?</param>
            <param name="metric">The result interface metric or 0 if not found</param>
            <returns>True if interface metric was retrieved, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetworkUtility.GetSortedIPAddresses(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.Int32}},System.Boolean)">
            <summary>
            Get all ip addresses of the machine, in sorted order,
            putting external ipv4 first,
            then external ipv6,
            then priority,
            then internal ipv4,
            then internal ipv6,
            then finally by ip itself
            </summary>
            <param name="ipAddresses">The ip addresses to sort, or null to query the hardware on the machine</param>
            <param name="preferInternal">Whether to prefer internal ip addresses</param>
            <returns>IP addresses</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.OSUtility">
            <summary>
            Operating system utility methods
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.OSUtility.Unknown">
            <summary>
            Unknown operating system
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.OSUtility.Windows">
            <summary>
            Windows
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.OSUtility.Linux">
            <summary>
            Linux
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.OSUtility.Mac">
            <summary>
            Macintosh / OS 10+
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.Name">
            <summary>
            Operating system name (i.e. Windows, Linux or OSX)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.CpuArchitecture">
            <summary>
            Operating system cpu architecture (i.e. x86 or x64)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.Version">
            <summary>
            Operating system version
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.FriendlyName">
            <summary>
            Operating system friendly/code name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.Description">
            <summary>
            Operating system description
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.LinuxPackageManager">
            <summary>
            Get the Linux package manager , either "apt" or "dnf". If not Linux, returns empty string.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.SoftwareVersion">
            <summary>
            Get ipban software version
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.OSInfo">
            <summary>
            Get a string representing the operating system
            </summary>
            <returns>String</returns>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.FQDN">
            <summary>
            Fully qualified domain name
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.GetMemoryUsage(System.Int64@,System.Int64@)">
            <summary>
            Get memory usage
            </summary>
            <param name="totalMemory">Total system memory in bytes</param>
            <param name="availableMemory">Available system memory in bytes</param>
            <returns></returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.GetDiskUsage(System.Int64@,System.Int64@)">
            <summary>
            Get aggregate disk usage
            </summary>
            <param name="totalStorage">Total storage possible for all drives</param>
            <param name="availableStorage">Total storage available for all drives</param>
            <returns>True if storage was able to be retrieved, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.GetCpuUsage(System.Single@)">
            <summary>
            Attempt to determine current cpu usage.
            </summary>
            <param name="percentUsed">Percent of all cpu resources currently in use, 0.0-1.0</param>
            <returns>True if cpu usage could be determined, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.GetNetworkUsage(System.Single@)">
            <summary>
            Get system network usage
            </summary>
            <param name="percentUsed">Percent of system network used, 0-1</param>
            <returns>True if network usage could be determined, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.GetDiskIopsUsage(System.Single@)">
            <summary>
            Get current percentage of max iops used
            </summary>
            <param name="percentUsed">Percent of max iops used (0-1, maximum number determined from each drive)</param>
            <returns>True if max iops percented could be determined, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.StartProcessAndWait(System.String,System.String,System.Int32[])">
            <summary>
            Easy way to execute processes. If the process has not finished after 60 seconds, it is forced killed.
            </summary>
            <param name="program">Program to run</param>
            <param name="args">Arguments</param>
            <param name="allowedExitCodes">Allowed exit codes, if null or empty it is not checked, otherwise a mismatch will throw an exception.</param>
            <returns>Output</returns>
            <exception cref="T:System.ApplicationException">Exit code did not match allowed exit codes</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.StartProcessAndWait(System.Int32,System.String,System.String,System.Int32[])">
            <summary>
            Easy way to execute processes. If the process has not finished after timeoutMilliseconds, it is forced killed.
            </summary>
            <param name="timeoutMilliseconds">Timeout in milliseconds</param>
            <param name="program">Program to run</param>
            <param name="args">Arguments</param>
            <param name="allowedExitCodes">Allowed exit codes, if null or empty it is not checked, otherwise a mismatch will throw an exception.</param>
            <returns>Output</returns>
            <exception cref="T:System.ApplicationException">Exit code did not match allowed exit codes</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.StartProcessAndWait(System.String,System.String,System.Int32@,System.Int32[])">
            <summary>
            Easy way to execute processes. If the process has not finished after 60 seconds, it is forced killed.
            </summary>
            <param name="program">Program to run</param>
            <param name="args">Arguments</param>
            <param name="exitCode">Receives the exit code</param>
            <param name="allowedExitCodes">Allowed exit codes, if null or empty it is not checked, otherwise a mismatch will throw an exception.</param>
            <returns>Output</returns>
            <exception cref="T:System.ApplicationException">Exit code did not match allowed exit codes</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.StartProcessAndWait(System.Int32,System.String,System.String,System.Int32@,DigitalRuby.IPBanCore.LogLevel,System.Int32[])">
            <summary>
            Easy way to execute processes. If the process has not finished after timeoutMilliseconds, it is forced killed.
            </summary>
            <param name="timeoutMilliseconds">Timeout in milliseconds</param>
            <param name="program">Program to run</param>
            <param name="args">Arguments</param>
            <param name="exitCode">Receives the exit code</param>
            <param name="logLevel">Log level</param>
            <param name="allowedExitCodes">Allowed exit codes, if null or empty it is not checked, otherwise a mismatch will throw an exception.</param>
            <returns>Output</returns>
            <exception cref="T:System.ApplicationException">Exit code did not match allowed exit codes</exception>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.UserIsActiveCacheTime">
            <summary>
            The amount of time to cache the users found in the <see cref="M:DigitalRuby.IPBanCore.OSUtility.UserIsActive(System.String)"/> method.
            Default is 1 day.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.UserIsActive(System.String)">
            <summary>
            Check if a user name is active on the local machine
            </summary>
            <param name="userName">User name to check</param>
            <returns>True if user name is active, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.FileExistsWithFallbackAndRetryAsync(System.String)">
            <summary>
            Attempt to determine if a file exists. Unlike System.IO.File.Exists, this method will throw an
            exception if there is a fatal error attempting to determine if the file exists.
            </summary>
            <param name="path">File path</param>
            <returns>True if file exists, false if not</returns>
            <exception cref="T:System.Exception">Error determining if file exists throw from File.OpenRead</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.OSUtility.AddAppDomainExceptionHandlers(System.AppDomain)">
            <summary>
            Add app domain exception handlers
            </summary>
            <param name="domain">Appdomain</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsWindows">
            <summary>
            Are we on Windows?
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsLinux">
            <summary>
            Are we on Linux?
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsMac">
            <summary>
            Are we on Mac?
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsWindows7OrServer2008">
            <summary>
            Determine if system is Windows 7 or Windows Server 2008 - these systems tend to have a lot of hacks
            and work-arounds that are needed, especially for windows filtering platform
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsWindows8OrServer2012">
            <summary>
            Determine if system is Windows 8 or Windows Server 2012 - these systems are unable to log
            ip addresses is NLA is enabled
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsWindows8OrServer2012OrNewer">
            <summary>
            Is OS windows 8 or server 2012 or newer?
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsWindows10OrServer2016OrNewer">
            <summary>
            Is OS windows 10 or server 2016 or newer?
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.OSUtility.IsWindows11OrServer2022OrNewer">
            <summary>
            Is OS windows 11 or server 2022 or newer?
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute">
            <summary>
            Mark a class as requiring a specific operating system
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="os">OS (IPBanOS.*) or null/empty if none</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.#ctor(System.String)">
            <summary>
            Mark a class as requiring a specific operating system
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="os">OS (IPBanOS.*) or null/empty if none</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.RequiredOS">
            <summary>
            The required operating system (IPBanOS.*)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.Priority">
            <summary>
            Priority - higher priority are preferred when registering firewalls.
            Set to less than 0 to not include in regular firewall injection.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.MajorVersionMinimum">
            <summary>
            Major version minimum. Set to 0 or less to ignore.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.MinorVersionMinimum">
            <summary>
            Minor version minimum. Set to 0 or less to ignore.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.FallbackFirewallType">
            <summary>
            Optional fallback firewall type if the constructor fails
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.RequireEnvironmentVariable">
            <summary>
            Require an environment variable to exist (key=value syntax)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.PriorityEnvironmentVariable">
            <summary>
            Priority environment variable to override priority (key=value syntax)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.RequiredOperatingSystemAttribute.IsMatch">
            <summary>
            Whether the current OS is a match for this attribute
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.PortRange">
            <summary>
            Represents a range of ports
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.PortRange.PortRangeJsonConverter">
            <summary>
            Converter for System.Text.Json to serialize PortRange as a string
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.PortRangeJsonConverter.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.PortRangeJsonConverter.Write(System.Text.Json.Utf8JsonWriter,DigitalRuby.IPBanCore.PortRange,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.PortRange.MinPort">
            <summary>
            Min port, inclusive
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PortRange.MaxPort">
            <summary>
            Max port, inclusive
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.PortRange.IsValid">
            <summary>
            Return whether the range is valid
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.#ctor(System.Int32)">
            <summary>
            Constructor
            </summary>
            <param name="port">Set min and max to this port</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.#ctor(System.Int32,System.Int32)">
            <summary>
            Constructor
            </summary>
            <param name="minPort">Min port</param>
            <param name="maxPort">Max port</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.GetHashCode">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.ToString">
            <summary>
            ToString
            </summary>
            <returns>String or null if invalid range</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_Implicit(DigitalRuby.IPBanCore.PortRange)~System.String">
            <summary>
            Convert port range to string implicitly.
            </summary>
            <param name="range">Port range</param>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.Contains(System.Int32)">
            <summary>
            Check if port range contains a port
            </summary>
            <param name="port">Port</param>
            <returns>True if contains the port, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.Parse(System.String)">
            <summary>
            Parse a port range from a string. If parsing fails, min port will be -1.
            </summary>
            <param name="s">String</param>
            <returns>PortRange</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.ParseRanges(System.String)">
            <summary>
            Parse a list of port ranges (comma separated)
            </summary>
            <param name="ranges">Port ranges string</param>
            <returns>Parsed port ranges or empty array if parse fail</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.CompareTo(DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_Implicit(System.String)~DigitalRuby.IPBanCore.PortRange">
            <summary>
            Parse port range from string implicitly. If parsing fails, min port will be -1.
            </summary>
            <param name="s">Port range string</param>
            <returns>PortRange</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_Equality(DigitalRuby.IPBanCore.PortRange,DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_Inequality(DigitalRuby.IPBanCore.PortRange,DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_LessThan(DigitalRuby.IPBanCore.PortRange,DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_LessThanOrEqual(DigitalRuby.IPBanCore.PortRange,DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_GreaterThan(DigitalRuby.IPBanCore.PortRange,DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.PortRange.op_GreaterThanOrEqual(DigitalRuby.IPBanCore.PortRange,DigitalRuby.IPBanCore.PortRange)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.ProcessUtility">
            <summary>
            Process utilities to execute a process that is detached from main process
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ProcessUtility.CreateDetachedProcess(System.String,System.String)">
            <summary>
            Create a detached process
            </summary>
            <param name="fileName">File name to execute (full path)</param>
            <param name="arguments">Arguments</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ProcessUtility.BuildAtJobBody(System.String,System.String)">
            <summary>
            Build the shell command body that gets piped into `at` (or any compatible scheduler)
            to launch <paramref name="fileName"/> via sudo. fileName is wrapped in single quotes
            so any spaces, semicolons, backticks, or `$()` in the path are inert literals when
            /bin/sh later runs the spooled job. Public for testability — pure function with no
            side effects, safe to call cross-platform.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.ProcessUtility.BashEscape(System.String)">
            <summary>
            Shell-escape a value for safe inclusion inside a single-quoted bash string.
            Wraps the value in single quotes and replaces any embedded single quote with '\''
            (close-quote, escaped quote, reopen-quote) — the canonical bash idiom.
            Public for testability; this is a pure function.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.SqliteDB">
            <summary>
            Sqlite database
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.SqliteDB.SqliteDataReaderWrapper">
            <summary>
            Sqlite data reader wrapper
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="db">Db</param>
            <param name="conn">Connection</param>
            <param name="reader">Reader</param>
            <param name="closeConn">True to auto close connection</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.SqliteDataReaderWrapper.#ctor(DigitalRuby.IPBanCore.SqliteDB,Microsoft.Data.Sqlite.SqliteConnection,Microsoft.Data.Sqlite.SqliteDataReader,System.Boolean)">
            <summary>
            Sqlite data reader wrapper
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="db">Db</param>
            <param name="conn">Connection</param>
            <param name="reader">Reader</param>
            <param name="closeConn">True to auto close connection</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.SqliteDataReaderWrapper.Dispose">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.SqliteDB.SqliteDataReaderWrapper.Reader">
            <summary>
            Reader
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction">
            <summary>
            Wraps a transaction
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction.#ctor(DigitalRuby.IPBanCore.SqliteDB,Microsoft.Data.Sqlite.SqliteConnection,System.Boolean)">
            <summary>
            Constructor
            </summary>
            <param name="db">Db</param>
            <param name="conn">Connection</param>
            <param name="disposeConnection">True to auto dispose connection</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction.Finalize">
            <summary>
            Finalizer
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction.Dispose">
            <summary>
            Close transaction and connection. If transaction has not been rolled back, it is committed
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction.Rollback">
            <summary>
            Rollback the transaction then calls Dispose
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction.DBConnection">
            <summary>
            Connection
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.SqliteDB.SqliteDBTransaction.DBTransaction">
            <summary>
            Transactino
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.SqliteDB.TransactionLevel">
            <summary>
            Default transaction level
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.SqliteDB.InMemoryConnection">
            <summary>
            In memory connection, mainly for testing
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.SqliteDB.ConnectionString">
            <summary>
            Connection string
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.ExecuteNonQuery(System.String,System.Object[])">
            <summary>
            Execute non query
            </summary>
            <param name="cmdText">Command text</param>
            <param name="parameters">Parameters</param>
            <returns>Number of rows modified</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.ExecuteNonQueryIgnoreExceptions(System.String,System.Object[])">
            <summary>
            Execute non query and eat exceptions
            </summary>
            <param name="cmdText">Command text</param>
            <param name="parameters">Parameters</param>
            <returns>Number of rows modified</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.ExecuteNonQuery(System.String,Microsoft.Data.Sqlite.SqliteConnection,Microsoft.Data.Sqlite.SqliteTransaction,System.Object[])">
            <summary>
            Execute non query
            </summary>
            <param name="cmdText">Command text</param>
            <param name="conn">Connection</param>
            <param name="tran">Transaction</param>
            <param name="parameters">Parameters</param>
            <returns>Number of rows modified</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.ExecuteScalar``1(System.String,``0@,System.Object[])">
            <summary>
            Execute scalar
            </summary>
            <typeparam name="T">Type of scalar</typeparam>
            <param name="cmdText">Command text</param>
            <param name="result">Result</param>
            <param name="parameters">Parameters</param>
            <returns>True if value, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.ExecuteScalar``1(System.String,Microsoft.Data.Sqlite.SqliteConnection,Microsoft.Data.Sqlite.SqliteTransaction,``0@,System.Object[])">
            <summary>
            Execute scalar
            </summary>
            <typeparam name="T">Type of scalar</typeparam>
            <param name="cmdText">Command text</param>
            <param name="conn">Connection</param>
            <param name="tran">Transaction</param>
            <param name="result">Result</param>
            <param name="parameters">Parameters</param>
            <returns>True if value, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.ExecuteReader(System.String,Microsoft.Data.Sqlite.SqliteConnection,Microsoft.Data.Sqlite.SqliteTransaction,System.Boolean,System.Object[])">
            <summary>
            Execute reader
            </summary>
            <param name="cmdText">Query text</param>
            <param name="conn">Connection</param>
            <param name="tran">Transaction</param>
            <param name="rollbackTransactionIfException">Whether to rollback transaction if there is an exception</param>
            <param name="parameters">Parameters</param>
            <returns>Data reader</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.CreateConnection">
            <summary>
            Create a connection
            </summary>
            <returns>Connection</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.OpenConnection(Microsoft.Data.Sqlite.SqliteConnection)">
            <summary>
            Open a connection
            </summary>
            <param name="conn">Connection</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.CloseConnection(Microsoft.Data.Sqlite.SqliteConnection)">
            <summary>
            Close a connection
            </summary>
            <param name="conn">Connection</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.OnInitialize">
            <summary>
            Initialize db, derived class should call base first
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.#ctor(System.String,System.String)">
            <summary>
            Constructor
            </summary>
            <param name="dbPath">Database full path or just the file name. Can use SqliteDB.DbPathInMemory for in memory db.</param>
            <param name="additionalPragmas">Pragma statements for new connection (semi-colon delimited), or null for none</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.Dispose">
            <summary>
            Cleanup all resources
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.BeginTransaction">
            <summary>
            Begin a transaction
            </summary>
            <returns>Transaction</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.CommitTransaction(System.Object)">
            <summary>
            Commit a transaction
            </summary>
            <param name="transaction">Transaction</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.SqliteDB.RollbackTransaction(System.Object)">
            <summary>
            Rollback a transaction. If the transaction is already commited, nothing happens.
            </summary>
            <param name="transaction">Transaction to rollback</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.StringSet">
            <summary>
            Stores a set of strings in a memory efficient way using disk and caching
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.#ctor(System.String,System.Boolean)">
            <summary>
            Constructor
            </summary>
            <param name="name">Name of the set - must only have valid file chars</param>
            <param name="autoDelete">True to delete the backing file on close</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.Dispose">
            <summary>
            Dispose of all resources, does not delete the database file
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.Clear">
            <summary>
            Delete all strings from the set
            </summary>
            <returns>Number of cleared strings</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.GetCount">
            <summary>
            Get the count of all strings in the set
            </summary>
            <returns>Count</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.Contains(System.String)">
            <summary>
            Check if a string exists in the set
            </summary>
            <param name="text">String</param>
            <returns>True if exists, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.Add(System.String)">
            <summary>
            Add a string to the set. If you have many to add, call AddMany.
            </summary>
            <param name="text">String to add</param>
            <returns>True if added, false if already exists</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.Delete(System.String)">
            <summary>
            Delete a string from the set. If you have many to remove, call DeleteMany.
            </summary>
            <param name="text">String to remove</param>
            <returns>True if removed, false if not exists</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.Enumerate">
            <summary>
            Get all strings
            </summary>
            <returns>Strings</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.AddMany(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Add strings to the set, more efficient than add one by one
            </summary>
            <param name="texts"></param>
            <returns>Count of newly added strings</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.StringSet.DeleteMany(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Delete strings from the set, more efficient than delete one by one
            </summary>
            <param name="texts">Strings to delete</param>
            <returns>Number of deleted strings</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.TempFile">
            <summary>
            A temp file
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.TempFile.TempDirectory">
            <summary>
            Gets the full path of the temp directory used for storing temporary files.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.#ctor(System.String)">
            <summary>
            Constructor. Creates the file name but does not create the file itself.
            </summary>
            <param name="name">File name without path (null to generate one)</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.Finalize">
            <summary>
            Finalizer (calls Dispose)
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.ToString">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.op_Implicit(DigitalRuby.IPBanCore.TempFile)~System.String">
            <summary>
            Implicit conversion to string (full path)
            </summary>
            <param name="tempFile">Temp file</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.GetTempFileName">
            <summary>
            Get temp file name with full path. The file is not created, just the name is generated. Caller is responsible for deleting the file when done.
            </summary>
            <returns>Temp file name</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.TempFile.DeleteTempDirectory">
            <summary>
            Deletes the TempDirectory.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.TempFile.FullName">
            <summary>
            Full path to the temp file
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.UInt128">
            <summary>
            A 128 bit unsigned integer.
            </summary>
            <remarks>
            Creates a value using two 64 bit values.
            </remarks>
            <param name="mostSignificant">The most significant 64 bits of the value.</param>
            <param name="leastSignificant">The least significant 64 bits of the value.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.#ctor(System.UInt64,System.UInt64)">
            <summary>
            A 128 bit unsigned integer.
            </summary>
            <remarks>
            Creates a value using two 64 bit values.
            </remarks>
            <param name="mostSignificant">The most significant 64 bits of the value.</param>
            <param name="leastSignificant">The least significant 64 bits of the value.</param>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UInt128.SizeOf">
            <summary>
            The number of bytes this type will take.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UInt128.MinValue">
            <summary>
            The minimum UInt128 value.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UInt128.MaxValue">
            <summary>
            The maximum value of this type.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UInt128.Zero">
            <summary>
            A Zero UInt128 value.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UInt128.One">
            <summary>
            A One UInt128 value.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.#ctor(System.Numerics.BigInteger)">
            <summary>
            Conversion of a <see cref="T:System.Numerics.BigInteger"/> object to an unsigned 128-bit integer value.
            </summary>
            <param name="value">The value to convert to an unsigned 128-bit integer.</param>
            <exception cref="T:System.OverflowException">The <paramref name="value"/> parameter represents a number less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>.</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Explicit(System.Numerics.BigInteger)~DigitalRuby.IPBanCore.UInt128">
            <summary>
            Defines an explicit conversion of a <see cref="T:System.Numerics.BigInteger"/> object to an unsigned 128-bit integer value.
            </summary>
            <param name="value">The value to convert to an unsigned 128-bit integer.</param>
            <returns>The 128 bit value created by equivalent to <paramref name="value"/>.</returns>
            <exception cref="T:System.OverflowException">The <paramref name="value"/> parameter represents a number less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>.</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Implicit(DigitalRuby.IPBanCore.UInt128@)~System.Numerics.BigInteger">
            <summary>
            Converts the 128 bits unsigned integer to a <see cref="T:System.Numerics.BigInteger"/>.
            </summary>
            <param name="value">The 128 bit value to convert.</param>
            <returns>The <see cref="T:System.Numerics.BigInteger"/> value converted from the 128 bit value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Implicit(System.UInt64)~DigitalRuby.IPBanCore.UInt128">
            <summary>
            Converts a 64 bit unsigned integer to a 128 bit unsigned integer by taking all the 64 bits.
            </summary>
            <param name="value">The 64 bit value to convert.</param>
            <returns>The 128 bit value created by taking all the 64 bits of the 64 bit value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Explicit(DigitalRuby.IPBanCore.UInt128@)~System.UInt64">
            <summary>
            Converts the 128 bits unsigned integer to a 64 bits unsigned integer.
            </summary>
            <param name="value">The 128 bit value to convert.</param>
            <returns>The 64 bit value converted from the 128 bit value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)">
            <summary>
            Converts the string representation of a number in a specified style and culture-specific format to its <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent.
            </summary>
            <param name="value">A string that contains a number to convert.</param>
            <param name="style">
            A bitwise combination of the enumeration values that specify the permitted format of value.
            </param>
            <param name="provider">An object that provides culture-specific formatting information about <paramref name="value"/>.</param>
            <returns>A value that is equivalent to the number specified in the value parameter.</returns>
            <exception cref="T:System.ArgumentException"><paramref name="style"/> is not a <see cref="T:System.Globalization.NumberStyles"/> value or <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowHexSpecifier"/> or <see cref="F:System.Globalization.NumberStyles.HexNumber"/> flag along with another value.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="value"/> is null.</exception>
            <exception cref="T:System.FormatException"><paramref name="value"/> does not comply with the input pattern specified by <paramref name="style"/>.</exception>
            <exception cref="T:System.OverflowException">The <paramref name="value"/> parameter represents a number less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>.</exception>
            <remarks>
            The <paramref name="style"/> parameter defines the style elements 
            (such as white space, the positive or negative sign symbol, the group separator symbol, or the decimal point symbol) 
            that are allowed in the <paramref name="value"/> parameter for the parse operation to succeed. 
            <paramref name="style"/> must be a combination of bit flags from the <see cref="T:System.Globalization.NumberStyles"/> enumeration. 
            The <paramref name="style"/> parameter makes this method overload useful when <paramref name="value"/> contains the string representation of a hexadecimal value, 
            when the number system (decimal or hexadecimal) represented by value is known only at run time, or when you want to disallow white space or a sign symbol in value.
            <para>Depending on the value of <paramref name="style"/>, the <paramref name="value"/> parameter may include the following elements:</para>
            <para>[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]</para>
            <para>If <paramref name="style"/> includes <see cref="F:System.Globalization.NumberStyles.AllowHexSpecifier"/>, the <paramref name="value"/> parameter may include the following elements:</para>
            <para>[ws]hexdigits[ws]</para>
            <para>Elements in square brackets ([ and ]) are optional. The following table describes each element.</para>
              <list type="table">
                <listheader>
                  <term>Element</term>
                  <description>Description</description>
                </listheader>
                <item>
                  <term>ws</term>
                  <description>
                  Optional white space. 
                  White space can appear at the start of value if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowLeadingWhite"/> flag, 
                  and it can appear at the end of value if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowTrailingWhite"/> flag.
                  </description>
                </item>
                <item>
                  <term>$</term>
                  <description>
                  A culture-specific currency symbol. 
                  Its position in the string is defined by the <see cref="P:System.Globalization.NumberFormatInfo.CurrencyNegativePattern"/> and <see cref="P:System.Globalization.NumberFormatInfo.CurrencyPositivePattern"/> properties of the culture indicated by the <paramref name="provider"/> parameter. 
                  The current culture's currency symbol can appear in value if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowCurrencySymbol"/> flag.
                  </description>
                </item>
                <item>
                  <term>sign</term>
                  <description>
                  An optional sign. 
                  The sign can appear at the start of <paramref name="value"/> if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowLeadingSign"/> flag, 
                  and it can appear at the end of <paramref name="value"/> if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowTrailingSign"/> flag. 
                  Parentheses can be used in <paramref name="value"/> to indicate a negative value if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowParentheses"/> flag. 
                  </description>
                </item>
                <item>
                  <term>digits, fractional_digits, exponential_digits</term>
                  <description>A sequence of digits from 0 through 9. A sequence of digits from 0 through 9. For fractional_digits, only the digit 0 is valid.</description>
                </item>
                <item>
                  <term>,</term>
                  <description>
                  A culture-specific group separator symbol. 
                  The group separator symbol of the culture specified by <paramref name="provider"/> can appear in <paramref name="value"/> if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowThousands"/> flag.
                  </description>
                </item>
                <item>
                  <term>.</term>
                  <description>
                  A culture-specific decimal point symbol. 
                  The decimal point symbol of the culture designated by <paramref name="provider"/> can appear in <paramref name="value"/> if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowDecimalPoint"/> flag. 
                  Only the digit 0 can appear as a fractional digit for the parse operation to succeed; 
                  if fractional_digits includes any other digit, a <see cref="T:System.FormatException"/> is thrown.
                  </description>
                </item>
                <item>
                  <term>E</term>
                  <description>
                  The "e" or "E" character, which indicates that the value is represented in exponential (scientific) notation. 
                  The <paramref name="value"/> parameter can represent a number in exponential notation if <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowExponent"/> flag.
                  </description>
                </item>
                <item>
                  <term>hexdigits</term>
                  <description>A sequence of hexadecimal digits from 0 through f, or 0 through F.</description>
                </item>
              </list>
            If you use the <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/> method to round-trip the string representation of a <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value that was output by the <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> method, 
            you should use the <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> method with the "R" format specifier to generate the string representation of the <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value. 
            Otherwise, the string representation of the <see cref="T:DigitalRuby.IPBanCore.UInt128"/> preserves only the 50 most significant digits of the original value, and data may be lost when you use the <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/>  method to restore the <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value.
            <note>
            Unlike the other <see cref="T:System.Globalization.NumberStyles"/> values, which allow for but do not require the presence of particular style elements in <paramref name="value"/>, 
            the <see cref="F:System.Globalization.NumberStyles.AllowHexSpecifier"/> style value means that the individual numeric characters in <paramref name="value"/> are always interpreted as hexadecimal characters. 
            Valid hexadecimal characters are 0-9, A-F, and a-f. 
            The only other flags that can be combined with the <paramref name="style"/> parameter are <see cref="F:System.Globalization.NumberStyles.AllowLeadingWhite"/> and <see cref="F:System.Globalization.NumberStyles.AllowTrailingWhite"/>. 
            (The <see cref="T:System.Globalization.NumberStyles"/> enumeration includes a composite number style, <see cref="F:System.Globalization.NumberStyles.HexNumber"/>, that includes both white-space flags.)
            </note>
            <note>
            If <paramref name="value"/> is the string representation of a hexadecimal number, it cannot be preceded by any decoration (such as 0x or &amp;h) that differentiates it as a hexadecimal number. 
            This causes the conversion to fail.
            </note>
            If <paramref name="value"/> is a hexadecimal string, the <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/> method interprets <paramref name="value"/> as a negative number stored by using two's complement representation if its first two hexadecimal digits are greater than or equal to 0x80. 
            In other words, the method interprets the highest-order bit of the first byte in <paramref name="value"/> as the sign bit. 
            To make sure that a hexadecimal string is correctly interpreted as a positive number, the first digit in <paramref name="value"/> must have a value of zero. 
            For example, the method interprets 0x80 as a negative value, but it interprets either 0x080 or 0x0080 as a positive value. 
            <para>
            The <paramref name="provider"/> parameter is an <see cref="T:System.IFormatProvider"/> implementation. 
            Its <see cref="M:System.IFormatProvider.GetFormat(System.Type)"/> method returns a <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides culture-specific information about the format of value. 
            Typically, <paramref name="provider"/> can be any one of the following: 
            <list type="bullet">
              <item>
              A <see cref="T:System.Globalization.CultureInfo"/> object that represents the culture that provides numeric formatting information. 
              Its <see cref="M:System.Globalization.CultureInfo.GetFormat(System.Type)"/> method returns the <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides numeric formatting information.
              </item>
              <item>A <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides formatting information. (Its implementation of <see cref="M:System.Globalization.NumberFormatInfo.GetFormat(System.Type)"/> just returns itself.)</item>
              <item>
              A custom object that implements <see cref="T:System.IFormatProvider"/> and uses the <see cref="M:System.IFormatProvider.GetFormat(System.Type)"/> method 
              to instantiate and return the <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides formatting information.
              </item>
            </list>
            If <paramref name="provider"/> is <see langword="null"/>, the <see cref="T:System.Globalization.NumberFormatInfo"/> object for the current culture is used.
            </para>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.IFormatProvider)">
            <summary>
            Converts the string representation of a number in a specified culture-specific format to its <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent.
            Uses <see cref="F:System.Globalization.NumberStyles.Integer"/> style.
            </summary>
            <param name="value">A string that contains a number to convert.</param>
            <param name="provider">An object that provides culture-specific formatting information about <paramref name="value"/>.</param>
            <returns>A value that is equivalent to the number specified in the value parameter.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="value"/> is null.</exception>
            <exception cref="T:System.OverflowException">The <paramref name="value"/> parameter represents a number less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>.</exception>
            <remarks>
            See important remarks in <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles)">
            <summary>
            Converts the string representation of a number in a specified style to its <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent.
            Uses <see cref="P:System.Globalization.CultureInfo.CurrentCulture"/> as the format provider.
            </summary>
            <param name="value">A string that contains a number to convert.</param>
            <param name="style"> A bitwise combination of the enumeration values that specify the permitted format of value.</param>
            <returns>A value that is equivalent to the number specified in the value parameter.</returns>
            <exception cref="T:System.ArgumentException"><paramref name="style"/> is not a <see cref="T:System.Globalization.NumberStyles"/> value or <paramref name="style"/> includes the <see cref="F:System.Globalization.NumberStyles.AllowHexSpecifier"/> or <see cref="F:System.Globalization.NumberStyles.HexNumber"/> flag along with another value.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="value"/> is null.</exception>
            <exception cref="T:System.FormatException"><paramref name="value"/> does not comply with the input pattern specified by <paramref name="style"/>.</exception>
            <exception cref="T:System.OverflowException">The <paramref name="value"/> parameter represents a number less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>.</exception>
            <remarks>
            See important remarks in <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String)">
            <summary>
            Converts the string representation of a number in a specified style to its <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent.
            Uses <see cref="F:System.Globalization.NumberStyles.Integer"/> style.
            Uses <see cref="P:System.Globalization.CultureInfo.CurrentCulture"/> as the format provider.
            </summary>
            <param name="value">A string that contains a number to convert.</param>
            <returns>A value that is equivalent to the number specified in the value parameter.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="value"/> is null.</exception>
            <exception cref="T:System.OverflowException">The <paramref name="value"/> parameter represents a number less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>.</exception>
            <remarks>
            See important remarks in <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Tries to convert the string representation of a number in a specified style and culture-specific format to its <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent, 
            and returns a value that indicates whether the conversion succeeded.
            </summary>
            <param name="value">The string representation of a number. The string is interpreted using the style specified by <paramref name="style"/>.</param>
            <param name="style">
            A bitwise combination of enumeration values that indicates the style elements that can be present in <paramref name="value"/>. 
            A typical value to specify is <see cref="F:System.Globalization.NumberStyles.Integer"/>.
            </param>
            <param name="provider">An object that supplies culture-specific formatting information about <paramref name="value"/>.</param>
            <param name="result">
            When this method returns, contains the <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent to the number that is contained in value, or <see cref="F:DigitalRuby.IPBanCore.UInt128.Zero"/> if the conversion failed. 
            The conversion fails if the value parameter is <see langword="null"/>, is not in a format that is compliant with <paramref name="style"/> or represents a number that is less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>. 
            This parameter is passed uninitialized.</param>
            <returns>true if the <paramref name="value"/> parameter was converted successfully; otherwise, false.</returns>
            <remarks>
            The <see cref="M:DigitalRuby.IPBanCore.UInt128.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,DigitalRuby.IPBanCore.UInt128@)"/> method is like the <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/> method, 
            except that it does not throw an exception if the conversion fails. 
            This method eliminates the need to use exception handling to test for a <see cref="T:System.FormatException"/> if <paramref name="value"/> is invalid and cannot be parsed successfully.
            <para>For more information see <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/></para>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.TryParse(System.String,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Tries to convert the string representation of a number to its <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent, 
            and returns a value that indicates whether the conversion succeeded.
            </summary>
            <param name="value">The string representation of a number.</param>
            <param name="result">
            When this method returns, contains the <see cref="T:DigitalRuby.IPBanCore.UInt128"/> equivalent to the number that is contained in value, or <see cref="F:DigitalRuby.IPBanCore.UInt128.Zero"/> if the conversion failed. 
            The conversion fails if the value parameter is <see langword="null"/> or represents a number that is less than <see cref="F:DigitalRuby.IPBanCore.UInt128.MinValue"/> or greater than <see cref="F:DigitalRuby.IPBanCore.UInt128.MaxValue"/>. 
            This parameter is passed uninitialized.</param>
            <returns>true if the <paramref name="value"/> parameter was converted successfully; otherwise, false.</returns>
            <remarks>
            The <see cref="M:DigitalRuby.IPBanCore.UInt128.TryParse(System.String,DigitalRuby.IPBanCore.UInt128@)"/> method is like the <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String)"/> method, 
            except that it does not throw an exception if the conversion fails. 
            This method eliminates the need to use exception handling to test for a <see cref="T:System.FormatException"/> if <paramref name="value"/> is invalid and cannot be parsed successfully.
            <para>For more information see <see cref="M:DigitalRuby.IPBanCore.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider)"/></para>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Equals(DigitalRuby.IPBanCore.UInt128)">
            <summary>
            Returns true iff the two values represent the same value.
            </summary>
            <param name="other">The value to compare to.</param>
            <returns>True iff the two values represent the same value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.EqualsIn(DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the two values represent the same value. With in operator.
            </summary>
            <param name="other">The value to compare to.</param>
            <returns>True iff the two values represent the same value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Equals(System.Object)">
            <summary>
            Indicates whether this instance and a specified object are equal.
            </summary>
            <returns>
            true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.
            </returns>
            <param name="obj">Another object to compare to. </param><filterpriority>2</filterpriority>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.CompareTo(DigitalRuby.IPBanCore.UInt128)">
            <summary>
            Compares the current object with another object of the same type.
            </summary>
            <returns>
            A value that indicates the relative order of the objects being compared.
            The return value has the following meanings:
            Less than zero - This object is less than the <paramref name="other"/>.
            parameter.Zero - This object is equal to <paramref name="other"/>.
            Greater than zero - This object is greater than <paramref name="other"/>. 
            </returns>
            <param name="other">An object to compare with this object.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.CompareToIn(DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Compares the current object with another object of the same type. With in keyword
            </summary>
            <returns>
            A value that indicates the relative order of the objects being compared.
            The return value has the following meanings:
            Less than zero - This object is less than the <paramref name="other"/>.
            parameter.Zero - This object is equal to <paramref name="other"/>.
            Greater than zero - This object is greater than <paramref name="other"/>. 
            </returns>
            <param name="other">An object to compare with this object.</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Equality(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the two values represent the same value.
            </summary>
            <param name="value1">The first value to compare.</param>
            <param name="value2">The second value to compare.</param>
            <returns>True iff the two values represent the same value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Inequality(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the two values represent different values.
            </summary>
            <param name="value1">The first value to compare.</param>
            <param name="value2">The second value to compare.</param>
            <returns>True iff the two values represent different values.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_LessThan(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the first value is smaller than the second value.
            </summary>
            <param name="value1">The first value to compare.</param>
            <param name="value2">The second value to compare.</param>
            <returns>True iff the first value is smaller than the second value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_GreaterThan(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the first value is greater than the second value.
            </summary>
            <param name="value1">The first value to compare.</param>
            <param name="value2">The second value to compare.</param>
            <returns>True iff the first value is greater than the second value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_LessThanOrEqual(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the first value is smaller than or equal to the second value.
            </summary>
            <param name="value1">The first value to compare.</param>
            <param name="value2">The second value to compare.</param>
            <returns>True iff the first value is smaller than  or equal to the second value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_GreaterThanOrEqual(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Returns true iff the first value is greater than or equal to the second value.
            </summary>
            <param name="value1">The first value to compare.</param>
            <param name="value2">The second value to compare.</param>
            <returns>True iff the first value is greater than  or equal to the second value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_RightShift(DigitalRuby.IPBanCore.UInt128@,System.Int32)">
            <summary>
            Shifts its first operand right by the number of bits specified by its second operand.
            </summary>
            <param name="value">The value to shift.</param>
            <param name="numberOfBits">The number of bits to shift.</param>
            <returns>The value after it was shifted by the given number of bits.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_LeftShift(DigitalRuby.IPBanCore.UInt128@,System.Int32)">
            <summary>
            Shifts its first operand left by the number of bits specified by its second operand.
            </summary>
            <param name="value">The value to shift.</param>
            <param name="numberOfBits">The number of bits to shift.</param>
            <returns>The value after it was shifted by the given number of bits.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.RightShift(DigitalRuby.IPBanCore.UInt128@,System.Int32)">
            <summary>
            Shifts its first operand right by the number of bits specified by its second operand.
            </summary>
            <param name="value">The value to shift.</param>
            <param name="numberOfBits">The number of bits to shift.</param>
            <returns>The value after it was shifted by the given number of bits.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.LeftShift(DigitalRuby.IPBanCore.UInt128@,System.Int32)">
            <summary>
            Shifts its first operand left by the number of bits specified by its second operand.
            </summary>
            <param name="value">The value to shift.</param>
            <param name="numberOfBits">The number of bits to shift.</param>
            <returns>The value after it was shifted by the given number of bits.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_BitwiseAnd(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Bitwise ands between two values.
            </summary>
            <param name="value1">The first value to do bitwise and.</param>
            <param name="value2">The second value to do bitwise and.</param>
            <returns>The two values after they were bitwise anded.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.BitwiseAnd(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Bitwise ands between two values.
            </summary>
            <param name="value1">The first value to do bitwise and.</param>
            <param name="value2">The second value to do bitwise and.</param>
            <returns>The two values after they were bitwise anded.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_BitwiseOr(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Bitwise ors between two values.
            </summary>
            <param name="value1">The first value to do bitwise or.</param>
            <param name="value2">The second value to do bitwise or.</param>
            <returns>The two values after they were bitwise ored.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.BitwiseOr(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Bitwise ors between two values.
            </summary>
            <param name="value1">The first value to do bitwise or.</param>
            <param name="value2">The second value to do bitwise or.</param>
            <returns>The two values after they were bitwise ored.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Addition(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Sums the given values and returns the sum.
            </summary>
            <param name="value1">The first value to sum.</param>
            <param name="value2">The second value to sum.</param>
            <returns>The sum of the given values.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Add(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Sums the given values and returns the sum.
            </summary>
            <param name="value1">The first value to sum.</param>
            <param name="value2">The second value to sum.</param>
            <returns>The sum of the given values.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.op_Subtraction(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Substract the second value from the first value and returns the result of the substraction.
            </summary>
            <param name="value1">The first value to sum.</param>
            <param name="value2">The second value to sum.</param>
            <returns>The result of substracting the second value from the first value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.Subtract(DigitalRuby.IPBanCore.UInt128@,DigitalRuby.IPBanCore.UInt128@)">
            <summary>
            Substract the second value from the first value and returns the result of the substraction.
            </summary>
            <param name="value1">The first value to sum.</param>
            <param name="value2">The second value to sum.</param>
            <returns>The result of substracting the second value from the first value.</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>
            A 32-bit signed integer that is the hash code for this instance.
            </returns>
            <filterpriority>2</filterpriority>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)">
            <summary>
            Converts the numeric value of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> object to its equivalent string representation by using the specified format and culture-specific format information.
            </summary>
            <param name="format">A standard or custom numeric format string.</param>
            <param name="formatProvider">An object that supplies culture-specific formatting information.</param>
            <returns>The string representation of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value as specified by the <paramref name="format"/> and <paramref name="formatProvider"/> parameters.</returns>
            <exception cref="T:System.FormatException"><paramref name="format"/> is not a valid format string.</exception>
            <remarks>
            The <paramref name="format"/> parameter can be any valid standard numeric format specifier, or any combination of custom numeric format specifiers. 
            If <paramref name="format"/> is equal to <see cref="F:System.String.Empty"/> or is <see langword="null"/>, the return value of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> object is formatted with the general format specifier ("G"). 
            If <paramref name="format"/> is any other value, the method throws a <see cref="T:System.FormatException"/>.
            <para>
            The <paramref name="formatProvider"/> parameter is an <see cref="T:System.IFormatProvider"/> implementation. 
            Its <see cref="M:System.IFormatProvider.GetFormat(System.Type)"/> method returns a <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides culture-specific information about the format of the string returned by this method. 
            When the <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> method is invoked, it calls the <paramref name="formatProvider"/> parameter's <see cref="M:System.IFormatProvider.GetFormat(System.Type)"/> method and passes it a <see cref="T:System.Type"/> object that represents the <see cref="T:System.Globalization.NumberFormatInfo"/> type. 
            The <see cref="M:System.IFormatProvider.GetFormat(System.Type)"/> method then returns the <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides information for formatting the <see cref="T:DigitalRuby.IPBanCore.UInt128"/> object, such as the negative sign symbol, the group separator symbol, or the decimal point symbol. 
            There are three ways to use the <paramref name="formatProvider"/> parameter to supply formatting information to the <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> method: 
            <list type="bullet">
              <item>
              You can pass a <see cref="T:System.Globalization.CultureInfo"/> object that represents the culture that provides numeric formatting information. 
              Its <see cref="M:System.Globalization.CultureInfo.GetFormat(System.Type)"/> method returns the <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides numeric formatting information.
              </item>
              <item>You can pass the actual <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides formatting information. (Its implementation of <see cref="M:System.Globalization.NumberFormatInfo.GetFormat(System.Type)"/> just returns itself.)</item>
              <item>
              You can pas a custom object that implements <see cref="T:System.IFormatProvider"/> and uses the <see cref="M:System.IFormatProvider.GetFormat(System.Type)"/> method 
              to instantiate and return the <see cref="T:System.Globalization.NumberFormatInfo"/> object that provides formatting information.
              </item>
            </list>
            If <paramref name="formatProvider"/> is <see langword="null"/>, the formatting of the returned string is based on the <see cref="T:System.Globalization.NumberFormatInfo"/> object of the current culture.
            </para>
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String)">
            <summary>
            Converts the numeric value of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> object to its equivalent string representation by using the specified format.
            Uses <see cref="P:System.Globalization.CultureInfo.CurrentCulture"/> as the format provider.
            </summary>
            <param name="format">A standard or custom numeric format string.</param>
            <returns>The string representation of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value as specified by the <paramref name="format"/> parameter.</returns>
            <exception cref="T:System.FormatException"><paramref name="format"/> is not a valid format string.</exception>
            <remarks>
            See <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> for remarks.
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.ToString(System.IFormatProvider)">
            <summary>
            Converts the numeric value of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> object to its equivalent string representation by using the specified culture-specific format information.
            Uses "G" format.
            </summary>
            <param name="provider">An object that supplies culture-specific formatting information.</param>
            <returns>The string representation of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value as specified by the <paramref name="provider"/> parameter.</returns>
            <remarks>
            See <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> for remarks.
            </remarks>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UInt128.ToString">
            <summary>
            Converts the numeric value of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> object to its equivalent string representation.
            Uses "G" format.
            Uses <see cref="P:System.Globalization.CultureInfo.CurrentCulture"/> as the format provider.
            </summary>
            <returns>The string representation of the current <see cref="T:DigitalRuby.IPBanCore.UInt128"/> value.</returns>
            <remarks>
            See <see cref="M:DigitalRuby.IPBanCore.UInt128.ToString(System.String,System.IFormatProvider)"/> for remarks.
            </remarks>
        </member>
        <member name="P:DigitalRuby.IPBanCore.UInt128.LeastSignificant">
            <summary>
            Get the least significate ulong
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.UInt128.MostSignificant">
            <summary>
            Get the most significant ulong
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.UnitTestDetector">
            <summary>
            Detect if we are running as part of a nUnit unit test, in order to work-around .NET core 3 bugs in unit tests (like razor).
            </summary>    
        </member>
        <member name="P:DigitalRuby.IPBanCore.UnitTestDetector.Running">
            <summary>
            True if running unit tests, false otherwise
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnitTestDetector.#cctor">
            <summary>
            Static constructor
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.UnmanagedMemory">
            <summary>
            Unmanaged memory management with dispose pattern
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UnmanagedMemory.NoFree">
            <summary>
            No free
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.UnmanagedMemory.FreeHGlobal">
            <summary>
            Free HGlobal
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.UnmanagedMemory.RefCount">
            <summary>
            Refcount. Call Dispose to decrement. Will be 0 if freed.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.UnmanagedMemory.Pointer">
            <summary>
            Pointer to unmanaged memory. Will be IntPtr.Zero if freed.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.UnmanagedMemory.Size">
            <summary>
            Size of unmanaged memory. Will be 0 if freed.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnmanagedMemory.#ctor(System.Int32)">
            <summary>
            Constructor. Allocates unmanaged memory with Marshal.AllocHGlobal.
            </summary>
            <param name="size"></param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnmanagedMemory.#ctor(System.IntPtr,System.Int32)">
            <summary>
            Unmanaged memory to a pointer that is freed somewhere else
            </summary>
            <param name="pointer">Pointer</param>
            <param name="size">Size</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnmanagedMemory.#ctor(System.IntPtr,System.Int32,System.Action{System.IntPtr})">
            <summary>
            Constructor. Takes a pointer of existing unmanaged memory and size.
            </summary>
            <param name="pointer">Pointer</param>
            <param name="size">Size</param>
            <param name="free">Action to free the pointer</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnmanagedMemory.Finalize">
            <summary>
            Finalizer
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnmanagedMemory.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.UnmanagedMemory.AddRef">
            <summary>
            Acquire a reference. Call dispose to decrement the ref count. If ref count hits zero, the unmanaged memory is freed.
            </summary>
            <remarks>This doesn't need to be called unless you are pasing the unmanaged memory to other places that need to retain a reference. The RefCount will always start at 1.</remarks>
            <returns>This</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.XmlCData">
            <summary>
            Nasty hack for stupid xml serializer that cannot simply mark a property string as cdata
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="value">Value</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.#ctor(System.String)">
            <summary>
            Nasty hack for stupid xml serializer that cannot simply mark a property string as cdata
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="value">Value</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.op_Implicit(System.String)~DigitalRuby.IPBanCore.XmlCData">
            <summary>
            Allow direct assignment from string:
            CData cdata = "abc";
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.op_Implicit(DigitalRuby.IPBanCore.XmlCData)~System.String">
            <summary>
            Allow direct assigment to string
            </summary>
            <param name="cdata"></param>
            <returns>String or null if cdata is null</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.#ctor">
            <summary>
            Constructor
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.ToString">
            <summary>
            ToString
            </summary>
            <returns>String</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.GetSchema">
            <summary>
            Get xml schema
            </summary>
            <returns>Null</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.ReadXml(System.Xml.XmlReader)">
            <summary>
            Read xml
            </summary>
            <param name="reader">Reader</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.XmlCData.WriteXml(System.Xml.XmlWriter)">
            <summary>
            Write xml
            </summary>
            <param name="writer">Writer</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanPlugin">
            <summary>
            IPBan integration for external applications
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanPlugin.ErrorHandler">
            <summary>
            Optional error handler
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanPlugin.ProcessName">
            <summary>
            Process name
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanPlugin.#cctor">
            <summary>
            Static constructor
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanPlugin.IPBanLoginFailed(System.String,System.String,System.String)">
            <summary>
            Log a failed login attempt to IPBan
            </summary>
            <param name="source">Source, i.e. RDP, SMTP, FTP, etc.</param>
            <param name="userName">User name if known</param>
            <param name="remoteIpAddress">The remote ip address that failed to login</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanPlugin.IPBanLoginSucceeded(System.String,System.String,System.String)">
            <summary>
            Log a successful login attempt to IPBan
            </summary>
            <param name="source">Source, i.e. RDP, SMTP, FTP, etc.</param>
            <param name="userName">User name if known</param>
            <param name="remoteIpAddress">The remote ip address that succeeded to login</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanResources">
            <summary>
              A strongly-typed resource class, for looking up localized strings, etc.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ResourceManager">
            <summary>
              Returns the cached ResourceManager instance used by this class.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Culture">
            <summary>
              Overrides the current thread's CurrentUICulture property for all
              resource lookups using this strongly typed resource class.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.About">
            <summary>
              Looks up a localized string similar to About.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AccessDuration">
            <summary>
              Looks up a localized string similar to Access Duration.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Activity">
            <summary>
              Looks up a localized string similar to Activity.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Add">
            <summary>
              Looks up a localized string similar to Add.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Administrator">
            <summary>
              Looks up a localized string similar to Administrator.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AggregateBanUserNames">
            <summary>
              Looks up a localized string similar to Common Failed User Name Ban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AggregateBanUserNamesAllowBlank">
            <summary>
              Looks up a localized string similar to Process Blank User Names.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AggregateBanUserNamesAllowBlankTooltip">
            <summary>
              Looks up a localized string similar to Whether to include blank user names in aggregation for banning across your entire network..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AggregateBanUserNamesTooltip">
            <summary>
              Looks up a localized string similar to Count,hours to examine common user names and ban attackers that meet a count within hours timespan. Set to empty to disable this feature..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Alias">
            <summary>
              Looks up a localized string similar to Alias.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Allowed">
            <summary>
              Looks up a localized string similar to Allowed.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AllowedPorts">
            <summary>
              Looks up a localized string similar to Allowed Ports.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AllowedPortsTooltip">
            <summary>
              Looks up a localized string similar to Allowed port/port-ranges (comma separated). Empty to not allow any ports. Example: 80, 443, 500-510. Only supported on WinDivert and WFP firewalls..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AllowPorts">
            <summary>
              Looks up a localized string similar to Allow Ports.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AllowPortsTooltip">
            <summary>
              Looks up a localized string similar to Comma separated ports or port ranges to always allow, regardless of country blocking - i.e. 80, 443..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Apply">
            <summary>
              Looks up a localized string similar to Apply.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AsnBlacklist">
            <summary>
              Looks up a localized string similar to ASN Blocklist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AsnBlacklistTooltip">
            <summary>
              Looks up a localized string similar to ASN to block (autonymous system number).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AsnBlacklistWhitelist">
            <summary>
              Looks up a localized string similar to Whitelist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RestrictToIPBanProEvents">
            <summary>
              Looks up a localized string similar to Restrict firewall monitor to IPBan Pro rules.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RestrictToIPBanProEventsTooltip">
            <summary>
              Looks up a localized string similar to When checked, only IPBan Pro rules are reported. When off, all firewall rule events are reported, which can greatly increase network traffic and events to the web admin.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AsnBlacklistWhitelistTooltip">
            <summary>
              Looks up a localized string similar to Whitelist instead of blacklist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AsnBlockHelpLabel">
            <summary>
              Looks up a localized string similar to Start typing and select ASN that appear from the dropdown, can use id or name.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AsnBlockRangeEntryCount">
            <summary>
              Looks up a localized string similar to {0} entries in the ASN block list.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AutoRefresh">
            <summary>
              Looks up a localized string similar to Auto Refresh.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AutoUpdate">
            <summary>
              Looks up a localized string similar to Auto Update.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AutoWhitelistSuccessLogins">
            <summary>
              Looks up a localized string similar to Auto Whitelist Success Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.AutoWhitelistSuccessLoginsTooltip">
            <summary>
              Looks up a localized string similar to Number of days to whitelist remote ip addresses that have a successful login (set to negative number to also process blank user names, where the number will be converted to a positive number).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Available">
            <summary>
              Looks up a localized string similar to Available.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BanCount">
            <summary>
              Looks up a localized string similar to Ban Count.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BannedIPAddresses">
            <summary>
              Looks up a localized string similar to Banned ip addresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BanRangeThreshold">
            <summary>
              Looks up a localized string similar to Ban range threshold.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BanRangeThresholdTooltip">
            <summary>
              Looks up a localized string similar to Format: threshold,days,event_type. Threshold is number of failed logins or banned ips in a cidr mask before the entire cidr mask is banned for x days. For ipv4, /24 mask is used with 256 ips. For ipv6, /112 mask is used with 65536 ips. Days specifies duration to ban the range. Event type can be empty or b for banned ip addresses, or f for failed logins. Set to empty to disable this feature..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BanTime">
            <summary>
              Looks up a localized string similar to Ban Time.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BanTimeTooltip">
            <summary>
              Looks up a localized string similar to The duration of time to ban an ip address. Format is DD:HH:MM:SS. Use 00:00:00:00 for max ban duration (90 days). Must be at least one minute..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BaseUrl">
            <summary>
              Looks up a localized string similar to Base Url.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BaseUrlTooltip">
            <summary>
              Looks up a localized string similar to The base url of the server to connect clients to, should be this server.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Blacklister">
            <summary>
              Looks up a localized string similar to Blacklister.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BlacklisterWhitelister">
            <summary>
              Looks up a localized string similar to BlacklisterWhitelister.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.BlockedPacketsByCountry">
            <summary>
              Looks up a localized string similar to Blocked and Allowed Packets by Country last 24 hours.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Cancel">
            <summary>
              Looks up a localized string similar to Cancel.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ChangeCredentials">
            <summary>
              Looks up a localized string similar to Change Credentials.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CheckLastWhitelistAccess">
            <summary>
              Looks up a localized string similar to Check Last Whitelist Access.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.City">
            <summary>
              Looks up a localized string similar to City.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Clear">
            <summary>
              Looks up a localized string similar to Clear.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ClearBannedIPAddressesOnRestart">
            <summary>
              Looks up a localized string similar to Clear Bans on Restart.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ClearBannedIPAddressesOnRestartTooltip">
            <summary>
              Looks up a localized string similar to True to clear and unban all the ip addresses from the firewall upon restart, false otherwise.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ClearFailedLoginsOnSuccessfulLogin">
            <summary>
              Looks up a localized string similar to Clear Failures on Login Success.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ClearFailedLoginsOnSuccessfulLoginTooltip">
            <summary>
              Looks up a localized string similar to When an ip address receives a successful login, whether to clear all the failed logins for that ip from memory.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Client">
            <summary>
              Looks up a localized string similar to Client.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ClientConfiguration">
            <summary>
              Looks up a localized string similar to Client Configuration.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ClientConfigurationOverrideTooltip">
            <summary>
              Looks up a localized string similar to Replace global configuration values for this client.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Cloudflare_ApiToken_Description">
            <summary>
              Looks up a localized string similar to Cloudflare api token to add firewall rules.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Cloudflare_MaxCount_Description">
            <summary>
              Looks up a localized string similar to Max count of ips to put in Cloudflare firewall, 10000 max.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Cloudflare_ZoneIds_Description">
            <summary>
              Looks up a localized string similar to Comma separated zone ids to add firewall rules to.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ConcurrentRemoteIPBan">
            <summary>
              Looks up a localized string similar to Concurrent Remote IP Ban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ConcurrentRemoteIPBanTooltip">
            <summary>
              Looks up a localized string similar to Count,seconds,optional port ranges. For banning connected remote ips that meet a concurrent count for a specified number of seconds (optionally filtered to the specified local ports). Set to empty to disable this feature..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ConfirmDelete">
            <summary>
              Looks up a localized string similar to Confirm Delete.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ConnectedClients">
            <summary>
              Looks up a localized string similar to Connected Clients.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Country">
            <summary>
              Looks up a localized string similar to Country.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklist">
            <summary>
              Looks up a localized string similar to Country Blocklist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistFirstFailedLogin">
            <summary>
              Looks up a localized string similar to First Failed Login.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistFirstFailedLoginTooltip">
            <summary>
              Looks up a localized string similar to Whether to wait until first failed login from a bad country before banning (checked) or to pro-actively add the entire country to the firewall if possible (unchecked). If checked, allowed ports is ignored. Accuracy is more precise when first failed login is checked..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistInterval">
            <summary>
              Looks up a localized string similar to Country Blacklist Interval.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistIntervalTooltip">
            <summary>
              Looks up a localized string similar to 24 hour start (local time), day of month to send out country blacklist to clients, i.e. 3,28.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistInvert">
            <summary>
              Looks up a localized string similar to Invert Country Blocklist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistInvertTooltip">
            <summary>
              Looks up a localized string similar to Whether to invert country block list (checked), so the countries specified are allow only and everything else is blocked. The default is to only block countries specified (unchecked)..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistOverride">
            <summary>
              Looks up a localized string similar to Override Country Blacklist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistPrecise">
            <summary>
              Looks up a localized string similar to Country Blacklist Precise.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistPreciseTooltip">
            <summary>
              Looks up a localized string similar to Use precise country ip addresses (requires about 7x more RAM).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlacklistTooltip">
            <summary>
              Looks up a localized string similar to Select banned countries. The firewall will be updated with the first failed login from an ip address in the range of any blocked country, excluding any whitelisted ip addresses..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryBlockHelpLabel">
            <summary>
              Looks up a localized string similar to Start typing and pick countries from the dropdown that appears.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CountryListEntryCount">
            <summary>
              Looks up a localized string similar to {0} ranges in the country block list.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CreatedAt">
            <summary>
              Looks up a localized string similar to Created At.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CreateWhitelistFirewallRule">
            <summary>
              Looks up a localized string similar to Create Whitelist Firewall Rule.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CreateWhitelistFirewallRuleTooltip">
            <summary>
              Looks up a localized string similar to Whether to create a whitelist firewall rule. This gives all whitelist ip access to all ports.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CredentialPropagation">
            <summary>
              Looks up a localized string similar to Any changes made to the administrator account will propagate to clients automatically..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Critical">
            <summary>
              Looks up a localized string similar to Critical.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Cutoff">
            <summary>
              Looks up a localized string similar to Cut Off.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CycleTime">
            <summary>
              Looks up a localized string similar to Cycle Time.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.CycleTimeTooltip">
            <summary>
              Looks up a localized string similar to The time between cycles to do house-keeping such as un-banning ip addresses, reloading config, etc. Will be clamped between 5 and 60 seconds. Format is DD:HH:MM:SS..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.DefaultWhitelistBlacklistDurationDays">
            <summary>
              Looks up a localized string similar to Default whitelist/blacklist days.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.DefaultWhitelistBlacklistDurationDaysTooltip">
            <summary>
              Looks up a localized string similar to Default days to show in whitelist/blacklist UI.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Delete">
            <summary>
              Looks up a localized string similar to Delete.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Description">
            <summary>
              Looks up a localized string similar to Description.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Details">
            <summary>
              Looks up a localized string similar to Details.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Diagnostics">
            <summary>
              Looks up a localized string similar to Diagnostics.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Direction">
            <summary>
              Looks up a localized string similar to Direction.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.DisableNotificationFlags">
            <summary>
              Looks up a localized string similar to Disable Notification Flags.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Docs">
            <summary>
              Looks up a localized string similar to Docs.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Duration">
            <summary>
              Looks up a localized string similar to Duration.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Duration_Tooltip">
            <summary>
              Looks up a localized string similar to Duration (DD:HH:MM:SS).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Edit">
            <summary>
              Looks up a localized string similar to Edit.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EditMachine">
            <summary>
              Looks up a localized string similar to Edit Machine.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Enabled">
            <summary>
              Looks up a localized string similar to Enabled.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EnableLists">
            <summary>
              Looks up a localized string similar to Enable recent and naughty list.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EnableListsTooltip">
            <summary>
              Looks up a localized string similar to Whether to enable the recent and naughty list, global lists aggregated from all over the world from IPBan submissions.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EnableSSL">
            <summary>
              Looks up a localized string similar to Enable SSL.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EnableSSLTooltip">
            <summary>
              Looks up a localized string similar to Whether to enable SSL (secure socket layer) immediately on connection. Leave false to auto-detect..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EnterLicenseKeys">
            <summary>
              Looks up a localized string similar to Enter license keys, one per line.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Error">
            <summary>
              Looks up a localized string similar to Error.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventReader">
            <summary>
              Looks up a localized string similar to EventReader.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerExpressions">
            <summary>
              Looks up a localized string similar to Expressions.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerExpressionsTooltip">
            <summary>
              Looks up a localized string similar to Event viewer expressions to find. Format is //XPath[newline]Regex. Regex can span multiple lines. Start a new XPath to search for by putting //XPath on a new line..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerFailedLogins">
            <summary>
              Looks up a localized string similar to Event Viewer Failed Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerKeywords">
            <summary>
              Looks up a localized string similar to Keywords.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerKeywordsTooltip">
            <summary>
              Looks up a localized string similar to Event viewer keywords, in hex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerPath">
            <summary>
              Looks up a localized string similar to Path.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerPathTooltip">
            <summary>
              Looks up a localized string similar to The event viewer path, i.e. Application or Security, etc..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerSuccessfulLogins">
            <summary>
              Looks up a localized string similar to Event Viewer Successful Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.EventViewerWindows">
            <summary>
              Looks up a localized string similar to Event Viewer (Windows).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ExpireTime">
            <summary>
              Looks up a localized string similar to Expire Time.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ExpireTimeTooltip">
            <summary>
              Looks up a localized string similar to The duration after the last failed login attempt that the ip is forgotten (count reset back to 0). Set to 00:00:00:00 to use max duration (90 days). Format is DD:HH:MM:SS..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Export">
            <summary>
              Looks up a localized string similar to Export.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginAttempts">
            <summary>
              Looks up a localized string similar to Failed login attempts.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginAttemptsBeforeBan">
            <summary>
              Looks up a localized string similar to Failed Logins Before Ban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginAttemptsBeforeBanTooltip">
            <summary>
              Looks up a localized string similar to Number of failed logins before banning an ip address.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginLogLevel">
            <summary>
              Looks up a localized string similar to Failed Log Level.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginRegex">
            <summary>
              Looks up a localized string similar to Failed Login Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginRegexTimestampFormat">
            <summary>
              Looks up a localized string similar to Failed Login Regex Timestamp Format.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginRegexTimestampFormatTooltip">
            <summary>
              Looks up a localized string similar to Format for timestamp if failed login regex has a timestamp group.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginRegexTooltip">
            <summary>
              Looks up a localized string similar to Regex to parse failed logins out of log files. Please provide ipaddress and username groups..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginsBeforeBanUserNameWhitelist">
            <summary>
              Looks up a localized string similar to Failed Logins Before Ban Whitelist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginsBeforeBanUserNameWhitelistTooltip">
            <summary>
              Looks up a localized string similar to Number of failed logins before banning the ip address if the user name is in the user name whitelist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginThreshold">
            <summary>
              Looks up a localized string similar to Failed Login Threshold.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FailedLoginThresholdTooltip">
            <summary>
              Looks up a localized string similar to Override the failed login threshold or 0 for default.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FilterSettings">
            <summary>
              Looks up a localized string similar to Filter Settings.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Firewall">
            <summary>
              Looks up a localized string similar to Firewall.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallRulePrefix">
            <summary>
              Looks up a localized string similar to Firewall Rule Prefix.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallRulePrefixTooltip">
            <summary>
              Looks up a localized string similar to Rule prefix name for firewall rules, must contain only A-Z, 0-9 and _.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallRules">
            <summary>
              Looks up a localized string similar to Firewall Rules.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallRulesTooltip">
             <summary>
               Looks up a localized string similar to Extra firewall rules, one per line. Great way to persist firewall rules. Format is &apos;rule-name;allow or block;ip list (comma spearated);port list (comma separated);platform regex&apos;. The name should be kept to 16 or less chars.
            
            For allow rules, port list is allowed ports, so if you wanted to allow port 3389, just enter 3389.
            For block rules, port list is ignored ports, so if you wanted to block port 3389, you&apos;d enter 0-3388,3390-65535..
             </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallSettings">
            <summary>
              Looks up a localized string similar to Firewall Settings.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallUriRules">
            <summary>
              Looks up a localized string similar to Firewall Uri Rules.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FirewallUriRulesTooltip">
            <summary>
              Looks up a localized string similar to Config entry for firewall uri rules, one per line. Format is RulePrefix,Interval(DD:HH:MM:SS),Uri[NEWLINE]. $ts$ in uri&apos;s will be replaced with timestamp..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.FQDN">
            <summary>
              Looks up a localized string similar to FQDN.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.GeneralSettings">
            <summary>
              Looks up a localized string similar to General Settings.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Guest">
            <summary>
              Looks up a localized string similar to Guest.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Home">
            <summary>
              Looks up a localized string similar to Home.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Id">
            <summary>
              Looks up a localized string similar to Id.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Import">
            <summary>
              Looks up a localized string similar to Import.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Information">
            <summary>
              Looks up a localized string similar to Information.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddress">
            <summary>
              Looks up a localized string similar to IP Address.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddresses">
            <summary>
              Looks up a localized string similar to IPAddresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressEvents">
            <summary>
              Looks up a localized string similar to IP Address Events.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_BlockedIPAddress">
            <summary>
              Looks up a localized string similar to Blocked IP Addresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_DailyReport">
            <summary>
              Looks up a localized string similar to Daily Report.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_FailedLogin">
            <summary>
              Looks up a localized string similar to Failed Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_MonthlyReport">
            <summary>
              Looks up a localized string similar to Monthly Report.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_SuccessfulLogin">
            <summary>
              Looks up a localized string similar to Successful Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_SuccessfulWebAdminLogin">
            <summary>
              Looks up a localized string similar to Web Admin Successful Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_WeeklyReport">
            <summary>
              Looks up a localized string similar to Weekly Report.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPAddressNotificationFlags_WhoIs">
            <summary>
              Looks up a localized string similar to Who Is.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPBanKey1">
            <summary>
              Looks up a localized string similar to 60E555E4ADFE4AAB9DAE61E0D57ADD7E.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPBanShield">
            <summary>
              Looks up a localized string similar to IPBan Shield.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPBlacklist">
            <summary>
              Looks up a localized string similar to IP Blacklist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPBlacklistRegex">
            <summary>
              Looks up a localized string similar to IP Blacklist Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPBlacklistRegexTooltip">
            <summary>
              Looks up a localized string similar to Regular expression for more advanced blacklisting. Shortcut: use* to allow any piece of an ip, dns name, url or user name(i.e. 128.128.128.*). Sample regex that blacklists a few ips: ^(128\.128\.128\.*)|(99\.99\.99\.[0-9])$ More info about regex: http://www.regular-expressions.info/.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPBlacklistTooltip">
            <summary>
              Looks up a localized string similar to IP addresses, cidr masks, dns names or user names to always ban and never unban. Prefix user names with user:, i.e. user:root. Separate multiple entries with comma..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPThreatApiKey">
            <summary>
              Looks up a localized string similar to IPThreat Api Key.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPThreatApiKeyTooltip">
            <summary>
              Looks up a localized string similar to Api key for https://ipthreat.net.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPWhitelist">
            <summary>
              Looks up a localized string similar to IP Whitelist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPWhitelistRegex">
            <summary>
              Looks up a localized string similar to IP Whitelist Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPWhitelistRegexTooltip">
            <summary>
              Looks up a localized string similar to Regular expression for more advanced whitelisting. Shortcut: use * to allow any piece of an ip (i.e. 128.128.128.*). Sample regex that whitelists a few ips: ^(128\.128\.128\.*)|(99\.99\.99\.[0-9])$ More info about regex: http://www.regular-expressions.info/.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IPWhitelistTooltip">
            <summary>
              Looks up a localized string similar to IP addresses, cidr masks, urls or dns names to never ban. Prefix user names with user:, i.e. user:root. Separate multiple entries with comma..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.IsIPAddressBanned">
            <summary>
              Looks up a localized string similar to Is IP Address Banned.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ISP">
            <summary>
              Looks up a localized string similar to ISP.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Items">
            <summary>
              Looks up a localized string similar to {0} Items.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LastUpdate">
            <summary>
              Looks up a localized string similar to Last Update.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Leaks">
            <summary>
              Looks up a localized string similar to Leaks.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Licenses">
            <summary>
              Looks up a localized string similar to Licenses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LocalIP">
            <summary>
              Looks up a localized string similar to Local IP Address.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LocalPort">
            <summary>
              Looks up a localized string similar to Local Port.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LogFilePingInterval">
            <summary>
              Looks up a localized string similar to Ping Interval.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LogFilePingIntervalTooltip">
            <summary>
              Looks up a localized string similar to How often to ping the log file, in milliseconds.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Login">
            <summary>
              Looks up a localized string similar to Login.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LoginFailed">
            <summary>
              Looks up a localized string similar to Login failed.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LogLevel">
            <summary>
              Looks up a localized string similar to Log Level.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Logout">
            <summary>
              Looks up a localized string similar to Logout.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.LogParsing">
            <summary>
              Looks up a localized string similar to Log Parsing.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Logs">
            <summary>
              Looks up a localized string similar to Logs.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Machine">
            <summary>
              Looks up a localized string similar to Machine.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MachineAccess">
            <summary>
              Looks up a localized string similar to Machine Access.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Machines">
            <summary>
              Looks up a localized string similar to Machines.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MachineWhitelist">
            <summary>
              Looks up a localized string similar to Machine Whitelist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Map">
            <summary>
              Looks up a localized string similar to Map.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MaxActiveBlacklistedIPAddresses">
            <summary>
              Looks up a localized string similar to Blacklist Max Size.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MaxActiveBlacklistedIPAddressesTooltip">
            <summary>
              Looks up a localized string similar to The maximum blacklisted ip addresses to return, in order of last seen date descending.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MaxCount">
            <summary>
              Looks up a localized string similar to Max Count.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MaxFileSize">
            <summary>
              Looks up a localized string similar to Max File Size.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MaxFileSizeTooltip">
            <summary>
              Looks up a localized string similar to The max size to let the file grow to before deleting it and starting over, in bytes.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MinimumTimeBetweenFailedLoginAttempts">
            <summary>
              Looks up a localized string similar to Min Time Between Failed Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MinimumTimeBetweenFailedLoginAttemptsTooltip">
            <summary>
              Looks up a localized string similar to The minimum time between failed login attempts for an ip address to increment the ban counter. Format is DD:HH:MM:SS. Will be clamped to 0 and 15 seconds..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MinimumTrustLevel">
            <summary>
              Looks up a localized string similar to Minimum Trust Level.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.MinimumTrustLevelTooltip">
            <summary>
              Looks up a localized string similar to Minimum trust level for recent banned ip sharing (0-10) where 0 is trust all submissions.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Monitor">
            <summary>
              Looks up a localized string similar to Monitor.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NaughtyListCount">
            <summary>
              Looks up a localized string similar to Naughty List Count.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NaughtyListCountTooltip">
            <summary>
              Looks up a localized string similar to Naughty list max count, set to 0 to disable.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NaughtyListEntryCount">
            <summary>
              Looks up a localized string similar to {0} naughty list items.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Notes">
            <summary>
              Looks up a localized string similar to Notes.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotificationDuplicateFilterWindow">
            <summary>
              Looks up a localized string similar to Duplicate Filter Window.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotificationDuplicateFilterWindowTooltip">
            <summary>
              Looks up a localized string similar to The window (DD:HH:MM:SS) to filter (and ignore) duplicate notifications.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotificationFlags">
            <summary>
              Looks up a localized string similar to Notification Flags.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Notifications">
            <summary>
              Looks up a localized string similar to Notifications.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotificationWebHook">
            <summary>
              Looks up a localized string similar to Notification Web Hook.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotificationWebHookTooltip">
            <summary>
              Looks up a localized string similar to Url to POST a json request for notifications. The posted json contains Subject, Body and ToAddresses fields. Advanced: Use Uri=[uri] | Template=[template] | Format=[plain or markdown or slack, leave off for html]. Template will transform notification to your json. Example: { &quot;text&quot;:&quot;###SUBJECT###&quot;,&quot;blocks&quot;: [ { &quot;type&quot;: &quot;section&quot;, &quot;text&quot;: { &quot;type&quot;: &quot;mrkdwn&quot;, &quot;text&quot;: &quot;###SUBJECT###\n\n###BODY###\n\n###DATA###&quot; } } ] } | format = slack | Uri = https://hooks.slack.com/services/KEY1/KEY2.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotifyOnly">
            <summary>
              Looks up a localized string similar to Notify Only.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.NotifyOnlyTooltip">
            <summary>
              Looks up a localized string similar to Whether this is a notification of a successful login (true) or a failed login (false).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Options">
            <summary>
              Looks up a localized string similar to Options.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.OSName">
            <summary>
              Looks up a localized string similar to Operating System Name.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.OSVersion">
            <summary>
              Looks up a localized string similar to Operating System Version.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Other">
            <summary>
              Looks up a localized string similar to Other.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.OtherIP">
            <summary>
              Looks up a localized string similar to Other IP Addresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.OtherLists">
            <summary>
              Looks up a localized string similar to Lists.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.OtherListsTooltip">
            <summary>
              Looks up a localized string similar to IPBan Pro block lists.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Password">
            <summary>
              Looks up a localized string similar to Password.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PasswordAgain">
            <summary>
              Looks up a localized string similar to Password again.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PasswordTooltip">
            <summary>
              Looks up a localized string similar to The password to login with.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PathAndMask">
            <summary>
              Looks up a localized string similar to Paths and Masks.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PathAndMaskTooltip">
             <summary>
               Looks up a localized string similar to Paths and masks to search, one per line. Glob syntax can be used for recursion, i.e. /logs/**/*.log
            Can prefix with DB: to make it a db connection string instead of files, using format DB:TYPE:CONN_STRING. Type can be SqlServer, PostgreSql, MySql, or Sqlite. The regex in this case are sql queries, and must retrieve these columns: timestamp, ip_address, source, user_name. The query must also include a WHERE clause with ONE of the following: timestamp &gt; @Timestamp; timestamp &gt; @TimestampLocal; timestamp &gt; @T [rest of string was truncated]&quot;;.
             </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PlatformRegex">
            <summary>
              Looks up a localized string similar to Platform Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PlatformRegexTooltip">
            <summary>
              Looks up a localized string similar to The regex to filter based on current platform, i.e. Windows or Linux..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PleaseWait">
            <summary>
              Looks up a localized string similar to Please Wait….
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Plugins">
            <summary>
              Looks up a localized string similar to Plugins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PrivateAPIKey">
            <summary>
              Looks up a localized string similar to Private API Key.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PrivateAPIKeyTooltip">
            <summary>
              Looks up a localized string similar to Your IPBan Pro Private API Key.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessInternalIPAddresses">
            <summary>
              Looks up a localized string similar to Process Internal IP Addresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessInternalIPAddressesTooltip">
            <summary>
              Looks up a localized string similar to Whether to process internal ip addresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessToRunOnBan">
            <summary>
              Looks up a localized string similar to Run on Ban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessToRunOnBanTooltip">
            <summary>
              Looks up a localized string similar to Run an external process when a ban occurs. Separate the process and any arguments with a pipe (|). ###IPADDRESS### will be replaced with the actual IP which was banned. The pipe is required. Example: c:\system\files\on_ip_banned.exe|###IPADDRESS### -q.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessToRunOnSuccessfulLogin">
            <summary>
              Looks up a localized string similar to Run on Successful Login.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessToRunOnSuccessfulLoginTooltip">
            <summary>
              Looks up a localized string similar to Run an external process when a successful login occurs. Separate the process and any arguments with a pipe (|). ###IPADDRESS### will be replaced with the actual IP which was banned. The pipe is required. Example: c:\system\files\on_ip_banned.exe|###IPADDRESS### -q.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessToRunOnUnban">
            <summary>
              Looks up a localized string similar to Run on Unban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ProcessToRunOnUnbanTooltip">
            <summary>
              Looks up a localized string similar to Run an external process when a ban is removed. Separate the process and any arguments with a pipe (|). ###IPADDRESS### will be replaced with the actual IP which was unbanned. The pipe is required. Example: c:\system\files\on_ip_unbanned.exe|###IPADDRESS### -q.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Protocol">
            <summary>
              Looks up a localized string similar to Protocol.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PublicAPIKey">
            <summary>
              Looks up a localized string similar to Public API Key.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.PublicAPIKeyTooltip">
            <summary>
              Looks up a localized string similar to Your IPBan Pro Public API Key.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentActivity">
            <summary>
              Looks up a localized string similar to Recent Activity.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentBannedIPAddresses">
            <summary>
              Looks up a localized string similar to Recent Banned IP Addresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentFailedLogins">
            <summary>
              Looks up a localized string similar to Recent Failed Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentListCount">
            <summary>
              Looks up a localized string similar to Recent List Count.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentListCountTooltip">
            <summary>
              Looks up a localized string similar to Recent list max count, set to 0 to disable.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentListEntryCount">
            <summary>
              Looks up a localized string similar to {0} recent list items.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecentSuccessLogins">
            <summary>
              Looks up a localized string similar to Recent Successful Logins.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecipeDescriptionTooltip">
            <summary>
              Looks up a localized string similar to Description. Set to TEST to put the recipe in analyze but not execute mode..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Recursive">
            <summary>
              Looks up a localized string similar to Recursive.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RecursiveTooltip">
            <summary>
              Looks up a localized string similar to Whether to scan recursively.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Refresh">
            <summary>
              Looks up a localized string similar to Refresh.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Region">
            <summary>
              Looks up a localized string similar to Region.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RemainingUses">
            <summary>
              Looks up a localized string similar to Remaining Uses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RememberMe">
            <summary>
              Looks up a localized string similar to Remember Me.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RemoteHost">
            <summary>
              Looks up a localized string similar to Remote Host.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RemoteIP">
            <summary>
              Looks up a localized string similar to Remote IP Address.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RemotePort">
            <summary>
              Looks up a localized string similar to Remote Port.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RemoveAllLicenseKeys">
            <summary>
              Looks up a localized string similar to Remove all license keys and reset usage..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.RequestAPlugin">
            <summary>
              Looks up a localized string similar to Request a plugin.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Reset">
            <summary>
              Looks up a localized string similar to Reset.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ResetBannedIPs">
            <summary>
              Looks up a localized string similar to Reset Banned IPs.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ResetFailedLoginCountForUnbannedIPAddresses">
            <summary>
              Looks up a localized string similar to Reset Failed Login Count on Unban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ResetLicenseKeys">
            <summary>
              Looks up a localized string similar to Reset License Keys.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.ResolveIPAddress">
            <summary>
              Looks up a localized string similar to Resolve IP Address.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Resources">
            <summary>
              Looks up a localized string similar to Resources.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Role">
            <summary>
              Looks up a localized string similar to Role.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Rule">
            <summary>
              Looks up a localized string similar to Rule.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Save">
            <summary>
              Looks up a localized string similar to Save.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SelectAll">
            <summary>
              Looks up a localized string similar to Select All.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SelectNone">
            <summary>
              Looks up a localized string similar to Select None.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SetFirewallMonitoring">
            <summary>
              Looks up a localized string similar to Set Firewall Monitoring.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Settings">
            <summary>
              Looks up a localized string similar to Settings.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SiteCopyright">
            <summary>
              Looks up a localized string similar to (c) 2018-{0} Digital Ruby, LLC.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SiteLink">
            <summary>
              Looks up a localized string similar to https://ipban.com.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SiteName">
            <summary>
              Looks up a localized string similar to IPBan Pro Admin.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpBodyTemplate">
            <summary>
              Looks up a localized string similar to Email Body Template.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpBodyTemplateTooltip">
            <summary>
              Looks up a localized string similar to Body template for sent mail. {0} = machine name, {1} = user name, {2} = local ip address, {3} = remote ip address, {4} = remote host name, {5} = city, {6} = region, {7} = country, {8} = event type, {9} = source..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpFrom">
            <summary>
              Looks up a localized string similar to Send Email As.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpFromTooltip">
            <summary>
              Looks up a localized string similar to Smtp user to send mail as (i.e. bob@hotmail.com).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpPort">
            <summary>
              Looks up a localized string similar to Smtp Port.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpPortTooltip">
            <summary>
              Looks up a localized string similar to The smtp server port, i.e. 20.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpServer">
            <summary>
              Looks up a localized string similar to Smtp Server.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpServerTooltip">
            <summary>
              Looks up a localized string similar to The smtp server, i.e. mail.yourdomain.com.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpSubjectTemplate">
            <summary>
              Looks up a localized string similar to Email Subject Template.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpSubjectTemplateTooltip">
            <summary>
              Looks up a localized string similar to Subject template for sent mail. {0} = machine name, {1} = user name, {2} = local ip address, {3} = remote ip address, {4} = remote host name, {5} = city, {6} = region, {7} = country, {8} = event type, {9} = source..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpTo">
            <summary>
              Looks up a localized string similar to Send Email To.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpToTooltip">
            <summary>
              Looks up a localized string similar to Comma separated list of users to send mail to.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpWhoisBodyTemplate">
            <summary>
              Looks up a localized string similar to Whois Body Template.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpWhoisBodyTemplateTooltip">
            <summary>
              Looks up a localized string similar to Body template for emailing abuse email addresses. {0} = banned ip address, {1} = banned host name, {2} = log of failed attempts..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpWhoisSubjectTemplate">
            <summary>
              Looks up a localized string similar to Whois Subject Template.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SmtpWhoisSubjectTemplateTooltip">
            <summary>
              Looks up a localized string similar to Subject template for emailing abuse email addresses. {0} = banned ip address, {1} = banned host name, {2} = external ip address of machine that banned the ip address, {3} = machine name, {4} = machine ip address..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Source">
            <summary>
              Looks up a localized string similar to Source.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SourceTooltip">
            <summary>
              Looks up a localized string similar to The event source, i.e. RDP, SSH, SMTP, etc..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SslSelfSignedCertificate">
            <summary>
              Looks up a localized string similar to Self signed certificate.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SslSelfSignedCertificateTooltip">
            <summary>
              Looks up a localized string similar to Turn on if your certificate is self signed.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Status">
            <summary>
              Looks up a localized string similar to Status.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Submit">
            <summary>
              Looks up a localized string similar to Submit.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Success">
            <summary>
              Looks up a localized string similar to Success.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SuccessfulLoginLogLevel">
            <summary>
              Looks up a localized string similar to Successful Log Level.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SuccessfulLoginRegex">
            <summary>
              Looks up a localized string similar to Successful Login Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SuccessfulLoginRegexTimestampFormat">
            <summary>
              Looks up a localized string similar to Successful Login Regex Timestamp Format.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SuccessfulLoginRegexTimestampFormatTooltip">
            <summary>
              Looks up a localized string similar to Format for timestamp if successful login regex has a timestamp group.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.SuccessfulLoginRegexTooltip">
            <summary>
              Looks up a localized string similar to Regex to parse succesful logins out of log files. Please provide ipaddress and username groups..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Summary">
            <summary>
              Looks up a localized string similar to Summary.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Test">
            <summary>
              Looks up a localized string similar to Test.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Timestamp">
            <summary>
              Looks up a localized string similar to Timestamp.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Toggle">
            <summary>
              Looks up a localized string similar to Toggle.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Tools">
            <summary>
              Looks up a localized string similar to Tools.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Unban">
            <summary>
              Looks up a localized string similar to Unban.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UnbanIPAddresses">
            <summary>
              Looks up a localized string similar to Unban IPAddresses.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UnexpectedError">
            <summary>
              Looks up a localized string similar to An unexpected error has ocurred. Please email support@ipban.com for help..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Update">
            <summary>
              Looks up a localized string similar to Update.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UpdateAvailable">
            <summary>
              Looks up a localized string similar to Update Available.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UpdateClients">
            <summary>
              Looks up a localized string similar to Update Clients.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UpdatedAt">
            <summary>
              Looks up a localized string similar to Updated At.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Url">
            <summary>
              Looks up a localized string similar to Url.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Used">
            <summary>
              Looks up a localized string similar to Used.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UseDefaultBannedIPAddressHandler">
            <summary>
              Looks up a localized string similar to Use Default Banned IP Address Handler.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UseDefaultBannedIPAddressHandlerTooltip">
            <summary>
              Looks up a localized string similar to Whether to use the default banned ip address handler. Turn off to disable default handling such as sharing anonymously the banned ip address to the global banned ip address database..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserName">
            <summary>
              Looks up a localized string similar to Email or user name.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UsernameOrPasswordIsBlank">
            <summary>
              Looks up a localized string similar to User name or password is empty.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameTooltip">
            <summary>
              Looks up a localized string similar to The user name (i.e. bob@hotmail.com).
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameTruncationChars">
            <summary>
              Looks up a localized string similar to User name truncation chars.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameTruncationCharsTooltip">
            <summary>
              Looks up a localized string similar to Characters to truncate user name at or empty for none. @ sign can be used to strip domain name off email or active directory login for example.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameWhitelist">
            <summary>
              Looks up a localized string similar to User Name Whitelist.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameWhitelistMinimumEditDistance">
            <summary>
              Looks up a localized string similar to User Name Edit Distance.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameWhitelistMinimumEditDistanceTooltip">
            <summary>
              Looks up a localized string similar to If user name whitelist is not empty and if the edit distance (levenshtein distance) of a failed user name is greater than this distance away, the user name is immediately banned. Set to 0 to ban all failed user names if UserNameWhitelist has entries. Case is ignored. Empty user names are always allowed..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameWhitelistRegex">
            <summary>
              Looks up a localized string similar to User Name Whitelist Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameWhitelistRegexTooltip">
            <summary>
              Looks up a localized string similar to If set, any user name that fails this regex will result in an immediate ban of the ip address..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.UserNameWhitelistTooltip">
            <summary>
              Looks up a localized string similar to Comma separated list of user names that are allowed. UserNameWhitelistMinimumEditDistance is checked for user names not in the list to determine whether a failed user name should be banned. Case is ignored. Empty user names are always allowed. *** IMPORTANT*** This can represent an attack vector by a hacker. If they know you are using IPBan and they don&apos;t get locked out right away, they might know they are somewhat close to the right user name. Make sure your passwords are complex enough and this shouldn&apos;t  [rest of string was truncated]&quot;;.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Version">
            <summary>
              Looks up a localized string similar to Version.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Warning">
            <summary>
              Looks up a localized string similar to Warning.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Welcome">
            <summary>
              Looks up a localized string similar to Welcome, {0}.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.Whitelister">
            <summary>
              Looks up a localized string similar to Whitelister.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.WhitelistUrls">
            <summary>
              Looks up a localized string similar to Whitelist Urls.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.XmlConfiguration">
            <summary>
              Looks up a localized string similar to Xml Configuration.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.XmlConfigurationTooltip">
            <summary>
              Looks up a localized string similar to Configure configuration using raw Xml.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.XPath">
            <summary>
              Looks up a localized string similar to XPath.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.XPathRegex">
            <summary>
              Looks up a localized string similar to XPath Regex.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.XPathRegexTooltip">
            <summary>
              Looks up a localized string similar to Regex to find in the xpath, please provide ipaddress and username groups..
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanResources.XPathTooltip">
            <summary>
              Looks up a localized string similar to XPath to find, i.e. //Node/SubNode.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables">
            <summary>
            Linux firewall base class using iptables
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.LogPacketPrefix">
            <summary>
            Prefix put into log file for dropped packets
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.Ip6TablesProcess">
            <summary>
            Command for ip6tables
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.IsIPV4">
            <summary>
            Is this ipv4 or ipv6 firewall?
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.INetFamily">
            <summary>
            Inet family
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.SetSuffix">
            <summary>
            Suffix for set files
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.TableSuffix">
            <summary>
            Suffix for table files
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.IpTablesProcess">
            <summary>
            IP tables process
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.GetTableFileName">
            <summary>
            Get table file name
            </summary>
            <returns>Table file name</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.GetSetFileName">
            <summary>
            Get set file name
            </summary>
            <returns>Set file name</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.CreateOrUpdateRule(System.String,System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Create (or update) a firewall rule
            </summary>
            <param name="ruleName">Rule name</param>
            <param name="action">Action</param>
            <param name="allowedPorts">Allowd ports</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success</returns>
            <exception cref="T:System.OperationCanceledException">Creation was cancelled</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.UpdateRule(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Update a firewall rule
            </summary>
            <param name="ruleName">Rule name</param>
            <param name="action">Action</param>
            <param name="ipAddresses">IP addresses</param>
            <param name="hashType">Hash type</param>
            <param name="allowPorts">Allowed ports</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success</returns>
            <exception cref="T:System.OperationCanceledException">Update rule cancelled</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.UpdateRuleDelta(System.String,System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <summary>
            Update a firewall rule
            </summary>
            <param name="ruleName">Rule name</param>
            <param name="action">Action</param>
            <param name="deltas">Delta IP addresses</param>
            <param name="hashType">Hash type</param>
            <param name="allowPorts">Allowed ports</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success</returns>
            <exception cref="T:System.OperationCanceledException">Update rule cancelled</exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.OnDispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.Update(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.IsAllowRule(System.String)">
            <summary>
            Determine if rule is an allow rule
            </summary>
            <param name="ruleName">Rule name</param>
            <returns>True if allow rule, false if block rule</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.Compile">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.Truncate">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxBaseFirewallIPTables.LogPackets">
            <summary>
            Whether to log packets affected by rules from this firewall
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxFirewallD">
            <summary>
            Linux firewall using firewalld.
            This class also works on Windows but only modifies files, does not actually use the firewall.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.Update(System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.Compile">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.Truncate">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallD.CreateOrUpdateRule(System.String,System.String,System.Boolean,System.Int32,System.String,System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Boolean,System.String)">
            <summary>
            Create or update a firewalld rule
            </summary>
            <param name="zoneFile">Zone file</param>
            <param name="zoneFileOrig">Original zone file</param>
            <param name="drop">True for a drop rule, false for an allow rule</param>
            <param name="priority">Priority</param>
            <param name="ruleIP4">IP4 rule name</param>
            <param name="ruleIP6">IP6 rule name</param>
            <param name="allowedPorts">Allowed ports</param>
            <param name="canUseForwardNode">Whether forward node is allowed</param>
            <param name="fallbackZoneFileContents">Fallback zone file contents</param>
            <returns></returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables">
            <summary>
            Linux firewall implementation using iptables
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.IPBanLinuxFirewallIPTables6">
            <summary>
            Linux Firewall iptables for IPV6, is wrapped inside IPBanLinuxFirewallIPTables
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.IPBanLinuxFirewallIPTables6.#ctor(System.String)">
            <summary>
            Linux Firewall iptables for IPV6, is wrapped inside IPBanLinuxFirewallIPTables
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.OnDispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.Truncate">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallIPTables.Compile">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables">
            <summary>
            NFTables firewall
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.NftRuleInternal">
            <summary>
            Internal rule representation
            </summary>
            <param name="Name">Name</param>
            <param name="Allow">Allow</param>
            <param name="Ports">Ports</param>
            <param name="Entries">Entries</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.NftRuleInternal.#ctor(System.String,System.Boolean,System.Collections.Generic.IReadOnlyCollection{DigitalRuby.IPBanCore.PortRange},System.Collections.Generic.IReadOnlyCollection{System.String})">
            <summary>
            Internal rule representation
            </summary>
            <param name="Name">Name</param>
            <param name="Allow">Allow</param>
            <param name="Ports">Ports</param>
            <param name="Entries">Entries</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.NftRuleInternal.Name">
            <summary>Name</summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.NftRuleInternal.Allow">
            <summary>Allow</summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.NftRuleInternal.Ports">
            <summary>Ports</summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.NftRuleInternal.Entries">
            <summary>Entries</summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.Truncate">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.Compile">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxFirewallNFTables.Initialize">
            <summary>
            Initialize
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD">
            <summary>
            Helper methods to work with sets on Linux firewalld.
            Use sets this way: https://firewalld.org/documentation/man-pages/firewalld.ipset.html
            This class also works on Windows but only modifies files, does not actually use the firewall.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.INetFamilyIPV4">
            <summary>
            INetFamily for ipv4
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.INetFamilyIPV6">
            <summary>
            INetFamily for ipv6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.MaxCount">
            <summary>
            Max set count
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.HashSize">
            <summary>
            Hash size
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.HashTypeSingleIP">
            <summary>
            Single ip type
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.HashTypeNetwork">
            <summary>
            Cidr mask or range type
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.DeleteSet(System.String)">
            <summary>
            Delete a set
            </summary>
            <param name="setName">Set name to delete</param>
            <returns>True if success, false if error or not exists</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.SetExists(System.String)">
            <summary>
            Determine if a set exists
            </summary>
            <param name="setName">Set name</param>
            <returns>True if exists, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.UpsertSet(System.String,System.String,System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange})">
            <summary>
            Upsert a aset
            </summary>
            <param name="setName">Set name</param>
            <param name="hashType">Hash type</param>
            <param name="inetType">Inet type</param>
            <param name="entries">Entries</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.UpsertSetDelta(System.String,System.String,System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta})">
            <summary>
            Upsert a set using deltas
            </summary>
            <param name="setName">Set name</param>
            <param name="hashType">Hash type</param>
            <param name="inetType">Inet type</param>
            <param name="entries">Entries</param>
            <returns>True if success, false if error</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.GetSetNames(System.String)">
            <summary>
            Get all set names
            </summary>
            <param name="setPrefix">Set prefix</param>
            <returns>Set names</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.ReadSet(System.String)">
            <summary>
            Get the entries in a set
            </summary>
            <param name="setName">Set name</param>
            <returns>Entries</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.ReadSetRanges(System.String)">
            <summary>
            Get the entries in a set
            </summary>
            <param name="setName">Set name</param>
            <returns>Entries</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.ReadSetPorts(System.String)">
            <summary>
            Read set ports
            </summary>
            <param name="setName">Set name</param>
            <returns>Port ranges</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.ReadSetOptions(System.String)">
            <summary>
            Read ipset options
            </summary>
            <param name="setName">Set name</param>
            <returns>Options or default if not found</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetFirewallD.EnumerateSortedIPAddressRanges(System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange})">
            <summary>
            Enumerate sorted ip addresses and break non cidr ranges into individual entries.
            </summary>
            <param name="ranges">Ranges</param>
            <returns>Enumerated ranges</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables">
            <summary>
            Helper methods to work with ipset on Linux
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.SetEntry">
            <summary>
            Set entry
            </summary>
            <param name="Add">True if add, false if delete</param>
            <param name="SetName">Set name</param>
            <param name="Range">Range, can be a single ip</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.SetEntry.#ctor(System.Boolean,System.String,DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Set entry
            </summary>
            <param name="Add">True if add, false if delete</param>
            <param name="SetName">Set name</param>
            <param name="Range">Range, can be a single ip</param>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.SetEntry.Add">
            <summary>True if add, false if delete</summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.SetEntry.SetName">
            <summary>Set name</summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.SetEntry.Range">
            <summary>Range, can be a single ip</summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.INetFamilyIPV4">
            <summary>
            INetFamily for ipv4
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.INetFamilyIPV6">
            <summary>
            INetFamily for ipv6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.MaxCount">
            <summary>
            Max set count
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.HashSize">
            <summary>
            Hash size
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.HashTypeSingleIP">
            <summary>
            Single ip type
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.HashTypeNetwork">
            <summary>
            Cidr mask or range type
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.Reset">
            <summary>
            Reset ipset to the default empty state
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.Reset(System.String)">
            <summary>
            Reset a single set to the default empty state
            </summary>
            <param name="setName">Set name to reset</param>
            <returns>True if set was reset, false otherwise</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.SaveToFile(System.String)">
            <summary>
            Dump all the contents of ipset to a file
            </summary>
            <param name="fileName">File name to write ipset to</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.RestoreFromFile(System.String)">
            <summary>
            Restore the entire contents of ipset from a file
            </summary>
            <param name="fileName">File name to read ipset from</param>
            <returns>True if restored, false if not</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.GetSetNames">
            <summary>
            Get all set names
            </summary>
            <returns>Set names</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.EnumerateSets(System.String)">
            <summary>
            Enumerate all set values
            </summary>
            <param name="setFile">Set file</param>
            <returns>Set values</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.UpsertSetFile(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <summary>
            Create a set file
            </summary>
            <param name="fileName">File name or null to make a temp file to restore automatically</param>
            <param name="setName">Set name</param>
            <param name="hashType">Hash type (see constants on this class)</param>
            <param name="inetFamily">INet family (see constants on this class)</param>
            <param name="items">Items to add to the set, depends on the hash type</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if failure</returns>
            <exception cref="T:System.OperationCanceledException"></exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.UpsertSetFileDelta(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Threading.CancellationToken)">
            <summary>
            Update a set file with delta changes
            </summary>
            <param name="fileName">File name or null to make a temp file to restore automatically</param>
            <param name="setName">Set name</param>
            <param name="hashType">Hash type (see constants on this class)</param>
            <param name="inetFamily">INet family (see constants on this class)</param>
            <param name="items">Items to add to the set, depends on the hash type</param>
            <param name="cancelToken">Cancel token</param>
            <returns>True if success, false if failure</returns>
            <exception cref="T:System.OperationCanceledException"></exception>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanLinuxIPSetIPTables.DeleteSet(System.String)">
            <summary>
            Delete a set
            </summary>
            <param name="setName">The set to delete</param>
        </member>
        <member name="T:DigitalRuby.IPBanCore.MigrateFail2Ban">
            <summary>
            Drop-in migrator for: DigitalRuby.IPBan*, DigitalRuby.IPBanProDatacenter, DigitalRuby.IPBanProPersonal
            Usage example once wired into your CLI:
            DigitalRuby.IPBan migrate f2b --root /etc/fail2ban --out ./ipban.migrated.config
            Notes:
            - Translates fail2ban macros (&lt;HOST&gt;, &lt;IP&gt;, etc.) to IPBan format.
            - No GPL regex embedding beyond copying configuration text users already possess.
            - Generates bash hook framework into the chosen hook directory (default current dir).
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.MigrateFail2Ban.RunFromArgs(System.String[])">
            <summary>
            Check if this is a fail2ban migration, and if so, run it
            </summary>
            <param name="args">Args</param>
            <returns>-1 if not a fail2ban migration, otherwise exit code</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.MigrateFail2Ban.ContainsIpAddressGroup(System.String)">
            <summary>
            Check if regex contains an ipaddress capture group
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.MigrateFail2Ban.ExpandFail2BanMacros(System.String,System.Collections.Generic.Dictionary{System.String,System.String})">
            <summary>
            Expand fail2ban-specific macros that aren't handled by IPBanRegexMacros
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.MigrationHelper">
            <summary>
            Migration helper
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.MigrationHelper.Migrate(System.String[])">
            <summary>
            Perform migration
            </summary>
            <param name="args">Args</param>
            <returns>Exit code</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.JsonStringEnumLowercaseConverter">
            <summary>
            Converts simple enums to/from lowercase, hyphenated strings, with a small special-case map
            (e.g., enum member named "new_" serializes to "new" and deserializes back).
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumLowercaseConverter.CanConvert(System.Type)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumLowercaseConverter.CreateConverter(System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumLowercaseConverter.LowercaseEnumConverter`1.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumLowercaseConverter.LowercaseEnumConverter`1.Write(System.Text.Json.Utf8JsonWriter,`0,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.JsonStringEnumFlagsLowercaseConverter">
            <summary>
            Converts [Flags] enums to/from a JSON array of lowercase, hyphenated strings.
            Accepts legacy string formats ("a,b,c"), a single string token, or a numeric value.
            Writes an empty array for zero.
            Special-cases enum member named "new_" to serialize as "new".
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumFlagsLowercaseConverter.CanConvert(System.Type)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumFlagsLowercaseConverter.CreateConverter(System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumFlagsLowercaseConverter.FlagsLowercaseEnumConverter`1.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.JsonStringEnumFlagsLowercaseConverter.FlagsLowercaseEnumConverter`1.Write(System.Text.Json.Utf8JsonWriter,`0,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterFamily">
            <summary>
            Net filter family
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterFamily.inet">
            <summary>
            inet
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterFamily.ip">
            <summary>
            ip
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterFamily.ip6">
            <summary>
            ip6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterFamily.arp">
            <summary>
            arp
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterFamily.bridge">
            <summary>
            bridge
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterFamily.netdev">
            <summary>
            netdev
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterSetElementType">
            <summary>
            Net filter set type
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetElementType.ipv4_addr">
            <summary>
            ipv4_addr
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetElementType.ipv6_addr">
            <summary>
            ipv6_addr
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetElementType.inet_service">
            <summary>
            inet_service
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetElementType.mark">
            <summary>
            mark
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetElementType.ifname">
            <summary>
            ifname
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterSetFlags">
            <summary>
            Set flags
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetFlags.none">
            <summary>
            none
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetFlags.constant">
            <summary>
            constant
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterSetFlags.interval">
            <summary>
            interval
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterVerdictAction">
            <summary>
            Net filter verdict action
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.accept">
            <summary>
            accept
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.drop">
            <summary>
            drop
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.reject">
            <summary>
            reject
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.queue">
            <summary>
            queue
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.cont">
            <summary>
            cont/continue
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.ret">
            <summary>
            ret/return
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.jump">
            <summary>
            jump
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterVerdictAction.goto_">
            <summary>
            goto/goto_
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator">
            <summary>
            Expression discriminator
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.meta">
            <summary>
            meta
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.payload">
            <summary>
            payload
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.cmp">
            <summary>
            cmp
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.lookup">
            <summary>
            lookup
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.log">
            <summary>
            log
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.counter">
            <summary>
            counter
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.limit">
            <summary>
            limit
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.verdict">
            <summary>
            verdict
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterExpressionDiscriminator.immediate">
            <summary>
            immediate
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterMetaKey">
            <summary>
            Meta key
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.mark">
            <summary>
            mark
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.iifname">
            <summary>
            iifname
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.oifname">
            <summary>
            oifname
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.nftrace">
            <summary>
            nftrace
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.l4proto">
            <summary>
            l4proto
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.protocol">
            <summary>
            protocol
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterMetaKey.len">
            <summary>
            len
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterPayloadProtocol">
            <summary>
            Payload protocol
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterPayloadProtocol.ip">
            <summary>
            ip
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterPayloadProtocol.ip6">
            <summary>
            ip6
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterPayloadProtocol.tcp">
            <summary>
            tcp
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterPayloadProtocol.udp">
            <summary>
            udp
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterPayloadProtocol.icmp">
            <summary>
            icmp
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterPayloadProtocol.icmpv6">
            <summary>
            icmpv6
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterCompareOp">
            <summary>
            compare op
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterCompareOp.eq">
            <summary>
            eq
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterCompareOp.neq">
            <summary>
            neq
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterCompareOp.lt">
            <summary>
            lt
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterCompareOp.gt">
            <summary>
            gt
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterCompareOp.lte">
            <summary>
            lte
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.NetFilterCompareOp.gte">
            <summary>
            gte
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterRuleset">
            <summary>
            Root nftables ruleset model for round-trip JSON.
            Keeps raw expression and element JsonElement blocks to guarantee lossless serialization.
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRuleset.Entries">
            <summary>
            Entries
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterRuleset.System#Text#Json#Serialization#IJsonOnDeserialized#OnDeserialized">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterRuleset.ToString">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterRuleset.LinkSetsAndRules">
            <summary>
            Crawl rules and sets and establish bidirectional references based on @setName usages
            inside rule match expressions (right side string starting with '@').
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterEntry">
            <summary>
            A single nftables item wrapper - exactly one of the properties will be non-null.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterEntry.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterEntry.MetaInfo">
            <summary>
            Meta info
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterEntry.Table">
            <summary>
            Table
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterEntry.Chain">
            <summary>
            Chain
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterEntry.Set">
            <summary>
            Set
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterEntry.Rule">
            <summary>
            Rule
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterMeta">
            <summary>
            Meta info
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterMeta.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterMeta.Version">
            <summary>
            Version
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterMeta.ReleaseName">
            <summary>
            Release name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterMeta.JsonSchemaVersion">
            <summary>
            Json schema version
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterTable">
            <summary>
            Table
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterTable.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterTable.Family">
            <summary>
            Family
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterTable.Name">
            <summary>
            Name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterTable.Handle">
            <summary>
            Handle
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterChain">
            <summary>
            Chain
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterChain.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Family">
            <summary>
            Family
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Table">
            <summary>
            Table
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Name">
            <summary>
            Name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Handle">
            <summary>
            Handle
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Type">
            <summary>
            Type
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Hook">
            <summary>
            Hook
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Priority">
            <summary>
            Priority
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterChain.Policy">
            <summary>
            Policy
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterRule">
            <summary>
            Nft rule preserving expression list exactly as parsed
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterRule.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Family">
            <summary>
            Family
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Table">
            <summary>
            Table
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Chain">
            <summary>
            Chain
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Handle">
            <summary>
            Handle
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Comment">
            <summary>
            Comment
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Expressions">
            <summary>
            Expressions
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.ReferencedSets">
            <summary>
            Referenced sets by this rule (populated after deserialization)
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Ports">
            <summary>
            Get/set ports
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterRule.Allow">
            <summary>
            True for allow, false for block (drop). Setting this property will remove any existing accept/drop/reject expressions
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.NetFilterSet">
            <summary>
            Nft set model retaining original element shapes (string | {range:[a,b]} | {prefix:{addr,len}})
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterSet.ToString">
            <inheritdoc />
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Family">
            <summary>
            Family
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Name">
            <summary>
            Name
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Table">
            <summary>
            Table
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Type">
            <summary>
            Type
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Handle">
            <summary>
            Handle
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Comment">
            <summary>
            Comment
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Flags">
            <summary>
            Flags
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.Elements">
            <summary>
            Elements
            </summary>
        </member>
        <member name="P:DigitalRuby.IPBanCore.NetFilterSet.ReferencingRules">
            <summary>
            Referencing rules (populated after deserialization)
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterSet.Add(System.String)">
            <summary>
            Add an element by string (individual ip or ip range)
            </summary>
            <param name="value">Value</param>
            <returns>This set</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterSet.Add(DigitalRuby.IPBanCore.IPAddressRange)">
            <summary>
            Add an element by IPAddressRange (individual ip or ip range)
            </summary>
            <param name="range">Range</param>
            <returns>This set</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.NetFilterSet.EnumerateSetElements">
            <summary>
            Extract element entries as string (individual ips or ip ranges)
            </summary>
            <returns>Parsed elements</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanMacFirewall">
            <summary>
            Mac firewall (not implemented)
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.#ctor(System.String)">
            <summary>
            Mac firewall (not implemented)
            </summary>
            <remarks>
            Constructor
            </remarks>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.Compile">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanMacFirewall.Truncate">
            <inheritdoc />
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanWindowsEventViewer">
            <summary>
            Implementation to hook into Windows event viewer
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsEventViewer.#ctor(DigitalRuby.IPBanCore.IIPBanService)">
            <summary>
            Constructor
            </summary>
            <param name="service">IPBan service interface</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsEventViewer.Update(System.Threading.CancellationToken)">
            <summary>
            Update
            </summary>
            <param name="cancelToken">Cancel token</param>
            <returns>Task</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsEventViewer.Dispose">
            <summary>
            Cleanup all resources
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsEventViewer.ProcessEventViewerXml(System.String)">
            <summary>
            Process event viewer XML
            </summary>
            <param name="xml">XML</param>
            <returns>Log events or nothing if failure to parse</returns>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanWindowsFirewall">
            <summary>
            Helper class for Windows firewall and banning ip addresses.
            </summary>
        </member>
        <member name="F:DigitalRuby.IPBanCore.IPBanWindowsFirewall.MaxIpAddressesPerRule">
            <summary>
            Max number of ip addresses per rule
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.ReleaseRule(DigitalRuby.IPBanCore.Windows.COM.INetFwRule)">
            <summary>
            Release a COM RCW reference for a fetched INetFwRule. Any rule obtained via
            policy.Rules.Item(name) or by iterating policy.Rules carries a managed wrapper
            over a COM object — failing to release it leaves the underlying RPC handle in
            the COM apartment until GC. At firewall scales (thousands of rules iterated each
            cycle) those handles accumulate until the firewall service refuses new calls and
            the process must be restarted.
            Public for testability — handles null and non-COM objects safely.
            </summary>
        </member>
        <member name="T:DigitalRuby.IPBanCore.IPBanWindowsFirewall.RuleList">
            <summary>
            A list of INetFwRule COM objects that releases each RCW on Dispose.
            Callers MUST dispose (via using or explicit Dispose) to avoid leaking.
            Public for testability.
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.RuleList.Dispose">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.ThrowExceptionIfWindowsFirewallIsDisabled">
            <summary>
            Throw an exception if Windows firewall is disabled
            </summary>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.#ctor(System.String)">
            <summary>
            Constructor
            </summary>
            <param name="rulePrefix">Rule prefix</param>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.Compile">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.String,System.Threading.CancellationToken)">
            <summary>
            Block ip addresses with a description
            </summary>
            <param name="ruleNamePrefix">Rule name prefix</param>
            <param name="ipAddresses">IP addresses</param>
            <param name="allowedPorts">Allowed ports</param>
            <param name="description">Description</param>
            <param name="cancelToken">Cancel token</param>
            <returns>Result</returns>
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.BlockIPAddressesDelta(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPBanFirewallIPAddressDelta},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.BlockIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.AllowIPAddresses(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.AllowIPAddresses(System.String,System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.IPAddressRange},System.Collections.Generic.IEnumerable{DigitalRuby.IPBanCore.PortRange},System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.GetRuleNames(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.DeleteRule(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.EnumerateBannedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.EnumerateAllowedIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.EnumerateIPAddresses(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.GetPorts(System.String)">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.Truncate">
            <inheritdoc />
        </member>
        <member name="M:DigitalRuby.IPBanCore.IPBanWindowsFirewall.EnableLocalSubnetTrafficViaFirewall">
            <summary>
            Enable local subnet traffic for windows firewall
            </summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0">
            <summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the GeneratePyNamedGroup method.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.Instance">
            <summary>Cached, thread-safe singleton instance.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.#ctor">
            <summary>Initializes the instance.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.RunnerFactory">
            <summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.RunnerFactory.CreateInstance">
            <summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.RunnerFactory.Runner">
            <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
            <summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
            <summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if a possible match was found; false if no more matches are possible.</returns>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedGroup_0.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
            <summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if the regular expression matches at the current position; otherwise, false.</returns>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1">
            <summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the GeneratePyNamedBackRef method.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.Instance">
            <summary>Cached, thread-safe singleton instance.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.#ctor">
            <summary>Initializes the instance.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.RunnerFactory">
            <summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.RunnerFactory.CreateInstance">
            <summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.RunnerFactory.Runner">
            <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
            <summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
            <summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if a possible match was found; false if no more matches are possible.</returns>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GeneratePyNamedBackRef_1.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
            <summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if the regular expression matches at the current position; otherwise, false.</returns>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2">
            <summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the GenerateInlineFlags method.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.Instance">
            <summary>Cached, thread-safe singleton instance.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.#ctor">
            <summary>Initializes the instance.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.RunnerFactory">
            <summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.RunnerFactory.CreateInstance">
            <summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.RunnerFactory.Runner">
            <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
            <summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
            <summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if a possible match was found; false if no more matches are possible.</returns>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.GenerateInlineFlags_2.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
            <summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if the regular expression matches at the current position; otherwise, false.</returns>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.Utilities">
            <summary>Helper methods used by generated <see cref="T:System.Text.RegularExpressions.Regex"/>-derived implementations.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_defaultTimeout">
            <summary>Default timeout value set in <see cref="T:System.AppContext"/>, or <see cref="F:System.Text.RegularExpressions.Regex.InfiniteMatchTimeout"/> if none was set.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_hasTimeout">
            <summary>Whether <see cref="F:System.Text.RegularExpressions.Generated.Utilities.s_defaultTimeout"/> is non-infinite.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.Utilities.IsWordChar(System.Char)">
            <summary>Determines whether the character is part of the [\w] set.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.WordCategoriesMask">
            <summary>Provides a mask of Unicode categories that combine to form [\w].</summary>
        </member>
        <member name="P:System.Text.RegularExpressions.Generated.Utilities.WordCharBitmap">
            <summary>Gets a bitmap for whether each character 0 through 127 is in [\w]</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_asciiLettersAndDash">
            <summary>Supports searching for characters in or not in "-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_indexOfString_1D08B2DFDF570B2D8D90FA425D21E6B4148C8E58D4FFB45D7A49C979214CAEB7">
            <summary>Supports searching for the string "(?".</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_indexOfString_B62C535B4FC63BF36BAB347284D33BE0B3865C74DA3AE31EB418430DFED595C4">
            <summary>Supports searching for the string "(?P&lt;".</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_indexOfString_DAA2102B1EF93B58BEC683F7BB5A393F704445F6E9C4E982D9F4F97FC2DEA644">
            <summary>Supports searching for the string "(?P=".</summary>
        </member>
    </members>
</doc>
